{"notes":[{"id":"classic-cnns/nin","category":"classic-cnns","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"NiN","subtitle":"1×1の伏線","author":"Z. Yuan","paperDate":"2013-12-16","publishedOn":"2025-09-24","world":"external/network-in-network","paperTitle":"Network In Network","paperUrl":"https://arxiv.org/abs/1312.4400","bibliography":{"title":"Network In Network","authors":["Min Lin","Qiang Chen","Shuicheng Yan"],"url":"https://arxiv.org/abs/1312.4400","pdfUrl":"https://arxiv.org/pdf/1312.4400v3","codeUrl":null,"preprint":{"id":"1312.4400","submittedOn":"2013-12-16","url":"https://arxiv.org/abs/1312.4400"},"publication":null,"citation":"@misc{classiccnnsnin2013,\n  title = {{Network In Network}},\n  author = {Min Lin and Qiang Chen and Shuicheng Yan},\n  year = {2013},\n  eprint = {1312.4400},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1312.4400}\n}\n","citationPath":"/content/papers/citations/classic-cnns/nin.db58639ac47c.bib"},"thumbnail":{"src":"/content/papers/assets/8024fc245eb852a2c0cd34b59c18c680b92766c33d621b934dbf102c1cacda13.png","width":896,"height":330},"locale":"ja","path":"/content/papers/ja/classic-cnns/nin.05b02df5157b.md","headings":[{"id":"問題の定義","text":"問題の定義","depth":2},{"id":"問題の解決","text":"問題の解決","depth":2},{"id":"パッチごとに小さなmlpを動かす","text":"パッチごとに小さなMLPを動かす","depth":3},{"id":"全結合層を平均に置き換える","text":"全結合層を平均に置き換える","depth":3},{"id":"ネットワーク全体","text":"ネットワーク全体","depth":3},{"id":"考察","text":"考察","depth":2},{"id":"cifar-10とcifar-100","text":"CIFAR-10とCIFAR-100","depth":3},{"id":"svhnとmnist","text":"SVHNとMNIST","depth":3},{"id":"グローバル平均プーリングに本当に正則化の効果はあるのか","text":"グローバル平均プーリングに本当に正則化の効果はあるのか？","depth":3},{"id":"最後の層は本当に信頼度マップになったのか","text":"最後の層は本当に信頼度マップになったのか？","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/inception-v1","relation":"referenced","topic":""},{"id":"classic-cnns/resnet","relation":"referenced","topic":""},{"id":"classic-cnns/cam","relation":"referenced","topic":""}]},{"id":"classic-cnns/inception-v1","category":"classic-cnns","legacyPath":"classic-cnns/1409-inception-v1","legacySlug":"1409-inception-v1","legacyPaths":[],"title":"GoogLeNet","subtitle":"またの名を Inception-V1","author":"Z. Yuan","paperDate":"2014-09-17","publishedOn":"2024-09-22","paperTitle":"Going Deeper with Convolutions","paperUrl":"https://arxiv.org/abs/1409.4842","bibliography":{"title":"Going Deeper with Convolutions","authors":["Christian Szegedy","Wei Liu","Yangqing Jia","Pierre Sermanet","Scott Reed","Dragomir Anguelov","Dumitru Erhan","Vincent Vanhoucke","Andrew Rabinovich"],"url":"https://arxiv.org/abs/1409.4842","pdfUrl":"https://arxiv.org/pdf/1409.4842","codeUrl":null,"preprint":{"id":"1409.4842","submittedOn":"2014-09-17","url":"https://arxiv.org/abs/1409.4842"},"publication":{"venue":"CVPR","year":2015,"kind":"conference","url":"https://doi.org/10.1109/cvpr.2015.7298594"},"citation":"@misc{classiccnnsinceptionv12014,\n  title = {{Going Deeper with Convolutions}},\n  author = {Christian Szegedy and Wei Liu and Yangqing Jia and Pierre Sermanet and Scott Reed and Dragomir Anguelov and Dumitru Erhan and Vincent Vanhoucke and Andrew Rabinovich},\n  year = {2014},\n  eprint = {1409.4842},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1409.4842}\n}\n","citationPath":"/content/papers/citations/classic-cnns/inception-v1.3d20e0e32bcd.bib"},"thumbnail":{"src":"/content/papers/assets/254b970b1374c24267b60c2d684338760e9ba8b10dad761a5fa15f1bb8bcf6ef.jpg","width":1330,"height":394},"locale":"ja","path":"/content/papers/ja/classic-cnns/inception-v1.e67514209915.md","headings":[{"id":"問題の解決","text":"問題の解決","depth":2},{"id":"inception-モジュール","text":"Inception モジュール","depth":3},{"id":"パラメータ設定","text":"パラメータ設定","depth":3},{"id":"モデルアーキテクチャ","text":"モデルアーキテクチャ","depth":3},{"id":"討論","text":"討論","depth":2},{"id":"ilsvrc-2014-でのパフォーマンス","text":"ILSVRC 2014 でのパフォーマンス","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/resnext","relation":"comparison","topic":"分岐・グループ畳み込み・特徴の再利用"},{"id":"classic-cnns/cspnet","relation":"comparison","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/cam","category":"classic-cnns","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"CAM","subtitle":"モデルはどこを見ている？","author":"Z. Yuan","paperDate":"2015-12-14","publishedOn":"2026-01-05","world":"external/cam","paperTitle":"Learning Deep Features for Discriminative Localization","paperUrl":"https://arxiv.org/abs/1512.04150","bibliography":{"title":"Learning Deep Features for Discriminative Localization","authors":["Bolei Zhou","Aditya Khosla","Agata Lapedriza","Aude Oliva","Antonio Torralba"],"url":"https://arxiv.org/abs/1512.04150","pdfUrl":"https://arxiv.org/pdf/1512.04150v1","codeUrl":null,"preprint":{"id":"1512.04150","submittedOn":"2015-12-14","url":"https://arxiv.org/abs/1512.04150"},"publication":null,"citation":"@misc{classiccnnscam2015,\n  title = {{Learning Deep Features for Discriminative Localization}},\n  author = {Bolei Zhou and Aditya Khosla and Agata Lapedriza and Aude Oliva and Antonio Torralba},\n  year = {2015},\n  eprint = {1512.04150},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1512.04150}\n}\n","citationPath":"/content/papers/citations/classic-cnns/cam.2ce837236f9d.bib"},"thumbnail":{"src":"/content/papers/assets/c3c6af7f1943634784331ca03a55efc3e68a7714d936d953a14f11b0828d9cf8.png","width":1372,"height":615},"locale":"ja","path":"/content/papers/ja/classic-cnns/cam.26e443086c3a.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":2},{"id":"全結合層を外すと分類はどれだけ悪くなるか","text":"全結合層を外すと、分類はどれだけ悪くなるか？","depth":3},{"id":"弱教師あり位置特定","text":"弱教師あり位置特定","depth":3},{"id":"ほかのタスクに移す","text":"ほかのタスクに移す","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/nin","relation":"referenced","topic":""},{"id":"classic-cnns/zfnet","relation":"referenced","topic":""},{"id":"classic-cnns/resnet","relation":"referenced","topic":""}]}],"text":"2013年のImageNet分類部門で、シンガポール国立大学のチームが2位に入りました。メンバーにはMin LinとQiang Chenがいました。\n\n同じ年の12月、二人はShuicheng Yanとともにこの論文を公開し、のちにICLR 2014で発表しました。論文自体にImageNetの実験はなく、CIFAR、SVHN、MNISTといった小さなデータセットで比較しているだけです。それでも、この論文が残した二つの部品は、その後数年の畳み込みネットワークのいたるところで見かけるようになります。$1\\times1$畳み込みと、グローバル平均プーリングです。\n\n二つの部品は、どちらも同じ疑問から生まれました。畳み込みネットワークのフィルタは、単純すぎるのではないか？\n\n## 問題の定義\n\nまず、通常の畳み込み層が何をしているかを見ます。ReLUを例にとると、$k$番目の特徴マップの位置$(i, j)$での出力は次のとおりです。\n\n$$\nf_{i,j,k} = \\max(w_k^T x_{i,j},\\ 0)\n$$\n\n$x_{i,j}$は$(i, j)$を中心とする入力パッチ、$w_k$は$k$番目のフィルタです。つまり各フィルタは、パッチと線形の内積を1回とり、ReLUを1回通します。著者らはこれを一般化線形モデル（GLM）と呼んでいます。\n\n線形モデルで分けられるものには限りがあります。あるフィルタが「斜めのエッジ」を検出したいとしましょう。照明や太さの違う斜めのエッジが、どれもちょうど一つの超平面の同じ側に収まるなら、フィルタは一つで足ります。しかし同じ概念のさまざまな見え方は、曲がった多様体の上に散らばっていることが多く、一つの超平面ではきれいに切り分けられません。\n\n通常の畳み込みネットワークはどうするのでしょうか。フィルタを多めに用意し、それぞれに一つの見え方を担当させます。著者らは、これでは負担が次の層に押しつけられると指摘します。次の層は、前の層のあらゆる見え方の組み合わせを考えなければ、より上位の概念を組み立てられません。\n\n当時発表されたばかりのmaxoutネットワークは、一歩先に進んでいました。複数のアフィン特徴マップのあいだで最大値をとります。\n\n$$\nf_{i,j,k} = \\max_m\\,(w_{k_m}^T x_{i,j})\n$$\n\nいくつかの線形関数の最大値をとると区分線形の凸関数が得られるので、凸集合に収まる概念なら分けられます。しかし著者らは、「概念が凸集合に収まる」こと自体、成り立つとは限らない仮定だと考えます。\n\nでは、局所パッチごとに、こうした仮定を置かず、一般の関数を近似できるモデルを置けないでしょうか？\n\n畳み込みネットワークの末端には、もう一つ問題があります。最後の数層は通常全結合層で、著者らにはそれがブラックボックスのように見えました。クラスの情報がどう畳み込み層へ戻っていくのか、はっきり説明しにくいのです。全結合層は過学習もしやすく、dropoutで支える必要があります。\n\n## 問題の解決\n\n### パッチごとに小さなMLPを動かす\n\n著者らの答えは、線形フィルタを小さな多層パーセプトロン（MLP）に置き換えることでした。同じように入力の各位置をスライドし、すべての位置で同じ重みを共有します。この層をmlpconvと呼びます。\n\n[![左右に並んだ二つの模式図。(a)線形畳み込み層：入力の局所パッチが一つの線形フィルタを通り、出力特徴マップ上の1点になる。(b)mlpconv層：同じ局所パッチがまず2層の全結合の小さなネットワークを通り、それから出力上の1点になる](/content/papers/assets/8024fc245eb852a2c0cd34b59c18c680b92766c33d621b934dbf102c1cacda13.png)](/content/papers/assets/8024fc245eb852a2c0cd34b59c18c680b92766c33d621b934dbf102c1cacda13.png)\n\n*原論文Figure 1。[**v3 PDFの2ページ**](https://arxiv.org/pdf/1312.4400v3#page=2)から抜粋。(a)線形畳み込み層、(b)mlpconv層。パッチの中に小さなMLPが加わっています。*\n\nMLPが$n$層のとき、mlpconvの計算は次のようになります。\n\n$$\n\\begin{aligned}\nf^{1}_{i,j,k_1} &= \\max\\left({w^{1}_{k_1}}^T x_{i,j} + b_{k_1},\\ 0\\right) \\\\\n&\\ \\ \\vdots \\\\\nf^{n}_{i,j,k_n} &= \\max\\left({w^{n}_{k_n}}^T f^{n-1}_{i,j} + b_{k_n},\\ 0\\right)\n\\end{aligned}\n$$\n\n1行目は通常の畳み込みとまったく同じで、パッチ全体$x_{i,j}$との内積をとります。2行目からは、入力が前の層の**同じ位置**$(i, j)$での出力$f^{n-1}_{i,j}$に変わります。つまり、この位置のすべてのチャネルの値だけを見ます。\n\n同じ位置だけを見て、すべてのチャネルを重み付きで組み合わせる。これはまさに$1\\times1$畳み込みです。著者らもこの等価関係をはっきり書いています。mlpconvは、通常の畳み込み1層の後に$1\\times1$畳み込みを何層か続けたものに等しい、と。\n\nPyTorchで一度確かめてみましょう。入力は2チャネル、$5\\times5$の特徴マップです。小さなMLPは、各$3\\times3$パッチを平らに並べた$2\\times3\\times3=18$個の数値を受け取り、18 → 4 → 3の2層を通します。\n\n```python\nimport torch\nimport torch.nn.functional as F\n\ntorch.manual_seed(0)\nx = torch.randn(1, 2, 5, 5)            # 画像1枚、2チャネル、5×5\n\n# 小さなMLP：各3×3パッチを平らにして2×3×3 = 18個の数値にし、18 → 4 → 3を通す\nw1, b1 = torch.randn(4, 18), torch.randn(4)\nw2, b2 = torch.randn(3, 4), torch.randn(3)\n\n# 方法1：MLPを各3×3パッチの上でスライドさせる\npatches = F.unfold(x, kernel_size=3)            # [1, 18, 9]：9か所の位置、それぞれ18次元\nh = F.relu(w1 @ patches + b1[:, None])          # [1, 4, 9]\ny_mlp = F.relu(w2 @ h + b2[:, None]).reshape(1, 3, 3, 3)\n\n# 方法2：3×3畳み込みの後に1×1畳み込みを続ける\nh = F.relu(F.conv2d(x, w1.reshape(4, 2, 3, 3), b1))\ny_conv = F.relu(F.conv2d(h, w2.reshape(3, 4, 1, 1), b2))\n\nprint(y_mlp.shape, y_conv.shape)\nprint(\"最大の差：\", (y_mlp - y_conv).abs().max().item())\n```\n\n```text\ntorch.Size([1, 3, 3, 3]) torch.Size([1, 3, 3, 3])\n最大の差： 4.76837158203125e-07\n```\n\n二つの方法の出力は形が同じで、差は浮動小数点の誤差だけです。\n\n方法1は著者らの考え方に近い形です。位置ごとに小さなネットワークがあり、「ここにある概念があるか」を判断しています。方法2は実装上の姿です。$3\\times3$畳み込み1層がまずパッチ全体を見て、その後の$1\\times1$畳み込みは各位置でチャネルを混ぜるだけです。著者らはこれをチャネルの観点からも説明しています。$1\\times1$畳み込みの各層は「チャネルをまたぐ、パラメータを持つプーリング」で、前の層の特徴マップを重み付きで組み合わせ直してReLUを通し、それが1層ずつ続いていきます。\n\n\n> [!TIP]\n> \n> のちのGoogLeNetはInceptionモジュールで$1\\times1$畳み込みを大量に使いますが、主な用途はチャネル数を減らし、後に続く$3\\times3$や$5\\times5$の畳み込みを少し安くすることに変わりました。\n> \n> - **[[14.09] GoogLeNet：またの名を Inception-V1](/blog/papers/classic-cnns/inception-v1)**\n\n\nmaxoutと比べたmlpconvの違いはこうです。maxoutが近似できるのは凸関数だけですが、mlpconvが使うMLPは汎用の関数近似器なので、より多様な形の概念の分布を扱えます。著者らが、もう一つの汎用近似器である動径基底関数ネットワークではなくMLPを選んだ理由も実際的です。MLPは畳み込みネットワークと一緒に逆伝播で学習でき、それ自体を深くすることもできます。\n\n### 全結合層を平均に置き換える\n\n二つ目の部品は、ネットワークの末端を扱います。\n\n通常の畳み込みネットワークは、最後の畳み込み層の特徴マップを平らにし、何層かの全結合層に通してからsoftmaxにつなぎます。NiNはこれを次のように変えました。最後のmlpconv層が出力する特徴マップの数を**クラス数とちょうど同じ**にし、各特徴マップの空間平均をとって、得られたベクトルをそのままsoftmaxに入れます。これをグローバル平均プーリング（global average pooling、GAP）と呼びます。\n\nCIFAR-10を例にとると、クラスは10個なので、最後の層は10枚の特徴マップを出力します。\n\n```python\nimport torch\n\ntorch.manual_seed(0)\nfeature_maps = torch.randn(1, 10, 8, 8)    # 最後の層：10クラスそれぞれに8×8の特徴マップが1枚\n\nlogits = feature_maps.mean(dim=(2, 3))      # グローバル平均プーリング\nprint(logits.shape)\n\nfc_params = 10 * 8 * 8 * 10 + 10            # 代わりに全結合層で10クラスにつなぐ場合\nprint(\"全結合層のパラメータ：\", fc_params, \"、グローバル平均プーリングのパラメータ：0\")\n```\n\n```text\ntorch.Size([1, 10])\n全結合層のパラメータ： 6410 、グローバル平均プーリングのパラメータ：0\n```\n\nここでの$8\\times8$は説明用のサイズです。小さなネットワークでは差は大きく見えませんが、AlexNetになるとはっきりします。最後の3層の全結合（$9216\\to4096\\to4096\\to1000$）だけで、重みが$9216\\times4096+4096\\times4096+4096\\times1000 = 58{,}621{,}952$個あります。\n\n著者らはGAPの利点を三つ挙げています。\n\n1. **パラメータがない**ので、この層自体が過学習することはありません。\n2. **各特徴マップが一つのクラスに対応する**ので、そのままそのクラスの信頼度マップとして見ることができ、全結合層より解釈しやすくなります。\n3. **空間情報を足し合わせて消す**ので、入力の平行移動に対して比較的鈍感です。\n\n2点目には前提があります。最後の層が、本当に「このマップは猫を表す」という特徴マップを学習できなければなりません。著者らは、これにはmlpconvのより強力な局所モデリングが必要だと考えています。通常の線形畳み込みでは、この要求は厳しすぎるかもしれません。この点は後の実験で見えてきます。\n\n### ネットワーク全体\n\n[![NiNの全体アーキテクチャ：3つのmlpconv層が順に連結され、各層の中に小さな多層パーセプトロンがある。最後の層の複数の特徴マップがグローバル平均プーリングを通り、出力のクラスのノードにつながる](/content/papers/assets/d94aa487d35fbfcdda30993d49c170efa0980e5c28d2a718b75659cd77164e3e.png)](/content/papers/assets/d94aa487d35fbfcdda30993d49c170efa0980e5c28d2a718b75659cd77164e3e.png)\n\n*原論文Figure 2。[**v3 PDFの4ページ**](https://arxiv.org/pdf/1312.4400v3#page=4)から抜粋。論文の実験で使うNiNは、いずれもmlpconv 3層とグローバル平均プーリング1層からなります。*\n\n論文の実験で使うNiNはmlpconvを3層重ねたもので、各層の中は3層のパーセプトロンです。最後にグローバル平均プーリングが続きます。各mlpconv層の後にはストライド2の最大プーリングがあります。最後の層を除くmlpconvの出力にはすべてdropoutを加え、さらにweight decayもかけています。各層の詳しいパラメータは、著者らが補足資料に載せています。\n\n## 考察\n\n著者らは四つのデータセットで評価しています。CIFAR-10、CIFAR-100、SVHN、MNISTです。データの前処理と学習・検証セットの分け方はmaxoutの論文に従い、実装にはAlex Krizhevskyのcuda-convnetを使っています。\n\n### CIFAR-10とCIFAR-100\n\nCIFAR-10は10クラス、$32\\times32$のカラー画像で、学習用5万枚、テスト用1万枚です。著者らは各mlpconv層の特徴マップ数をmaxoutネットワークと同じにし、検証セットで調整したハイパーパラメータは二つだけです。局所受容野の大きさとweight decayです。\n\n| 手法 | テスト誤り率 |\n| --- | ---: |\n| Conv. maxout + Dropout | 11.68% |\n| **NIN + Dropout** | **10.41%** |\n| Conv. maxout + Dropout + データ拡張 | 9.38% |\n| DropConnect + 12ネットワーク + データ拡張 | 9.32% |\n| **NIN + Dropout + データ拡張** | **8.81%** |\n\n*表：原論文Table 1から抜粋。データ拡張は平行移動と水平反転を指します。*\n\nデータ拡張を使わない場合、NINはmaxoutより1.27ポイント低くなります。平行移動と水平反転を加えた8.81%も、12個のネットワークを使ったDropConnectより低い値です。\n\ndropoutの効果は小さくありません。著者らは、mlpconv層のあいだにdropoutがある場合とない場合を比べました。dropoutを外すとテスト誤り率は14.51%、加えると10.41%に下がり、著者らは相対的な減少幅が20%を超えると述べています。\n\nCIFAR-100は画像の形式は同じですが、100クラスあり、クラスごとの画像はCIFAR-10の10分の1しかありません。著者らは別途パラメータを調整せず、最後の層の出力を100枚の特徴マップに変えただけで、テスト誤り率は35.68%でした。データ拡張を使わない当時の最良の結果（36.85%）より、1ポイント以上低い値です。\n\n### SVHNとMNIST\n\nSVHNは家の番地の数字認識で、NINの誤り率は2.35%と、maxoutの2.47%より低くなっています。ただ同じ表では、Multi-digit Number Recognitionが2.16%、DropConnectが1.94%で、どちらもNINより良い成績です。\n\nMNISTでは、NINが0.47%、maxoutが0.45%です。著者らは、MNISTはすでに非常に低い誤り率まで調整され尽くしていると説明しています。\n\n### グローバル平均プーリングに本当に正則化の効果はあるのか？\n\nGAPの効果だけを見るため、著者らはGAPを全結合層に戻し、ほかの部分はそのままにして、CIFAR-10で比較しました。\n\n| 最上位の層 | テスト誤り率 |\n| --- | ---: |\n| mlpconv + 全結合 | 11.59% |\n| mlpconv + 全結合 + Dropout | 10.88% |\n| mlpconv + グローバル平均プーリング | 10.41% |\n\n*表：原論文Table 5から抜粋。*\n\ndropoutなしの全結合層が最も悪く、dropoutを加えると少し良くなり、GAPが最も良い結果です。\n\n著者らは続けて問います。通常の畳み込みネットワークにGAPを入れても、同じ効果があるのでしょうか。そこで、Hintonらのdropout論文のネットワーク（畳み込み3層と局所結合層1層）で試しました。全結合層でdropoutなしが17.56%、dropoutありが15.99%、GAPに替えると16.46%です。dropoutなしより約1ポイント良いものの、dropoutには負けています。著者らの説明は、先ほどの前提そのものです。線形畳み込みとReLUで各クラスの信頼度マップを直接学ばせるのは、要求が高すぎるのかもしれません。\n\n### 最後の層は本当に信頼度マップになったのか？\n\n[![10×10の格子が2組。各行が1枚のCIFAR-10テスト画像で、左端が元の画像、その右に最後の層の10クラスの特徴マップが順に並ぶ。対角線上の赤枠で示されているのは、画像の正解クラスに対応する特徴マップで、多くは最も明るく、明るい点の位置は元の画像の物体の位置とおおむね一致する](/content/papers/assets/c0032c1fba54d5052a18867e6bd6347143d3ba47c5cf4b353a61516107a0cf65.png)](/content/papers/assets/c0032c1fba54d5052a18867e6bd6347143d3ba47c5cf4b353a61516107a0cf65.png)\n\n*原論文Figure 4。[**v3 PDFの9ページ**](https://arxiv.org/pdf/1312.4400v3#page=9)から抜粋。最後のmlpconv層の特徴マップで、上位10%の活性化だけを表示しています。クラスは順に飛行機、自動車、鳥、猫、鹿、犬、カエル、馬、船、トラックで、赤枠が画像の正解クラスです。左右の2組は、別々の例を並べたものです。*\n\n各行は1枚のテスト画像と、10枚の特徴マップ上でのその反応です。赤枠が正解クラスの1枚で、多くは行の中で最も明るくなっています。そうなるようGAPがもともと強いているので、より注目に値するのは別の点です。正解クラスの特徴マップで最も明るい場所は、元の画像で物体がある位置とおおむね重なっています。著者らは特に、自動車のように構造のはっきりした物体を挙げています。\n\nこれらの特徴マップはクラスラベルだけで学習していて、ボックスは一つも見ていません。著者らは結論で、これによってNINで物体検出を行える可能性が開けると述べています。\n\n## 結論\n\nNiNの二つの部品は、一緒に設計されています。mlpconvが局所パッチごとにより強いモデルを与えるからこそ、GAPは最後の層の特徴マップにクラスとの直接の対応を求めることができます。実験では、CIFAR-10とCIFAR-100の成績も、GAPの比較も、この設計を支持しています。通常の畳み込みネットワークでGAPだけを使うと、効果は目減りしました。\n\nNiNにはImageNetでの成績もあります。ILSVRCのまとめ論文によると、2014年の検出部門（提供データのみの部）で優勝したNUSは、R-CNNの枠組みの中でnetwork-in-networkを使っていました。\n\nNiNの二つの部品は、のちにどちらもばらして使われるようになりました。$1\\times1$畳み込みはGoogLeNetやResNetのボトルネック構造でチャネル数の調整を担い、グローバル平均プーリングは締めくくりを担います。ただ、たいていはその後に全結合層を1層つなぎ、各特徴マップが一つのクラスに対応することは求めなくなりました。今度、分類ネットワークのコードを開いて最後に`AdaptiveAvgPool2d(1)`の行を見かけたら、その源流はこの論文です。\n\n\n> [!TIP]\n> \n> ResNetのボトルネックブロックは、$1\\times1$畳み込みでチャネルをいったん減らしてから戻し、ネットワークの末端ではグローバル平均プーリングに全結合層を1層つないでいます。\n> \n> - **[[15.12] ResNet：畳み込みネットワーク 100 層](/blog/papers/classic-cnns/resnet)**\n\n\n「最後の層の特徴マップから物体の位置がわかる」という点が本格的に活用されるのは、[CAM](/blog/papers/classic-cnns/cam)からです。続きはそちらで見ていきましょう。\n","imageSizes":{"/content/papers/assets/8024fc245eb852a2c0cd34b59c18c680b92766c33d621b934dbf102c1cacda13.png":{"width":896,"height":330},"/content/papers/assets/d94aa487d35fbfcdda30993d49c170efa0980e5c28d2a718b75659cd77164e3e.png":{"width":992,"height":296},"/content/papers/assets/c0032c1fba54d5052a18867e6bd6347143d3ba47c5cf4b353a61516107a0cf65.png":{"width":1078,"height":528}}}
