Skip to content

残差神经网络

残差神经网络(Residual Network, ResNet)通过跳跃连接缓解深层网络训练困难。它不是直接学习目标映射 H(x),而是学习残差 F(x)=H(x)x

概念详解

普通网络层希望学习:

H(x)

残差块改写为:

H(x)=F(x)+x

因此输出为:

y=F(x,W)+x

当最优映射接近恒等映射时,只需要让 F(x)0,比直接拟合 H(x)=x 更容易。

梯度推导

设残差块输出:

y=x+F(x,W)

损失为 L,则:

Lx=Lyyx=Ly(I+Fx)

其中 I 是恒等项。即使 Fx 很小,梯度仍可通过恒等路径传播,从而缓解梯度消失。

应用代码

python
import torch
from torch import nn

class ResidualBlock(nn.Module):
    def __init__(self, dim):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(dim, dim),
            nn.ReLU(),
            nn.Linear(dim, dim)
        )
        self.act = nn.ReLU()

    def forward(self, x):
        return self.act(x + self.net(x))

block = ResidualBlock(dim=16)
x = torch.randn(8, 16)
y = block(x)
print(y.shape)

小结

残差连接让深层网络更容易优化。Transformer、U-Net、扩散模型中的很多模块也大量使用残差结构。