《neuralnetworks and deeplearning》学习笔记1-深入理解BP算法

http://neuralnetworksanddeeplearning.com

一,损失函数的两个假定:

1,成本函数可被写为C = 1 / N ΣxCx  ,  Cx  针对单个x 。 

原因:BP算法先根据单个x计算Ç的梯度,再合并求均值计算整体X下Ç的梯度

(BP 根据小批量计算Ç的梯度,估算整体Ç的梯度,加快学习速度)

2,我们对成本的第二个假设是它可以写成神经网络输出的函数

C = C(aL)

原因:BP算法根据人计算最后一层的误差,再反向逐步计算下一层的误差。

二,误差的定义

δ j≡∂C∂zj 

神经元的误差定义为Ç对zj的偏导数,采用启发式概念。

三,BP算法的4个公式

直观描述:

BP1:L层,C对zj的变化率= C aj 的变化率* aj zj 的变化率。

***误差越大,学习速度越快。当最后一层采用sigmod函数,aj = 1(饱和)或0(休眠)时,∂aj∂zj~0,学习很慢。

BP2:l层,C zj 的变化率= l + 1 层所有神经元:< C对z(:)的变化率·z(:) aj 的变化率> * aj zj 的变化率。

BP3:l层,C对b j的变化率= C对zj的变化率= 误差

BP4:l层,C 的变化率= C对zj的变化率* zj 的变化率。

***误差越大,学习速度越快。当 的输入端的(l-1层ak)〜0(休眠),学习很慢。

四,交叉熵损失函数代替平方差损失函数的好处

只考虑一个神经元,当x = 1,y = 0时:

C =(y-a)^ 2

∂C∂w =(a-y)σ'(z)x =aσ'(z)

∂C∂b= (a-y)σ'(z)=aσ'(z)

假如训练开始误差很大,a = 1,因sigmod函数的特点,σ'(z)〜0,梯度很小,学习很慢。

****************

C = -1 / nΣ [ylna +(1-y)ln(1-a)]

∂C∂wj= 1 /nΣxj (σ(z)-y)

∂C∂b= 1 /nΣ (σ(z)-y)

Ç的梯度中不含sigmod函数的微分项,不会〜0,学习快。

五,softmax函数

对L层:a j = e ^ z j /Σe ^ z (:)

softmax层的输出是一组正数,总计为1 。换句话说,来自softmax层的输出可以被认为是概率分布

softmax层输出概率分布的事实相当令人愉快。在许多问题中,可以将输出激活aj解释为网络对正确输出为j的概率的估计。例如,在MNIST分类问题中,我们可以将aj解释为“网络对数字正确分类为j的估计概率”。

相反,如果输出层是sigmod层,我们不能假设激活形成概率分布。

猜你喜欢

转载自blog.csdn.net/lijil168/article/details/82313085