正向传播
- 神经网络本质上就是一个复杂且有很多参数的复合函数,数据为函数的输入,结果为函数的输出。
- 正向传播就是通过函数的输入以及神经网络,得到函数的输出。
- 通常用来验证当前的参数是否是最优解,或者已经训练好的模型用来检测。
-
例如函数: y = w ∗ x y = w*x y=w∗x
-
通过调整过的参数 w w w和数据 x x x传入进去:获取到预测值 y ′ y' y′
-
获取到损失值: l o s s = ( y − y ′ ) 2 loss = (y - y')^2 loss=(y−y′)2
import torch
def forward(x, y, w):
# 模型
y_predicted = w * x
# 计算出真实值和预测值的损失值
loss = (y- y_predicted )**2
return loss
x = torch.tensor(1.0)
y = torch.tensor(2.0)
w = torch.tensor(1.0, requires_grad=True)
forward(x, y, w)
获取到预测值和真实值的差异,这就是正向传播的全过程
前面线性回归中求MSE的过程就是正向传播
反向传播
- 反向传播的目的就是计算预测值和参数之间的梯度关系(通过偏导数计算)
- 通过求偏导和梯度下降计算出的值调整w参数求出w参数的最优解(
模型训练的过程
)
loss = forward(x, y, w)
loss.backward()
print(f'loss关于w的偏导值:{w.grad}')
# 清空梯度计算 避免下次计算进行累加
w.grad.zero_()
总结
- 总的来说,平时我们解方程
y=wx
是求x和y的值 - 现在我们知道了x值和y值,怎么去求x和y之间的关系
- 怎么去求w参数的最优解,才可以让x和y有一定的关系
- 求w参数就是机器学习的过程
正向传播➡查看MSE是否符合设定的关系➡反向传播求偏导➡梯度下降➡循环训练模型