ディープラーニングを高精度化する王道は“層を深くする”ことですが、勾配消失や情報ロスが起きやすくなるのが難点。これを劇的に改善したのが 残差構造(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)」を覚えれば、深いモデル設計がぐっと楽になります。次のモデル開発でぜひ活用してみましょう。