假设有两个输入值,一个隐藏节点,一个输出节点,隐藏层和输出层的激活函数都是 sigmoid 。下图描述了这个网络。假设损失函数是平方误差L=1/2(y-y^) 2
一、正向传播
假设我们试着输入一些二分类数据,目标是 y=1。我们从正向传导开始,首先计算输入到隐藏层
h=∑wixi=0.1×0.4−0.2×0.3=−0.02
隐藏层的输出 (激活函数f=sigmoid
)
a=f(h)=sigmoid(−0.02)=0.495.
把它作为输出层的输入,神经网络的输出是:
y^=f(W⋅a)=sigmoid(0.1×0.495)=0.512.
二、反向传播
有了这个输出,我们就可以开始反向传播来计算两层的权重更新了。sigmoid 函数特性 f′(x)=f(x)(1−f(x))
,输出误差是:
δo=(y−y^)f′(W⋅a)=(1−0.512)×0.512×(1−0.512)=0.122.
现在我们要通过反向传播来计算隐藏层的误差。这里我们把输出误差与隐藏层到输出层的权重 W 相乘。隐藏层的误差 δjh=∑kWjkδkof′(hj),这里因为只有一个隐藏节点,这就比较简单了
δh=Wδof′(h)=0.1×0.122×0.495×(1−0.495)=0.003
有了误差,就可以计算梯度下降步长了。隐藏层到输出层权重步长是学习率η乘以输出误差再乘以隐藏层激活值。
ΔW=ηδoa=0.5×0.122×0.495=0.0302
从输入到隐藏层的权重 wi,是学习率乘以隐藏节点误差再乘以输入值。
Δwi=ηδhxi=(0.5×0.003×0.1,0.5×0.003×0.3)=(0.00015,0.00045)