在深度学习领域,激活函数的选择直接影响神经网络的训练结果和性能。整流线性单位(Rectified Linear Unit,简称ReLU)因其简单性、高效性以及对梯度消失问题的缓解本领,成为现代深度神经网络中最常用的激活函数之一。本文将从ReLU的定义、数学特性、梯度举动以及其在深度学习中的应用出发,深入探究其为何能有效克制梯度消失问题,并提供一些深刻的洞见,面向具有扎实底子的深度学习研究者。 一、ReLU激活函数的数学定义
ReLU的定义极其简单:
ReLU ( x ) = max ( 0 , x ) \text{ReLU}(x) = \max(0, x) ReLU(x)=max(0,x)
即对于输入 ( x x x),如果 ( x > 0 x > 0 x>0),输出 ( x x x);如果 ( x ≤ 0 x \leq 0 x≤0),输出0。从函数图像上看,ReLU是一条分段线性函数:在负半轴为程度线(值为0),在正半轴为45度斜线(斜率为1)。这种简单性不但降低了计算复杂度,还带来了很多意想不到的优势。 二、ReLU的数学与计算特性
导数形式
ReLU的导数同样简单:
d d x ReLU ( x ) = { 1 , if x > 0 0 , if x < 0 未定义 , if x = 0 \frac{d}{dx} \text{ReLU}(x) = \begin{cases} 1, & \text{if } x > 0 \\ 0, & \text{if } x < 0 \\ \text{未定义}, & \text{if } x = 0 \end{cases} dxdReLU(x)=⎩ ⎨ ⎧1,0,未定义,if x>0if x<0if x=0
在实践中,( x = 0 x = 0 x=0) 处的导数通常被约定为0或1(实现中常取0)。这种二值性(0或1)是ReLU的核心特性之一,直接影响其梯度传播举动。
数学推导的直观解释
在反向传播中,梯度通过链式法则计算。对于第 ( l l l) 层的梯度:
∂ L ∂ z ( l ) = ∂ L ∂ a ( l ) ⋅ ∂ a ( l ) ∂ z ( l ) \frac{\partial L}{\partial z^{(l)}} = \frac{\partial L}{\partial a^{(l)}} \cdot \frac{\partial a^{(l)}}{\partial z^{(l)}} ∂z(l)∂L=∂a(l)∂L⋅∂z(l)∂a(l)
此中 ( a ( l ) = ReLU ( z ( l ) ) a^{(l)} = \text{ReLU}(z^{(l)}) a(l)=ReLU(z(l)))。若 ( z ( l ) > 0 z^{(l)} > 0 z(l)>0),则 ( ∂ a ( l ) ∂ z ( l ) = 1 \frac{\partial a^{(l)}}{\partial z^{(l)}} = 1 ∂z(l)∂a(l)=1),梯度直接通报;若 ( z ( l ) ≤ 0 z^{(l)} \leq 0 z(l)≤0),则梯度为0。这种机制确保了梯度不会因激活函数本身而逐渐变小。
在反向传播中,计算 ( ∂ L ∂ a ( l ) \frac{\partial L}{\partial a^{(l)}} ∂a(l)∂L) 是理解梯度传播的关键一步。它表示丧失函数 ( L L L) 对第 ( l l l) 层激活值 ( a ( l ) a^{(l)} a(l)) 的偏导数,而这个值通常须要通过从后一层(第 ( l + 1 l+1 l+1) 层)通报返来的梯度计算得到。以下将具体推导 ( ∂ L ∂ a ( l ) \frac{\partial L}{\partial a^{(l)}} ∂a(l)∂L) 的计算过程,并结合ReLU激活函数的特性举行分析,面向有深度学习底子的研究者,提供清楚且深入的分析。 一、反向传播的团体框架
在神经网络中,梯度通过链式法则从输出层逐层向输入层传播。对于第 ( l l l) 层,我们的目标是计算 ( ∂ L ∂ z ( l ) \frac{\partial L}{\partial z^{(l)}} ∂z(l)∂L),以更新该层的权重和偏置。而根据链式法则:
∂ L ∂ z ( l ) = ∂ L ∂ a ( l ) ⋅ ∂ a ( l ) ∂ z ( l ) \frac{\partial L}{\partial z^{(l)}} = \frac{\partial L}{\partial a^{(l)}} \cdot \frac{\partial a^{(l)}}{\partial z^{(l)}} ∂z(l)∂L=∂a(l)∂L⋅∂z(l)∂a(l)
此中:
( z ( l ) z^{(l)} z(l)) 是第 ( l l l) 层的线性输入(即 ( z ( l ) = W ( l ) a ( l − 1 ) + b ( l ) z^{(l)} = W^{(l)} a^{(l-1)} + b^{(l)} z(l)=W(l)a(l−1)+b(l))),
( a ( l ) = ReLU ( z ( l ) ) a^{(l)} = \text{ReLU}(z^{(l)}) a(l)=ReLU(z(l))) 是第 ( l l l) 层的激活输出,
( ∂ a ( l ) ∂ z ( l ) \frac{\partial a^{(l)}}{\partial z^{(l)}} ∂z(l)∂a(l)) 是激活函数的导数(对于ReLU,已知其值为1或0)。
因此,计算 ( ∂ L ∂ z ( l ) \frac{\partial L}{\partial z^{(l)}} ∂z(l)∂L) 的关键在于先求出 ( ∂ L ∂ a ( l ) \frac{\partial L}{\partial a^{(l)}} ∂a(l)∂L)。而 ( ∂ L ∂ a ( l ) \frac{\partial L}{\partial a^{(l)}} ∂a(l)∂L) 的值依靠于第 ( l l l) 层对后续层的影响,通过反向传播从第 (l+1) 层通报而来。 二、( ∂ L ∂ a ( l ) \frac{\partial L}{\partial a^{(l)}} ∂a(l)∂L) 的推导
要计算 ( ∂ L ∂ a ( l ) \frac{\partial L}{\partial a^{(l)}} ∂a(l)∂L),我们须要考虑 ( a ( l ) a^{(l)} a(l)) 如何影响丧失 ( L L L)。在神经网络中,( a ( l ) a^{(l)} a(l)) 是第 ( l l l) 层的输出,它会作为第 ( l + 1 l+1 l+1) 层的输入,到场计算 ( z ( l + 1 ) z^{(l+1)} z(l+1))。因此,( ∂ L ∂ a ( l ) \frac{\partial L}{\partial a^{(l)}} ∂a(l)∂L) 须要通过 ( z ( l + 1 ) z^{(l+1)} z(l+1)) 和 ( a ( l + 1 ) a^{(l+1)} a(l+1)) 的关系来计算。
1. 定义第 ( l + 1 l+1 l+1) 层的计算
假设第 ( l + 1 l+1 l+1) 层的线性输入为:
z ( l + 1 ) = W ( l + 1 ) a ( l ) + b ( l + 1 ) z^{(l+1)} = W^{(l+1)} a^{(l)} + b^{(l+1)} z(l+1)=W(l+1)a(l)+b(l+1)
此中 ( W ( l + 1 ) W^{(l+1)} W(l+1)) 是权重矩阵,( b ( l + 1 ) b^{(l+1)} b(l+1)) 是偏置向量。然后,( z ( l + 1 ) z^{(l+1)} z(l+1)) 通过激活函数生成 ( a ( l + 1 ) a^{(l+1)} a(l+1)):
a ( l + 1 ) = f ( z ( l + 1 ) ) a^{(l+1)} = f(z^{(l+1)}) a(l+1)=f(z(l+1))
这里的 ( f ( ⋅ ) f(\cdot) f(⋅)) 可以是任意激活函数(好比ReLU、Sigmoid等)。
2. 应用链式法则
丧失 ( L L L) 通过 ( a ( l + 1 ) a^{(l+1)} a(l+1)) 和 ( z ( l + 1 ) z^{(l+1)} z(l+1)) 间接依靠于 ( a ( l ) a^{(l)} a(l))。因此,( ∂ L ∂ a ( l ) \frac{\partial L}{\partial a^{(l)}} ∂a(l)∂L) 须要考虑 ( a ( l ) a^{(l)} a(l)) 对所有 ( z ( l + 1 ) z^{(l+1)} z(l+1)) 的影响。假设 ( z ( l + 1 ) z^{(l+1)} z(l+1)) 是一个向量,其第 ( j j j) 个元素为 ( z j ( l + 1 ) z_j^{(l+1)} zj(l+1)),则:
z j ( l + 1 ) = ∑ i W j i ( l + 1 ) a i ( l ) + b j ( l + 1 ) z_j^{(l+1)} = \sum_i W_{ji}^{(l+1)} a_i^{(l)} + b_j^{(l+1)} zj(l+1)=i∑Wji(l+1)ai(l)+bj(l+1)
此中 ( W j i ( l + 1 ) W_{ji}^{(l+1)} Wji(l+1)) 是权重矩阵的第 ( j j j) 行第 ( i i i) 列元素,( a i ( l ) a_i^{(l)} ai(l)) 是 ( a ( l ) a^{(l)} a(l)) 的第 ( i i i) 个分量。
根据链式法则,( ∂ L ∂ a i ( l ) \frac{\partial L}{\partial a_i^{(l)}} ∂ai(l)∂L)(即 ( ∂ L ∂ a ( l ) \frac{\partial L}{\partial a^{(l)}} ∂a(l)∂L) 的第 ( i i i) 个分量)为:
∂ L ∂ a i ( l ) = ∑ j ∂ L ∂ z j ( l + 1 ) ⋅ ∂ z j ( l + 1 ) ∂ a i ( l ) \frac{\partial L}{\partial a_i^{(l)}} = \sum_j \frac{\partial L}{\partial z_j^{(l+1)}} \cdot \frac{\partial z_j^{(l+1)}}{\partial a_i^{(l)}} ∂ai(l)∂L=j∑∂zj(l+1)∂L⋅∂ai(l)∂zj(l+1)
3. 计算 ( ∂ z j ( l + 1 ) ∂ a i ( l ) \frac{\partial z_j^{(l+1)}}{\partial a_i^{(l)}} ∂ai(l)∂zj(l+1))
从 ( z j ( l + 1 ) z_j^{(l+1)} zj(l+1)) 的定义来看:
∂ z j ( l + 1 ) ∂ a i ( l ) = W j i ( l + 1 ) \frac{\partial z_j^{(l+1)}}{\partial a_i^{(l)}} = W_{ji}^{(l+1)} ∂ai(l)∂zj(l+1)=Wji(l+1)
这是因为 ( z j ( l + 1 ) z_j^{(l+1)} zj(l+1)) 对 ( a i ( l ) a_i^{(l)} ai(l)) 的偏导数仅与对应的权重 ( W j i ( l + 1 ) W_{ji}^{(l+1)} Wji(l+1)) 有关。
4. 代入链式法则
于是:
∂ L ∂ a i ( l ) = ∑ j ∂ L ∂ z j ( l + 1 ) ⋅ W j i ( l + 1 ) \frac{\partial L}{\partial a_i^{(l)}} = \sum_j \frac{\partial L}{\partial z_j^{(l+1)}} \cdot W_{ji}^{(l+1)} ∂ai(l)∂L=j∑∂zj(l+1)∂L⋅Wji(l+1)
用向量形式表示,( ∂ L ∂ a ( l ) \frac{\partial L}{\partial a^{(l)}} ∂a(l)∂L) 是向量,其计算为:
∂ L ∂ a ( l ) = ( W ( l + 1 ) ) T ⋅ ∂ L ∂ z ( l + 1 ) \frac{\partial L}{\partial a^{(l)}} = (W^{(l+1)})^T \cdot \frac{\partial L}{\partial z^{(l+1)}} ∂a(l)∂L=(W(l+1))T⋅∂z(l+1)∂L
这里的 (( W ( l + 1 ) ) T W^{(l+1)})^T W(l+1))T) 是权重矩阵的转置,( ∂ L ∂ z ( l + 1 ) \frac{\partial L}{\partial z^{(l+1)}} ∂z(l+1)∂L) 是第 ( l + 1 l+1 l+1) 层的梯度(已通过反向传播从后一层计算得到)。
5. ( ∂ L ∂ z ( l + 1 ) \frac{\partial L}{\partial z^{(l+1)}} ∂z(l+1)∂L) 的泉源
( ∂ L ∂ z ( l + 1 ) \frac{\partial L}{\partial z^{(l+1)}} ∂z(l+1)∂L) 本身是通过第 ( l + 1 l+1 l+1) 层的激活函数导数和更后层的梯度计算的:
∂ L ∂ z ( l + 1 ) = ∂ L ∂ a ( l + 1 ) ⋅ ∂ a ( l + 1 ) ∂ z ( l + 1 ) \frac{\partial L}{\partial z^{(l+1)}} = \frac{\partial L}{\partial a^{(l+1)}} \cdot \frac{\partial a^{(l+1)}}{\partial z^{(l+1)}} ∂z(l+1)∂L=∂a(l+1)∂L⋅∂z(l+1)∂a(l+1)
此中 ( ∂ a ( l + 1 ) ∂ z ( l + 1 ) \frac{\partial a^{(l+1)}}{\partial z^{(l+1)}} ∂z(l+1)∂a(l+1)) 是第 ( l + 1 l+1 l+1) 层激活函数的导数(例如,若为ReLU,则为0或1)。这一过程递归举行,直到输出层。 三、结合ReLU的具体例子
假设第 ( l l l) 层和第 ( l + 1 l+1 l+1) 层都使用ReLU激活函数。我们从第 ( l + 1 l+1 l+1) 层开始:
( ∂ L ∂ z ( l + 1 ) = ∂ L ∂ a ( l + 1 ) ⋅ ∂ a ( l + 1 ) ∂ z ( l + 1 ) \frac{\partial L}{\partial z^{(l+1)}} = \frac{\partial L}{\partial a^{(l+1)}} \cdot \frac{\partial a^{(l+1)}}{\partial z^{(l+1)}} ∂z(l+1)∂L=∂a(l+1)∂L⋅∂z(l+1)∂a(l+1))
若 ( z j ( l + 1 ) > 0 z_j^{(l+1)} > 0 zj(l+1)>0),则 ( ∂ a j ( l + 1 ) ∂ z j ( l + 1 ) = 1 \frac{\partial a_j^{(l+1)}}{\partial z_j^{(l+1)}} = 1 ∂zj(l+1)∂aj(l+1)=1);
若 ( z j ( l + 1 ) ≤ 0 z_j^{(l+1)} \leq 0 zj(l+1)≤0),则 ( ∂ a j ( l + 1 ) ∂ z j ( l + 1 ) = 0 \frac{\partial a_j^{(l+1)}}{\partial z_j^{(l+1)}} = 0 ∂zj(l+1)∂aj(l+1)=0)。
然后:
∂ L ∂ a ( l ) = ( W ( l + 1 ) ) T ⋅ ∂ L ∂ z ( l + 1 ) \frac{\partial L}{\partial a^{(l)}} = (W^{(l+1)})^T \cdot \frac{\partial L}{\partial z^{(l+1)}} ∂a(l)∂L=(W(l+1))T⋅∂z(l+1)∂L
对于第 ( l l l) 层:
∂ L ∂ z ( l ) = ∂ L ∂ a ( l ) ⋅ ∂ a ( l ) ∂ z ( l ) \frac{\partial L}{\partial z^{(l)}} = \frac{\partial L}{\partial a^{(l)}} \cdot \frac{\partial a^{(l)}}{\partial z^{(l)}} ∂z(l)∂L=∂a(l)∂L⋅∂z(l)∂a(l)
若 ( z i ( l ) > 0 z_i^{(l)} > 0 zi(l)>0),则 ( ∂ a i ( l ) ∂ z i ( l ) = 1 \frac{\partial a_i^{(l)}}{\partial z_i^{(l)}} = 1 ∂zi(l)∂ai(l)=1),梯度直接通报;
若 ( z i ( l ) ≤ 0 z_i^{(l)} \leq 0 zi(l)≤0),则 ( ∂ a i ( l ) ∂ z i ( l ) = 0 \frac{\partial a_i^{(l)}}{\partial z_i^{(l)}} = 0 ∂zi(l)∂ai(l)=0),梯度为0。
从后向前:( ∂ L ∂ a ( l ) \frac{\partial L}{\partial a^{(l)}} ∂a(l)∂L) 是第 ( l + 1 l+1 l+1) 层梯度通过权重矩阵“汇总”返来的结果。它反映了 ( a ( l ) a^{(l)} a(l)) 的变革如何影响下一层的输入 ( z ( l + 1 ) z^{(l+1)} z(l+1)),进而影响丧失 ( L L L)。
矩阵运算:在实际实现中,( ∂ L ∂ a ( l ) = ( W ( l + 1 ) ) T ⋅ ∂ L ∂ z ( l + 1 ) \frac{\partial L}{\partial a^{(l)}} = (W^{(l+1)})^T \cdot \frac{\partial L}{\partial z^{(l+1)}} ∂a(l)∂L=(W(l+1))T⋅∂z(l+1)∂L) 通常通过矩阵乘法高效计算,尤其在深度学习框架(如PyTorch或TensorFlow)中。
五、总结
( ∂ L ∂ a ( l ) \frac{\partial L}{\partial a^{(l)}} ∂a(l)∂L) 的计算依靠于第 ( l + 1 l+1 l+1) 层的梯度 ( ∂ L ∂ z ( l + 1 ) \frac{\partial L}{\partial z^{(l+1)}} ∂z(l+1)∂L) 和权重矩阵 ( W ( l + 1 ) W^{(l+1)} W(l+1)),通过链式法则从后一层递归通报而来。当结合ReLU时,( ∂ a ( l ) ∂ z ( l ) \frac{\partial a^{(l)}}{\partial z^{(l)}} ∂z(l)∂a(l)) 的二值性(0或1)确保了梯度不会因激活函数而逐渐变小,从而缓解梯度消失问题。希望这个推导能帮助你更清楚地理解反向传播的细节!
ReLU的“殒命神经元”问题与变种:Leaky ReLU 和 Parametric ReLU 的深入分析
在尺度ReLU中,激活函数定义为:
ReLU ( x ) = max ( 0 , x ) \text{ReLU}(x) = \max(0, x) ReLU(x)=max(0,x)
其导数为:
d d x ReLU ( x ) = { 1 , if x > 0 0 , if x ≤ 0 \frac{d}{dx} \text{ReLU}(x) = \begin{cases} 1, & \text{if } x > 0 \\ 0, & \text{if } x \leq 0 \end{cases} dxdReLU(x)={1,0,if x>0if x≤0
当输入 ( x ≤ 0 x \leq 0 x≤0) 时,输出为0,梯度也为0。如果某个神经元的输入 ( z = W x + b z = Wx + b z=Wx+b) 在训练过程中始终小于0(例如由于权重 ( W W W) 和偏置 ( b b b) 的初始值或更新方向导致),该神经元将不再对丧失函数产生贡献,也无法通过梯度更新调解权重。这种“不可逆关闭”的状态就是“殒命神经元”问题,尤其在深层网络中大概导致大量神经元失效,降低模型的表达本领。 二、Leaky ReLU:引入负输入的小斜率
1. 定义
Leaky ReLU(漏斗整流线性单位)是对ReLU的改进,旨在克制神经元完全“殒命”。其定义为:
Leaky ReLU ( x ) = { x , if x > 0 α x , if x ≤ 0 \text{Leaky ReLU}(x) = \begin{cases} x, & \text{if } x > 0 \\ \alpha x, & \text{if } x \leq 0 \end{cases} Leaky ReLU(x)={x,αx,if x>0if x≤0
此中 ( α \alpha α) 是一个小的正数(通常取默认值如0.01),表示负输入区域的斜率。
2. 数学特性
导数:
d d x Leaky ReLU ( x ) = { 1 , if x > 0 α , if x ≤ 0 \frac{d}{dx} \text{Leaky ReLU}(x) = \begin{cases} 1, & \text{if } x > 0 \\ \alpha, & \text{if } x \leq 0 \end{cases} dxdLeaky ReLU(x)={1,α,if x>0if x≤0
与ReLU不同,Leaky ReLU在负输入区域的梯度不再为0,而是 ( α \alpha α)。这意味着纵然输入小于0,神经元仍能通过小的梯度到场训练。
连续性:Leaky ReLU在 ( x = 0 x = 0 x=0) 处不连续,但其导数定义明确,适合深度学习框架的反向传播。