为什么学习慢
实际生活中我们大多数不喜欢被指出错误。想象以下一位同学在开始学习弹奏钢琴不久后,在一个听众前做了处女秀。她很紧张,开始时将八度音阶的曲段演奏得很低。她很困惑,因为不能继续演奏下去了,直到有个人指出了她其中的错误。当时,她非常尴尬。不过,尽管不开心,她却能够因为明显的犯错快速地学习到正确的东西。我们相信下次她再演奏肯定会是正确的!相反,在错误的弹奏不能很好地定义的时候,学习的过程会变得更缓慢。理想地,我们希望和期待神经⽹络可以从错误中快速地学习。但是在实际应用中,人工神经元在其犯错较大的情况下其实学习很有难度,并且这种情况实际上是非常普遍的。
为了探索这个问题的源头,回忆以下神经元是通过改变权重和偏置,并以一个代价函数的偏导数(
∂
C
∂
ω
\frac{\partial C}{\partial \omega}
∂ω∂C和
∂
C
∂
b
\frac{\partial C}{\partial b}
∂b∂C)决定的速度学习。所以我们平常说的“学习缓慢”,实际上就是偏导数很小。假设我们的损失函数为:
C
=
(
y
−
α
)
2
2
C = \frac{(y-\alpha)^2}{2}
C=2(y−α)2
其中
α
\alpha
α为神经元的输出,
α
=
σ
(
ω
x
+
b
)
\alpha = \sigma(\omega x + b)
α=σ(ωx+b),训练输入为
x
=
1
,
y
=
0
x=1,y=0
x=1,y=0,应用链式法则求权重和偏置的偏导数:
∂
C
∂
ω
=
(
α
−
y
)
σ
′
(
z
)
x
=
α
σ
′
(
z
)
∂
C
∂
b
=
(
α
−
y
)
σ
′
(
z
)
=
α
σ
′
(
z
)
\frac{\partial C}{\partial \omega}=(\alpha -y)\sigma^{\prime}(z)x=\alpha \sigma^{\prime}(z) \\ \frac{\partial C}{\partial b}=(\alpha -y)\sigma^{\prime}(z)=\alpha \sigma^{\prime}(z)
∂ω∂C=(α−y)σ′(z)x=ασ′(z)∂b∂C=(α−y)σ′(z)=ασ′(z)
上图为
s
i
g
m
o
i
d
sigmoid
sigmoid函数的图像,当神经元的输出接近于1的时候,曲线变得相当平,所以
σ
′
\sigma^{\prime}
σ′就会很小,这就导致梯度很小,学习缓慢。
交叉熵代价函数
在研究了
σ
′
\sigma^{\prime}
σ′的特点后,我们更倾向于选择一个偏导数不包含
σ
\sigma
σ的代价函数。假设有一对训练样本
x
x
x,其代价函数
C
=
C
x
C=C_x
C=Cx满足:
∂
C
∂
ω
j
=
x
j
(
α
−
y
)
∂
C
∂
b
=
(
α
−
y
)
\frac{\partial C}{\partial \omega_j}=x_j(\alpha-y) \\ \frac{\partial C}{\partial b}=(\alpha -y)
∂ωj∂C=xj(α−y)∂b∂C=(α−y)
如果选择的代价函数满足上述条件,那么就能呈现这样的特性:初始误差越大,神经元学习越快。
下面我们来进行推导:
由链式法则:
∂
C
∂
b
=
∂
C
∂
α
σ
′
(
z
)
\frac{\partial C}{\partial b}=\frac{\partial C}{\partial \alpha}\sigma^{\prime}(z)
∂b∂C=∂α∂Cσ′(z)
又因为
σ
′
(
z
)
=
σ
(
z
)
(
1
−
σ
(
z
)
)
=
α
(
1
−
α
)
\sigma^{\prime}(z)=\sigma(z)(1-\sigma(z))=\alpha(1-\alpha)
σ′(z)=σ(z)(1−σ(z))=α(1−α),上式变换为:
∂
C
∂
b
=
∂
C
∂
α
α
(
1
−
α
)
\frac{\partial C}{\partial b}=\frac{\partial C}{\partial \alpha}\alpha(1-\alpha)
∂b∂C=∂α∂Cα(1−α)
对比
∂
C
∂
b
=
(
α
−
y
)
\frac{\partial C}{\partial b}=(\alpha -y)
∂b∂C=(α−y),有:
α
−
y
=
∂
C
∂
α
α
(
1
−
α
)
\alpha -y = \frac{\partial C}{\partial \alpha}\alpha(1-\alpha)
α−y=∂α∂Cα(1−α)
那么:
∂
C
∂
α
=
α
−
y
α
(
1
−
α
)
\frac{\partial C}{\partial \alpha} = \frac{\alpha-y}{\alpha(1-\alpha)}
∂α∂C=α(1−α)α−y
对上式关于
α
\alpha
α进行积分,得到:
C
=
−
[
y
l
n
α
+
(
1
−
y
)
l
n
(
1
−
α
)
]
+
c
o
n
s
t
a
n
c
e
C = -[yln \alpha+(1-y)ln(1-\alpha)] + constance
C=−[ylnα+(1−y)ln(1−α)]+constance
其中
c
o
n
s
t
a
n
c
e
constance
constance是常量,这是一个单独的样本对代价函数的贡献,对所有样本进行平均,得到整个代价函数:
C
=
−
1
n
∑
x
[
y
l
n
α
+
(
1
−
y
)
l
n
(
1
−
α
)
]
+
c
o
n
s
t
a
n
c
e
C=-\frac{1}{n}\sum_x[yln \alpha+(1-y)ln(1-\alpha)] + constance
C=−n1x∑[ylnα+(1−y)ln(1−α)]+constance