权重初始化
权重的初始化如果权重一开始很小,信号到达最后也会很小;如果权重一开始很大,信号到达最后也会很大。不合适的权重初始化会使得隐藏层的输入的方差过大,从而在经过激活函数这种非线性层时离中心较远(导数接近0),因此过早地出现梯度消失.如使用均值0,标准差为1的正态分布初始化在隐藏层的方差仍会很大. 不初始化为0的原因是若初始化为0,所有的神经元节点开始做的都是同样的计算,最终同层的每个神经元得到相同的参数.
常见初始化方式:
1.正态初始化 如:w = tf.Variable(tf.random_normal(shape, stddev=0.01)),缺点是:
标准差太大,容易梯度消失和梯度爆炸,合适的标准差在深层网络中,容易出现梯度弥散。
梯度弥散:
靠近输出层的hidden layer 梯度大,参数更新快,所以很快就会收敛;而靠近输入层的hidden layer 梯度小,参数更新慢,
几乎就和初始状态一样,随机分布。这种现象就是梯度弥散(vanishing gradient problem)。而在另一种情况中,前面layer
的梯度通过训练变大,而后面layer的梯度指数级增大,这种现象又叫做梯度爆炸(exploding gradient problem)。总的来说,
就是在这个深度网络中,梯度相当不稳定(unstable)。可以通过relu等激活函数替代,可以加上maxout层。
2 Xavier 初始化: Xavier 初始化可以帮助减少梯度弥散问题, 使得信号在神经网络中可以传递得更深。是最为常用的神经网络权重初始化方法。
算法根据输入和输出神经元的数量自动决定初始化的范围: 定义参数所在的层的输入维度为n,输出维度为m,那么参数将从均匀分布中采样。【-squart(6/(m+n)),squart(6/(m+n))】
3.