激活函数是干嘛的(激活函数、Sigmoid激活函数、tanh激活函数、ReLU激活函数、Leaky ReLU激活函数、Parametric ReLU激活函数详细介绍及其原理详解)
相关文章
梯度下降算法 、随机梯度下降算法 、动量随机梯度下降算法 、AdaGrad算法 、RMSProp算法 、Adam算法详细介绍及其原理详解 反向传播算法和计算图详细介绍及其原理详解 激活函数 、Sigmoid激活函数 、tanh激活函数 、ReLU激活函数 、Leaky ReLU激活函数 、Parametric ReLU激活函数详细介绍及其原理详解 Xavier参数初始化方法和Kaiming参数初始化方法详细介绍及其原理详解前言
本文总结了关于激活函数 、
S
i
g
m
o
i
d
Sigmoid
Sigmoid激活函数 、t
a
n
h
tanh
tanh激活函数、R
e
L
U
ReLU
ReLU激活函数 、L
e
a
k
y
R
e
L
U
Leaky \quad ReLU
LeakyReLU激活函数 、P
a
r
a
m
e
t
r
i
c
R
e
L
U
Parametric \quad ReLU
ParametricReLU激活函数的相关内容 ,详细介绍了其原理以及优缺点 ,本文的全部内容如下所示 。一、激活函数
1.1 什么是激活函数
设想这么一种情况 ,假如我们现在由输入值
x
x
x ,经过线性变换y
1
=
w
1
x
+
b
1
y_{1}=w_{1}x+b_{1}
y1=w1x+b1 ,得到y
1
y_1
y1 ,这个过程如下图所示:很明显这个线性变换就是一条直线 ,它的图像可能类似如下图所示的增函数:
那如果我们在之前的基础上再做一次线性变换
y
2
=
w
2
y
1
+
b
2
y_{2}=w_{2}y_{1}+b_{2}
y2=w2y1+b2 ,得到y
2
y_{2}
y2 ,那么整个过程就如下图所示:因为我们做的是线性变换 ,所以说得到的函数图像仍是一条直线 ,虽然可能变成了如下图所示的减函数:
所以说 ,就算将很多的线性变换叠加为神经网络,最终也只能解决线性的问题 。对于下图来说 ,虽然每个神经元都可以进行一次计算 ,但是计算的结果都是线性变换后的结果,最终也只能解决线性拟合问题 。
但是在日常生活中 ,我们遇到的大部分情况都是非线性问题 ,那么该如何利用神经网络解决非线性问题呢?在讲解这个问题之前 ,让我们先回顾一下高中生物的一个知识点:神经元 ,这个结构如下图所示:
首先树突接受上一个神经元的信号 ,然后由轴突引起内外电荷数量的变化 ,得到一个动作电压 ,最终使整个神经元被激活 ,将得到的经过激活后的信号继续向后传导 。而深度学习也借鉴了这个过程 ,每个神经元计算后的结果需要传入非线性函数
f
f
f进行非线性计算 ,这个过程把非线性函数f
f
f当作是从输入到输出的激活过程 ,所以此非线性函数也被称为激活函数(Activation Function) ,经过激活函数计算后的值o
o
o才是此神经元最终的输出值 。1.2 使用激活函数后如何更新参数
我们之前学过,可以利用梯度下降算法来最优化参数 ,那么使用激活函数后如何应用梯度下降来更新参数呢?其实这个问题很简单 ,我们只需要多计算两步:
损失函数L
L
L对激活值o
o
o的偏导 激活函数f
f
f对预测值y
y
y的偏导整个过程如下图所示:
1.3 成为激活函数的条件
让我们再考虑一个问题,现实世界中有数以万计的函数 ,谁都可以成为激活函数么?很显然是不是的 ,某个函数要想作为激活函数来使用 ,应满足以下几点要求:
为了避免只能解决线性问题 ,所以激活函数应是非线性函数 为了使用梯度下降算法来最优化参数 ,所以激活函数应是连续可导函数 为了数值上的稳定 ,激活函数应能映射所有的实数 ,所以激活函数的定义域应为R
\mathbb{R}
R 为了只是增加非线性 ,不改变对输入的响应状态 ,所以激活函数应是单调递增的S
S
S型曲线现在 ,我们已经了解了什么是激活函数 ,那么在我们平时使用神经网络时 ,究竟都在使用哪些激活函数呢?下面将对常用的一些激活函数进行详解 。
二 、
S
i
g
m
o
i
d
Sigmoid
Sigmoid激活函数
2.1
S
i
g
m
o
i
d
Sigmoid
Sigmoid激活函数介绍
刚才我们也提到了,一个函数要想成为激活函数 ,需要满足很多条件 ,那么什么函数可以满足这些条件呢?目前我们比较常用的就是
S
i
g
m
o
i
d
Sigmoid
Sigmoid激活函数,可以有效地处理非线性问题 ,其函数解析式为:
σ
=
1
1
+
e
−
y
\sigma=\frac{1}{1+e^{-y}}
σ=1+e−y1S
i
g
m
o
i
d
Sigmoid
Sigmoid激活函数的函数图像为:由其函数图像可以看到 ,
S
i
g
m
i
o
d
Sigmiod
Sigmiod激活函数是一个典型的非线性函数 ,将输入映射至0~1之间 。而且 ,S
i
g
m
o
i
d
Sigmoid
Sigmoid激活函数还可由希腊字母σ
\sigma
σ表示 。通常 ,我们需要使用经过激活函数
f
f
f(对于S
i
g
m
o
i
d
Sigmoid
Sigmoid激活函数来说 ,此时的f
f
f就是σ
′
\sigma^{\prime}
σ′)激活后的值与真实值之间的误差形成的误差函数L
L
L来进行参数最优化 ,也就是刚才提到的内容 ,这也就需要得到S
i
g
m
o
i
d
Sigmoid
Sigmoid激活函数的导函数:
σ
′
=
(
1
1
+
e
−
y
)
′
=
−
(
1
1
+
e
−
y
)
2
(
−
e
−
y
)
=
e
−
y
(
1
+
e
−
y
)
2
=
1
1
+
e
−
y
e
−
y
1
+
e
−
y
=
σ
(
1
−
σ
)
\begin{aligned} \sigma^{\prime} & =\left(\frac{1}{1+e^{-y}}\right)^{\prime} \\ & =-\left(\frac{1}{1+e^{-y}}\right)^{2}\left(-e^{-y}\right) \\ & =\frac{e^{-y}}{\left(1+e^{-y}\right)^{2}} \\ & =\frac{1}{1+e^{-y}} \frac{e^{-y}}{1+e^{-y}} \\ & =\sigma(1-\sigma) \end{aligned}
σ′=(1+e−y1)′=−(1+e−y1)2(−e−y)=(1+e−y)2e−y=1+e−y11+e−ye−y=σ(1−σ)S
i
g
m
o
i
d
Sigmoid
Sigmoid激活函数的导函数σ
′
\sigma^{\prime}
σ′的图像如下图所示 ,类似于一个倒立的钟形图像 ,其最大值为0.25 。经过观察发现 ,当y
y
y值较大或较小时 ,σ
′
\sigma^{\prime}
σ′的值为0,这种函数我们也称其为饱和函数 。此时 ,让我们将目光再次聚焦到
S
i
g
m
o
i
d
Sigmoid
Sigmoid激活函数的函数图像上 ,我们可以注意到,S
i
g
m
o
i
d
Sigmoid
Sigmoid激活函数的函数值总是大于0的 ,所以经过激活后的值 ,也都大于0 。这种函数也被称为非零均值函数 ,如下图所示:既然
S
i
g
m
o
i
d
Sigmoid
Sigmoid激活函数的函数值永远大于0 ,那么这样的结果会如何呢?我们可以使用之前的例子进行说明 ,图示如下 ,需要注意此时的激活函数f
f
f为S
i
g
m
o
i
d
Sigmoid
Sigmoid激活函数σ
\sigma
σ:因为刚才提到 ,
S
i
g
m
o
i
d
Sigmoid
Sigmoid激活函数的函数值永远大于0 ,所以上图中黄色部分永远大于0 ,那么∂
L
∂
w
1
\frac{\partial L}{\partial w_{1}}
∂w1∂L与∂
L
∂
w
2
\frac{\partial L}{\partial w_{2}}
∂w2∂L的正负就取决于红框内∂
L
∂
o
\frac{\partial L}{\partial o}
∂o∂L的正负 ,这就意味着w
1
w_{1}
w1和w
2
w_{2}
w2的梯度符号始终一致 ,最终导致参数w
1
w_{1}
w1和w
2
w_{2}
w2被同时正向或者反向更新 ,这种情况会使神经网络更慢的收敛到预定位置 。所以说,S
i
g
m
o
i
d
Sigmoid
Sigmoid这样的非零均值激活函数会导致神经网络不易收敛。2.2 梯度消失
我们刚刚提到 ,
σ
′
\sigma^{\prime}
σ′的最大值为0.25 ,所以,在利用梯度下降算法进行参数最优化的过程 ,其中在进行反向传播计算梯度的时候 ,每层的梯度会被动缩小大约1
4
\frac{1}{4}
41 ,如下图所示:这种情况看起来很糟对不对 ,但是根据
σ
′
\sigma^{\prime}
σ′的图像可知 ,其还有另一个特点:当y
y
y的值很大或者很小时 ,σ
′
\sigma^{\prime}
σ′的值为0 。那么也就意味着 ,当进行反向转播求导时 ,可能在某一层的梯度几乎为0 ,那么会导致参数不会被更新 ,这个过程如下图所示(绿色对号代表正常计算 ,没有错误;红色叉号代表σ
′
\sigma^{\prime}
σ′几乎为零) 。这种更糟糕的现象也被称为梯度消失 ,而σ
′
\sigma^{\prime}
σ′又可以被称为饱和函数,所以饱和函数会导致梯度消失。
三 、
t
a
n
h
tanh
tanh激活函数
经过刚才的讲解可以发现 ,
S
i
g
m
o
i
d
Sigmoid
Sigmoid激活函数虽然使用较简单 ,但是存在很多严重的问题,为了解决这些问题 ,研究人员提出另一种激活函数 ,也就是我们平时经常使用的t
a
n
h
tanh
tanh激活函数 ,t
a
n
h
tanh
tanh函数又名为双曲正切函数 ,这也是我们在高等数学中常用的一个函数 。既然要使用t
a
n
h
tanh
tanh函数作为激活函数使用 ,我们就要对其基本性质进行了解 ,其函数解析式为:
tanh
=
1
−
e
−
y
1
+
e
−
y
\tanh =\frac{1-e^{-y}}{1+e^{-y}}
tanh=1%3创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!