{"notes":[{"id":"classic-cnns/resnet-v2","category":"classic-cnns","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"ResNet v2","subtitle":"ショートカットはきれいに","author":"Z. Yuan","paperDate":"2016-03-16","publishedOn":"2026-02-14","world":"external/resnet-v2","paperTitle":"Identity Mappings in Deep Residual Networks","paperUrl":"https://arxiv.org/abs/1603.05027","bibliography":{"title":"Identity Mappings in Deep Residual Networks","authors":["Kaiming He","Xiangyu Zhang","Shaoqing Ren","Jian Sun"],"url":"https://arxiv.org/abs/1603.05027","pdfUrl":"https://arxiv.org/pdf/1603.05027v3","codeUrl":null,"preprint":{"id":"1603.05027","submittedOn":"2016-03-16","url":"https://arxiv.org/abs/1603.05027"},"publication":null,"citation":"@misc{classiccnnsresnetv22016,\n  title = {{Identity Mappings in Deep Residual Networks}},\n  author = {Kaiming He and Xiangyu Zhang and Shaoqing Ren and Jian Sun},\n  year = {2016},\n  eprint = {1603.05027},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1603.05027}\n}\n","citationPath":"/content/papers/citations/classic-cnns/resnet-v2.3d311a21e308.bib"},"thumbnail":{"src":"/content/papers/assets/7eda4acdde3019e92c5b44f59917b1e493a5b11b5b8a63280d03b15787934ef5.png","width":967,"height":469},"locale":"ja","path":"/content/papers/ja/classic-cnns/resnet-v2.2eccc1d938b8.md","headings":[{"id":"問題の定義","text":"問題の定義","depth":2},{"id":"問題の解決","text":"問題の解決","depth":2},{"id":"二つの恒等写像","text":"二つの恒等写像","depth":3},{"id":"ショートカットに何かを足すとどうなるか","text":"ショートカットに何かを足すとどうなるか？","depth":3},{"id":"加算の後のreluはどこに置くべきか","text":"加算の後のReLUはどこに置くべきか？","depth":3},{"id":"見方を変えるpre-activation","text":"見方を変える：pre-activation","depth":3},{"id":"考察","text":"考察","depth":2},{"id":"深いほど差は大きくなる","text":"深いほど差は大きくなる","depth":3},{"id":"ほかの手法と比べる","text":"ほかの手法と比べる","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/resnet","relation":"referenced","topic":""},{"id":"classic-cnns/highway-networks","relation":"referenced","topic":""},{"id":"classic-cnns/inception-v4","relation":"referenced","topic":""}]},{"id":"classic-cnns/resnet","category":"classic-cnns","legacyPath":"classic-cnns/1512-resnet","legacySlug":"1512-resnet","legacyPaths":[],"title":"ResNet","subtitle":"畳み込みネットワーク 100 層","author":"Z. Yuan","paperDate":"2015-12-10","publishedOn":"2024-08-08","paperTitle":"Deep Residual Learning for Image Recognition","paperUrl":"https://arxiv.org/abs/1512.03385","bibliography":{"title":"Deep Residual Learning for Image Recognition","authors":["Kaiming He","Xiangyu Zhang","Shaoqing Ren","Jian Sun"],"url":"https://arxiv.org/abs/1512.03385","pdfUrl":"https://arxiv.org/pdf/1512.03385","codeUrl":null,"preprint":{"id":"1512.03385","submittedOn":"2015-12-10","url":"https://arxiv.org/abs/1512.03385"},"publication":{"venue":"CVPR","year":2016,"kind":"conference","url":"https://doi.org/10.1109/cvpr.2016.90"},"citation":"@misc{classiccnnsresnet2015,\n  title = {{Deep Residual Learning for Image Recognition}},\n  author = {Kaiming He and Xiangyu Zhang and Shaoqing Ren and Jian Sun},\n  year = {2015},\n  eprint = {1512.03385},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1512.03385}\n}\n","citationPath":"/content/papers/citations/classic-cnns/resnet.cf4014e8baae.bib"},"thumbnail":{"src":"/content/papers/assets/b8fe87fe757249ea6d7bb667fef3196754b9f80e28bf842a69b540ca94585d08.jpg","width":1224,"height":408},"locale":"ja","path":"/content/papers/ja/classic-cnns/resnet.c2822db52f83.md","headings":[{"id":"問題の定義","text":"問題の定義","depth":2},{"id":"問題解決","text":"問題解決","depth":2},{"id":"残差とは","text":"残差とは？","depth":3},{"id":"残差学習","text":"残差学習","depth":3},{"id":"残差モジュール","text":"残差モジュール","depth":3},{"id":"ネットワークアーキテクチャ","text":"ネットワークアーキテクチャ","depth":3},{"id":"構成と計算量","text":"構成と計算量","depth":3},{"id":"討論","text":"討論","depth":2},{"id":"resnet-18-vs-resnet-34","text":"ResNet-18 vs ResNet-34","depth":3},{"id":"より深いボトルネックアーキテクチャ","text":"より深いボトルネックアーキテクチャ","depth":3},{"id":"imagenet-でのパフォーマンス","text":"ImageNet でのパフォーマンス","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/vgg","relation":"background","topic":"深い畳み込みネットワークの学習"},{"id":"classic-cnns/densenet","relation":"next","topic":"深い畳み込みネットワークの学習"}]},{"id":"classic-cnns/highway-networks","category":"classic-cnns","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"Highway Networks","subtitle":"残差前夜","author":"Z. Yuan","paperDate":"2015-05-03","publishedOn":"2025-11-03","world":"external/highway-networks","paperTitle":"Highway Networks","paperUrl":"https://arxiv.org/abs/1505.00387","bibliography":{"title":"Highway Networks","authors":["Rupesh Kumar Srivastava","Klaus Greff","Jürgen Schmidhuber"],"url":"https://arxiv.org/abs/1505.00387","pdfUrl":"https://arxiv.org/pdf/1505.00387v2","codeUrl":null,"preprint":{"id":"1505.00387","submittedOn":"2015-05-03","url":"https://arxiv.org/abs/1505.00387"},"publication":null,"citation":"@misc{classiccnnshighwaynetworks2015,\n  title = {{Highway Networks}},\n  author = {Rupesh Kumar Srivastava and Klaus Greff and Jürgen Schmidhuber},\n  year = {2015},\n  eprint = {1505.00387},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1505.00387}\n}\n","citationPath":"/content/papers/citations/classic-cnns/highway-networks.f7d3ef9547ef.bib"},"thumbnail":{"src":"/content/papers/assets/2cef37bd2a2388f57a76965431810cb86f976db701ba1647b75c81c9a59ac779.png","width":1344,"height":360},"locale":"ja","path":"/content/papers/ja/classic-cnns/highway-networks.d93a72dffcb2.md","headings":[{"id":"問題の定義","text":"問題の定義","depth":2},{"id":"問題の解決","text":"問題の解決","depth":2},{"id":"ゲートを2つ加える","text":"ゲートを2つ加える","depth":3},{"id":"最初は素通りに寄せておく","text":"最初は「素通り」に寄せておく","depth":3},{"id":"考察","text":"考察","depth":2},{"id":"深いほど学習しやすいのか","text":"深いほど学習しやすいのか？","depth":3},{"id":"学習しやすいとして正解率は","text":"学習しやすいとして、正解率は？","depth":3},{"id":"ゲートは何を学んだのか","text":"ゲートは何を学んだのか？","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/resnet","relation":"referenced","topic":""}]},{"id":"classic-cnns/inception-v4","category":"classic-cnns","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"Inception-v4","subtitle":"ずっと速く、少し正確に","author":"Z. Yuan","paperDate":"2016-02-23","publishedOn":"2026-01-27","world":"external/inception-v4","paperTitle":"Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning","paperUrl":"https://arxiv.org/abs/1602.07261","bibliography":{"title":"Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning","authors":["Christian Szegedy","Sergey Ioffe","Vincent Vanhoucke","Alex Alemi"],"url":"https://arxiv.org/abs/1602.07261","pdfUrl":"https://arxiv.org/pdf/1602.07261v2","codeUrl":null,"preprint":{"id":"1602.07261","submittedOn":"2016-02-23","url":"https://arxiv.org/abs/1602.07261"},"publication":null,"citation":"@misc{classiccnnsinceptionv42016,\n  title = {{Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning}},\n  author = {Christian Szegedy and Sergey Ioffe and Vincent Vanhoucke and Alex Alemi},\n  year = {2016},\n  eprint = {1602.07261},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1602.07261}\n}\n","citationPath":"/content/papers/citations/classic-cnns/inception-v4.ed8e0294ae0b.bib"},"thumbnail":{"src":"/content/papers/assets/cc8335c4ba4672514d3dd5e9953719d52b4f8fdd0af994c76722874543fcb864.png","width":666,"height":656},"locale":"ja","path":"/content/papers/ja/classic-cnns/inception-v4.8e5591b07579.md","headings":[{"id":"問題の定義","text":"問題の定義","depth":2},{"id":"問題の解決","text":"問題の解決","depth":2},{"id":"しがらみを下ろすinception-v4","text":"しがらみを下ろす：Inception-v4","depth":3},{"id":"入口の部分","text":"入口の部分","depth":3},{"id":"inceptionに残差を組み込む","text":"Inceptionに残差を組み込む","depth":3},{"id":"残差を縮めて学習を安定させる","text":"残差を縮めて、学習を安定させる","depth":3},{"id":"学習設定","text":"学習設定","depth":3},{"id":"考察","text":"考察","depth":2},{"id":"残差で学習がずっと速くなる","text":"残差で学習がずっと速くなる","depth":3},{"id":"単一モデルの成績","text":"単一モデルの成績","depth":3},{"id":"アンサンブル","text":"アンサンブル","depth":3},{"id":"残差接続は必須なのか","text":"残差接続は「必須」なのか？","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/resnet","relation":"referenced","topic":""},{"id":"classic-cnns/inception-v3","relation":"referenced","topic":""},{"id":"classic-cnns/resnet-v2","relation":"referenced","topic":""}]}],"text":"ResNetは152層のネットワークを学習可能にし、ILSVRC 2015を制しました。ところがCIFAR-10では、元の論文の1202層ResNetの誤り率は7.93%で、110層の6.61%よりかえって悪くなっています。\n\n残差接続でネットワークは深くできますが、1000層まで深くすると、また新しい問題が出てきたのです。\n\n2016年3月、同じ顔ぶれのKaiming He、Xiangyu Zhang、Shaoqing Ren、Jian Sunがこの論文を公開し、のちにECCV 2016で発表しました。今回は残差ユニットの伝播の式を改めて書き下し、信号がどう流れれば最もスムーズかを式から見つけ出して、それに従って残差ユニットを作り直しています。作り直した結果、1001層のResNetはCIFAR-10で誤り率4.62%を達成しました。\n\nこの新しい版は、のちにResNet v2、またはpre-activation ResNetとよく呼ばれるようになりました。\n\n\n> [!TIP]\n> \n> ResNetの元の設計は、先に私たちのノートで読めます。\n> \n> - **[[15.12] ResNet：畳み込みネットワーク 100 層](/blog/papers/classic-cnns/resnet)**\n\n\n## 問題の定義\n\nまず、元の残差ユニットを一般的な形で書きます。$l$番目のユニットの入力を$x_l$とします。\n\n$$\ny_l = h(x_l) + \\mathcal{F}(x_l, \\mathcal{W}_l), \\qquad x_{l+1} = f(y_l)\n$$\n\n$\\mathcal{F}$は残差関数で、たとえば$3\\times3$畳み込み2層です。$h$はショートカット上の演算、$f$は加算の後の演算です。元のResNetでは、$h(x_l) = x_l$は恒等写像で、$f$はReLUです。\n\n[![左は二つの残差ユニットの模式図。(a)original：x_lがまっすぐ下へ進み、右側の分岐は順にweight、BN、ReLU、weight、BNで、ショートカットと加算した後にReLUを通ってx_l+1になる。(b)proposed：右側の分岐は順にBN、ReLU、weight、BN、ReLU、weightで、加算した結果がそのままx_l+1になる。どちらもショートカットは灰色の太い矢印で描かれている。右はCIFAR-10での1001層ResNetの学習曲線：黄色がoriginal（誤り率7.61%）、青がproposed（誤り率4.92%）。破線が学習損失、実線がテスト誤り率で、青線の学習損失は最初からずっと速く下がる](/content/papers/assets/7eda4acdde3019e92c5b44f59917b1e493a5b11b5b8a63280d03b15787934ef5.png)](/content/papers/assets/7eda4acdde3019e92c5b44f59917b1e493a5b11b5b8a63280d03b15787934ef5.png)\n\n*原論文Figure 1。[**v3 PDFの2ページ**](https://arxiv.org/pdf/1603.05027v3#page=2)から抜粋。左：(a)元の残差ユニット、(b)本論文が提案する残差ユニット。灰色の矢印は、情報が最も伝わりやすい経路です。右：CIFAR-10での1001層ResNetの学習曲線で、破線が学習損失（左軸）、実線がテスト誤り率（右軸）です。*\n\n右の曲線は問題をはっきり見せています。同じ1001層でも、元の設計は学習の初期に損失がなかなか下がらず、最終的なテスト誤り率は7.61%です。改良した設計は最初から速く下がり、最終的に4.92%です。\n\n左の二つのユニットが使う部品はまったく同じで、違いは順序だけです。元の設計ではReLUが加算の後にあり、ショートカットの上に乗っています。新しい設計はBNとReLUをどちらも重み層の前に移し、加算の後には何もしません。そのため灰色のショートカットは、始めから終わりまで一つの演算も通りません。\n\nなぜこれが重要なのでしょうか。著者らの議論は、$h$と$f$をどちらも恒等写像とみなすところから始まります。\n\n## 問題の解決\n\n### 二つの恒等写像\n\n$f$も恒等写像で$x_{l+1} = y_l$なら、上の式は次のようになります。\n\n$$\nx_{l+1} = x_l + \\mathcal{F}(x_l, \\mathcal{W}_l)\n$$\n\nこれを、より深い$L$番目のユニットまで展開します。\n\n$$\nx_L = x_l + \\sum_{i=l}^{L-1} \\mathcal{F}(x_i, \\mathcal{W}_i)\n$$\n\nこの式が言っているのは、どの深い層の特徴$x_L$も、ある浅い層の特徴$x_l$に、そのあいだのすべての残差関数の出力を足したものに等しい、ということです。通常のネットワークでは、$x_L$は一連の行列積の結果で、おおよそ$\\prod_i W_i\\, x_0$です（BNとReLUは無視）。一方は足し算、もう一方は掛け算です。\n\n逆伝播でも同じです。損失を$\\mathcal{E}$とすると、連鎖律から次が得られます。\n\n$$\n\\frac{\\partial \\mathcal{E}}{\\partial x_l}\n= \\frac{\\partial \\mathcal{E}}{\\partial x_L}\\frac{\\partial x_L}{\\partial x_l}\n= \\frac{\\partial \\mathcal{E}}{\\partial x_L}\\left(1 + \\frac{\\partial}{\\partial x_l}\\sum_{i=l}^{L-1}\\mathcal{F}(x_i, \\mathcal{W}_i)\\right)\n$$\n\n括弧の中の1によって、$\\partial\\mathcal{E}/\\partial x_L$はどの重み層も通らずに、浅い層の$x_l$に直接届きます。もう一方の項は重み層を通りますが、ミニバッチ内のすべてのサンプルでちょうど$-1$になって括弧全体を打ち消すことは、まず起こりません。そのため、重みがとても小さくても勾配は消えません。\n\nこの二つのきれいな性質は、どちらも二つの条件の上に成り立っています。ショートカット$h$が恒等写像であること、そして加算の後の$f$も恒等写像であることです。図で言えば、灰色の矢印の上には、加算以外のどんな演算もあってはならない、ということです。\n\n著者らはこれを二つに分けて調べます。まずショートカット$h$を変え、次に加算の後の$f$を変えます。\n\n### ショートカットに何かを足すとどうなるか？\n\n最も単純な壊し方は、ショートカットに定数$\\lambda_l$を掛けること、つまり$h(x_l) = \\lambda_l x_l$です。同じ方法で展開すると、逆伝播の式は次のようになります。\n\n$$\n\\frac{\\partial \\mathcal{E}}{\\partial x_l}\n= \\frac{\\partial \\mathcal{E}}{\\partial x_L}\\left(\\prod_{i=l}^{L-1}\\lambda_i + \\frac{\\partial}{\\partial x_l}\\sum_{i=l}^{L-1}\\hat{\\mathcal{F}}(x_i, \\mathcal{W}_i)\\right)\n$$\n\n$\\hat{\\mathcal{F}}$は、それらの定数を吸収したものです。元の1が、$\\lambda$の連続した積に変わりました。ネットワークがとても深いと、どの$\\lambda$も1より大きければこの項は指数的に爆発し、どれも1より小さければ指数的に消えて、勾配は重み層を通るしかなくなります。\n\nResNet-110には残差ユニットが54個あります。残差関数をとても小さくして、ショートカットの効果だけを見てみましょう。\n\n```python\nimport torch\n\ntorch.manual_seed(0)\nD, units = 64, 54                                       # ResNet-110には残差ユニットが54個ある\nWs = [torch.randn(D, D) * 0.01 for _ in range(units)]   # 残差関数をわざと小さくする\n\nfor lam in (1.0, 0.9, 0.5, 1.1):\n    x0 = torch.randn(D, requires_grad=True)\n    x = x0\n    for W in Ws:\n        x = lam * x + torch.relu(x) @ W                 # ショートカットにλを掛ける\n    x.sum().backward()\n    print(f\"λ = {lam}：最初の層まで戻る勾配は約{x0.grad.abs().mean().item():.3g}、λ^54 = {lam ** units:.3g}\")\n```\n\n```text\nλ = 1.0：最初の層まで戻る勾配は約0.954、λ^54 = 1\nλ = 0.9：最初の層まで戻る勾配は約0.00322、λ^54 = 0.00338\nλ = 0.5：最初の層まで戻る勾配は約5.67e-17、λ^54 = 5.55e-17\nλ = 1.1：最初の層まで戻る勾配は約162、λ^54 = 172\n```\n\n勾配はほぼ$\\lambda^{54}$そのものです。$\\lambda = 0.9$は1割減らすだけに見えますが、54個のユニットを通った後には1000分の3しか残りません。$\\lambda = 0.5$では$10^{-17}$まで小さくなります。ゲートや$1\\times1$畳み込みのような、もっと複雑なショートカットにすると、掛け合わされるのは各ショートカットの微分になり、やはり信号をせき止めるおそれがあります。\n\n著者らは続けて、CIFAR-10のResNet-110で、いくつかのショートカットを実際に比べました。\n\n[![6個の残差ユニットの模式図。右側の分岐はどれも3x3 conv、ReLU、3x3 convで、違いはショートカットにある。(a)originalは何の演算もない。(b)constant scalingはショートカットと分岐にそれぞれ0.5を掛ける。(c)exclusive gatingは1x1 convとsigmoidでゲートを計算し、分岐にゲートの値を、ショートカットに1からゲートの値を引いたものを掛ける。(d)shortcut-only gatingはショートカットにだけ1からゲートの値を引いたものを掛ける。(e)conv shortcutはショートカット上に1x1 convがある。(f)dropout shortcutはショートカット上にdropoutがある。どのユニットも加算の後にReLUが続く](/content/papers/assets/7710a267ec379977c4b41b07fbb2532dd44111584b6c0542b7ce9e96556e4f13.png)](/content/papers/assets/7710a267ec379977c4b41b07fbb2532dd44111584b6c0542b7ce9e96556e4f13.png)\n\n*原論文Figure 2。[**v3 PDFの5ページ**](https://arxiv.org/pdf/1603.05027v3#page=5)から抜粋。Table 1で使う各種のショートカットです。簡略化のため、各重み層の後のBNは描かれていません。*\n\n| ショートカット | ショートカットの係数 | 分岐$\\mathcal{F}$の係数 | 誤り率 |\n| --- | --- | --- | ---: |\n| (a) 元の恒等ショートカット | 1 | 1 | **6.61%** |\n| (b) 定数スケーリング | 0 | 1 | 失敗（通常のネットワークと同じ） |\n| (b) 定数スケーリング | 0.5 | 1 | 失敗 |\n| (b) 定数スケーリング | 0.5 | 0.5 | 12.35% |\n| (c) 排他的ゲート、$b_g$の初期値$-6$ | $1-g(x)$ | $g(x)$ | 8.70% |\n| (c) 排他的ゲート、$b_g$の初期値0〜$-5$ | $1-g(x)$ | $g(x)$ | 失敗 |\n| (d) ショートカットだけのゲート、$b_g$の初期値0 | $1-g(x)$ | 1 | 12.86% |\n| (d) ショートカットだけのゲート、$b_g$の初期値$-6$ | $1-g(x)$ | 1 | 6.91% |\n| (e) $1\\times1$畳み込みショートカット | $1\\times1$畳み込み | 1 | 12.22% |\n| (f) dropoutショートカット | dropout 0.5 | 1 | 失敗 |\n\n*表：原論文Table 1の一部の行を抜粋。CIFAR-10テストセット、ResNet-110で、5回の学習の中央値です。誤り率が20%を超えたものは「失敗」としています。この実験群では、加算の後にまだReLUを使っています。*\n\n注目すべき点がいくつかあります。\n\n- **定数スケーリング0.5**：分岐をスケーリングしないと学習できません。分岐にも0.5を掛ける（ゲートを固定したHighwayに近い）と収束はしますが、誤り率は12.35%で、ベースラインの2倍近くです。\n- **排他的ゲート**はHighway Networksのやり方そのものです。ゲートのバイアスの初期値がとても重要で、著者らは0から$-10$のあいだを探しましたが、最良の$-6$でも8.70%にとどまりました。\n- **ショートカットだけにゲートを付ける**場合、バイアスの初期値を$-6$にすると$1-g(x)$が1に近くなり、ショートカットはほぼ恒等写像になります。結果の6.91%も、ベースラインに最も近い値です。\n- **$1\\times1$畳み込みショートカット**は、元の34層ResNetでは良い成績でした（ResNet論文の選択肢C）が、54ユニットまで積み重ねると12.22%になります。著者らは、ImageNetのResNet-101でも同様の現象を見ています。\n- **dropoutショートカット**は統計的には、ショートカットに期待値0.5を掛けるのと同じで、定数スケーリングと同じように信号をせき止めます。\n\n\n> [!TIP]\n> \n> 排他的ゲートの原型は、私たちのノートで読めます。\n> \n> - **[[15.05] Highway Networks：残差前夜](/blog/papers/classic-cnns/highway-networks)**\n\n\nゲートも$1\\times1$畳み込みもパラメータが増えるので、理論上は表現力が高いはずです。ショートカットだけにゲートを付ける場合や$1\\times1$畳み込みを使う場合、解の空間には恒等ショートカットも含まれていて、恒等写像を学べば済みます。それなのに、どれも**学習**誤り率が高くなっています。つまり悪化の原因は最適化にあり、表現力とは関係ありません。\n\n### 加算の後のReLUはどこに置くべきか？\n\n先ほどの実験では、加算の後の$f$はどれもReLUのままだったので、導出は近似的にしか成り立っていません。次は$f$を扱います。\n\n$f$を恒等写像にするには、ReLUとBNの位置を並べ替えるしかありません。著者らは次の並べ方を試しました。\n\n[![5個の残差ユニットの模式図で、部品は同じで順序が異なる。(a)original：weight、BN、ReLU、weight、BNで、加算後にReLU。(b)BN after addition：weight、BN、ReLU、weightで、加算後にBN、ReLU。(c)ReLU before addition：weight、BN、ReLU、weight、BN、ReLUの後に加算。(d)ReLU-only pre-activation：ReLU、weight、BN、ReLU、weight、BNの後に加算。(e)full pre-activation：BN、ReLU、weight、BN、ReLU、weightの後に加算](/content/papers/assets/f032506b6dda998779a8abf2fee9cbf44371ac4a2c4ebf8c93d834286bbb7501.png)](/content/papers/assets/f032506b6dda998779a8abf2fee9cbf44371ac4a2c4ebf8c93d834286bbb7501.png)\n\n*原論文Figure 4。[**v3 PDFの8ページ**](https://arxiv.org/pdf/1603.05027v3#page=8)から抜粋。Table 2で使う各種の活性化の位置です。どのユニットも部品は同じで、順序だけが違います。*\n\n| 並べ方 | ResNet-110 | ResNet-164 |\n| --- | ---: | ---: |\n| (a) 元の残差ユニット | 6.61% | 5.93% |\n| (b) BNを加算の後に置く | 8.17% | 6.50% |\n| (c) ReLUを加算の前に置く | 7.84% | 6.14% |\n| (d) ReLUだけを前に移す | 6.71% | 5.91% |\n| (e) 完全なpre-activation | **6.37%** | **5.46%** |\n\n*表：原論文Table 2から抜粋。CIFAR-10テストセットの誤り率です。ResNet-164はボトルネック構造（$1\\times1$、$3\\times3$、$1\\times1$）を使い、計算量は$3\\times3$を2層使うユニットと同程度です。*\n\n**(b)BNを加算の後に置く**のは逆方向の実験で、$f$にBNとReLUを含めます。結果ははっきり悪くなりました。BNがショートカット上の信号を変えてしまうので、学習初期の損失がなかなか下がりません。\n\n**(c)ReLUを加算の前に置く**のは、$f$を恒等写像にする最も直接的な方法ですが、結果はやはり悪くなりました。問題は、ReLUを分岐の最後に置くと、残差関数の出力が決して負にならないことです。直観的には、「残差」は正にも負にもなれるべきです。正にしかなれないと、信号はひたすら単調に増えていきます。二つの並べ方でユニットを10個重ねるとどうなるかを見てみましょう。\n\n```python\nimport torch\nimport torch.nn as nn\n\ntorch.manual_seed(0)\nc = 16\n\ndef relu_before_add():          # Fig. 4(c)：ReLUを加算の前に移す\n    return nn.Sequential(nn.Conv2d(c, c, 3, padding=1), nn.BatchNorm2d(c), nn.ReLU(),\n                         nn.Conv2d(c, c, 3, padding=1), nn.BatchNorm2d(c), nn.ReLU())\n\ndef full_preact():              # Fig. 4(e)：BNとReLUをどちらも重み層の前に置く\n    return nn.Sequential(nn.BatchNorm2d(c), nn.ReLU(), nn.Conv2d(c, c, 3, padding=1),\n                         nn.BatchNorm2d(c), nn.ReLU(), nn.Conv2d(c, c, 3, padding=1))\n\nx0 = torch.randn(8, c, 16, 16)\nfor name, make in [(\"ReLUが加算の前\", relu_before_add), (\"完全なpre-activation\", full_preact)]:\n    x, lows, means = x0, [], []\n    for unit in range(10):\n        r = make()(x)\n        lows.append(r.min().item())\n        x = x + r\n        means.append(x.mean().item())\n    print(f\"{name}：残差の最小値 {min(lows):.2f}、出力の平均 {means[0]:.2f} → {means[4]:.2f} → {means[9]:.2f}\")\n```\n\n```text\nReLUが加算の前：残差の最小値 0.00、出力の平均 0.38 → 1.97 → 3.96\n完全なpre-activation：残差の最小値 -2.33、出力の平均 -0.01 → 0.07 → 0.09\n```\n\nReLUを加算の前に置くと、残差の最小値はちょうど0で、ユニットを一つ足すたびに平均が一段ずつ押し上げられます。pre-activationの残差には正も負もあり、平均は0付近にとどまります。\n\n### 見方を変える：pre-activation\n\n残りの二つの並べ方は、考え方の転換から生まれています。\n\n元の設計では、加算の後の活性化$f$が、次のユニットの二つの経路に同時に影響します。\n\n$$\ny_{l+1} = f(y_l) + \\mathcal{F}(f(y_l), \\mathcal{W}_{l+1})\n$$\n\nこの活性化を残差分岐にだけ作用させ、ショートカットは通らないようにすると、次のようになります。\n\n$$\ny_{l+1} = y_l + \\mathcal{F}(\\hat{f}(y_l), \\mathcal{W}_{l+1})\n$$\n\n記号を替えると$x_{l+1} = x_l + \\mathcal{F}(\\hat{f}(x_l), \\mathcal{W}_l)$です。加算の後には何もなく、$f$は恒等写像になりました。元は「前のユニットの出力の活性化」だったものが、「次のユニットの入力の活性化」に変わったのです。\n\n[![3列の模式図。(a)元の残差ユニットで、加算の後にact.があり、このact.が次のユニットのショートカットと分岐の両方に影響する。(b)加算の後のact.を、重みへ向かう分岐にだけ置き（赤枠で示す）、ショートカットはそれを迂回する。(c)ユニットの境界を切り直すと、各ユニットがweightの前にまずact.を行うpre-activation残差ユニットと等価になり、加算の後には何の演算もない](/content/papers/assets/1a7a520a803ed65de475f2ee4bc5ade9b1833de9aefd758c5ef57153e5d087d2.png)](/content/papers/assets/1a7a520a803ed65de475f2ee4bc5ade9b1833de9aefd758c5ef57153e5d087d2.png)\n\n*原論文Figure 5。[**v3 PDFの10ページ**](https://arxiv.org/pdf/1603.05027v3#page=10)から抜粋。加算の後の活性化を重みの分岐にだけ使うことは、pre-activation残差ユニットを作ることと等価です。*\n\n図の(b)から(c)へは、ユニットの境界を切り直しただけです。著者らは、この前後の区別は加算のある分岐構造でしか意味を持たないとも指摘しています。通常の$N$層ネットワークには$N-1$個の活性化があり、それを前の活性化と呼んでも後の活性化と呼んでも同じことです。\n\nこの考え方に沿って見ると、Figure 4の(d)はReLUだけを前に移したもので、結果は元の設計とほぼ同じでした。著者らは、このReLUはBNと組み合わさっていないので、BNの恩恵を受けられないのだろうと推測しています。(e)はBNとReLUの両方を重み層の前に移したもので、成績ははっきり良くなりました。これが本論文の提案するユニットです。\n\n## 考察\n\n### 深いほど差は大きくなる\n\n| データセット | ネットワーク | 元のユニット | pre-activation |\n| --- | --- | ---: | ---: |\n| CIFAR-10 | ResNet-110（ユニットごとに1層） | 9.90% | 8.91% |\n| CIFAR-10 | ResNet-110 | 6.61% | 6.37% |\n| CIFAR-10 | ResNet-164 | 5.93% | 5.46% |\n| CIFAR-10 | ResNet-1001 | 7.61% | **4.92%** |\n| CIFAR-100 | ResNet-164 | 25.16% | 24.33% |\n| CIFAR-100 | ResNet-1001 | 27.82% | **22.71%** |\n\n*表：原論文Table 3から抜粋。ResNet-1001はボトルネック構造で、残差ユニットは計333個、特徴マップの大きさごとに111個ずつです。*\n\npre-activationはどの組でも良く、しかもネットワークが深いほど差が大きくなります。1001層では、CIFAR-10が7.61%から4.92%に、CIFAR-100が27.82%から22.71%に下がりました。\n\n著者らは、利点は二つの面から来ていると考えています。\n\n**一つ目は、最適化しやすくなること**。これは1001層で最もはっきりします（Figure 1右）。$f$がReLUだと負の信号が切り捨てられ、ユニットが多いと、先ほどの式はもう良い近似ではなくなります。164層のネットワークが受ける影響はずっと小さく、学習初期に曲線が少しつまずいても、すぐに回復します。著者らがネットワークの反応を監視したところ、しばらく学習すると重みが調整され、$y_l$の大半が0より大きくなって、ReLUで切り捨てられるものはほとんどなくなりました。$x_l$は前のReLUを通っているのでもともと非負で、$\\mathcal{F}$が大きな負の値のときだけ$y_l$が0未満になります。1000層になると、切り捨てがずっと頻繁に起こります。\n\n**二つ目は、過学習が減ること**。pre-activation版は収束時の学習損失がやや高いのに、テスト誤り率はより低くなります。著者らはこれをBNの正則化効果だと推測しています。元のユニットでは、BNで正規化された信号はすぐにショートカットと加算されるので、次の重み層に入るのは、実際には正規化されていない信号です。pre-activation版では、各重み層の入力がまずBNを通ります。\n\n### ほかの手法と比べる\n\nCIFARでは、著者らのResNet-1001はCIFAR-10で4.92%（5回の中央値）、バッチサイズを64にすると4.62%、CIFAR-100では22.71%でした。著者らは特に、これらの結果は幅やフィルタの大きさを特別に調整したものではなく、dropoutのような小さなデータセットに効く正則化も使っておらず、頼ったのは「より深く」だけだと説明しています。\n\nImageNetでは、著者らはまず評価の細かい点に気づきました。元のResNetは学習時に短辺を256〜480に拡大縮小していたのに、テスト時には短辺256の画像から$224\\times224$を切り出していて、これはResNetに不利です。そこで今回は、短辺320の画像から$320\\times320$を1つ切り出す形に変えました。ResNetは全畳み込みなので、より大きな入力をそのまま受け取れます。この大きさは、Inception-v3の299にも近いものです。\n\n| 手法 | データ拡張 | Top-1誤り率 | Top-5誤り率 |\n| --- | --- | ---: | ---: |\n| ResNet-152、元のユニット | スケール | 21.3% | 5.5% |\n| ResNet-152、pre-activation | スケール | 21.1% | 5.5% |\n| ResNet-200、元のユニット | スケール | 21.8% | 6.0% |\n| ResNet-200、pre-activation | スケール | 20.7% | 5.3% |\n| ResNet-200、pre-activation | スケール＋縦横比 | **20.1%** | **4.8%** |\n| Inception-v3 | スケール＋縦横比 | 21.2% | 5.6% |\n\n*表：原論文Table 5から抜粋。ILSVRC 2012検証セット、シングルクロップ。ResNetは$224\\times224$で学習して$320\\times320$でテストし、Inception-v3は学習もテストも$299\\times299$です。*\n\nResNet-152をpre-activationにしても、21.3%から21.1%に改善するだけです。もともと汎化の問題がはっきりとは出ていないからです。ResNet-200は違います。元のユニットでは誤り率21.8%とResNet-152より悪いのに、学習誤り率はResNet-152より低く、つまり過学習しています。pre-activationにすると20.7%になり、二つのResNet-152のどちらよりも良くなりました。\n\n著者らはImageNetのResNet-101で、「BNを加算の後に置く」版も最後まで学習させました。シングルクロップの誤り率は24.6%／7.5%で、元の23.6%／7.1%より悪く、CIFARでの結果と一致しています。\n\n\n> [!TIP]\n> \n> 著者らは本文で同時期のInception-ResNet-v2にも触れ、これらの発見はそちらにも役立つだろうと見込んでいます。\n> \n> - **[[16.02] Inception-v4：ずっと速く、少し正確に](/blog/papers/classic-cnns/inception-v4)**\n\n\n計算量については、モデルの複雑さは深さに比例し、1001層はおよそ100層の10倍です。CIFARのResNet-1001はGPU 2枚で約27時間、ImageNetのResNet-200はGPU 8枚で約3週間かけて学習させています。\n\n## 結論\n\nこの論文の結論は一言にまとめられます。ショートカットをきれいに保つこと。ショートカットに定数を掛けない、ゲートを付けない、畳み込みやdropoutを置かない。加算の後にもReLUやBNをつながない。そうすれば、順伝播でも逆伝播でも、信号はどのユニットからどのユニットへも直接たどり着けます。\n\n実装上、この論文の変更はわずかです。残差分岐の中のBNとReLUの位置を前にずらし、加算の後には何もしない。とても深いResNetを学習させるときや、モデルが過学習し始めているときは、まずpre-activation版を試してみるとよいでしょう。浅めのネットワークなら、両者の差は大きくありません。\n\n「ショートカットには何も置かない」というこの原則は、数年後、TransformerのLayerNormをめぐってもう一度議論されます。興味があれば、続けて[Pre-LN](/blog/papers/transformers/pre-ln)の記事を読んでみてください。\n","imageSizes":{"/content/papers/assets/7eda4acdde3019e92c5b44f59917b1e493a5b11b5b8a63280d03b15787934ef5.png":{"width":967,"height":469},"/content/papers/assets/7710a267ec379977c4b41b07fbb2532dd44111584b6c0542b7ce9e96556e4f13.png":{"width":690,"height":659},"/content/papers/assets/f032506b6dda998779a8abf2fee9cbf44371ac4a2c4ebf8c93d834286bbb7501.png":{"width":965,"height":466},"/content/papers/assets/1a7a520a803ed65de475f2ee4bc5ade9b1833de9aefd758c5ef57153e5d087d2.png":{"width":967,"height":546}}}
