首页IT科技激活函数是干嘛的(激活函数、Sigmoid激活函数、tanh激活函数、ReLU激活函数、Leaky ReLU激活函数、Parametric ReLU激活函数详细介绍及其原理详解)

激活函数是干嘛的(激活函数、Sigmoid激活函数、tanh激活函数、ReLU激活函数、Leaky ReLU激活函数、Parametric ReLU激活函数详细介绍及其原理详解)

时间2025-09-19 13:12:52分类IT科技浏览5889
导读:相关文章 梯度下降算法、随机梯度下降算法、动量随机梯度下降算法、AdaGrad算法、RMSProp算法、Adam算法详细介绍及其原理详解 反向传播算法和计算图详细介绍及其原理详解 激活函数、Sigmoid激活函数、tanh激活函数、ReLU激活函数、Lea...

相关文章

梯度下降算法                、随机梯度下降算法                        、动量随机梯度下降算法        、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
            ,这个过程如下图所示:
图1:前向传播过程

  很明显这个线性变换就是一条直线        ,它的图像可能类似如下图所示的增函数:

图2:此神经元的线性变化对应的函数图像

  那如果我们在之前的基础上再做一次线性变换

y

2

=

w

2

y

1

+

b

2

y_{2}=w_{2}y_{1}+b_{2}

y2=w2y1+b2                        ,得到

y

2

y_{2}

y2
               ,那么整个过程就如下图所示:
图3:具有两个神经元的线性前向传播过程

  因为我们做的是线性变换    ,所以说得到的函数图像仍是一条直线                        ,虽然可能变成了如下图所示的减函数:

图4:经过第二个神经元的线性变化对应的函数图像

  所以说                    ,就算将很多的线性变换叠加为神经网络,最终也只能解决线性的问题                        。对于下图来说                    ,虽然每个神经元都可以进行一次计算                        ,但是计算的结果都是线性变换后的结果    ,最终也只能解决线性拟合问题        。

图5:多个神经元的线性前向传播过程

  但是在日常生活中                ,我们遇到的大部分情况都是非线性问题                        ,那么该如何利用神经网络解决非线性问题呢?在讲解这个问题之前        ,让我们先回顾一下高中生物的一个知识点:神经元            ,这个结构如下图所示:

图6:生物体中的神经元结构

  首先树突接受上一个神经元的信号                        ,然后由轴突引起内外电荷数量的变化            ,得到一个动作电压        ,最终使整个神经元被激活                        ,将得到的经过激活后的信号继续向后传导            。而深度学习也借鉴了这个过程                ,每个神经元计算后的结果需要传入非线性函数

f

f

f进行非线性计算    ,这个过程把非线性函数

f

f

f
当作是从输入到输出的激活过程                        ,所以此非线性函数也被称为激活函数(Activation Function)                    ,经过激活函数计算后的值

o

o

o
才是此神经元最终的输出值                        。
图7:激活函数示意图

1.2 使用激活函数后如何更新参数

  我们之前学过,可以利用梯度下降算法来最优化参数                    ,那么使用激活函数后如何应用梯度下降来更新参数呢?其实这个问题很简单                        ,我们只需要多计算两步:

损失函数

L

L

L
对激活值

o

o

o
的偏导 激活函数

f

f

f
对预测值

y

y

y
的偏导

  整个过程如下图所示:

图8:具有激活函数的反向传播过程

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+ey1
  

S

i

g

m

o

i

d

Sigmoid

Sigmoid
激活函数的函数图像为:
图9: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+ey1)=(1+ey1)2(ey)=(1+ey)2ey=1+ey11+eyey=σ(1σ)
  

S

i

g

m

o

i

d

Sigmoid

Sigmoid
激活函数的导函数

σ

\sigma^{\prime}

σ
的图像如下图所示                ,类似于一个倒立的钟形图像    ,其最大值为0.25                。经过观察发现                        ,当

y

y

y
值较大或较小时                    ,

σ

\sigma^{\prime}

σ
的值为0,这种函数我们也称其为饱和函数    。
图10:Sigmoid激活函数的导函数图像

  此时                    ,让我们将目光再次聚焦到

S

i

g

m

o

i

d

Sigmoid

Sigmoid激活函数的函数图像上                        ,我们可以注意到    ,

S

i

g

m

o

i

d

Sigmoid

Sigmoid
激活函数的函数值总是大于0的                ,所以经过激活后的值                        ,也都大于0                        。这种函数也被称为非零均值函数        ,如下图所示:
图11:Sigmoid激活函数是非零均值函数

  既然

S

i

g

m

o

i

d

Sigmoid

Sigmoid激活函数的函数值永远大于0            ,那么这样的结果会如何呢?我们可以使用之前的例子进行说明                        ,图示如下            ,需要注意此时的激活函数

f

f

f

S

i

g

m

o

i

d

Sigmoid

Sigmoid
激活函数

σ

\sigma

σ
图12:使用Sigmoid激活函数后的反向传播过程

  因为刚才提到        ,

S

i

g

m

o

i

d

Sigmoid

Sigmoid激活函数的函数值永远大于0                        ,所以上图中黄色部分永远大于0                ,那么

L

w

1

\frac{\partial L}{\partial w_{1}}

w1L

L

w

2

\frac{\partial L}{\partial w_{2}}

w2L
的正负就取决于红框内

L

o

\frac{\partial L}{\partial o}

oL
的正负    ,这就意味着

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
        ,如下图所示:
图13:使用Sigmoid激活函数会使每层神经元的梯度被动缩小大约1/4

  这种情况看起来很糟对不对            ,但是根据

σ

\sigma^{\prime}

σ的图像可知                        ,其还有另一个特点:当

y

y

y
的值很大或者很小时            ,

σ

\sigma^{\prime}

σ
的值为0                    。那么也就意味着        ,当进行反向转播求导时                        ,可能在某一层的梯度几乎为0                ,那么会导致参数不会被更新    ,这个过程如下图所示(绿色对号代表正常计算                        ,没有错误;红色叉号代表

σ

\sigma^{\prime}

σ
几乎为零)                        。这种更糟糕的现象也被称为梯度消失                    ,而

σ

\sigma^{\prime}

σ
又可以被称为饱和函数,所以饱和函数会导致梯度消失    。
图14:使用类似Sigmoid激活函数的饱和函数作为激活函数会导致梯度消失问题

三                        、

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版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
python不会的题去哪搜(python中quote()函数是什么)