【DL】链式法则|反向传播|神经网络梯度

q:为什么需要反向传播?

【DL】神经网络学习机制,prediction,loss,gradient

模型可以知道Loss是多少,都是它不知道w应该增加还是减少,增加多少或者减少多少,所以需要:

复制代码
Loss
 ↓
找到每个参数影响多少
 ↓
调整参数

这个过程叫做反向传播Backpropagation。

复制代码
         Forward

x

w1

h

w2

ŷ

Loss

复制代码
         Backward

Loss

∂L/∂ŷ

∂L/∂h

∂L/∂w1

p:核心思想,链式法则

链式法则如果你学习过导数,你应该听说过,我们想知道w2对 Loss 影响多少?,也就是∂L/∂w。

w1呢?

eg:

复制代码
体重
 ↓
BMI
 ↓
健康评分

如果想要知道体重变化对健康评分的变化,我们通过BMI进行查看,体重 → BMI → 健康评分。

链式法则:最终影响=中间影响 × 前面影响

数学:

复制代码
∂L/∂w2

=

∂L/∂ŷ

×

∂ŷ/∂w2

o.神经网络训练流程

复制代码
Forward  神经网络前向传播只是计算当前参数下的预测值。

输入
 ↓
参数
 ↓
预测
 ↓
Loss

        Backward

Loss
 ↓
梯度
 ↓
更新参数

重复很多次

do.使用python模拟反向传播

python 复制代码
#reality  
x = 2  
y = 20  
  
#参数  
w1 = 5  
w2 = 3  
  
  
# forwardh = w1 * x  
  
y_hat = w2 * h  
  
  
loss = (y_hat - y) ** 2  
  
  
# backward  
dL_dyhat = 2 * (y_hat - y)  
  
dYhat_dw2 = h  
  
dYhat_dh = w2  
  
dh_dw1 = x  
  
  
dL_dw2 = dL_dyhat * dYhat_dw2  
  
dL_dw1 = dL_dyhat * dYhat_dh * dh_dw1  
  
  
print(dL_dw1)  
print(dL_dw2)

这种简单的你可以手写,但是情况一旦复杂,不可能人工计算,所以我们以后使用pytorch

use:PyTorch 的解决方案

建立计算图(Computational Graph)

python 复制代码
y = w*x
复制代码
pytorch内部记录
        *
       / \
      w   x
w参与了乘法
x参与了乘法
python 复制代码
#计算loss
loss.backward()

'''

PyTorch 自动沿着图反向计算:
Loss

↓

乘法节点

↓

w梯度
'''

PyTorch 自动求梯度

python 复制代码
import torch


x = torch.tensor(2.0)

w = torch.tensor(3.0, requires_grad=True)


y = w*x


loss = y**2


loss.backward()


print(w.grad)

神经网络训练真实流程(神经网络训练循环)

复制代码
        数据

         |

         v

     Forward

         |

         v

      Prediction

         |

         v

        Loss

         |

         v

    backward()

         |

         v

       Gradient

         |

         v

    Update 参数

         |

         v

       新模型

实现一个小神经网络

复制代码
import torch  
  
#x → w1 → h → w2 → y  
x = torch.tensor(2.0)  
  
y = torch.tensor(20.0)  
  
  
w1 = torch.tensor(  
    5.0,  
    requires_grad=True  
)  
  
w2 = torch.tensor(  
    3.0,  
    requires_grad=True  
)  
  
  
# forward  
h = w1*x  
  
y_hat = w2*h  
  
  
loss = (y_hat-y)**2  
  
  
print(loss)  
  
  
# backward  
loss.backward()  
  
  
print(w1.grad)  
  
print(w2.grad)

讲到这里你应该有一个新的认知

复制代码
神经网络

=

大量简单计算节点组成的计算图

+

自动链式求导

+

参数更新
相关推荐
Ai-_Man1 小时前
AI办公智能体工作平台能否电脑批量导出?我们拆解了“AI导出鸭”的底层逻辑
人工智能·ai·小程序·电脑
TMT星球1 小时前
知乎2026年Q2营收6.9亿元,环比增长5.9%
人工智能
老郑聊AI业财智造1 小时前
给大模型装上“金融之眼”:Kronos-Report的量化预测架构与技术全景剖析
人工智能·python·深度学习·语言模型·金融·架构·软件工程
chunmiao30321 小时前
GPT-5.6一个月两次降价,大模型API价格战来了
人工智能·gpt
广州智造1 小时前
HyperMesh 产品功能清单|有限元前处理软件|HyperMesh 中国代理
人工智能·教程·设计·cad·建模·cae
极客猴子1 小时前
录音内容需要对外翻译:录音转写自动翻译工具横评
人工智能·自然语言处理·机器翻译
beiju1 小时前
别把品牌手册塞进 Prompt:营销 Agent 的五层上下文架构
人工智能
柳叶方舟1 小时前
Nature Aging IF=19.4 | Transformer聚类框架:纵向电子健康记录解析阿尔茨海默病与帕金森病亚型
论文阅读·人工智能·深度学习·transformer·健康医疗·聚类
架构师汤师爷1 小时前
WorkBuddy 保姆级教程开源了!600 多篇 Agent 资料一次性放出
人工智能