记录一个莫烦PPO代码中的小问题
莫烦在PPO中创建神经网络的代码
// morvanzhou
def _build_anet(self, name, trainable):
with tf.variable_scope(name):
l1 = tf.layers.dense(self.tfs, 100, tf.nn.relu, trainable=trainable)
ReLU激活函数的缺点
训练的时候很”脆弱”,很容易就”die”了,训练过程该函数不适应较大梯度输入,因为在参数更新以后,ReLU的神经元不会再有激活的功能,导致梯度永远都是零。
例如,一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0.
如果 learning rate 很大,那么很有可能网络中的 40% 的神经元都”dead”了。
https://www.cnblogs.com/Time-LCJ/p/9235711.html
可能出现的问题
卷积神经网络输出一直不变
action固定一个值,或边界值
可能出现的解决方法
- 换一个激活函数就好了,别用relu,可以试一试Leaky ReLU,RRelu,tanh等
- tf.layers.batch_normalization()
参考
[1]: https://www.zhihu.com/question/52467106
[2]:https://morvanzhou.github.io/tutorials/machine-learning/