一、激活函数
如果没有激活函数,仅仅是线性函数的组合解决的问题太有限了,碰到非线性问题就束手无策了
1. sigmoid
1.公式:
g
(
z
)
=
1
1
+
e
?
z
∈
(
0
,
1
)
g(z)=\frac{1}{1+e^{?z}} \in {(0,1)}
g(z)=1+e?z1?∈(0,1)
2.导函数:
g
′
(
z
)
=
e
?
z
(
1
+
e
?
z
)
2
∈
(
0
,
1
4
]
g′(z)=\frac{e^{?z}}{(1+e^{?z})^2}\in (0,\frac{1}{4}]
g′(z)=(1+e?z)2e?z?∈(0,41?](当且仅当z=0)
3.图像:
横坐标从负无穷到正无穷,纵坐标从0到1
4.应用:
- 概率分布:根概率的取值范围在
[
0
,
1
]
[0, 1]
[0,1]之间,Sigmoid函数的
(
0
,
1
)
(0, 1)
(0,1)区间的输出和概率分布的取值范围
[
0
,
1
]
[0, 1]
[0,1]契合。因此可以利用Sigmoid函数将输出转译为概率值的输出。这也是Logistic(逻辑回归)使用Sigmoid函数的原因之一;
- 信号强度(门控强度):LSTM、GRU相比于RNN最大的特点就是加入了门控制,通过门来控制是否允许记忆通过,而Sigmoid函数还能够代表门控值(Gate)的强度,当Sigmoid输出1的时候代表当前门控全部开放(允许全部记忆通过),当Sigmoid输出0的时候代表门控关闭(不允许任何记忆通过)。
5.缺点:
- (第一条我暂时不懂)Sigmoid的输出都是正值,会对梯度更新造成一定的捆绑效果。首先要纠正自己,求梯度反向传播计算,是损失函数
y
y
y分别对参数(从上一层的输出到下一层输入的权重,把 参数+激活后的输出 算作一层)
w
1
,
1
,
.
.
.
,
w
n
,
m
?
1
,
w
n
,
m
w_{1,1},...,w_{n,m-1},w_{n,m}
w1,1?,...,wn,m?1?,wn,m?链式求导然后按学习率更新(我这里很久没看基础了居然以为是对x求导,好菜好菜)。
- 计算求解的时候计算量较大,相对来说会比较耗时。这其实很好理解,因为观察Sigmoid激活函数表达式会发现其中有幂函数参与了运算。
- 对于Sigmoid激活函数最致命的缺点就是容易发生梯度弥散(Gradient vanishing)现象(当然也可能会发生梯度爆炸Exploding gradient,前面层的梯度通过模型训练变的很大,由于反向传播中链式法则的原因,导致后面层的梯度值会以指数级增大。但是在Sigmoid激活函数中梯度保障发生的概率非常小),所谓梯度弥散故名思议就是梯度值越来越小。在深度学习中,梯度更新是从后向前更新的,这也就是所谓的反向传播(Backpropagation algorithm),而反向传播的核心是链式法则。如果使用Sigmoid激活函数,训练的网络比较浅还比较好,但是一旦训练较深的神经网络,会导致每次传过来的梯度都会乘上小于1的值,多经过几层之后,梯度就会变得非常非常小(逐渐接近于0),梯度因此消失了,对应的参数得不到更新。因此使用Sigmoid激活函数,随着神经网络层数的增加,会出现靠近输出的层参数更新幅度比较大,而靠近输入的层参数更新幅度比较小。因而使用Sigmoid激活函数容易出现梯度弥散的现象,无法完成深层网路的训练;即梯度消失
参考文献: [1]反向传播计算 [2]深度学习中常用激活函数
二、softmax
参考文献:某乎讲解Softmax高赞
|