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 结合了一下. video

没有机会选 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. 想象这样一个场景: 你要不停的开枪十次才能打死敌人, 这中间你并不能观察到敌人 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