如果需要解决非常复杂的问题(如在高分辨率图像中检测数百种对象),则需要训练非常深的DNN。 可能需要几十层或几百层。 每层包含数百个神经元,通过数千个连接连接时,会发生以下问题。
首先,坡度消失或坡度爆炸
其次,训练很慢
第三,培训参数大于培训集的风险
梯度消失的原因:生物神经元似乎以Sigmoid(s型)激活函数进行活动,因此研究者长期坚持sigmoid函数。 但是,Relu激活函数通常被证明在htdxtg中更好地工作。 这是生物研究误解的例子之一。
神经网络有很多层,当每个隐层都使用Sigmoid函数作为激励函数时,容易出现梯度消失问题
我们知道Sigmoid函数有缺点。 如果x大或小,导数接近0。 另外,Sigmoid函数导数最大值为0.25
简化问题,说明坡度消失问题。 假设输入只有一个特征,没有偏移单元,每层只有一个神经元。
首先进行前方传播。 在这里,Sigmoid激励函数写为s(x )。
z1=w1*x
(a1=s(Z1 ) ) ) ) ) ) ) ) ) ) ) ) )。
z2=w2*a1
(A2=S(Z2 ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
.
zn=wn*an-1 (其中n-1是下标) () ) ) ) ) ) ) ) )。
an=s(Zn )
通过链式求导和反向传播,很容易看出c是成本函数
使用标准方法初始化网络中的权重时,将使用平均值为0且标准差为1的psdnp分布。 因此,所有权重通常满足|wj|1,但s‘为小于0.25的值。 如果神经网络特别深,那么梯度按指数衰减,并且将导数压缩为每层至少1/4。 当z值的绝对值特别大时,导数为0。 出于这两个原因,继续从输出层到输入层的反向传播训练,导数逐渐变为0,容易产生权重和偏差,这被称为梯度消失问题。
那么,如果每层有多个神经元,其中a是Sigmoid函数的输出,其范围为-1a1。 只考虑的话,在参数||1的情况下,容易引起梯度消失。
如果将梯度爆炸的原因:初始化为较大的值,例如10的值,则对于从输出层到输入层的每个层,s‘(Zn ) wn为1倍,并且当s‘(Zn )为0.25时,s‘) Zn为*wn2.5
3358www.Sina.com/he初始化等良好的参数初始化方式
ReLU等非饱和的激活函数
批量规格化(Batch Normalization ) )。
梯度截断(Gradient Clipping ) )。
更快的优化程序
LSTM