神经网络反向求导不可导情况处理

1.激活函数不可导

深度学习算法通常需要进行反向求导,来更新模型的参数,这就要求激活函数满足处处可导的性质,例如传统的sigmoid函数等。但是,为了解决梯度消失等问题提出的relu系列函数却不满足处处可导性质。
在这里插入图片描述
神经网络反向求导不可导情况处理_第1张图片
针对这种类型的激活函数,可以使用次梯度来解决。

次梯度方法(subgradient method)是传统的梯度下降方法的拓展,用来处理不可导的凸函数。它的优势是比传统方法处理问题范围大,劣势是算法收敛速度慢。但是,由于它对不可导函数有很好的处理方法,所以学习它还是很有必要的。
神经网络反向求导不可导情况处理_第2张图片

对于relu函数,当x>0时,导数为1,当x<0时导数为0。因此relu函数在x=0的次梯度c ∈ [ 0 , 1 ] c\in[0,1]c∈[0,1],c可以取[0,1]之间的任意值

2.池化不可导

池化层:对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩,提取 主要特征。卷积网络中,池化操作使得feature map尺寸发生变化。

2.1针对平均池化:

平均池化层的前向传播就是把一个patch中的值求取平均来做池化,那么反向传播的过程也就是把某个元素的梯度等分为n份分配给前一层,这样就保证池化前后的梯度之和保持不变。平均池化层不能简单的把梯度复制n遍直接反向传播回去,这样会使得loss之和变为原来的n倍,这样网络会梯度爆炸。如下图所示:
神经网络反向求导不可导情况处理_第3张图片

2.2 max池化

最大池化也必须满足梯度之和不变的原则,最大池化的前向传播是把patch中最大的值传递给后一层,而其他像素的值直接被舍弃掉。那么反向传播也就是把梯度直接传给前一层某一个像素,而其他像素不接受梯度,也就是为0。最大池化与平均池化前向传播有一个不同点在于最大池化时需要记录下池化操作时到底哪个像素的值是最大。如下图所示:
神经网络反向求导不可导情况处理_第4张图片

你可能感兴趣的:(机器学习)