随笔(二)—工作与生活

从小听过不少家长或者老师的“谎言”,读初中的时候,老师们总是说让大家努力学习,只要考上了高中就可以轻松学习了,毕竟从高中考大学是相对容易的;在高中的时候,老师们也总是说让大家继续努力学习,保持学习劲头不放松,等考上了大学就可以开始真正的素质教育了;但是到了大学的时候,才发现所谓的学习生活并不是跟高中老师所说的一样。从某种程度来看,大学教育在某些时候也是一种应试教育,跟高中的模式没有太大的区别,要想获得某门课程的好成绩同样也需要花费很多时间和精力的。

笔者在读博士的时候,在刚入学的第一年总想在很短的时间内做完某件事情,甚至在刚入学的第一个学期都没有在周边进行游玩和娱乐,也没怎么进行休息,一直在尽力地学习各种数学课程,阅读科研论文。等到了博士第二年的时候,心态就出现变化,毕竟博士生做论文并不是花费几个月就能够搞定的,科研与学习是有本质区别的。科研是一种生活状态,无论博士生在办公室,在路上,在家里,甚至在吃饭的时候,都可以思考问题,不断地考虑论文中的突破口,不停地进行各种各样的演算和尝试,在每一次的失败中寻求成功的路径。如果科研是一种生活状态,那就不太可能出现读完,写完某篇论文就不用继续努力付出的情况。对于博士生而言,科研与生活会长期并存,互相交织在一起。

其实无论是在中学,大学,研究生,还是博士阶段,甚至到了工作时期,都不太可能出现度过了某个阶段,下个阶段就无比轻松的情况。在不同的阶段都有着完全不同的任务和目标,都有着截然不同的挑战和困难。在小学,中学,大学的时候,大家还是以学生的身份而存在;到了研究生,博士阶段的时候,大家就要考虑未来的生计问题了;等到了工作期间,大家考虑和谈论的事情基本上就是事业,成家,立业等家庭问题;到了生儿育女的阶段,大家商讨的应该就是学区房,小孩成绩等诸多问题了。因此,无论在人生的哪个阶段,并不会出现丝毫没有任何压力的情况,也很难出现一个阶段过去了下一个阶段就很轻松的事情,说不定下一个阶段比上一个阶段更加的艰难。

在人的一生中,学习,工作,生活三者将会一直共存,进入工作阶段并不意味着学习的停滞,在学习期间也不意味着不需要生活,在工作阶段更不意味着可以永远不休息。生活和工作在每个人的人生中其实是不可严重割裂的两块,对大多数人而言,是很难做到不需要工作而只需要生活的,也很难做到不需要生活而只需要工作。当然,在某个短暂的阶段我们完全可以做到放弃其中的某一样而努力做到另外一件事情,但是以长远的眼光来看,工作与生活其实是长期并存的关系。

在一线城市工作,虽然日常会承受 995 甚至 996 的工作压力,但是总还是可以找到休息的机会。不过据说有的公司是 007 的工作状态,那么估计这些员工是没有生活了。但是 007 的工作状态也不会持续一辈子,毕竟人的体力和精力都是有限的,在某个合适的时刻这种工作状态会被改变的。如果不想拥有高强度的工作压力,就要合理地降低自身的欲望。如果想在职场发展中持续地赚到钱或者维持高收入,就必然要保持自身的竞争力。而竞争力的来源包括工作时长,技术能力,管理能力等诸多方面,其中工作时长是最容易体现竞争力的一个方面,这也许正是 996 的由来。但即使是高强度的工作,也可以尝试在工作间隙进行必要的休息和生活,例如午饭和晚饭的时间。工作人士可以在这两个时间段做一些自己喜欢的事情,体验一下与工作完全不同的生活。

工作在某些时候就跟读博士一样,千万不能够想着读完了博士就怎么怎么样,而是要学会把大任务拆解,安排好每个时间段的工作。只要每天,每周,每月,每年做完一定的任务之后就及时享受生活和体验人生。只有这样才能够保证自身的能量充足,能够长期在工作中保持战斗力。工作是人生的必经阶段,也是日常生活的一部分,为了更好地生活,我们需要努力的工作,但是并不需要为了工作而放弃所有的生活。

在工作的时候,通常任务有日常的常规任务,也有充满挑战的创新性任务。在做常规任务的时候,可以搞一些可以提升效率的工具,减少重复工作的时间。在做创新性项目的时候,就要一往无前地全力以赴,毕竟创新性的工作除了给人带来工资与收益之外,还能够给人带来巨大的成长,为今后的工作做必要的铺垫。只做重复性的工作很容易让人产生疲惫的心理,在互联网这种充满风险和挑战的地方还是要做一些对自己有提升的工作。一旦目前的工作都已经手到擒来,没有任何挑战,那就可以考虑去找一些更有挑战的项目来提升自己了。

工作与生活是不能被分割的两部分,很难放弃其中的一个而只选择另外一个。在日常的工作中,通过项目来精进自身的能力,在工作中获得一定的成就感。在生活中及时地享受人生,在娱乐之余及时地给予自己一定的奖励,只有这样,才能够更好地平衡工作与生活。

随笔(一)— 养娃一月记

对于一线大城市的年轻人而言,读书,就业,买房,恋爱,结婚,生娃都是非常重要的事情。但对于不同的人却有着不一样的顺序,也许结婚的时候并不在当时工作的城市,或者在某个阶段就早已回到家乡重新开始新的生活。不过这些事情对于年轻人以及背后的家庭而言,都是一个又一个的里程碑(Milestone),是一段新生活的开始。

从今年七月份开始,笔者的日常生活基本就是围绕着小朋友而展开,从一开始进医院陪产,出院之后直接进入月子中心,到离开月子中心重新回归家庭,直到最后家里迎来了新的成员。

说到生产的医院,就是在怀孕的初期或者中期就需要确定下来。而在建档的时候父母双方可以在市里的妇幼保健院建档,当场录入父母双方的信息以及基本情况。此时妇幼保健院还会要求父母做一些必要的检查,例如地中海贫血症等,也会查一下父母双方的血型,以便后续有需要的时候会作进一步地检查。

在妇幼保健院建档并不意味着只能够在妇幼保健院生宝宝,也可以在中途更换到其他的医院,此时完全可以考虑根据自身和家庭的情况选择最适合的方案。有的医院床位紧张,可能到时候产妇和家属需要睡在楼道里面;有的医院床位宽松,产妇可以住在病房里面,家属则可以铺一张行军床;当然,如果家庭条件再好一点的话,去条件更好的医院,家属其实也不用铺行军床了。

在建档之后笔者选择的是香港大学深圳医院(在这里没有打广告的意思),当时去医院看了之后发现整体环境还不错,而且港大医院是预约制的,要想在港大医院生产必须预约成功才行。对医院而言,病人数量会相对可控一些,笔者去的时候也暂时没发现有产妇孕妇睡在走廊的情况。在港大医院里面有全家(MyFamily)便利店 24 小时营业,里面除了出售日常的食品和消耗品之外,还出售病人常用的一些装备,甚至还有宝宝所需要的纸尿裤,这样也极大地方便了来医院就诊的患者。港大医院的产科位于住院部 A 栋,分为东区和西区,其中东区是负责产前,西区负责产后。这样也有利于产妇的休息和宝宝的照顾。而产房则是位于门诊医技楼,因此在生产的时候,妈妈们是要用轮椅被护士推送到产房,而爸爸们则只能够在产房的大厅里耐心地等候。

香港大学深圳医院

产妇在医院的时间一般来说不会太长,通常一周左右就会正常出院,而出院了之后去月子中心还是请月嫂照顾,或者全程由家人照顾则是根据每个家庭自身情况来定的。通常来说,月子中心可以提供一系列的关于妈妈和宝宝的解决方案。月嫂的话虽然也能够帮忙和解决问题,但是一个人照顾毕竟人力有限,有的时候会出现人力紧张的情况。而全程由家人照顾的话,则需要家人懂一些育儿的经验和法则,最好家人最好还要与时俱进,不能够拿着三十年前的经验在持续使用。

今年正好处于疫情防控期间,很多医院都只能够让一个陪护人员进入病房照顾病人,基本上在病房里面不会出现一大家人进去的情况。因此对于新手爸妈而言,尤其是对爸爸来说,在医院期间同时照顾妈妈和小孩就是一件非常有挑战的事情,而这件有挑战的事情在疫情期间是没有办法让别人来帮忙的。至于月子中心或者月嫂基本上都是出院了之后才会使用,在医院只能够依赖爸爸来解决问题。

全家的冰淇淋

有的月子中心整体感觉还不错,能够针对妈妈和小孩的情况来制定相应的解决方案。毕竟对于新手爸爸来说,照顾妈妈和小孩的经验是十分缺乏的。同时对于长辈而言,很可能都是过时的经验,而且现在照顾小孩也有很多与时俱进的策略和照顾方案。况且长辈也近三十年没有带过小孩,并且带小孩也是一个体力活,不是所有长辈都能够承受这种劳动强度。这种时候如果有一个靠谱的月子中心或者月嫂,确实能够极大地减缓新手爸爸和其他家庭成员的劳动强度。

在一个靠谱的月子中心,会有很多角色与某个家庭对接,而要解决某个问题只需要找到相应的角色就可以了。通常来说会包括护士,医生,瑜伽老师,生活助理,营养师等角色,而这些角色每天负责的内容是不一样的,护士也是轮班的工作模式,会保证这些工作人员得到必要的休息。而月嫂的工作模式基本上是一个人在工作,一个人会负责妈妈和宝宝的方方面面。这种情况下,在某些时候就难免分身乏术,毕竟同时照顾两个人其实是有一定的难度和挑战的。月嫂毕竟是一个人,每天也是需要一定的时间进行休息的,这与月子中心那种随叫随到的模式是不太一样的。

月子中心

在一线城市工作,其工作节奏还是相对较快,无论是在大公司还是中小型公司,工作人士基本上都是需要加班的。这就表示爸爸即使能够照顾家里面,也仅仅局限于陪产假的期间,其他时间都是较难照顾到家里面。因此无论让长辈过来或者去月子中心,还是请月嫂都是解决问题的方法。一般情况下月子中心在深圳的价格是 26 天 5 万以上,如果需要住更长的时间或者有其他的需求,则需要更高的费用,这种时候一般都会超越 10 万人民币。同时,月子中心也会有其他的项目,包括给宝宝拍照,妈妈的瑜伽恢复和产后恢复等诸多项目,而这些项目一旦超过了前期的套餐费用,都是需要付费的,因此,在月子中心里面多花几千块或者几万块钱都是属于正常的。当然,也有一些人就做完正常的项目就没有继续做额外的项目了。

而宝宝一天的流程除了日常的喂奶,换尿布之外,还会有洗澡,抚触,早教,游泳等诸多项目。妈妈的项目除了喂奶,吃饭,还有产后修复等内容,这些项目在月子中心是由不同的角色完成的,但如果是月嫂的话则是全部由一个人完成。如果月嫂靠谱的话还算比较好,毕竟在价格方面相对月子中心还是便宜许多。其实去一次月子中心的钱其实可以请好几个月嫂了,还是要根据自身家里的情况来决定怎么做,毕竟这个对每一家而言真的是个性化的需求。

不同的家庭的确需要根据自身情况来决定该怎么做,但是有的时候自己或者家人千万不要高估自己的能力,毕竟带婴儿也是一个力气活,而且带婴儿的知识是需要不停地更新的,不学习任何知识就想带好婴儿是不可能的事情。除非一开始就打算随便养一下,那确实也没啥必要学;一旦想要好好带的话,最好还是多学习各种知识,包括母婴的基础知识,常见的育儿百科等等。整个流程还是很长,但其实这只是一个开始,后续还有更长的路需要走。(未完待续)

主动学习(active Learning)

主动学习背景介绍

机器学习的研究领域包括有监督学习(Supervised Learning)无监督学习(Unsupervised Learning)半监督学习(Semi-supervised Learning)强化学习(Reinforcement Learning)等诸多内容。针对有监督学习和半监督学习,都需要一定数量的标注数据,也就是说在训练模型的时候,全部或者部分数据需要带上相应的标签才能进行模型的训练。但是在实际的业务场景或者生产环境中,工作人员获得样本的成本其实是不低的,甚至在某些时候是相对较高的,那么如何通过较少成本来获得较大价值的标注数据,进一步地提升算法的效果就是值得思考的问题了。

机器学习

在工业界的图像标注领域,虽然有 ImageNet 这个学术界和工业界都在使用的图像数据库,但是在很多特殊的业务场景上,从业人员依旧需要想尽办法去获取业务标注数据。在安全风控领域,黑产用户相对于正常用户是偏少的,因此,如何通过极少的黑产用户来建立模型则是值得思考的问题之一。在业务运维领域,服务器,app 的故障时间相对于正常运行的时间也是偏少的,必然会出现样本不均衡的情况。因此,在这些业务领域,要想获得样本和构建模型,就必须要通过人力的参与。那么如何通过一些机器学习算法来降低人工标注的成本就是从业者需要关注的问题了。毕竟需要标注 100 个样本和需要标注成千上万的样本所需要的人力物力是截然不同的。

在学术界,同样有学者在关注这方面的问题,学者们通过一些技术手段或者数学方法来降低人们标注的成本,学者们把这个方向称之为主动学习(Active Learning)。在整个机器学习建模的过程中有人工参与的部分和环节,并且通过机器学习方法筛选出合适的候选集给人工标注的过程。主动学习(Active Learning)的大致思路就是:通过机器学习的方法获取到那些比较“难”分类的样本数据,让人工再次确认和审核,然后将人工标注得到的数据再次使用有监督学习模型或者半监督学习模型进行训练,逐步提升模型的效果,将人工经验融入机器学习的模型中。

在没有使用主动学习(Active Learning)的时候,通常来说系统会从样本中随机选择或者使用一些人工规则的方法来提供待标记的样本供人工进行标记。这样虽然也能够带来一定的效果提升,但是其标注成本总是相对大的。

用一个例子来比喻,一个高中生通过做高考的模拟试题以希望提升自己的考试成绩,那么在做题的过程中就有几种选择。一种是随机地从历年高考和模拟试卷中随机选择一批题目来做,以此来提升考试成绩。但是这样做的话所需要的时间也比较长,针对性也不够强;另一种方法是每个学生建立自己的错题本,用来记录自己容易做错的习题,反复地巩固自己做错的题目,通过多次复习自己做错的题目来巩固自己的易错知识点,逐步提升自己的考试成绩。其主动学习的思路就是选择一批容易被错分的样本数据,让人工进行标注,再让机器学习模型训练的过程。

那么主动学习(Active Learning)的整体思路究竟是怎样的呢?在机器学习的建模过程中,通常包括样本选择,模型训练,模型预测,模型更新这几个步骤。在主动学习这个领域则需要把标注候选集提取和人工标注这两个步骤加入整体流程,也就是:

  1. 机器学习模型:包括机器学习模型的训练和预测两部分;
  2. 待标注的数据候选集提取:依赖主动学习中的查询函数(Query Function);
  3. 人工标注:专家经验或者业务经验的提炼;
  4. 获得候选集的标注数据:获得更有价值的样本数据;
  5. 机器学习模型的更新:通过增量学习或者重新学习的方式更新模型,从而将人工标注的数据融入机器学习模型中,提升模型效果。
主动学习的流程

通过这种循环往复的方法,就可以达到人工调优模型的结果。其应用的领域包括:

  1. 个性化的垃圾邮件,短信,内容分类:包括营销短信,订阅邮件,垃圾短信和邮件等等;
  2. 异常检测:包括但不限于安全数据异常检测,黑产账户识别,时间序列异常检测等等。

主动学习的模型分类包括两种,第一种是流式的主动学习(Sequential Active Learning),第二种是离线批量的主动学习(Pool-based Active Learning)。在不同的场景下,业务人员可以选择不同的方案来执行。

主动学习的三种场景

而查询策略(Query Strategy Frameworks)就是主动学习的核心之处,通常可以选择以下几种查询策略:

  1. 不确定性采样的查询(Uncertainty Sampling);
  2. 基于委员会的查询(Query-By-Committee);
  3. 基于模型变化期望的查询(Expected Model Change);
  4. 基于误差减少的查询(Expected Error Reduction);
  5. 基于方差减少的查询(Variance Reduction);
  6. 基于密度权重的查询(Density-Weighted Methods)。

不确定性采样(Uncertainty Sampling)

顾名思义,不确定性采样的查询方法就是将模型中难以区分的样本数据提取出来,提供给业务专家或者标注人员进行标注,从而达到以较快速度提升算法效果的能力。而不确定性采样方法的关键就是如何描述样本或者数据的不确定性,通常有以下几种思路:

  1. 置信度最低(Least Confident);
  2. 边缘采样(Margin Sampling);
  3. 熵方法(Entropy);

Least Confident

对于二分类或者多分类的模型,通常它们都能够对每一个数据进行打分,判断它究竟更像哪一类。例如,在二分类的场景下,有两个数据分别被某一个分类器预测,其对两个类别的预测概率分别是:(0.9,0.1) 和 (0.51, 0.49)。在此情况下,第一个数据被判定为第一类的概率是 0.9,第二个数据被判定为第一类的概率是 0.51,于是第二个数据明显更“难”被区分,因此更有被继续标注的价值。所谓 Least Confident 方法就是选择那些最大概率最小的样本进行标注,用数学公式描述就是:

x_{LC}^{*}=argmax_{x}(1-P_{\theta}(\hat{y}|x))=argmin_{x}P_{\theta}(\hat{y}|x),

其中 \hat{y}=argmax_{y}P_{\theta}(y|x),这里的 \theta 表示一个已经训练好的机器学习模型参数集合。\hat{y} 对于 x 而言是模型预测概率最大的类别。Least Confident 方法考虑那些模型预测概率最大但是可信度较低的样本数据。

Margin Sampling

边缘采样(margin sampling)指的是选择那些极容易被判定成两类的样本数据,或者说这些数据被判定成两类的概率相差不大。边缘采样就是选择模型预测最大和第二大的概率差值最小的样本,用数学公式来描述就是:

x_{M}^{*}=argmin_{x}(P_{\theta}(\hat{y}_{1}|x)-P_{\theta}(\hat{y}_{2}|x)),

其中 \hat{y}_{1}\hat{y}_{2} 分别表示对于 x 而言,模型预测为最大可能类和第二大可能类。

特别地,如果针对二分类问题,least confident 和 margin sampling 其实是等价的。

Entropy

在数学中,可以使用熵(Entropy)来衡量一个系统的不确定性,熵越大表示系统的不确定性越大,熵越小表示系统的不确定性越小。因此,在二分类或者多分类的场景下,可以选择那些熵比较大的样本数据作为待定标注数据。用数学公式表示就是:

x_{H}^{*}=argmax_{x}-\sum_{i}P_{\theta}(y_{i}|x)\cdot \ln P_{\theta}(y_{i}|x),

相较于 least confident 和 margin sample 而言,entropy 的方法考虑了该模型对某个 x 的所有类别判定结果。而 least confident 只考虑了最大的概率,margin sample 考虑了最大的和次大的两个概率。

不确定性采样的差异性

基于委员会的查询(Query-By-Committee)

除了考虑单个模型的不确定性采样方法之外,还可以考虑多个模型的场景,这就是类似集成学习的方法。通过多个模型投票的模式,来选择出那些较“难”区分的样本数据。在 QBC(Query-By-Committee)的技术方案中,可以假设有 C 个模型,其参数分别是 \{\theta^{(1)},\cdots,\theta^{(C)}\},并且这些模型都是通过数据集 \mathcal{L} 的训练得到的。

如果不需要考虑每个模型的检测效果,其实可以考虑类似不确定性采样中的 least confident 和 margin sampling 方法。可以选择某一个分类器难以区分的样本数据,也可以选择其中两三个分类器难以区分的数据。但是如果要考虑所有模型的分类效果的时候,则还是需要熵(Entropy)或者 KL 散度等指标。因此,QBC 通常也包括两种方法:

  1. 投票熵(Vote Entropy):选择这些模型都无法区分的样本数据;
  2. 平均 KL 散度(Average Kullback-Leibler Divergence):选择 KL 散度较大的样本数据。

投票熵(Vote Entropy)

对于这种多模型 \{\theta^{(1)},\cdots,\theta^{(C)}\} 的场景而言,可以用熵来衡量样本数据被这些分类器区分的难易程度,如果这些分类器都把样本数据划分到某一类,则容易区分;如果分类器把样本数据划分到多类,则表示难以区分,需要重点关注。用数学公式表达就是:

x_{VE}^{*}=argmax_{x}-\sum_{i}\frac{V(y_{i})}{C}\cdot\ln\frac{V(y_{i})}{C},

其中 y_{i} 表示第 i 类,求和符号表示将所有的类别 i 相加,V(y_{i}) 表示投票给 y_{i} 的分类器个数,C 表示分类器的总数,并且 \sum_{i}V(y_{i})=C

平均 KL 散度(Average KL Divergence)

KL 散度可以衡量两个概率之间的“距离”,因此可以用 KL 散度计算出那些偏差较大的数据样本。用数学公式来描述就是:

x_{KL}^{*}=argmax_{x}\frac{1}{C}\sum_{c=1}^{C}D(P_{\theta^{(c)}}||P_{\mathcal{C}}),

其中 P_{\mathcal{C}}(y_{i}|x)=\frac{1}{C}\sum_{c=1}^{C}P_{\theta^{(c)}}(y_{i}|x) 也是概率分布,D(P_{\theta^{(c)}}||P_{\mathcal{C}}) 表示两个概率的 KL 散度。

期望模型变化(Expected Model Change)

模型变化最大其实可以选择那些使得梯度变化最大的样本数据。

期望误差减少(Expected Error Reduction)

可以选择那些通过增加一个样本就使得 loss 函数减少最多的样本数据。

方差减少(Variance Reduction)

选择那些方差减少最多的样本数据。

基于密度权重的选择方法(Density-Weighted Methods)

有的时候,某个数据点可能是异常点或者与大多数数据偏差较大,不太适合做样本选择或者区分,某些时候考虑那些稠密的,难以区分的数据反而价值更大。于是,可以在使用不确定性采样或者 QBC 方法的时候,将样本数据的稠密性考虑进去。用数学公式表示就是:

x_{ID}^{*}=argmax_{x}\phi_{A}(x)\cdot\bigg(\frac{1}{U}\sum_{u=1}^{U}sim(x,x^{(u)})\bigg)^{\beta},

在这里,\phi_{A} 表示某个不确定性采样方法或者 QBC 方法,\beta 表示指数参数,x^{(u)} 表示第 u 类的代表元,U 表示类别的个数。加上权重表示会选择那些与代表元相似度较高的元素作为标注候选集。

B 附近的点信息量会大于 A 附近的点

总结

在主动学习(Active Learning)领域,其关键在于如何选择出合适的标注候选集给人工进行标注,而选择的方法就是所谓的查询策略(Query Stategy)。查询策略基本上可以基于单个机器学习模型,也可以基于多个机器学习模型,在实际使用的时候可以根据情况来决定。整体来看,主动学习都是为了降低标注成本,迅速提升模型效果而存在的。主动学习的应用场景广泛,包括图像识别,自然语言处理,安全风控,时间序列异常检测等诸多领域。后续笔者将会持续关注这一领域的发展并撰写相关文档。

参考资料

  1. Settles, Burr. Active learning literature survey. University of Wisconsin-Madison Department of Computer Sciences, 2009.
  2. Aggarwal, Charu C., et al. “Active learning: A survey.” Data Classification: Algorithms and Applications. CRC Press, 2014. 571-605.