Saturday, March 12, 2022

关于自底向上的管理方式的设想(2014-09-29)


任正非说,”让一线直接呼唤炮火“。把一家小公司做大很难,然而更难的是如何把一家大公司做小。大公司里人多、事情多、角色多、关系多、会多。管理者是管理全局的(可能是局部),从管理者的角度来看会议是重要的,这是一个上传下达,沟通信息的渠道;会议上的大部分信息都是有用的。从员工(工程师、设计师)的角度来看,会议上的信息只有很小的一部分跟自己有关系,如果20个人开会,这个有用的部分可能也就1/10。会议流行的公司的管理结构是树状(金字塔)的。每个员工的工作都是在更高一层的领导下面完成的,工作的执行是由员工完成,而信息的汇集由管理者完成。我们主要从信息(控制)的角度来看这种管理结构。

金字塔结构的员工要想和其他员工合作完成某一项工作,这种指令必须来自上层的管理者。在团队的规模稍稍大一点(比如30人)的情况下,管理者就会成为瓶颈,他是整个团队中工作最努力的人,然而即使如此,还是无法满足团队的管理需求。写到这里,我想到了事必躬亲的诸葛亮,哈哈。显然,从计算机系统工程的角度来看,这个管理者是团队的”单点“,最薄弱的地方。员工则由于主管转的速度无法满足团队的工作需要,处于一种低效的状态,这种状态可能会被很多会议所掩盖,然而不管如何,必然是低效的,因为信息是阻滞的。

如果尝试建立一些更细分的组织呢?情况会好一点,因为某些信息可以让位于下层的管理者来完成聚合。但其实好不了多少,很快小主管也会成为瓶颈,而且,小主管的工作能力也会被管理工作所占用,而小主管的工作能力根据选拔机制,是这个小组中能力最好的。因此团队的战斗力也无法达到最大。而且,由于跨小组合作的需要,更大规模的会议还是很多。

之所以这种方式还是不够好,还是因为信息通道被滥用了。比如聚会时是两个人、三个人还是5个人,讨论的效率完全不同。一般来说人越少,讨论的频道越少,带宽使用越充分;人越多,通道就很多,某一频道并不是每个人都需要的,因此带宽的使用效率就比较低。因此,强层级式管理形式,仍然避免不了带宽浪费的问题。那该如何组织呢?我这里设想了一种”几乎“对称的组织形式。就是让团队承担项目,让团队行程自然的分工和角色定义,只要保证项目的信息能对接到团队中,团队中的每一个人都知道某一类信息该由哪一个或一群人来处理,直接找到对应的人处理掉就行了。这样的组织形式可能在初始状态下工作效率不如层级形式的组织,但从长期演进来说,必然会有更高的效率,因为这是以组织(一群人)而不是个人(单个人)来处理信息的。由于更精确地使用了信息通道,因此每个人都会感觉沟通是必要的。

现在我们是把团队作为一个整体来做一个项目了,这里的信息流是由团队中的每一个成员以近似对称的方式(还是有分工的)来处理了。那么,这样一个团队如何体现整体的信息呢?这里可以把整体信息作为项目的一个需求来做,通过一两个人,加上必要的工具,把信息聚合起来,就可以得到整体信息啦!

听起来是不是很棒呢?我已经在尝试了,希望团队的工作效率和个人的体验都能有保障。

Friday, April 17, 2020

读书是缘


一命二运三风水四积阴德五读书,从这个顺序来看,读书改变命运的作用处于末位,甚至读书改变不了命运,最多只能改变运势。从功利的角度看,读书的必要性不强。读书无用论并非全然是错的,读书对于无用的人自然是无用的,因此我不愿劝人读书。

但我认为读书是一种缘。

当代的思想常常把兴趣看作是公理,拥有不证自明的正当性。我却认为兴趣具有客观性,犹如一棵生长的树,当前要发哪个芽,要抽哪条枝,很大程度上是由已有的部分决定的。因此从旁观者的角度看,兴趣不是自由意志;从微观来看,兴趣是一种确定的主观倾向。兴趣和环境的组合,形成偶然的美好,就是一种缘。

因为生计的需要,或是希望把工作做得更好,希望有更好的未来而读书,是完全正当的。安身立命,养生济世,读书大有裨益。不舍昼夜,刻苦耐劳,久磨成针;如果辅之以良师益友,实战练习,切磋讨论,则必然事半功倍,甚至化腐为奇。

为了装点门面和炫耀而读书,也是一种动机,有动机就可以行动。只是所选的题材最好能有美学价值,至少有成为谈资的可能。务必搞懂其中精髓,至少不犯低级错误,以免轻易穿帮露馅,反而不美。若能持续深入,或偶入桃花源,进入美好的世界。

为了知道得更多而读书,犹如饮盐水解渴,读得越多饥渴越甚,知道得越多越难以快乐,最终欲罢不能,直至和睦相处。数学家罗素少年时患上了抑郁症一度接近自杀,后来发现自己活着可以学习更多数学,还是活着好。

书架里有不少自己从未读完的书,最后只能安慰自己说,书架里的书就应该是没有读过的,高山仰止,好书环绕,也是不错的意境。

最近面对好书陷入一种矛盾之中,买下不等于拥有,甚至读了也不见得能拥有。真正拥有一本书,得看缘。曾经买书如山倒,看书如抽丝,最后焚琴煮鹤,贱卖给回收站了事,惭愧之至。

越来越不敢轻易开启一本书,怕辜负了好书。只有这样,才能一旦开启了,就好好读下来。

无论是数学、科学、技术、管理,还是历史、文学,读书的过程,就是根据一维的文字流,在立体的思维空间中重新建构。

但我们为什么要做这样的建构呢?怎样才是值得的?还是回归到缘,缘是一种空无中诞生的关联。这些建构和自己,和自己的其他建构之间要有联系。联系是构成意义之网的丝线。

宇宙诞生于空无一物,这里一定有美好的东西,有有价值的东西,好书浓缩了人类的观察、记录和总结。错过了了它们,多可惜啊。

最后分享10本读过的书,绝不是推荐,而是具化上面的文字。

  1. 《时间触发嵌入式系统设计模式》,是我让一位做这方面的好友推荐最靠谱的参考书,让我出色地完成了毕业后的第一个项目。
  2. 《支持向量机导论》,一本小册子,伴随了我上下班的地铁两个月,翻了三遍。基本的概念和思想永不过时。
  3. 《C++对象模型》,原来C++真的是这样实现的,后来用的机会却很少了。不懂对象模型就不是好的C++工程师。
  4. 《算法导论》,有段时间遇到的计算机科班的同学很喜欢讨论这本书的内容,为了建立共同语言,我读了这本书的大部分。我把里面的题也做了,包括数学证明。不过后来发现计算机科班的同学不讨论这个了,现在还有用的就是DP,不动点。
  5. 经同学推荐,觉得博弈论很酷,读了几篇古老的论文,为了搞明白Brouwer不动点定理还学了点拓扑学。博弈论分析非完全合作智能体构成的系统必备基础知识,包括前两年火起来的GANs也有博弈论的思想。
  6. 搞机器学习的同学都熟悉最小化目标函数。我们高中学习的牛顿定律也有一个类似的表达,即最小作用量原理。朗道的《经典力学》提供了新的数学视角。美的理论应该最小化分类学的使用,代之以一个最小化目标函数,约束尽可能少。
  7. 读书也是和作者,和书中的人物交流。《罗马人的故事》15卷本,人类童年时期的热情、理想和勇气,让我有遇到同道的共鸣。
  8. 《枢纽》探讨了何谓中国,从古至今,从国内到世界。从内部视角介绍了中原、草原、高原、海洋的统一联系,从外部视角讨论了中国作为连接海洋秩序到大陆秩序的桥梁的可能。
  9. 人类科技的未来还要回到物理的发现、开发和利用,我们的世界观也需要发生变化。《QED》给我一个新的视角来看量子世界,作者最大限度地保证了内容的严谨科学。
  10. 宏观经济关乎每个人的生存和发展状态。《债务危机》可能揭示了经济繁荣-衰退周期的最可靠的底层规律。

英语是事实上的世界普通话,中英文双语阅读是每个现代读书人应该掌握的技能。

音视频讲解对提升读书效率很有帮助,尤其是不熟悉的领域。

读书有点像机器学习从初始参数开始的局部最小化。本来无一物,只因为缘,造就了自己的读书。

Sunday, August 9, 2015

大组织中的囚徒困境及破局所需的信任和信息对称的建立机制

    囚徒困境(Prisoner's Dilemma)是经济学中普遍的一类现象。与之相关的推广是外部性问题(Externality)。这些现象的产生,要么是信息不对称(囚徒之间无法串通协作),要么是成本方收益方不匹配(比如环境污染产生的外部损害不会被造成污染的企业承担的问题)。
    当一个组织很小的时候,完全可以形成每个人都认识所有人(Everybody knows everybody)的状况;这里信息不对称可以缩小到很小,这些人面对所有的任务,当现实产生收益和成本时,很容易在小团队内协调这些成本和收益。然而,能保持组织始终是一个小的规模是一件很不容易的事情,因为可能现实不允许,或者决策者的失误。
    随着组织的增大,每个个人和团队的成本和产出都会有很强的外部性,这些外部性时很难被评估的,比如你有个想法,但不知道怎么做,找到了一个更有经验的同事请教,找到了答案,后面实施会拿到效果,整个公司都会受益。这位被找到的同学就向你输出了正的外部性,使你受益,但他本身并没有直接受益。这些外部性会形成对“大锅饭”管理的压力,就是如何避免形成大锅饭。
    解决大锅饭问题仍然需要的是信息,而信息的获取是需要很大成本的。给每个人设置一个评价者,如果形成完全客观的评价,必然是成本很高的事情,甚至是对人要求很高的,甚至超过了这个被管理者总的产出能力。
    组织大了,能否将这种管理工作分摊呢?比如每个人都承担一部分管理工作。这实际上就形成了各种会,因为员工需要靠会来获取信息,去传达信息,去量化工作。另外还有周报,周报是个很有学问的东西,像所有的读物一样,它也是有受众的,这些受众往往决定了员工客观上的产出,或者主观上的对产出的评价。因此周报也是个现实扭曲立场元素,不完整报道是轻的,更有甚者夸大产出,或者转嫁矛盾。
    如果不考虑成本因素,增加人肯定会增加产出,至少不会降低,因为可以让新来的人歇着不添乱就是了。考虑了成本,就要考虑产出,新人必须有发挥的天地。新人也会变老,老人也会离职。事实上每个人都要求有产出,这些产出至少看起来是值哪些工资待遇的。每一个人都会倾向于在这个过程中成为一个麦克斯韦妖,即向外界吸收正的外部性,并输出负的外部性。通俗的讲就是把好活尽量自己或自己的团队干,把脏活累活不出明显成果的事情让其他人或其他团队干。
    此时不得不说“价值观”这个东西。价值观本身就是设计来解决这个问题的,就是尽可能吸收负的外部性,并输出正的外部性。既然提出来了,就要奖励,不然价值观好的员工必然会受到长期持续的损害而失去生存在组织里能力。价值观像工作成果一样,也是需要评价的,评价的成本像评价协作一样困难,因为价值观本身是关于协作的一个角度。在大的组织规模下,价值观是很难被评价的,事实上它也会成为衡量工作业绩的一部分。人们仍然会去抢镜头,去选美,去体现visibility,而不是正如价值观所说的增加正的外部性。
    小的团体和组织是实现突破和改变的必要条件,这和直觉是相反的,做一件需要突破的事情用大的团队是很难的,因为很难统一行动,而且大部分人时平凡的平庸的,不愿意做突破需要的改变习惯的事情。
     小的团体是机遇信任和信息对称建立的,在这里可以较好的消灭囚徒困境和外部性的问题,使团队能在一定的范围内的任务发挥最大的产出能力。随着团队规模的增加,信任和信息对称的成本越来越高,给定成本的情况下信任和信息对称的程度也是越来越低的,它们是一个团队最为昂贵的事务。
    在小的团体之外,应当基于逐渐递减的信任和信息对称程度来形成组织,减少不必要的协作而不是增加它们;从而可以把团队的精力集中在有产出的工作上,并在更少的协作上突破,并拿到结果,从而建立团队之外的信任和信息对称。
    永远不要期望在互相了解很少的,戴着和谐氛围面纱的人中间形成紧密的协作和高效的产出,了解是需要成本的,有成本就要考虑投入产出比(ROI)。
    按照通信的密度建立局部性(locality)是增加效果的关键,信任时昂贵的,我们只够买得起一个小的范围内的信任和信息对称,更大范围内的,需要集中在少数几件事情的成功协作上来建立信任和信息对称。

Friday, August 7, 2015

特征工程指南(3):多粒度交叠式特征离散化

  概率论中在实数上定义定义的事件就是Borel集。Borel集是从拓扑空间中的开集通过可数次交、并运算及补集运算得到的。至于为什么这样定义是个严密的数学系统设计的问题,不是本帖讨论的重点。
  本帖讨论的重点是,Borel集实际上定义了所有可能的实数上的事件,这里包括是某一个区间上的事件,也就是说,无论怎么切分,它是一个事件,当且仅当它是一个Borel集。
  特征离散化实际上就是切分Borel集,我们当然无法也不必要从工程上穷举所有Borel,然而我们却不必要求只列举那些无交(disjoint)的Borel集,这种无交的borel集构成了一个对当前特征空间的一个划分。
  我们可以想象一个划分,这个划分上的每一个Borel集在线性模型(如LR)中对应一个权重w。为了能拥有较好的非线性特性,我们往往需要对这些集合切得很细;但不能太细,太细了会导致训练样本不足从而被L1正则化因子压为0。
  怎么能实现既不必对Borel集切得太细,又能实现复杂的非线性呢?可以通过进行重叠切分来实现。重叠切分有两种做法,一种是滑动窗做法,比如窗口的大小为w,每次滑动d,w>d,最终这些窗口覆盖整个特征空间。
  另外一种做法是分层切割,就是按照2-3个层次,在每个层次上用一个粒度的Borel集覆盖整个特征空间。
  还有一种做法是模仿Random Forest,针对区间进行随机切分,这样信息会被这种随机切分表示得很完整。

Thursday, July 23, 2015

分享的本质-摆脱那些似是而非的口号

  分享并不简单,绝不是某些人的口头禅所说的那样,分享出来,放在一起,就是一个新的事物。能分享是一种能力,大部分东西其实是能分享的,如果不忽略下面的意义,那就是需要能为通过分享而诞生的新事物去做些什么,比如原有模块的打磨,鸿沟的填充等等。

  在一个大组织中,每一个小团队,或者个人,想生存下来,并不是看能否在现实中创造客户,正如公司的使命那样;而是能否得到组织的承认。组织的概念是抽象的,但是确实实实在在存在的。经常能看到所谓“圈地”现象,就是一个小团队会向组织申请出一块“地盘”,然后在这个地盘上进行工作。由于公司的业绩较弱的跟每个团队关联,因此具体是否干得好,并不存在严格意义上的评判标准,而是非常依赖老板(做决策者)的判断。这种判断很多时候并不准确,导致地虽然全下来了,可能只是被很潦草的耕耘过,或者根本没有有效的耕耘。

  评判的时候来了,团队大部分都没有有效的成果,因此就需要在原来的地盘上比,既然不能比产出,就要比谁的地盘大了。因此,抢地盘、抢成果,却没有见过抢耕耘的。非常有趣的现象,不乏很优秀的人,很多都是如此。

  为了扩大地盘的大小,某团队可能会提出要分享,所谓分享,就是把在某块地盘上“成功”的成果复制到其他的地盘上去。分享的关键在于廉价,也就是不需要太多额外的努力就能在新的地盘上拿到成果。但是,很多原因决定了分享并不容易,比如原先的成果就不是为分享设计的,而是为专门的场景(地盘)高度优化和定制的,因此在新的地盘上很可能不能适应,不能适应也就无法直接生存下来。

  接下来发生的事情就更有趣了,没有人愿意为分享的东西再做一些额外的工作。首先分享者不愿意,因为新的地盘并不是他的;接受分享的人也不愿意,因为一则他并不熟悉分享的事物,另一方面也不愿意付出巨大的努力,还让别人分去了成果。共同的原因是需要很多额外的努力才能使分享真正拿到结果。

  最坏的并不是不能分享,最坏的是“圈地”。被圈下来的地与自己关系不大,往往也就荒废了。这时候即使跟别的团队有关系,这块被圈下来的地也无法被耕耘,因为:当说的时候,通过含糊其辞圆滑措辞能够做到;当作的时候,要么偷工减料,要么严重延期,或者干脆不deliver东西。

  说是很贱的,贵在行动。如果一件事情跟你没什么关系,而你提供的分享只是似是而非的一个“部分”,那么至少要在分享的态度上柔和一些,即使对方相信你,你也要说清楚到底什么是不能做的,不要给别人设置了期望,却无法达成,最终放了别人鸽子。


Saturday, June 27, 2015

特征工程指南(2):离散化

在Logistic Regression模型中直接使用数量型特征是不明智的:比如我们有个数量特征代表广告历史上的浏览次数,另外有一个特征是平均点击率。直接使用这两个特征作为LR的输入特征是不行的,原因首先是这两个特征的幅度不同,其中一个的幅度是上万,而另一个特征是0-1之间,可以想见第一个特征对应的权重的幅度必然会远远小于第二个特征对应的权重,从而使第一个特征的权重逃脱正则化的惩罚,无论这种正则化是L1还是L2。因此第一个特征的重要性会高很多。

那么如果讲特征的幅度归一化到同一个范围,比如0-1之间是否就可以了呢?还是不行。原因是LR本身是个线性组合经过Logit变换得到的输出结果。怎么能保证你的特征恰好是可以线性组合的呢?在现实中很难实现这一点。Logistic模型源于最大熵状态下的分子能量分布,能量和概率之间是logit关系,怎么能保证历史点击率(特征)和预测的点击率是这种关系呢?很难。

为了避免线性的问题,可以将特征的取值从(0,1)之间变为{0,1}两个取值。由于{0,1}之间不存在其他取值,因此避免了线性组合假设的要求。

可以从另一个角度上来理解离散化特征,就是一个样本可以同时属于若干个子集,比如性别{男,女},年龄{1-6,7-11,12-22,23-30,31-}等等。这里的集合可以分为若干组,每一组具有相关或互斥的含义。互斥并不是必须的,可以并不互斥,比如集合本身是交叠的。LR本身是求取这些子集上的权重,比如男:0.1,女:0.3等等。

通过离散化之后的维度要高很多,典型的广告模型的维度可以达到百万到百亿数量级。这样数量级的特征几乎把空间划分得细致极了,以至于模型把历史上的事件几乎分门别类的“记住”了。

如何离散化特征呢?有两种基本的做法:

  1. 等宽离散化。就是按照范围等分成等长的区间进行离散话,比如年龄可以按照每5岁一个区间进行划分。
  2. 等频离散化。将样本按照某一待离散化的特征的大小从小到大排列起来,然后按照等分样本个数去划分区间。容易看到这样得到的特征离散化结果和#1中的情况会有所不同。在大部分情况下,这种离散化方法的效果会更好,因为它可以照顾到多数的样本,而不至于发生样本在特征上聚集的时候等宽离散化丢失了很多信息。
以上两种方法都是比较简单的特征离散化方法,在要求不高的情况下可以接受。如果希望智能一点,可以将等宽和等频离散化结合起来使用,这样既可以避免特征聚集,又可以避免划分的区间过大或过小。

一个比较高等的做法是通过决策树进行离散化。决策树在生成的过程中会对连续特征进行切分,这些切点可以作为离散化点使用。




Wednesday, May 13, 2015

特征工程指南(1):去伪存真

首先声明我在特征工程工作方面有着很少的经验,实际中看到很多同学做特征工程的时候做的一些反思,而不是第一手的资料。如有谬误,敬请原谅,如果能在留言中指出更是感激不尽。本文主要是针对初涉此道的同仁。

一个典型的特征工程问题是这样的,比如要做广告的CTR预估,这是广告相关的人工智能技术中的非常重要的工作。我们先做以下一些假设:
  1. 我们拥有用户的历史浏览(Page View)和点击(Click)操作数据。这里的浏览是指浏览的页面和投放的广告;点击则专指对投放的广告的点击。可能用户并没有看到投放的广告,这里并不做区分,也就是广告只要是投放,就认为用户看到了。
  2. 我们需要预测的是当前正在发生的PV中该投放哪些广告,以使得期望收益(RPM)最高。RPM=CTR*ECPM。其中ECPM是实际发生点击时广告主向广告商支付的费用。该价格有着非常复杂的生成过程,在广告中叫做竞价机制或者机制。
  3. 所用的模型是线性Logistic Regression(LR)。
上面就是最初始的假设。其中1和2的假设是原问题假设,而3则是模型的限制,现在模型选择已经很丰富了,不同的模型选择对于特征工程的做法是有一些区别的。这里选择的LR模型是业界广泛使用的模型。

接下来需要干什么?两件事:整理训练数据和制作特征。本系列文章主要讨论制作特征的问题。

制作特征需要原始特征,原始特征是指那些数据中可以直接提取的特征,但原始特征并不是直接可以用于训练模型的,原因是模型对特征都会有一些要求。

LR是一个线性模型,p(y|x,w)=1/(1+exp(y*(w'*x)),其中w是模型参数向量,x是特征向量,y表示二分类的标号,为了使模型表达更简洁,y的取值为{-1, +1}。

那是不是说只要x是实数向量,就可以直接扔到模型进行训练了呢?答案是否定的。这里对x的分布有着严格的要求。

首先x的各个维度之间的幅度的问题,比如一个x_1取值范围是(0,1),另一个x_2取值是(0, 1000),将这样的训练数据拿去训练是肯定得不到你想要的模型的。原因是x_1和x_2的幅度差异太大,参数再加正则化约束会使得x_2对应的参数w_2的幅度偏小从而逃掉正则化约束,从而使x_2的作用不合理的偏大。当然这或许是你想要的,但概率极其渺茫。

那是不是说将x_2除以个1000,就万事大吉了呢?答案仍然是否定的。原因稍微复杂一点,就是比如原始的x_2 有0.99的概率取(0,1)之间的均匀分布,有0.01的概率是999,后果可想而知不是你需要的。

这说明,需要对特征进行深度的加工。

在深度加工之前,我们先看看作为原料,可以选择哪些原始特征吧。

我们很容易想到,历史的广告的点击率是有用的。

但这个点击率对于充分展示的广告来说或许太粗了,我们还需要考虑个性化因素,因此当前用户对该广告的点击率是有用的。

但这样太细了,缺乏泛化能力,因此需要找到介于以上两个粗细之间的粒度的特征,来提高泛化能力。我们想到了一个用户对某一类型(类目)或者广告主的广告的点击率。

在用户这段也需要做一些泛化,我们可以提前对用户提取profile,然后建立profile和广告之间的关系作为特征。

在上面的思路的基础上,还可以将profile打到广告上面,也可以对广告建立profile,作为广告的受众profile。用profile之间的联系作为特征。这种联系可以是内积(计算出来的匹配度)或者外积(具体的匹配项笛卡尔积)。

广告都是有上下文的,如投放在哪个网站,什么页面,页面的内容是什么,都可以作为特征来考虑。考虑的方式可以与用户特征类似。

现代的广告引擎一般包括两个阶段:粗选(Match)阶段和精选(Rank)阶段。本文所讲的CTR预估模型一般用于Rank阶段。

Match阶段和Rank阶段也需要结合起来。在Match阶段通常也会有如下信息:该广告是如何被选中的。比如是通过用户及网页关键词检索到的,那么有相应的检索索引及检索到的分数。这些也可以作为特征。

因此,最原始的特征可以包括:广告特征(A)、用户特征(U)、上下文特征(X)、Match特征(M)。

进一步的,对这些特征进行组合也是有意义的,比如AxU,AxX,UxX等,甚至更高阶的组合。

这就是你进行工作的原始特征的大致范围。