回顾上回讲的梯度下降算法,想实现梯度下降,需要不断更新 w:
$$ \Delta w_{ij} = \eta \delta_j x_i $$
具体步骤如下:
- 初始化权重变化率为 0 :$\Delta w_i = 0$
- 对训练集中的每一个数据:
- 做正前传播计算:$\hat y=f(\sum_iw_ix_i)$
- 计算输出单元的 error term:$\delta=(y-\hat y) * f’(\sum_iw_ix_i)$
- 更新权重变化率:$\Delta w_i= \Delta w_i + \delta x_i$
- 更新权重 $w_i = w_i + \eta \Delta w_i /m$
- 重复 e 次训练 epochs
代码实现
- 初始化权重变化率为 0
1 | del_w = np.zeros(weights.shape) |
- 正向传播计算
1 | output = sigmoid(np.dot(x, weights)) |
- 计算输出单元的 error term
1 | error = y - output |
- 更新权重变化率
1 | del_w += error_term * x |
- 更新权重
1 | weights += learnrate * del_w / n_records |
- 重复 epochs
1 | for e in range(epochs): |
完整代码:
1 | import numpy as np |