本科期间很幸运接触了CS的很多个topic,每一个topic都有一些让我觉得十分吸引人或者印象深刻的小事.
有幸拥有这些体验,大致离不开两个因素:
第一点只在学校里成立. 第三点基本只在学校和小公司里成立. 即使只看第二点,在大公司里由于部门划分,也很难成立.
选择出国上上学,也是想着能再接触点新东西.
然而,一眨眼就已经毕业了, 在CMU呆了一年半,大概只做了三件小事.
第一个学期又看了一点geometry, 然后趁机把全景拼接整体上做的科学了. 尤其是写了BA之后,能把理论上该拼好的图都拼好了.
写了一个tensorpack. 主要是离开了贵司之后发现基本找不到可用的炼丹炉前端,就在TensorFlow发布之后开始造了一个. 当然现在还是缺很多feature(以及背后的system),导致实验还是不能流畅的scale起来.
赢了ViZDoom的比赛并且发了篇paper,搞了个小新闻. 这虽然是个research work, 但其实engineering effort占大部分. 比赛本身的开放性设置其实也给获胜带来了不小的偶然性.
如果还要说什么的话,那就是做了一些低精度网络的东西,不过那些都是次要的,很惭愧,就做了一些微小的工作.
所以做的东西越来越专了,只围绕着vision.看这一年半做过的所有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说:我很奇怪你们现在的小朋友,为什么自己会什么就要去做什么呢?
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就很难了.