深度神经网络中的激活函数_导数推理过程_python绘制图像示意_特点及使用场景

一、Sigmoid、Tanh、ReLU激活函数及导数推理过程

1、Sigmoid激活函数

f ( z ) = 1 1 + e − z f(z)=\frac{1}{1+e^{-z}} f(z)=1+ez1 f ′ ( z ) = 0 − 1 ∗ ( 1 + e − z ) ′ ( 1 + e − z ) 2 = − e − z ∗ − 1 ( 1 + e − z ) 2 = e − z ( 1 + e − z ) 2 = 1 + e − z − 1 ( 1 + e − z ) 2 = 1 ( 1 + e − z ) − 1 ( 1 + e − z ) 2 = f ( z ) ( 1 − f ( z ) ) f^{'}(z)=\frac{0-1*(1+e^{-z})^{'}}{(1+e^{-z})^2}\\ =\frac{-e^{-z}*-1}{(1+e^{-z})^2}\\=\frac{e^{-z}}{(1+e^{-z})^2}\\ =\frac{1+e^{-z}-1}{(1+e^{-z})^2}\\ =\frac{1}{(1+e^{-z})}-\frac{1}{(1+e^{-z})^2}\\ =f(z)(1-f(z)) f(z)=(1+ez)201(1+ez)=(1+ez)2ez1=(1+ez)2ez=(1+ez)21+ez1=(1+ez)1(1+ez)21=f(z)(1f(z))上图为sigmoid图像注意取值范围 (0,1),下图为其导数图像注意取值范围 (0,0.25]
在这里插入图片描述在这里插入图片描述

2、Tanh激活函数

f ( z ) = t a n h ( z ) = e z − e − z e z + e − z f(z)=tanh(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}} f(z)=tanh(z)=ez+ezezez 由 f ( z ) = e z − e − z e z + e − z 令 u = e z − e − z , v = e z + e − z 则 ( u v ) ′ = u ′ v − u v ′ v 2 u ′ v = ( e z + e − z ) ( e z + e − z ) = v 2 u v ′ = ( e z − e − z ) ( e z − e − z ) = u 2 则 ( u v ) ′ = v 2 − u 2 v 2 = 1 − ( e z − e − z ) 2 ( e z + e − z ) 2 = 1 − ( f ( z ) ) 2 由f(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}}\\ 令u=e^z-e^{-z},v=e^z+e^{-z}\\ 则(\frac{u}{v})^{'}=\frac{u^{'}v-uv^{'}}{v^2}\\ u^{'}v=(e^z+e^{-z})(e^z+e^{-z})=v^2\\ uv^{'}=(e^z-e^{-z})(e^z-e^{-z})=u^2\\ 则(\frac{u}{v})^{'}=\frac{v^2-u^2}{v^2}\\ =1-\frac{(e^z-e^{-z})^2}{(e^z+e^{-z})^2}\\ =1-(f(z))^2 f(z)=ez+ezezezu=ezez,v=ez+ez(vu)=v2uvuvuv=(ez+ez)(ez+ez)=v2uv=(ezez)(ezez)=u2(vu)=v2v2u2=1(ez+ez)2(ezez)2=1(f(z))2实际上Tanh相当于Sigmoid的平移: t a n h ( x ) = 2 s i g m o i d ( 2 x ) − 1 tanh(x)=2sigmoid(2x)-1 tanh(x)=2sigmoid(2x)1上图为Tanh图像注意取值范围i (-1,1),下图为其导数图像注意取值范围 (0,1]在这里插入图片描述在这里插入图片描述

3、ReLU激活函数

f ( z ) = m a x ( 0 , z ) f(z)=max(0,z) f(z)=max(0,z) f ′ ( z ) = { 1 , z > 0 0 , z ≤ 0 f^{'}(z)=\begin{cases}1,z>0\\0,z≤0\end{cases} f(z)={1,z>00,z0上图为Tanh图像,下图为其导数图像:在这里插入图片描述在这里插入图片描述

二、python绘制图像代码

import numpy as np
import matplotlib.pyplot as plt

def activate_func(x):
    #sigmoid、sigmoid_grads
    y = 1 / (1 + np.exp(-x))
    dy=y*(1-y)

    #tanh、tanh_grads
    # y = (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))
    # dy = 1-y*y

    #relu、relu_grads
    #y=np.where(x<0,0,x)
    return y

def plot_sigmoid():
    # param:起点,终点,间距
    x = np.arange(-8, 8, 0.2)
    y = activate_func(x)
    
    #relu
    # x = np.linspace(-2, 0)
    # y = np.linspace(0, 0)
    # plt.plot(x, y, color='b')
    # x = np.linspace(0, 2)
    # y = np.linspace(1, 1)
    # plt.plot(x, y, color='b', label="derivative")

    plt.plot(x, y)
    plt.show()

if __name__ == '__main__':
    plot_sigmoid()

三、特点及使用场景

0、为什么要使用激活函数?

如果不使用非线性激活函数,那么每一层输出都是上层输入的线性组合。此时无论网络有多少层,其整体也将是线性的,无法进行有效的近似。

1、Sigmoid、Tanh出现梯度消失的原因?

由上面图像可知,Sigmoid值域在(0,1),Tanh值域在(-1,1)。对于他们的导数,当自变量x趋于正无穷或负无穷,导数都会趋于0,由此出现了梯度消失的问题。

2、ReLU如何避免梯度消失?

ReLU在一定程度上能够防止梯度消失,但防止梯度消失不是用它的主要原因,主要原因是求导数简单。一定程度是指,右端的不会趋近于饱和,求导数时,导数不为零,从而梯度不消失,但左端问题依然存在,一样掉进去梯度也会消失。所以出现很多改进的ReLU(如Leaky ReLU)。

3、ReLU相较于Sigmoid的优势?

加速计算:ReLU 的求导不涉及浮点运算(exp指数运算),所以速度更快
避免梯度消失:sigmoid的导数,当自变量x趋于正无穷或负无穷,导数都会趋于0,由此出现了梯度消失的问题。ReLU 的导数始终是一个常数,负半区为 0,正半区为 1,所以不会发生梯度消失现象。
减缓过拟合:ReLU 在负半区的输出为 0。一旦神经元的激活值进入负半区,那么该激活值就不会产生梯度/不会被训练,造成了网络的稀疏性——稀疏表达,这有助于减少参数的相互依赖,缓解过拟合问题的发生。见4、ReLU与dropout的区别。

4、ReLU与dropout的区别?

从输出的结果上来看,relu激活函数的作用是决定那个神经元有效即那个神经元被激活,但并不修改其值,而dropout的作用不光是激活那个神经元,而且还保证了其期望值不会变

5、为什么 ReLU 不是全程可导也能用于基于梯度的学习?

虽然从数学的角度看 ReLU 在 0 点不可导,因为它的左导数和右导数不相等;但是在实现时通常会返回左导数或右导数的其中一个,而不是报告一个导数不存在的错误。

6、ReLU局限性、Leaky ReLU对其的改进?

导致神经元死亡:负梯度被置为0,而且之后也不会被任何数据激活,该神经元梯度永远为0
Leaky ReLU:既实现了单侧抑制、又保留了负梯度信息不会丢失。 f ( z ) = { z , z > 0 a z , z ≤ 0 f(z)=\begin{cases}z,z>0\\az,z≤0\end{cases} f(z)={z,z>0az,z0在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值