2017 年度总结

转眼间 2017 年就这么过去了,回想一下的话时间过得还真快。去年的这个时候,我怀着五味杂陈的心情写了篇年度总结。

那时候的我对于机器学习和深度学习这两者还没有完全领会神髓,对于数学的学习又处于零零碎碎不成体系的阶段,而做了好久的 Cake 项目又眼看着完全没法用,所以不能说心情很好。

不过今年事情稍稍发生了一点变化,我各个方面都有了点“感觉”,无论是机器学习和深度学习,还是数学,亦或者是各种轮子的编程,我都有不小的收获。因此今年的这个总结,我总体来说还是挺开心的。

首先是对去年目标的一些回顾

去年的这个时候,我写下了这四个目标:

  1. 发(至少)一篇机器学习的论文,作为这两年困顿心路的一个终点,以及新的起点。
  2. 复习微积分,学习数学分析,以及群论,为我想要达成的终极目标作准备。
  3. 在 (2) 的基础上,如果能顺便学一下常微分和偏微分方程就好了。
  4. 是不是应该在 (3) 的基础上更贪心一点……

第一个目标倒是恰好实现了。前不久,12月22日,WWW2018 的结果出来了,我那篇做异常检测的论文好歹录取了。那篇论文在我看来不能算是水文,但也不是什么特别高深的文章,只能算是在一个非常非常微小的点上面做了些许深入的工作吧。不管怎么样,算是一个不错的起点。

第二个目标的话有些微妙。我在今年初的时候捡起了 “Principle of Mathematical Analysis” (Rudin),痛苦地看了三四个月,结果也只看了不到一半。这本书的风格实在是太抽象了,我也只能做到看懂定理,可是却掌握不了分析的神髓。后来我去做论文了,也就耽搁了。等到八九月份,转换心情的时候,我挑了本 “Understanding Analysis” (Stephen)。这本书写的可真是好,一下了让我茅塞顿开,对于“分析”到底是干什么的有了清晰的认识。可惜,后来写论文去了,所以也只看了一半。等到写完论文(11月头),我本来想继续看这本书的,谁知道在看 MCMC Sampling 的过程中一直看到“测度”的叙述,想到 “Understanding Analysis” 算是实分析入门,没有测度的内容,于是打开了一本 “Measures, Integrals and Martingales” (Schilling),倒也看了三分之一,对于测度也有了点模糊的认识。

所以我处于总算对“分析”到底能干什么、关注什么有了初步的认识,可惜教材都还没看完的程度。看起来 2018 年第一件事情就是把这两本书搞定。当然,至于群论嘛,我现在已经明白,目前不适合分心去看那边。还是沿着实分析、测度、泛函分析这条路径先走通再说,顺便分支还可以练一练微积分和微分方程。

第三第四点目标,就不提了,反正也没做。

对于去阿里实习做论文的看法

对此我只有这么一个评价:公司做事被业务束缚太严重了。学术问题还是学术定义更好,阿里那边就是不肯把异常检测充分抽象出来研究,什么“每月几号晚上十二点有压力测试,那时候的异常不算异常”之类的规定,根本不可能用无监督算法搞定。在报警的时候最后忽略算法的输出,才是处理这种情况唯一正确的做法。

还好我六月之后严格定义了什么是“异常”,聚焦在这个学术性定义上做研究,才取得了快速的进展,不然我的论文还不知道在哪个犄角旮旯呢。

机器学习和深度学习的研究进展

我还是没能完全找到稳定可持续的研究路径。不过好歹彻底搞懂了 Variational Inference 是啥,并且由此延伸出去对于 Monte Carlo Methods,以及深度概率模型(特别是贝叶斯网络)有了清晰的认知,会推公式,写代码也不在话下。作为反补,像什么 EM 算法也是轻车熟路了。所以感觉也还不错。

另外我的一个对于机器学习和深度学习研究的主观看法在那篇论文里面初步得到了验证:借助数据的特性设计算法,然后根据算法的结果研究其中的数学特性,可以发现很多前人没有发现的有趣的事情,而不是单纯地在他人的想法上做点微小的改进。

各种轮子项目

年初的时候我在做实验的过程中写了两个轮子: MLComp 以及 TFSnippet。前者是一个实验报表平台,后者是写 TensorFlow 模型的一些工具。在这个过程中,我还研究了 ZhuSuan,贡献了一点点小代码。研究 ZhuSuan 对于我吃透 Variational Inference 有很大帮助。

MLComp 在设计上有很多缺陷,单纯文件系统扫描支撑不了报表页上展示太多实验,因此我决定不再改进它。我打算把产生 HTML 报告的部分摘出来放到项目 MLToolkit 中。目前还是起步阶段,不过 HTML 报告这部分也用不了多少代码。而报表页面的话,我觉得它应该被吸收到 Cake 那个大框架里面,而不是额外写个什么系统。

我找了两个 SRT 同学帮我写 Cake 2.0。我不打算亲自动手写,而慢慢调教他们,和他们一起设计架构。对于这个模式,我倒也有了一点点心得。

TFSnippet 则是另一个光景了。我上个月整理了 TFSnippet 的代码,接下来还打算补上文档,正式发布了。不管有多少人会用它,我觉得它现在的样子已经很好用了。而且不管怎么样,它真正实现了我的目标:用充分的测试把控实验代码的正确性,保证匆忙实验的过程中不会犯低级错误。

明年的目标

明年的目标主要有这么几个:

  1. 建立可持续的深度学习研究轨道。我不想针对某个项目去 Ad-Hoc 地研究某个话题,而是在建立 Big Picture 的情况下有目的地筛选项目,建立一个 Research Track,能在将来持续地推进我对于机器学习和深度学习的研究。
  2. 发两三篇深度学习的论文。
  3. 学习实分析、测度论、泛函分析。有空再看看复分析。争取把分析的入门基本搞定。