先上结论:在使用sigmoid作为激活函数的时候,cross entropy相比于quadratic cost function,具有收敛速度快,更容易获得全局最优的特点;使用softmax作为激活函数,log-likelihood作为损失函数,不存在收敛慢的缺点。
对于损失函数的收敛特性,我们期望是当误差越大的时候,收敛(学习)速度应该越快。
一、quadratic + sigmoid
(一)、定义
平方和损失函数定义
C
=
(
y
−
a
)
2
2
C=\frac{(y-a)^2}{2}
C=2(y−a)2
其中
y
y
y是期望输出,
a
a
a是实际输出
(二)、收敛特性
不幸的是,使用平方和作为损失函数的神经单元不具备这种性质(参考文献有一个非常直观的例子),具体分析如下:
对于一个神经单元来讲,输入x和对应的输出a的关系满足
z
=
w
x
+
b
z=wx+b
z=wx+b
a
=
δ
(
z
)
a=\delta(z)
a=δ(z)
根据链式法则,可以求得对应的偏导数
∂
C
∂
w
=
(
δ
(
z
)
−
y
)
δ
′
(
z
)
x
\frac{\partial C}{\partial w}=(\delta(z)-y)\delta'(z)x
∂w∂C=(δ(z)−y)δ′(z)x
∂
C
∂
b
=
(
δ
(
z
)
−
y
)
δ
′
(
z
)
\frac{\partial C}{\partial b}=(\delta(z)-y)\delta'(z)
∂b∂C=(δ(z)−y)δ′(z)
如果激活函数使用的是sigmoid函数的话,根据激活函数的形状和特性可知,当
δ
(
z
)
\delta(z)
δ(z)趋近于0或者趋近于1的时候,
δ
′
(
z
)
\delta'(z)
δ′(z)会趋近于0,当
δ
(
z
)
\delta(z)
δ(z)趋近于0.5的时候,
δ
′
(
z
)
\delta'(z)
δ′(z)会最大。
比如说,取
y
=
0
y=0
y=0,当
δ
(
z
)
=
1
\delta(z)=1
δ(z)=1的时候,期望值和实际值的误差
δ
(
z
)
−
y
\delta(z)-y
δ(z)−y达到最大,此时,
δ
′
(
z
)
\delta'(z)
δ′(z)会趋近于0,所以就会发生收敛速度慢的问题。
二、cross entropy + sigmoid
(一)、定义
为了解决上述收敛慢的问题,引入了交叉熵损失函数
C
=
−
(
y
ln
a
+
(
1
−
y
)
ln
(
1
−
a
)
)
C=-(y\ln a+(1-y)\ln (1-a))
C=−(ylna+(1−y)ln(1−a))
(二)、两点特性
要想成为loss function,需要满足两点要求:
- 非负性
- 预测值和期望值接近时,函数值趋于0
显然,quadratic cost function满足以上两点。cross entropy同样也满足以上两点,所以其可以成为一个合格的cost function。
(三)、收敛特性
对于一个神经单元来讲,输入x和对应的输出a的关系满足
z
=
w
x
+
b
z=wx+b
z=wx+b
a
=
δ
(
z
)
a=\delta(z)
a=δ(z)
根据链式法则,可以求得对应的偏导数
∂
C
∂
w
\frac{\partial C}{\partial w}
∂w∂C
∂
C
∂
w
=
δ
(
z
)
−
y
δ
(
z
)
(
1
−
δ
(
z
)
)
δ
′
(
z
)
x
\frac{\partial C}{\partial w}=\frac{\delta(z)-y}{\delta(z)(1-\delta(z))}\delta'(z)x
∂w∂C=δ(z)(1−δ(z))δ(z)−yδ′(z)x
对于sigmoid函数来讲,满足
δ
′
(
z
)
=
δ
(
z
)
(
1
−
δ
(
z
)
)
\delta'(z)=\delta(z)(1-\delta(z))
δ′(z)=δ(z)(1−δ(z))
所以,上式可化简为
∂
C
∂
w
=
(
δ
(
z
)
−
y
)
x
\frac{\partial C}{\partial w}=(\delta(z)-y)x
∂w∂C=(δ(z)−y)x
同理可得
∂
C
∂
b
\frac{\partial C}{\partial b}
∂b∂C
∂
C
∂
b
=
δ
(
z
)
−
y
\frac{\partial C}{\partial b}=\delta(z)-y
∂b∂C=δ(z)−y
由上面的推导可以看出,sigmoid函数的导数
δ
′
(
z
)
\delta'(z)
δ′(z)被分子和分母约掉,最后的结果是正比于期望值和预测值的差,即为当期望值和预测值相差越大的时候,收敛速度会越快,很好地解决了平方和损失函数的收敛速度慢的问题。
(四)、含义
交叉熵是用来衡量两个概率分布之间的差异。交叉熵越大,两个分布之间的差异越大,越对实验结果感到意外,反之,交叉熵越小,两个分布越相似,越符合预期。下面以离散分布为例讨论。
q
(
x
)
q(x)
q(x)表示估计x的概率分布,
p
(
x
)
p(x)
p(x)表示真实x的概率分布,交叉熵定义如下:
H
(
p
(
x
)
,
q
(
x
)
)
=
H
(
p
(
x
)
)
+
D
(
p
(
x
)
∣
∣
q
(
x
)
)
H(p(x),q(x))=H(p(x))+D(p(x)||q(x))
H(p(x),q(x))=H(p(x))+D(p(x)∣∣q(x))
H
(
p
(
x
)
)
H(p(x))
H(p(x))表示p(x)的熵,定义如下:
H
(
p
(
x
)
)
=
−
∑
x
∈
X
p
(
x
)
l
o
g
p
(
x
)
H(p(x))=-\sum_{x\in X}p(x)logp(x)
H(p(x))=−x∈X∑p(x)logp(x)
D
(
p
(
x
)
∣
∣
q
(
x
)
)
D(p(x)||q(x))
D(p(x)∣∣q(x))表示
p
(
x
)
p(x)
p(x)和
q
(
x
)
q(x)
q(x)的KL距离(Kullback-Leibler divergence),也叫作相对熵,定义如下:
D
(
p
(
x
)
∣
∣
q
(
x
)
)
=
∑
x
∈
X
p
(
x
)
l
o
g
p
(
x
)
q
(
x
)
D(p(x)||q(x))=\sum_{x\in X}p(x)log\frac{p(x)}{q(x)}
D(p(x)∣∣q(x))=x∈X∑p(x)logq(x)p(x)
由此可得,交叉熵
H
(
p
,
q
)
=
−
∑
x
∈
X
p
(
x
)
l
o
g
q
(
x
)
H(p,q)=-\sum_{x\in X}p(x)logq(x)
H(p,q)=−x∈X∑p(x)logq(x)
对于神经网络的二值输出(0或者1),假设神经网络输出
a
a
a表示是输出1的概率(此时对应的
y
=
1
y=1
y=1),那么
1
−
a
1-a
1−a表示输出0的概率(此时对应的
1
−
y
=
0
1-y=0
1−y=0),所以交叉熵可以定义成如下形式:
C
=
−
(
y
ln
a
+
(
1
−
y
)
ln
(
1
−
a
)
)
C=-(y\ln a+(1-y)\ln (1-a))
C=−(ylna+(1−y)ln(1−a))
三、softmax + log-likelihood
(一)、softmax
softmax定义如下
z
j
=
∑
k
w
j
k
x
k
+
b
j
z_j=\sum_kw_{jk}x_k+b_j
zj=k∑wjkxk+bj
a
j
=
e
z
j
∑
k
e
z
k
a_j=\frac{e^{z_j}}{\sum_ke^{z_k}}
aj=∑kezkezj
(二)、log-likelihood
C
=
−
ln
a
y
C=-\ln{a_y}
C=−lnay
a
y
a_y
ay表示类别y对应的预测概率,如果预测好的话,
a
y
a_y
ay会趋近于1,
C
C
C会趋近于0,反之,
a
y
a_y
ay趋近于0,
C
C
C趋近于极大。
(三)、误差
根据链式法则
∂
C
∂
w
j
k
=
∂
C
∂
a
j
∗
∂
a
j
∂
z
j
∗
∂
z
j
∂
w
j
k
=
−
1
a
j
e
z
j
∗
∑
k
e
z
k
−
e
z
j
∗
e
z
j
(
∑
k
e
z
k
)
2
x
k
=
(
a
j
−
1
)
∗
x
k
\frac{\partial C}{\partial w_{jk}}=\frac{\partial C}{\partial a_j}*\frac{\partial a_j}{\partial z_j}*\frac{\partial z_j}{\partial w_{jk}}=-\frac{1}{a_j}\frac{e^{z_j}*\sum_ke^{z_k}-e^{z_j}*e^{z_j}}{(\sum_ke^{z_k})^2}x_k=(a_j-1)*x_k
∂wjk∂C=∂aj∂C∗∂zj∂aj∗∂wjk∂zj=−aj1(∑kezk)2ezj∗∑kezk−ezj∗ezjxk=(aj−1)∗xk
同理
∂
C
∂
b
j
=
a
j
−
1
\frac{\partial C}{\partial b_{j}}=a_j-1
∂bj∂C=aj−1
跟上面的cross entropy类似,当
a
j
a_j
aj预测不好时,误差会很大,收敛会变快。
四、conclusion
(一)、sigmoid
在激活函数使用sigmoid的前提之下,相比于quadratic cost function, cross entropy cost function具有收敛速度快和更容易获得全局最优(至于为什么更容易获得全局最优,个人感觉有点类似于动量的物理意义,增加收敛的步长,加快收敛的速度,更容易跳过局部最优)的特点。
因为我们一般使用随机值来初始化权重,这就可能导致一部分期望值和预测值相差甚远。所以选择sigmoid作为激活函数的时候,推荐使用cross entropy。如果激活函数不是sigmoid,quadratic cost function就不会存在收敛速度慢的问题。
(二)、softmax
对于分类问题,如果希望输出是类别的概率,那么激活函数选择使用softmax,同时使用log-likelihood作为损失函数。
五、reference
http://neuralnetworksanddeeplearning.com/chap3.html#the_cross-entropy_cost_function
https://en.wikipedia.org/wiki/Cross_entropy