图解通俗理解-神经网络为什么要引入激活函数

之前一直不理解为什么要在神经网络中引入非线性的激活函数(虽然理解为什么只有线性不行,但不理解为什么有了非线性就行了,不知道有没有和我一样的小伙伴),最近重温“李宏毅”深度学习时,恍然大悟。

参考视频:【機器學習2021】預測本頻道觀看人數 (下) - 深度學習基本概念簡介:大约看前10分钟就可以明白

如果不方便看坐飞机的同学,可以看我下面的整理


为什么神经网络只有线性不行

众数周知:机器学习的过程为:先假设出一个函数 f f f,然后通过训练样本学习出函数 f f f 的参数。

假设我们现在要使用神经网络模拟如图所示的一个函数:

图解通俗理解-神经网络为什么要引入激活函数
这个是一个分段函数:

y = { 0 if    x < 0 2 x if     0 ≤ x < 2 − x + 6 if     2 ≤ x < 4 2 if     x ≥ 4 y = \begin{cases} 0 &\text{if ~~} x <0 \\ 2x &\text{if ~~ } 0\le x <2 \\ -x + 6 &\text{if ~~ } 2\le x <4 \\ 2 &\text{if ~~ } x \ge4 \\ \end{cases} y=⎩⎪⎪⎪⎨⎪⎪⎪⎧​02x−x+62​if   x<0if    0≤x<2if    2≤x<4if    x≥4​

假设要模拟上述函数,设计了如下神经网络:
图解通俗理解-神经网络为什么要引入激活函数
假设该神经网络的隐层没有激活函数,那么这个神经网络的本质是什么呢?

首先,从输入层到隐层,实际是三条直线,假设为:

z 1 = w 1 x + b 1 z 2 = w 2 x + b 2 z 3 = w 3 x + b 3 z_1 = w_1x+b_1 \\ z_2 = w_2x + b_2 \\ z_3 = w_3x + b_3 z1​=w1​x+b1​z2​=w2​x+b2​z3​=w3​x+b3​

而隐层到输出层呢?其实就是把上面的三条线加起来,即:

y = w 4 z 1 + w 5 z 2 + w 6 z 3 + b 4 y = w_4z_1+w_5z_2+w_6z_3 + b_4 y=w4​z1​+w5​z2​+w6​z3​+b4​

那我们现在尝试绘制3条直线,看看加起来能不能模拟上述的分段函数:

图解通俗理解-神经网络为什么要引入激活函数
这里我随便绘制了3条线,如果将这3条线加起来是什么样子呢?其实还是一条直线。这个从公式很容易看出:

y = w 4 z 1 + w 5 z 2 + w 6 z 3 + b 4 = ( w 1 w 4 + w 2 w 5 + w 3 w 6 ) x + ( b 1 w 4 + b 2 w 5 + b 3 w 6 + b 4 ) = a x + b \begin{aligned} y & = w_4z_1+w_5z_2+w_6z_3 + b_4 \\ &= (w_1w_4+w_2w_5+w_3w_6)x+ (b_1w_4+b_2w_5+b_3w_6+b_4)\\ & = ax+b \end{aligned} y​=w4​z1​+w5​z2​+w6​z3​+b4​=(w1​w4​+w2​w5​+w3​w6​)x+(b1​w4​+b2​w5​+b3​w6​+b4​)=ax+b​

所以,如果神经网络只有线性,那么不论有多少隐层,有多少神经元,最终还是线性的

为了要让神经网络能模拟复杂的函数(非线性的),所以要让神经元引入非线性的激活函数。

为什么有了非线性就行了

为了回答这个问题,可以继续讨论上面的例子,假设要拟合上面的分段函数,可以使用如下函数对其进行相加:

图解通俗理解-神经网络为什么要引入激活函数
如果神经网络能模拟出黄色线和橙色线,那么让其相加,就可以得出 f f f 函数。你看这两个线的长相有没有很熟悉。没错,就是sigmoid

任何复杂的函数都可以由一个常量加一堆sigmoid函数模拟出来

下面,使用sigmoid来模拟一下该函数,即如图所示:

图解通俗理解-神经网络为什么要引入激活函数
我们通过绿色的函数 h ( x ) h(x) h(x) 和 红色的函数 p ( x ) p(x) p(x) 就能大致模拟出函数 f f f,其中:

h ( x ) = 1 1 + e − ( 2.4 x − 2.4 ) 4 h(x) = \frac{1}{1+e^{-(2.4x-2.4)}}4 h(x)=1+e−(2.4x−2.4)1​4

p ( x ) = 1 1 + e − ( − 2.4 x + 7.4 ) 2 − 2 p(x) = \frac{1}{1+e^{-(-2.4x+7.4)}}2-2 p(x)=1+e−(−2.4x+7.4)1​2−2

那如果对应到神经网络中呢,每个线的权重如图所示:

图解通俗理解-神经网络为什么要引入激活函数

这里只用一个隐层两个神经元,因为已经足够了,如果实战时隐层设置了3个神经元,也没关系,因为神经网络会将其中一个神经元的参数都学习成0,这样相当于第三个神经元有和没有一样

这次在隐藏层增加了非线性函数sigmoid,则整个神经网络的运算过程为:

z 1 = 2.4 x − 2.4 z 2 = − 2.4 x + 7.4 \begin{aligned} & z_1 = 2.4 x - 2.4 \\ & z_2 = -2.4x+7.4 \end{aligned} ​z1​=2.4x−2.4z2​=−2.4x+7.4​

经过激活函数后为:

a 1 = σ ( z 1 ) = σ ( 2.4 x − 2.4 ) = 1 1 + e − ( 2.4 x − 2.4 ) a 2 = σ ( z 2 ) = σ ( − 2.4 x + 7.4 ) = 1 1 + e − ( − 2.4 x + 7.4 ) \begin{aligned} & a_1 = \sigma(z_1) = \sigma(2.4 x - 2.4) = \frac{1}{1+e^{-(2.4x-2.4)}} \\ & a_2 = \sigma(z_2) = \sigma(-2.4x+7.4) = \frac{1}{1+e^{-(-2.4x+7.4)}} \end{aligned} ​a1​=σ(z1​)=σ(2.4x−2.4)=1+e−(2.4x−2.4)1​a2​=σ(z2​)=σ(−2.4x+7.4)=1+e−(−2.4x+7.4)1​​

然后是到最后一层输出层:

y = 4 a 1 + 2 a 2 − 2 = 1 1 + e − ( 2.4 x − 2.4 ) 4 + 1 1 + e − ( − 2.4 x + 7.4 ) 2 − 2 = h ( x ) + p ( x ) y = 4a_1 + 2a_2 - 2 = \frac{1}{1+e^{-(2.4x-2.4)}}4+\frac{1}{1+e^{-(-2.4x+7.4)}}2-2 = h(x) + p(x) y=4a1​+2a2​−2=1+e−(2.4x−2.4)1​4+1+e−(−2.4x+7.4)1​2−2=h(x)+p(x)

这不就是最终的结论嘛,通过神经网络,模拟出了两条非线性的sigmoid函数,然后将其合并(相加),最终模拟出函数 f f f。


如果是更复杂的函数呢?,比如下面这个:

图解通俗理解-神经网络为什么要引入激活函数

那也没关系,只要在图上标记些点,然后按照这些点进行模拟:

图解通俗理解-神经网络为什么要引入激活函数
如果对应到神经网络中,那就是多搞些隐层和神经元。

如果是Tanh呢?也无非是对Tanh进行各种变换,最后相加起来能得出要模拟的函数即可

上一篇:导数的几何意义


下一篇:力扣/两数之和