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层,我们不能假设激活形成概率分布。