AI之梯度反向传播

通过一个简化的ResNet小模型(如ResNet-18的某一残差块)为例,逐步说明梯度反向传播过程、参数更新和收敛机制。假设输入为图像数据,任务为分类任务。


1. 模型结构示例

以ResNet中的一个残差块(BasicBlock)为例:

输入x → 卷积层1(Conv1, 权重W1) → ReLU → 卷积层2(Conv2, 权重W2) → 残差连接(+x) → ReLU → 输出y

数学表达式:

                        y=ReLU(F(x)+x),其中 F(x)=Conv2(ReLU(Conv1(x)))


2. 前向传播过程

假设输入为 x,标签为 label,损失函数为交叉熵损失 L:

  1. 计算主路径:(x         ->         h1        ->        a1        ->        h2        ->        yres( 也就是F(x)+x)        ->        y
    h1=Conv1(x),        a1=ReLU(h1)  
    h2=Conv2(a1),        F(x)=h2

  2. 残差连接:
    yres=F(x)+x
    y=ReLU(yres)

  3. 计算损失:
    L=CrossEntropyLoss(y,label)


3. 反向传播过程(链式法则)

反向传播从损失函数 L 开始,逐层计算梯度:

(1) 损失对输出 yy 的梯度

        ∂L/∂y=∇yL(来自损失函数的梯度)

(2) 经过ReLU的反向传播

        若输入>0则梯度为1,否则为0

(3) 残差路径的梯度

残差连接将梯度分成两部分:

        ∂L/∂F(x)  和 ∂L/∂x

(这是残差连接的核心:梯度可直接回传至输入,缓解梯度消失)

(4) 反向传播至Conv2(权重W2)

计算 ∂L/∂W2​:

                ∂L/∂h2=∂L/∂F(x)       

                ​∂L/∂W2        =∂L/∂h2 *        a1T(需转置输入特征)

                                    =∂L/∂F(x) * a1T

(5) 反向传播至Conv1(权重W1)

计算 ∂L/∂W1​:

        ∂L/∂a1=W2T⋅∂L/∂h2      

        ∂L/∂h1=∂L/∂a1⋅II(h1>0)

        ∂L/∂W1        =        ∂L/∂h1*xT

                            =        ∂L/∂a1⋅II(h1>0) * xT

                            =         W2T⋅∂L/∂h2 ⋅II(h1>0) * xT


4. 参数更新(优化器示例:SGD)

假设学习率为 ηη,优化器为SGD:

  1. 更新 W1W1​:

    W1←W1−η⋅∂L/∂W1
  2. 更新 W2W2​:

    W2←W2−η⋅∂L/∂W2

5. 收敛机制

  • 梯度方向:残差结构确保梯度能直接回传至浅层(如 ∂L/∂x​),避免梯度消失。

  • 参数更新:每次迭代中,梯度指向损失下降最快的方向,通过多次迭代逐渐接近局部最优。

  • 收敛条件:当损失 LL 的变化小于阈值,或验证集准确率不再提升时停止训练。


关键点总结

  1. 残差连接的作用

    即使深层梯度 ∂L/∂F(x) 很小,∂L/∂x仍能有效更新浅层权重。

  2. ReLU的梯度
    仅在激活值>0时回传梯度,稀疏化梯度传播。

  3. 实际训练

    • 使用批量归一化(BatchNorm)时,需额外计算其参数的梯度。

    • 优化器(如Adam)会调整学习率或引入动量加速收敛。

通过这种机制,ResNet的小模型能够高效训练并快速收敛。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值