强化学习调参心得
最近在用tf复现CartPole-v0,MountainCar-v0,SpaceInvader的no-memory replay linear,linear,DQN,Dueling DQN,Double DQN之后,写一篇调参技巧的总结。因为强化学习的target不稳定,以及reward的稀疏性,可能会和有label的cnn训练会有些会差别。在这一篇我介绍一些常见技巧~
- 数据预处理
如果输入的state是图片,那么可以进行resize和变成灰度图。进行resize的时候,尽可能保持原来的尺寸,这样进行输出action的时候能够保持尺度一致性。至于要不要变成灰度图,需要看看输入的state是否有较好的边缘,颜色是否携带较多信息等等。
- weight初始化
采用随机或者normal distribution,均值为0,方差为1,可以设得小一些。太大的话,收敛会比较慢。当然,最好的初始化是用已经训练好的模型进行初始化,这个也叫做迁移学习。
- activation function
ReLU
- Optimizer的选择
一般使用Adam效果会比较好,也不需要自己设置参数。RMSProp和Adam效果差不多,不过收敛速度慢一些。
- experience sample
目前有的方法memory replay,prioritized memory replay。当然,在如果知道model的情况下,可以直接加sample,比如MountainCar-v0,轨迹已经给出,那么可以自己模拟几个到达山顶的Sample,可以大大加快收敛。
- 训练过程
训练过程可以把episode的reward打出来看,要是很久都没有改进,基本上可以停了,马上开始跑新的。
- exploration decay
一般是从1 decay到0.1,但是如果一开始就有不错的效果,可以从0.5,0.6开始,效果也是很不错的。
- \gamma
如果reward延时特别严重,可以提高 \gamma ,设置成1都可以。如果reward的实时性比较好,可以设置得小一点。
- reward function的修改
在针对MountainCar-v0这种非常稀疏,一开始都是0,只有到山顶都是1的情况,才有reward。这导致训练的时候如果采不到到山顶的sample,基本上就train不出来了。所以可以改变reward,比如改成与目前Car所在的位置成正相关。当然,还有更加高级的做法就是inverse reinforcement learning(使用GAN)。
- target stable
使用Double network可以极大提高收敛的速度,因为single network的时候,target是之前的network,虽然固定了target parameter一段时间,但是马上又变了。所以就是去追寻一个一直在变化的target,所以收敛得太慢。而double network相当于现在你有了一面镜子,可以有了不错的参考,收敛就快了很多。
- skip frame
针对视频的应用,计算量太大,所以一般使用skip frame,就是训练的时候,k帧跳过,训练第k+1帧,每k+1帧训练其中的一帧。中间的k帧就保持action不变。k帧设置不能太大,太大就会反应迟钝,中间发生的意外不能马上处理。太小的话,计算量太大。
Ref:
【1】 你有哪些deep learning(rnn、cnn)调参的经验?
【2】 Must Know Tips/Tricks in Deep Neural Networks (by
【3】 神经网络使用心得--欢迎新手借鉴,老手批评指正 - CaffeCN深度学习社区
【4】 Neural Network tricks for trade