← STEP 5・モデル本体(Transformer) に戻る

残差接続(Residual)― 前期繰越+当期変動

記事で詰まったところ

「残差接続」「x = f(x) + x」「ショートカット/スキップ接続」が、なぜ入力を足し戻すのか分からない。

機械学習ではこう言う

サブ層の出力 f(x) に、入力 x をそのまま足し戻す(x ← f(x) + x)。元の情報を捨てずに「差分」だけを上乗せでき、逆伝播でも勾配が恒等経路をまっすぐ流れて消えにくくなる。

前期繰越+当期変動(残高の積み上げ)

残高の積み上げそのもの。期末残高 = 期首繰越 + 当期変動。アテンションや MLP が出すのは「当期の調整・変動 f(x)」で、+ x は「前期繰越をそっくり持ち越す」恒等の経路。

もし残差が無ければ、各層が毎回ゼロから残高を作り直すことになり、前の層が積み上げた情報(繰越残高)が消えてしまう。残差接続は「繰越をそのまま残し、変動分だけ足す」ので、層を深く重ねても元の情報が薄れない。

逆伝播の側でも効く。+ x の経路は局所勾配が1(加算の勾配は (1,1))なので、感応度が減衰せず一番奥までまっすぐ届く。差異分析でいえば「繰越経路を通して、末端の原因まで効きがしっかり伝わる」状態。

言葉の対応表

microGPT(機械学習)
会計・簿記の言葉
残差接続 x = f(x) + x
期末残高 = 期首繰越 + 当期変動
+ x(恒等ショートカット)
前期繰越をそのまま持ち越す
f(x)(サブ層の出力)
当期の増減(調整仕訳)
勾配が消えにくい
繰越経路で感応度がまっすぐ伝わる

触って確かめる

100期首繰越
-20当期変動 f(x)
80期末残高
現金
80期首繰越
+15当期変動 f(x)
95期末残高
売掛金
60期首繰越
+30当期変動 f(x)
90期末残高
在庫

残差接続は期末残高 = 期首繰越 + 当期変動。サブ層 f(x) は「当期の調整」、+x は「前期繰越をそのまま持ち越す」恒等経路です。 これがあるから層を深く重ねても元の残高が薄れず、逆伝播でも加算の勾配は (1,1) なので感応度が減衰せずまっすぐ奥へ届きます

⚠️ モデルでは足す前後に rmsnorm が挟まる。「繰越+変動」という骨格の対応に絞った例示。

実際のコード(microgpt.py L116, 134)

この簿記アナロジーが、Karpathy のオリジナル200行のどの行に当たるか。

x_residual = x                          # 期首繰越をとっておく
# ... アテンション / MLP が「当期変動 f(x)」を計算 ...
x = [a + b for a, b in zip(x, x_residual)]  # 期末 = 当期変動 + 前期繰越

x_residual に入力(繰越)を保存し、サブ層の出力に足し戻す=期末残高=前期繰越+当期変動。加算なので勾配も素通り。

出典: karpathy / microgpt.py (本体は原文ママ、コメントのみ日本語に補足)