为什么学习慢

实际生活中我们大多数不喜欢被指出错误。想象以下一位同学在开始学习弹奏钢琴不久后,在一个听众前做了处女秀。她很紧张,开始时将八度音阶的曲段演奏得很低。她很困惑,因为不能继续演奏下去了,直到有个人指出了她其中的错误。当时,她非常尴尬。不过,尽管不开心,她却能够因为明显的犯错快速地学习到正确的东西。我们相信下次她再演奏肯定会是正确的!相反,在错误的弹奏不能很好地定义的时候,学习的过程会变得更缓慢。理想地,我们希望和期待神经⽹络可以从错误中快速地学习。但是在实际应用中,人工神经元在其犯错较大的情况下其实学习很有难度,并且这种情况实际上是非常普遍的。

为了探索这个问题的源头,回忆以下神经元是通过改变权重和偏置,并以一个代价函数的偏导数(Cω\frac{\partial C}{\partial \omega}Cb\frac{\partial C}{\partial b})决定的速度学习。所以我们平常说的“学习缓慢”,实际上就是偏导数很小。假设我们的损失函数为:
C=(yα)22 C = \frac{(y-\alpha)^2}{2}
其中α\alpha为神经元的输出,α=σ(ωx+b)\alpha = \sigma(\omega x + b),训练输入为x=1y=0x=1,y=0,应用链式法则求权重和偏置的偏导数:
Cω=(αy)σ(z)x=ασ(z)Cb=(α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)
交叉熵损失函数学习
上图为sigmoidsigmoid函数的图像,当神经元的输出接近于1的时候,曲线变得相当平,所以σ\sigma^{\prime}就会很小,这就导致梯度很小,学习缓慢。

交叉熵代价函数

在研究了σ\sigma^{\prime}的特点后,我们更倾向于选择一个偏导数不包含σ\sigma的代价函数。假设有一对训练样本xx,其代价函数C=CxC=C_x满足:
Cωj=xj(αy)Cb=(αy) \frac{\partial C}{\partial \omega_j}=x_j(\alpha-y) \\ \frac{\partial C}{\partial b}=(\alpha -y)
如果选择的代价函数满足上述条件,那么就能呈现这样的特性:初始误差越大,神经元学习越快。
下面我们来进行推导:
由链式法则:
Cb=Cασ(z) \frac{\partial C}{\partial b}=\frac{\partial C}{\partial \alpha}\sigma^{\prime}(z)
又因为σ(z)=σ(z)(1σ(z))=α(1α)\sigma^{\prime}(z)=\sigma(z)(1-\sigma(z))=\alpha(1-\alpha),上式变换为:
Cb=Cαα(1α) \frac{\partial C}{\partial b}=\frac{\partial C}{\partial \alpha}\alpha(1-\alpha)
对比Cb=(αy)\frac{\partial C}{\partial b}=(\alpha -y),有:
αy=Cαα(1α) \alpha -y = \frac{\partial C}{\partial \alpha}\alpha(1-\alpha)
那么:
Cα=αyα(1α) \frac{\partial C}{\partial \alpha} = \frac{\alpha-y}{\alpha(1-\alpha)}
对上式关于α\alpha进行积分,得到:
C=[ylnα+(1y)ln(1α)]+constance C = -[yln \alpha+(1-y)ln(1-\alpha)] + constance
其中constanceconstance是常量,这是一个单独的样本对代价函数的贡献,对所有样本进行平均,得到整个代价函数:
C=1nx[ylnα+(1y)ln(1α)]+constance C=-\frac{1}{n}\sum_x[yln \alpha+(1-y)ln(1-\alpha)] + constance

相关文章: