【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)

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

复制代码
神经网络

=

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

+

自动链式求导

+

参数更新
相关推荐
Dovis(誓平步青云)几秒前
切换语言后按钮被截断,本地化审计怎样发现长度风险
开发语言·前端·javascript·人工智能·机器学习·华为·harmonyos
科起点AI2 分钟前
初稿写作指南:用科起点AI从文献阅读到初稿生成
人工智能·aigc·ai写作
打工仔折腾 AI6 分钟前
后端部署避坑:吃透IPv4地址、网络接口与CIDR前缀的实际应用
arm开发·人工智能·后端·python·性能优化
非凸科技7 分钟前
非凸科技助阵第51届ICPC亚洲区域赛
人工智能·科技
a puppy slide 葱8 分钟前
ICML | 2026 | MFH‑NAS:面向多模态融合目标检测的混合神经架构搜索框架
人工智能·yolo·目标检测·计算机视觉·架构·nas·神经网络架构搜索
街头便衣11 分钟前
OpenRouter周榜复算:164万亿token,输出2.55%,DeepSeek账单占1.4%
android·java·开发语言·人工智能·语言模型·开源
shark-chili11 分钟前
从需求到架构:我如何用 AI 写好design.md
人工智能·架构
人工智能AI技术13 分钟前
Flink AM 启动链路解析
人工智能
LCD液晶屏13 分钟前
立煌科技代理京东方液晶屏的核心优势与应用价值
大数据·人工智能·科技
waterfeeling6 小时前
用 Context7 做一次点云配准的调研—测试—报告闭环:鲁棒 ICP
人工智能