激活函数
激活函数(Activation Function)负责对上层神经元的输出进行处理,将结果传递到下层神经元。激活函数在神经网络里起着至关重要的作用,具体如下。
我们先看这个不使用激活函数的例子:
这是两层网络,有俩神经元。
(一个体重90多公斤,一个体重80多公斤,塔门说,你这激活函数不讲武德。)
它们的权重矩阵和偏置参数分别是
W
1
,
b
1
W_{1},b_{1}
W1,b1和
W
2
,
b
2
W_{2},b_{2}
W2,b2,设输入向量为
x
\boldsymbol{x}
x,输出为
y
^
\hat{y}
y^.
y
^
=
W
2
(
W
1
x
+
b
1
)
+
b
2
\hat{y}=W_{2}(W_{1}\boldsymbol{x}+b_{1})+b_{2}
y^=W2(W1x+b1)+b2
y
^
=
W
2
W
1
x
+
(
W
2
b
1
+
b
2
)
\hat{y}=W_{2}W_{1}\boldsymbol{x}+(W_{2}b_{1}+b_{2})
y^=W2W1x+(W2b1+b2)
形式上,我们可以归纳为:
y
^
=
W
x
+
b
\hat{y}=W\boldsymbol{x}+b
y^=Wx+b
无论这个网络层数增加多少,我都可以用一个简单的式子来概括,也就是说,就算你叠加了若干层之后,无非还是个矩阵相乘罢了,增加层数就没啥用,就跟打水一个道理,一次打1杯水,要求打满一桶,你一杯一杯装和我一次性直接装一桶其实一个结果(桶就是杯子的一个线性的数乘而已)。
这也就意味着,这个网络它是线性的,它只能拟合线性函数。
再看加了激活函数的例子:
这张图中,激活函数为
σ
\sigma
σ,它是一个非线性的函数,第一层输出的结果将会被激活函数处理,然后传递给第二层,作为输入参与运算,第二层输出又经过
σ
\sigma
σ处理,以此往复…
y ^ = σ ( W 2 ( σ ( W 1 x + b 1 ) ) + b 2 ) \hat{y}=\sigma(W_{2}(\sigma (W_{1}\boldsymbol{x}+b_{1}))+b_{2}) y^=σ(W2(σ(W1x+b1))+b2)
每次的中间结果都会经过激活函数的处理,这样一来,神经网络便引入了非线性因素,这使得神经网络拥有能拟合所有非线性函数的本领。
常见的激活函数
sigmoid函数
Tanh函数
ReLu函数
关于引用