BP算法示例
郝伟 2020/08/31

1 定义神经网络

根据身高H和体重W,我们可以建立以下的神经网络:

2 建立损失函数

根据上一节的内容,我们可以知道,损失函数可以定义如下:
Loss=1ni=1n(yiy^i)2Loss = \frac{1}{n} \sum_{i=1}^n (y_i-\hat y_i)^2
所以,损失函数实际是上包括 w1,w2,w3,w4,w5,w6,b1,b2,b3w_1, w_2, w_3, w_4, w_5, w_6, b_1, b_2, b_3​ 9个变量的多元函数,即 Loss(w1,w2,w3,w4,w5,w6,b1,b2,b3)Loss(w_1, w_2, w_3, w_4, w_5, w_6, b_1, b_2, b_3​)

h1h_1h2h_2 的净输出为:
neth1=w1H+w2W+b1net_{h_1} = w_1*H + w_2 * W + b_1
neth2=w3H+w4W+b2net_{h_2} = w_3*H + w_4 * W + b_2
为了让输出避免线性相关,我们使用 Sigmod函数进行计算:S(x)=11exS(x) = \frac{1}{1-e^{-x}}
另外,由于S(x)=ex(1+ex)2=S(x)(1S(x))S^{'}(x) = \frac{e^x}{(1+e^{-x})^2}=S(x)(1-S(x))所以 outh1neth1=S(neth1)=outh1(1outh1)\frac{\partial out_{h_1}}{\partial net_{h_1}}=S^{'}(net_{h_1})=out_{h_1}*(1-out_{h_1})
求对应的实际输出,分别为:
outh1=S(h1)outh2=S(h2)out_{h_1} = S(h_1)\\ out_{h_2} = S(h_2)
从而最终的输出为:O=w5outh1+w6outh2+b3O = w_5 * out_{h_1} + w_6 * out_{h_2} + b_3
所以损失函数的表达式为:
Loss=(yiy^i)2=(yiO)2Loss = (y_i-\hat y_i)^2 = (y_i - O)^2

3 随机梯度下降(SGD)

wi+1ηOwiw_i^+ \leftarrow 1- \eta * \frac{\partial O}{\partial {w_i}}

现在让我们来求w1w_1 的变化率:
Lossw1=LossOOouth1outh1neth1neth1w1\frac{\partial Loss}{\partial {w_1}} = \frac{\partial Loss}{\partial O} * \frac{\partial O}{\partial out_{h_1}} * \frac{\partial out_{h_1}}{\partial net_{h_1}} * \frac{\partial net_{h_1}}{\partial {w_1}}

代入可得:
Lossw1=(Oyi)w5outh1(1outh1)H\frac{\partial Loss}{\partial {w_1}} = (O - y_i) * w_5*out_{h_1}(1-out_{h_1}) * H

4 计算

(略)