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

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

参考视频:【機器學習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=02xx+62if   x<0if    0x<2if    2x<4if    x4

假设要模拟上述函数,设计了如下神经网络:
在这里插入图片描述
假设该神经网络的隐层没有激活函数,那么这个神经网络的本质是什么呢?

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

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=w1x+b1z2=w2x+b2z3=w3x+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=w4z1+w5z2+w6z3+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=w4z1+w5z2+w6z3+b4=(w1w4+w2w5+w3w6)x+(b1w4+b2w5+b3w6+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.4x2.4)14

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)122

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

在这里插入图片描述

这里只用一个隐层两个神经元,因为已经足够了,如果实战时隐层设置了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.4x2.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.4x2.4)=1+e(2.4x2.4)1a2=σ(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+2a22=1+e(2.4x2.4)14+1+e(2.4x+7.4)122=h(x)+p(x)

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


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

在这里插入图片描述

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

在这里插入图片描述
如果对应到神经网络中,那就是多搞些隐层和神经元。

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

猜你喜欢

转载自blog.csdn.net/zhaohongfei_358/article/details/123056206
今日推荐