深度学习的正、反向传播与梯度下降的实例

采用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作为学习率时,系统误差下降。