实地科研计划第一周 周记
实地科研计划第一周 周记
确认选题
其实在福大的时候,就是没来的时候 就有开始进行选题的考虑,刚开始选择这个 PeterZhang 老师的课题,第一是因为,他做的是强化学习,和我自己的导师,傅老师做的方向非常的近,我希望这次经历之后可以在福大更好地和傅老师合作;第二是因为这个老师毕业于麻省理工大学,现在在卡内基梅隆任教,因此选择了这个课题,然后很顺利地通过了选拔考试,成功加入这次暑期科研的活动,为什么我对这次活动充满了期待,第一是因为可以接触到很厉害的老师,向他学习,第二是可以认识很厉害的同学,与他们愉快地合作,到了之后发现,其实有些同学是调剂过来的,之前没学过强化学习,但是有机器学习和代码基础,然后看了选题,1,2,4 的选题的论文我大概是有翻过,很难,一堆数学公式我根本看不懂,也是这个教授的课题,和强化学习关联不大的,唯一和 RL 有些关联的,是课题3 Q-learning 的鲁棒性优化,我就差不多在心里预选了这个课题,我有个组员和我讨论说要不要选择课题4,感觉课题3 会有很多人选,我是觉得我之前对深度学习和强化学习都有一些了解,这短短一个月也没什么时间补数学基础了,选强化学习!不要在乎别人和你做没做一样的,毕竟除了同学,肯定还有别人在做,做自己最擅长的。时间不多了毕竟
分工确认
我们组其实就我一个人有强化学习和深度学习基础,一度后悔选了这个课题,因为我觉得,强化学习这么难的东西,敢选的一定都是大佬,我大腿抱定了,结果,其实敢选的不多,很多都是其他课题组调剂过来的(因为有些教授在美国,不方便过去),这个暑期活动开始后一两个月,我就加入了GrockCV,就想说早知道当初选个深度学习或者计算机视觉该多好,可能懂的人多一点,组员聊下去发现,朱y大一 高中开始就有过科研经历,已经完成了两篇论文的写作,已经全奖拿下多伦多大学了,那么论文肯定他来写;小牛今年人大附中准高三,三年级开始学习编程,而且拿过奖,他来跑实验吧;我的舍友Hy 有过机器人开发经历,也有代码基础,雅思7.5,他可以跑跑实验,帮着写论文;我的英语还没开始正式培训,所以很一般,应付一下四六级的那种水准吧,但是我有过AIAPP开发的经历,有以赛促学,之前对傅老师的方向感兴趣而自学了RL,为了打比赛而自学了DL,所以我是我们队伍里更加侧重于理论的吧,也就是说,可能需要我大量地阅读论文而寻找 idea 确实感到压力了然后有些没信心,毕竟我一个大一的,之前也没什么正儿八经的科研经历,却要一个人做最为重要的事情,但是看大家都信心满满的样子,而且我们有名校教授和PHD随时可以问,那我就大胆大胆干吧,不用担心方向出问题什么的,有问题随时问就好,这14天挑战一下极限这样(就是14天实地科研可以大家面对面交流,尽量完成核心的东西)
研究过程
我们组的论文阅读任务大部分就落到我一个人身上了,毕竟其他人都得现学RL,哪有这么快,但我相信他们的能力,鲁棒性优化是我完全空白的一个领域,我刚开始甚至不知道鲁棒什么意思,我就看助教发的第一篇论文 Robust Deep Reinforcement Learning against
Adversarial Perturbations on State Observations ,来学习 这篇真的十分干货,我也研究了很长时间吧,比如说什么最优对手怎么找,好几种方式,很多我之前没见过的算法,都得一个个去问 GPT 问清楚 这个公式为什么这么写,有什么作用,对于鲁棒性有什么意义,为什么要用KL 散度,通过量化策略间的差距有什么用,就一个个搞懂吧,耐下性子,老师说过搞科研要深入,要坐得住冷板凳,不能停留于表面,我听进去了,死缠烂打,问GPT 也好,问老师查资料也罢,反正这个第一篇搞懂了,确实就是让我对于这个领域有一定的了解 ,也看到了之前都没学过的很多东西,比如R 为什么要用协方差表示,什么是协方差,这么表示体现了鲁棒性优化这个领域的什么思想,我觉得我会通过思考公式在论文中的作用而去剖析一个领域的研究思路吧,这个为什么放在这里,还有最重要的正则化,之前在师姐的replaybuffer 里也有看到过,就思考有没有什么联系,都是要让策略的差距缩小,就是联想吧,第一篇看完了,大概就是有了个认识吧。后来就是第二篇,第三篇这样,其实最难搞的是研究动机,我们有过几种想法,差不多都是第一种是 自己想扰动,想优化算法,把扰动,对抗性训练后的模型在一些环境里跑一跑,结果要是还不错就可以发文章了;第二种就是,在 论文中 找到一种很好的算法,在matedrive中跑一跑,相当于论证某个鲁棒性算法在现实自动驾驶,无人驾驶领域的应用,也可以发发文章,后面就是在纠结这两种要选哪一种,感觉都水水的,后来想选第二种,随便找个算法,实验什么的跑一跑,直接发文章得了,然后就是找算法,找牛逼的attacker,
我的一个组友说找到了一篇还可以的 attacker 什么的比较明显,我们就想着,那么就拿来用吧,复现一下直接用,后面我就安排他们去复现,复现过程中,他们可能看不懂算法吧,我有基础就讲解了下,然后他们在复现过程中,和助教讨论,然后跟我说,完蛋了,这个attacker只适用于 DQN 我们的工作要推翻重来了,我就不甘心,好不容易复现出来了,干嘛推翻重来,我就去看算法的构造,凭什么不能用,凭借RL 基础,我就把这个算法改成了适用于 单策略网络的,attacker,而且和助教,教授讨论了都说可以试试,我就想,这不就是一个创新点嘛,他们的算法有用途的局限性,我们给他改造一下就更加普适,然后我就 get 到一个创新点了,赶紧激动地通知组友,于是工作的一个方向就定了下来,然后就是缝缝补补,又把论文1 的正则化器复现了出来,了解清楚作用,也拿来用了,感觉这像是串行的科研思路,并行的有时间可以试试,后来我们也有遇到一些困难,比如说,强化学习的每个环境的 state reward action 都有不同的 定义,比如说 动作空间不一样,动作几个维度,这个调整神经网络的output,或者说动作是连续动作还是离散动作,这个东西我有试着去改,连续动作是要输出 均值,标准差两个值,离散动作可以直接输出数字,也可以独热编码,也可以softmax 求概率,再用贪心去 sample 动作,好多种,都是要在神经网络上面进行一个结构的调整,可是只有我有深度学习基础,所以这个活我来干,或者我指导他们来做,队友真的很厉害,很快把那些最基本的东西补上来,也知道我们在做什么,反正这么一折腾,我也对强化学习的代码更加地熟悉了,还有一个state,相当麻烦 比如说,最麻烦的,目前遇到的一个 state 250 个维度,每个维度表现为二维数组,这怎么整,刚开始是想,把它变成一维的干脆,但是有12万个像素,然后讨论了下决定使用卷积网络,如果state 是图像,确实可以这么干,这个倒是跑出来了,但是还是慢,参数太大了毕竟,所以感觉还得想其他办法
后来就是 看了稳健性证明的一篇文章,刚开始是一位这个是鲁棒性里面必须要做的一步,于是把那个算法搞清楚了,也学到了一个relu的变形,很有趣,然后想着如何集成到我们论文里,后来助教说,这只是一种方法,这个方法用了之后方便证明稳健性罢了,但也通过此,了解到鲁棒性还需要有稳健性的证明