(纯手打原创(基本思想如有雷同实属巧合),转载请注明。)
记一次本人在进行科研项目的过程中踩过的坑。本人在做基于pytorch的强化学习时(当然该情况不仅限于强化学习;另外我用到的强化学习方法是基于AC结构的DDPG算法),遇到过Actor网络的loss没什么变化,输出的action的值始终在0附近的情况,也就是说我的网络根本没学到什么东西。很奇怪,于是在网上搜寻导致该问题的原因以及解决方法(CSDN里就有很多优质的回答),我目前脑海中记得的有以下三种解决办法:
- 调参。调整可能会影响到网络更新的参数,比如学习率等。
- 换激活函数。网上有很多博客提到,如果激活函数是ReLU的话,在误差反向传播的过程中可能会造成神经元的“死掉”,因为ReLU在负半轴的导数为0,根据链式法则,有一个0的存在结果就为0了。可以采用ReLU大家族中的其他成员,比如RReLU、Leaky Relu等。
- 换优化器。网上有很多博客提到,可能是优化器的效果不好导致的,所以各类好用的优化器都试试,比如SGD、Adam等。
但是,以上方法可能对别的小伙伴有用,对我来说,我也试过但都没有用(不是说以上的方法不对或者不好,只是针对我的这个情况是没有用的)。这个坑可能对别人来说并不常见,但是毕竟我踩过了,也算是对这种问题贡献了另外一种可能的原因和解决方法,具体如下ÿ