Re Reference AI

アーキテクチャ

残差接続とは

Residual Connection / Skip Connection / スキップ接続

層の入力を出力へ直接加算することで、非常に深いニューラルネットワークでも学習を安定させる接続構造

ニューラルネットワーク深層学習

ひとことで言うと

情報を層の奥まで確実に届けるための「近道」を作り、深いAIモデルでも学習が止まらないようにする工夫。

概要

残差接続は、ニューラルネットワークのある層の入力を、その層の変換結果(出力)にそのまま加算して次の層へ渡す接続構造で、層をまたいで情報を直接伝える「近道(ショートカット)」を提供する。 層が学習するのは入力そのものから出力を作る変換ではなく、入力と出力の差分(残差)だけでよくなるため、恒等写像に近い変換を学習することが容易になり、層を非常に深く積み重ねても学習が崩れにくくなる。 誤差逆伝播の際も、勾配が加算経路を通じて浅い層まで直接伝わるため、層が深くなるほど勾配が消失しやすいという問題を緩和できる。 ResNetで画像認識用として初めて大規模導入されて以降、Transformerの各層(Attention層・フィードフォワード層の前後)にも標準的に組み込まれ、現代の深層学習アーキテクチャに欠かせない構成要素となっている。

背景

ネットワークを深くするほど表現力は高まると期待される一方、実際にはある深さを超えると勾配消失などにより学習が困難になり、性能悪化を招く現象が観測されていた。 残差接続は、層の変換を「恒等写像+残差」という形に分解し、深いネットワークでも学習を安定して進められるようにする目的で考案された。

歴史

2015年: He らがResNet(Residual Network)を提案する論文「Deep Residual Learning for Image Recognition」を発表し、ImageNetコンペティションで従来を上回る精度を達成。 2017年: Transformerが各層に残差接続とLayer Normalizationを組み合わせた構造を採用し、以降の深層学習アーキテクチャの標準的な構成要素に。

アーキテクチャ

ある層の入力を x、その層の変換関数を F としたとき、通常は出力が F(x) となるところを、残差接続では出力を x + F(x) として計算する。 この構造により、F がゼロに近い変換を学習すれば、層全体としては入力をほぼそのまま次の層へ伝える恒等写像に近い振る舞いを示す。 逆伝播時には、加算経路を通じて勾配がそのまま浅い層まで伝わるため、多数の層を経ても勾配が極端に小さくなりにくい。

コード例

PyTorchでの残差接続

import torch.nn as nn

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

    def forward(self, x):
        return x + self.fn(x)  # 入力を出力に加算

利点

  • 非常に深いネットワークでも勾配消失の影響を受けにくく、安定して学習を進められる
  • 層が恒等写像に近い変換から少しずつ学習を始められるため、最適化が容易になる
  • 追加の学習パラメータをほとんど必要とせず、既存の層構造に組み込みやすい

欠点

  • 加算による情報の混在が起こるため、各層が担う役割の解釈がやや難しくなる
  • 層の出力スケールが加算によって変化しやすく、正規化層(Layer NormalizationBatch Normalization)との組み合わせ方に注意が必要
  • 残差接続自体はネットワークの表現力そのものを増やすわけではなく、あくまで学習の安定化に寄与する仕組み

比較

  • CNNResNetは残差接続を導入したCNNアーキテクチャで、非常に深いネットワークの学習を可能にした
  • TransformerTransformerの各層は残差接続とLayer Normalizationを組み合わせた構造を持つ
  • Layer Normalization残差接続とLayer Normalizationは、Transformerの各層でセットとして使われることが多い

関連用語

TransformerLayer NormalizationCNN深層学習勾配消失問題

よくある質問

残差接続がないと何が問題になる?

層を深く積み重ねるほど勾配が浅い層まで伝わりにくくなり(勾配消失)、学習が進まなくなったり性能がかえって悪化したりする。残差接続はこの問題を緩和する。

残差接続とSkip Connectionは同じもの?

同じ概念を指す別名。層の入力を後段の層の出力へ直接加算する構造を指し、ResNetの文脈では残差接続、U-Netなど他のアーキテクチャの文脈ではSkip Connectionと呼ばれることが多い。

参考文献

関連Zenn記事