采用3层的全连接网络,首先正向传播一次并计算误差,之后反向传播一次更新参数,最后再次正向传播并计算误差
全连接网络的具体结构如下:
输入参数(input_param):
初始化第一层权重(w1):
初始化第二层参数(w2):
给定预期的输出(output):
1. 第一次正向传播及计算误差
进行第一次正向传播得到输出(pred):
pred = input_param * w1 * w2
其中隐藏层(hidden)在第一次正向传播中各个参数为:
hidden = input_param * w1
计算第一次正向传播得出的结果和预期输出之间的误差(grad_pred):
grad_pred = pred - output
误差的范数为:4.1306
2. 第一次反向传播及更新参数
第二层权重的梯度(grad_w2):
grad_w2 = hidden' * grad_pred (注意hidden需要转置)
hidden层的梯度(grad_hidden):
grad_hidden = grad_pred * w2' (注意w2需要转置)
第一层权重的梯度(grad_w1):
grad_w1 = input_param' * grad_hidden (注意input_param需要转置)
更新神经网络的两层权重(w1和w2):
new_w1 = w1 - learning_rate * grad_w1
new_w2 = w2 - learning_rate * grad_w2
3. 第一次正向传播及计算误差
进行第二次正向传播得到输出(new_pred):
计算第二次正向传播得出的结果和预期输出之间的误差(new_grad_pred):
此实误差的范数为:2.3004
因此,通过一次反向传播更新参数之后,神经网络输出的结果和预期解之间的误差减小了(4.1306 -> 2.3004)
注:在实际仿真的时候,学习率采用0.05,0.005都会导致系统无法收敛,误差越来越大。当使用0.003作为学习率时,系统误差下降。