【深度学习八股总结】常用激活函数

1、safe softmax

softmax 函数定义如下,其经常用作分类模型的概率输出,比如用在神经网络的输出层,得到样本属于多类的概率,请回答如下问题:

softmax(x)i=ezi∑j=1Kexj,i=1,...,K \text{softmax}(\boldsymbol{x})_i = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{x_j}}, \quad i = 1, ..., K softmax(x)i=j=1Kexjezi,i=1,...,K

该函数在计算机上进行计算时可能会遇到问题,请分析原因

(a)数值溢出:由于指数函数的增长速度太快。当输入的数值较大时,指数函数会非常大,导致溢出。

(b)精度损失:由于计算机使用有限精度浮点数,在如果分母是一组具有大差异的数值,那么进行求和时会出现累加误差。

解决问题的一个有效方法是替换 $\boldsymbol{x} $ 为 x−max(x)\boldsymbol{x} - max(\boldsymbol{x})xmax(x)。请分析该替换是否能解决问题,并请证明该替换并不影响 softmax 函数的值。

分析:softmax 函数的归一化分母是∑j=1Kexj\sum_{j=1}^{K} e^{x_j}j=1Kexj,替换$\boldsymbol{x} $ 为 $\boldsymbol{x} - c $ 将所有的输入平移了一个常量,不会改变相对大小。通过减去 ccc,新的输入的数值都变得接近于零或更小,避免计算指数函数求和时发生溢出。

证明:将x\boldsymbol{x}x 替换为 x−c\boldsymbol{x} - cxc 带入 softmax 函数:

softmax(x−c)i=exi−c∑j=1Kexj−c=exp(xi)exp(maxi(xi))∑j=1nexp(xj)exp(maxi(xi))=exi∑j=1Kexj=softmax(x)i \text{softmax}(\boldsymbol{x} - c)_i = \frac{e^{x_i - c}}{\sum_{j=1}^{K} e^{x_j - c}} =\frac{\frac{exp\left(x_i\right)}{exp\left({max}_i{\left(x_i\right)}\right)}}{\sum_{j=1}^{n}\frac{exp\left(x_j\right)}{exp\left({max}_i{\left(x_i\right)}\right)}}= \frac{e^{x_i}}{\sum_{j=1}^{K} e^{x_j}} = \text{softmax}(\boldsymbol{x})_i softmax(xc)i=j=1Kexjcexic=j=1nexp(maxi(xi))exp(xj)exp(maxi(xi))exp(xi)=j=1Kexjexi=softmax(x)i

可以看出替换后的 softmax 函数与原始 softmax 函数输出完全相同。
代码实现:

X_max = X.max()
X_exp_sum_sub_max = torch.exp(X-X_max).sum()
X_safe_softmax_hand = torch.exp(X - X_max) / X_exp_sum_sub_max
print(X_safe_softmax_hand)

2、sigmoid

logistics sigmoid 函数定义如下:
σ(x)=11+e−x,x∈R \sigma(x) = \frac{1}{1 + e^{-x}}, \quad x \in \mathbb{R} σ(x)=1+ex1,xR

证明该函数拥有以下性质:

σ′(x)=σ(x)(1−σ(x)) \sigma'(x) = \sigma(x)(1 - \sigma(x)) σ(x)=σ(x)(1σ(x))

证:对 σ(x)\sigma(x)σ(x) 求导:

σ′(x)=ddz(11+e−x)=e−x(1+e−x)2=11+e−x⋅e−x1+e−x=σ(x)(1−σ(x)) \sigma'(x) = \frac{d}{dz} \left( \frac{1}{1 + e^{-x}} \right) = \frac{e^{-x}}{(1 + e^{-x})^2} = \frac{1}{1 + e^{-x}} \cdot \frac{e^{-x}}{1 + e^{-x}} = \sigma(x)(1 - \sigma(x)) σ(x)=dzd(1+ex1)=(1+ex)2ex=1+ex11+exex=σ(x)(1σ(x))

而满足:

1−σ(x)=1−11+e−x=e−x1+e−x=σ(−x) 1 - \sigma(x) = 1 - \frac{1}{1 + e^{-x}} = \frac{e^{-x}}{1 + e^{-x}} = \sigma(-x) 1σ(x)=11+ex1=1+exex=σ(x)

故得证。

sigmoid函数的缺陷

在前馈神经网络的梯度反向传播中,第 lll 层的误差项表示为下式表示:
δ(l)≜∂L(y,y^)∂z(l)=fl′(z(l))⊙((W(l+1))⊤δ(l+1))← {\delta }^{(l)} \triangleq \frac{\partial \mathcal{L}(\mathbf{y},\hat{\mathbf{y}})}{\partial {\mathbf{z}}^{(l)}} = {f}_{l}^{\prime }({\mathbf{z}}^{(l)}) \odot {\left( {\left( {\mathbf{W}}^{(l + 1)}\right) }^{\top }{\delta }^{(l + 1)}\right) }_{\leftarrow } δ(l)z(l)L(y,y^)=fl(z(l))((W(l+1))δ(l+1))
如果采用 sigmoid 函数作为激活函数,请分析梯度反向传播过程中会存在什么问题。

(a)梯度消失问题:从梯度反向传播的公式进行分析,其中W(l+1)W^{(l+1)}W(l+1)的取值是随机初始化的,所以δ(l+1)\delta^{(l+1)}δ(l+1)W(l+1)W^{(l+1)}W(l+1)的乘积不一定是一个较小的浮点数,但是激活函数的导数项fl′(z(l))f_l^\prime(z^{(l)})fl(z(l))满足:
fl′(z(l))=exp(−x)(1+exp(−x))2≤0.25 f_l^\prime\left(z^{\left(l\right)}\right)=\frac{exp\left(-x\right)}{{(1+exp\left(-x\right))}^2}\le0.25 fl(z(l))=(1+exp(x))2exp(x)0.25
可以发现,Sigmoid 函数的导数在取极大或极小值时,导数接近于零,同时最大值也不会超过 0.25。所以在链式法则的连乘过程中,激活函数的导数连乘可能导致梯度消失问题,进行梯度反向传播时只更新神经网络后几层的参数,前面几层的参数几乎不会被更新。

(b)计算效率较低:Sigmoid 函数涉及指数运算,因此在计算过程中需要较多的计算资源。

3、 ReLU 函数

ReLU(Rectified Linear Unit)激活函数定义为:

ReLU(x)=max⁡(0,x) \text{ReLU}(x) = \max(0, x) ReLU(x)=max(0,x)

如果采用 ReLU 函数作为激活函数,是否能解决sigmoid函数的问题。

ReLU 函数导数为:

ddxReLU(x)={1if x>00if x<=0 \frac{d}{dx} \text{ReLU}(x) = \begin{cases} 1 & \text{if } x > 0 \\ 0 & \text{if } x <= 0 \end{cases} dxdReLU(x)={10if x>0if x<=0

  • ReLU 是左饱和函数,正区间的导数始终为 1,不会因为数值过小而导致梯度消失。因此 ReLU 可以有效避免梯度消失问题。

  • ReLU 的梯度计算简单,只需要比较大小,没有涉及指数运算,解决了计算效率较低的问题。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值