用反向传播算法更新权重的算法如下:
- 给每一层的权重赋值为 0
- 输入层→隐层的权重 $\Delta w_{ij}=0$
- 隐层→输出层的权重 $\Delta W_j=0$
- 对训练集里的每一个数据:
- 使用 forward pass,计算输出节点的值 $\hat y$
- 计算输出节点的误差梯度 $\delta^o=(y-\hat y)f’(z)$, 这里的 $z=\sum_jW_ja_j$
- 将误差反向传递到隐层 $\delta^h_j=\delta^oW_jf’(h_j)$
- 更新权重步长
- $\Delta W_j = \Delta W_j + \delta^oa_j$
- $\Delta w_{ij} = \Delta w_{ij} + \delta^h_ja_i$
- 更新权重(η 为学习率,m 为输入节点的个数):
- $W_j = W_j + \eta \Delta W_j /m$
- $w_{ij} = w_{ij} + \eta \Delta w_{ij} /m$
- 重复 e 次训练步骤 (epochs)
在 python 中实现如下:
1 | import numpy as np |
你可能会感兴趣: