正向传播

  • 神经网络本质上就是一个复杂且有很多参数的复合函数,数据为函数的输入,结果为函数的输出。
  • 正向传播就是通过函数的输入以及神经网络,得到函数的输出。
  • 通常用来验证当前的参数是否是最优解,或者已经训练好的模型用来检测。
  1. 例如函数: y=w∗xy = w*xy=wx

  2. 通过调整过的参数www和数据xxx传入进去:获取到预测值 y′y'y

  3. 获取到损失值:loss=(y−y′)2loss = (y - y')^2loss=(yy)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是否符合设定的关系➡反向传播求偏导➡梯度下降➡循环训练模型
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐