Exploration & Exploitation

1

一眨眼就已经毕业了, 在CMU呆了一年半, 大概只做了三件事情.

  • 第一个学期又看了一点geometry, 然后趁机把全景拼接整体上做的科学了. 尤其是写了BA之后, 能把理论上该拼好的图都拼好了.

  • 写了一个tensorpack. 主要是离开了贵司之后发现基本找不到可用的炼丹炉前端, 就在TensorFlow发布之后开始造了一个. 当然现在还是缺很多feature(以及背后的system), 不能满意的scale起来, 最多只能跑跑ImageNet.

  • 赢了ViZDoom的比赛并且发了篇paper, 搞了个小新闻.

如果说还有一点什么成绩, 那就是做了一些低精度网络的东西.但这些都是次要的, 很惭愧, 就做了一点微小的工作.

为什么说微小呢, stitching是开哥大二就做了的东西; 贵司的全套系统越深入了解越觉得科学, 相比之下tensorpack只算个花瓶; doom虽然是个比较新的research work, 但其实engineering effort占大部分, 比赛本身的开放性设置其实也给获胜带来了不小的偶然性. 而且后来发现, 我为了搞doom而做的那个免root的chroot环境, 其实开哥用比我更科学的方式做过.

在清华认识了太多厉害的人, 不可避免的在心里衡量一下, 总会觉得自己做的东西, 看上去很微小.

诺贝尔奖得主Eugene Wigner是von Neumann的儿时好友, 一次Wigner与Thomas Kuhn的谈话中, Kuhn说到:

That must have been a shattering experience - to have grown up with Neumann, however bright one is.

无论你多"聪明"(bright), 和von Neumann一起长大都是一种"shattering experience".

在Wigner看来, 自己还有爱因斯坦这些人, 只能算是"bright", 而von Neumann是"he had a brain which was phenomenal and a true miracle", 是奇迹般的天才. 说起与von Neumann上学的经历, 他说"he probably contributed greatly to whatever I knew".

所以在shattering experience之外, 更多的是学习的愉悦吧.

2

本科期间接触了CS的很多个topic, 对vision, graphics, learning, database, HPC, security这些有趣的领域都有了些粗浅的了解, 这几乎都是由同学带领入门的. 能够有幸拥有这些体验, 有这么几个必不可少的因素:

  • 环境与身份允许(鼓励)我做方向完全不同的事情.
  • 周围有每个方向很厉害的人.
  • 他们愿意花non-trivial的时间教你或和你一起研究.

第一点只在学校里成立. 第三点基本只在学校和小公司里成立. 即使只看第二点, 在大公司里由于部门划分, 也很难成立.

选择出国上上学, 也是想着能再接触点新东西.

但是做的东西越来越专了, 只围绕着vision/learning. 看这一年半做过的所有project, 甚至觉得炼丹炼的太多. 即使是一些非炼丹的课, project也跟炼丹扯上了关系:

  • high performance的课, bit NN runtime in C和float NN runtime in Halide.
  • robotics课, 一个判断你是否在走路然后智能滚起来的鞋子. 是队友的创业项目, 我帮炼了个丹, 居然走起来能work.
  • geometry课, 把Pose Machine和stereo结合了一下, 之后也被队友用去创业了.

没有机会选physics based真・vision课而只是不太认真的旁听了一下很遗憾. 这样放弃掉的机会还有很多, 比如本可以加入PPP的训练, 却从来没去过.

暑假去参观Amber学长的车库, 很羡慕一个人一个车库可以自由的折腾各种技术. 当时就觉得, 自己抱着做新东西的想法, 却很多时间停留在舒适区里.

我放弃继续搞graphics而去做了几个月database之后, 有一次胡老师跟我说:你换到一个新领域, 你的成绩就归零了.

Amber说:我很奇怪你们现在的小朋友, 为什么自己会什么就要去做什么呢?

3

Exploration vs exploitation是reinforcecment learning中的一个fundamental tradeoff.

Explore说的是agent要使用比较随机的策略做一些尝试, 探索环境. Exploit是要agent follow当前习得的策略. 最终都是产生experience, 来指导学习, 差别在于应该更随机还是更不随机, 何时随机, 何时不随机. Explore和exploit之间的相对权重甚至可以根据模型和环境来调节, 进行任意的组合.

如何调节呢?我倾向于觉得一个learning agent在未知环境下自己是无法adaptive的判断的.

在跟贵司同学交流的时候, 我举了这么一个例子, 大家代码写的这么好, 可是你突然有一天说我不写了, 辞职去做另一个工作, 会不会做的更好呢?

不知道. 由于环境的reward未知, 不进行一定程度的explore是根本无法估计一个action的价值的, 而一旦explore之后没有价值, 资源就被浪费了.而要explore多久才能做出决定?同理, 也是不知道. 正所谓人呐就都不知道, 自己就不可以预料.

有不少paper试图"explore smarter", 一个常见思路是"避免explore相似的状态". 这也只是一个(多数情况下有效 的)human prior. 想象这样一个doom场景, 你要不停的开枪十次才能打死敌人, 这中间你并不能观察到敌人HP的 变化, 那么确实要反复explore相同的state, 因为state也不是fully observable的, 你所看到的只是环境的一部分.

这样看来, 这两者的tradeoff, 就是人类做决策最大的一类困难: 没有reward, 要继续坚持还是放弃? 有了一些reward, 要尝试别的还是就这样行了? 当前没有reward, 却可能带来未来的reward, 这件事要不要做? 有风险也有收益, 如何选择? 做一件事做到多好才够?

对于一个容易满足的人类, 这些问题可能还要容易回答一些, 对于一个追求maximized reward的agent就很难了.

而另一方面, 人类作为一个整体, 用智慧逐渐获取了观测, 预测环境的能力, 以简洁与统一为目标, 把环境formulate成基本的物理公式. 这比一个基于阴阳五行的deep "universal" approximator要高明多了.

4

去FAIR是一种explore, 我没有花几年去读一个phd的意愿, 但也想尝试research, 看看能搞出点什么. 也是一种exploit, 毕竟做了这么多相关的事情, 何不继续做下去.

去HRT是一种explore, 顶级的高频交易团队, 未知的刺激的领域. 也是一种exploit, 毕竟炼丹的门槛越来越低, 你比别人强在哪里?system skills才更有生命力.

我也不知道最终怎么做出的决定. 可能是由于人情, 可能是由于地理, 可能是有虚伪的"researcher"的骄傲, 可能是不敢激进的explore, 可能是希望更充分的exploit.

HRT的recruiter说, 我们从来没有见过在这样两个选项间做选择的人, follow your gut吧, 无论哪个都不会是bad choice.

毕竟环境是未知的, 在有限的时间里, 谁也不知道自己有没有maximize reward. 相信almost every local maximum is global就好了.

Comments