【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你一生一世22 分钟前
中国半导体破局:从底层架构到AI软硬协同的演进趋势
人工智能·大模型·算力·半导体·国产替代·ai芯片·软硬协同
冬奇Lab37 分钟前
一天一个开源项目(第220篇):WeKnora —— 腾讯开源的企业级知识框架,从 RAG 问答到 Wiki 自进化
人工智能·开源·资讯
冬奇Lab1 小时前
DeepSeek Harness 系列(09):可观测性——怎么知道 Agent 在干什么
人工智能·deepseek
香菜TTT1 小时前
大模型上下文协议(MCP):AI 应用的“USB-C”接口技术
开发语言·人工智能·经验分享
13线2 小时前
为什么要合并飞书和豆包
人工智能·飞书·火山引擎·豆包
wangqiaowq2 小时前
AI智能体学习
人工智能
科创致远2 小时前
科创致远 eSOP 电子作业指导书系统落地应用指南
大数据·人工智能·汽车·制造·精益工程
宅小年2 小时前
让 AI 用上你的资料,RAG 是怎么做到的?
人工智能
宅小年2 小时前
为什么你的 AI 越聊越“笨”,还越来越慢?
人工智能
宅小年2 小时前
AI 技能地图
人工智能