ディープラーニングを高精度化する王道は“層を深くする”ことですが、勾配消失情報ロスが起きやすくなるのが難点。これを劇的に改善したのが 残差構造(Residual Block) です。


残差構造の仕組み

通常の層では

y = F(x)  # 変換のみ

ですが、残差構造では

y = F(x) + x  # 入力 x をそのまま加算

スキップ接続 を追加します。+x が“残差”で、これが勾配や特徴量の“直通ルート”になります。


たとえ話:プリント回しと迷路探検

  • プリント回し:小学校でプリントを前から後ろへ回す場面を想像してください。残差構造がないと、2 番目の生徒が「自分は読まないから」とプリントを止めてしまう=情報が後ろへ届かず学習も止まります。残差構造があると、自分には不要でも必ず後ろへ渡すので、後列(深い層)が情報を再利用できます。
  • 迷路探検:深いネットは複雑な迷路。スキップ接続は“元の道しるべ”で、行き止まりでも迷わず戻れる=勾配が最後まで届きやすい。

このように、不要に見える情報でも後段で必要になる場面をカバーし、情報の損失を防ぎます。


PyTorch 実装スニペット

import torch.nn as nn

class ResidualBlock(nn.Module):
    def __init__(self, ch):
        super().__init__()
        self.block = nn.Sequential(
            nn.Conv2d(ch, ch, 3, padding=1),
            nn.BatchNorm2d(ch),
            nn.ReLU(inplace=True),
            nn.Conv2d(ch, ch, 3, padding=1),
            nn.BatchNorm2d(ch)
        )
        self.act = nn.ReLU(inplace=True)

    def forward(self, x):
        return self.act(x + self.block(x))  # ← 残差接続

メリットまとめ

効果説明
勾配が届くスキップ経路で深層まで誤差が流れる
学習が安定必要なら恒等写像を学習=過学習を抑制
深層でも高精度ResNet‐50/101 などで実証

初学者へのポイント

  • 加算で“情報を足す”:コピーではなく合成なので、元情報も新特徴も残る。
  • 形を揃える:チャネル数が違う場合は 1×1 Conv で合わせる。
  • 姿勢推定などで活躍:関節検出 AI では浅層の色・輪郭情報を深層の位置推定層まで届けられる。

残差構造は ResNet を超えて Transformer や GAN など各所に波及中。「x + F(x)」を覚えれば、深いモデル設計がぐっと楽になります。次のモデル開発でぜひ活用してみましょう。

投稿者 kojiro777

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です