{"notes":[{"id":"classic-cnns/zfnet","category":"classic-cnns","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"ZFNet","subtitle":"ブラックボックスの中の景色","author":"Z. Yuan","paperDate":"2013-11-12","publishedOn":"2025-09-06","world":"external/zfnet","paperTitle":"Visualizing and Understanding Convolutional Networks","paperUrl":"https://arxiv.org/abs/1311.2901","bibliography":{"title":"Visualizing and Understanding Convolutional Networks","authors":["Matthew D Zeiler","Rob Fergus"],"url":"https://arxiv.org/abs/1311.2901","pdfUrl":"https://arxiv.org/pdf/1311.2901v3","codeUrl":null,"preprint":{"id":"1311.2901","submittedOn":"2013-11-12","url":"https://arxiv.org/abs/1311.2901"},"publication":null,"citation":"@misc{classiccnnszfnet2013,\n  title = {{Visualizing and Understanding Convolutional Networks}},\n  author = {Matthew D Zeiler and Rob Fergus},\n  year = {2013},\n  eprint = {1311.2901},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1311.2901}\n}\n","citationPath":"/content/papers/citations/classic-cnns/zfnet.6d4dd35e9f91.bib"},"thumbnail":{"src":"/content/papers/assets/6c45d745e8a2f4b60cc45bea1029353e303d5e3bbee1e62f438c71874fddf883.png","width":1200,"height":1329},"locale":"ja","path":"/content/papers/ja/classic-cnns/zfnet.4e09cca79696.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":3},{"id":"異なる画像のあいだの対応","text":"異なる画像のあいだの対応","depth":3},{"id":"考察","text":"考察","depth":2},{"id":"imagenet-2012","text":"ImageNet 2012","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/alexnet","relation":"referenced","topic":""},{"id":"classic-cnns/vgg","relation":"referenced","topic":""},{"id":"classic-cnns/resnet","relation":"referenced","topic":""}]},{"id":"classic-cnns/alexnet","category":"classic-cnns","legacyPath":"classic-cnns/1209-alexnet","legacySlug":"1209-alexnet","legacyPaths":[],"title":"AlexNet","subtitle":"畳み込みネットワークの台頭","author":"Z. Yuan","paperDate":"2012","publishedOn":"2024-06-30","paperTitle":"ImageNet Classification with Deep Convolutional Neural Networks","paperUrl":"https://proceedings.neurips.cc/paper/2012/hash/c399862d3b9d6b76c8436e924a68c45b-Abstract.html","bibliography":{"title":"ImageNet Classification with Deep Convolutional Neural Networks","authors":["Alex Krizhevsky","Ilya Sutskever","Geoffrey E. Hinton"],"url":"https://proceedings.neurips.cc/paper/2012/hash/c399862d3b9d6b76c8436e924a68c45b-Abstract.html","pdfUrl":"https://proceedings.neurips.cc/paper_files/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf","codeUrl":null,"preprint":null,"publication":{"venue":"NeurIPS (NIPS)","year":2012,"kind":"conference","url":"https://proceedings.neurips.cc/paper/2012/hash/c399862d3b9d6b76c8436e924a68c45b-Abstract.html"},"citation":"@inproceedings{classiccnnsalexnet2012,\n  title = {{ImageNet Classification with Deep Convolutional Neural Networks}},\n  author = {Alex Krizhevsky and Ilya Sutskever and Geoffrey E. Hinton},\n  year = {2012},\n  booktitle = {NeurIPS (NIPS)},\n  url = {https://proceedings.neurips.cc/paper/2012/hash/c399862d3b9d6b76c8436e924a68c45b-Abstract.html}\n}\n","citationPath":"/content/papers/citations/classic-cnns/alexnet.b38d2879f7bc.bib"},"thumbnail":{"src":"/content/papers/assets/87a5a48ff82989d4d78cc4d47a083f292fd7e249c1880c00ac4b31d8a042650d.jpg","width":1630,"height":570},"locale":"ja","path":"/content/papers/ja/classic-cnns/alexnet.845b0023abec.md","headings":[{"id":"問題の定義","text":"問題の定義","depth":2},{"id":"問題の解決","text":"問題の解決","depth":2},{"id":"モデルアーキテクチャ","text":"モデルアーキテクチャ","depth":3},{"id":"relu-活性化関数","text":"ReLU 活性化関数","depth":3},{"id":"複数-gpu-による訓練","text":"複数 GPU による訓練","depth":3},{"id":"ローカルレスポンス正規化lrn","text":"ローカルレスポンス正規化（LRN）","depth":3},{"id":"重複最大プーリング","text":"重複最大プーリング","depth":3},{"id":"dropout","text":"Dropout","depth":3},{"id":"モデル実装","text":"モデル実装","depth":3},{"id":"討論","text":"討論","depth":2},{"id":"畳み込みネットワークは何を学習するのか","text":"畳み込みネットワークは何を学習するのか？","depth":3},{"id":"ilsvrc-2010-結果","text":"ILSVRC-2010 結果","depth":3},{"id":"ilsvrc-2012-結果","text":"ILSVRC-2012 結果","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/vgg","relation":"next","topic":"深い畳み込みネットワークの学習"}]},{"id":"classic-cnns/vgg","category":"classic-cnns","legacyPath":"classic-cnns/1409-vgg","legacySlug":"1409-vgg","legacyPaths":[],"title":"VGG","subtitle":"深い、さらに深く","author":"Z. Yuan","paperDate":"2014-09-04","publishedOn":"2024-07-11","paperTitle":"Very Deep Convolutional Networks for Large-Scale Image Recognition","paperUrl":"https://arxiv.org/abs/1409.1556","bibliography":{"title":"Very Deep Convolutional Networks for Large-Scale Image Recognition","authors":["Karen Simonyan","Andrew Zisserman"],"url":"https://arxiv.org/abs/1409.1556","pdfUrl":"https://arxiv.org/pdf/1409.1556","codeUrl":null,"preprint":{"id":"1409.1556","submittedOn":"2014-09-04","url":"https://arxiv.org/abs/1409.1556"},"publication":{"venue":"ICLR","year":2015,"kind":"conference","url":"https://arxiv.org/pdf/1409.1556"},"citation":"@misc{classiccnnsvgg2014,\n  title = {{Very Deep Convolutional Networks for Large-Scale Image Recognition}},\n  author = {Karen Simonyan and Andrew Zisserman},\n  year = {2014},\n  eprint = {1409.1556},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1409.1556}\n}\n","citationPath":"/content/papers/citations/classic-cnns/vgg.6d704fc68256.bib"},"thumbnail":{"src":"/content/papers/assets/f8c8263e4970f0d994107c8084552e778e2f8f3cee14e213551fb6b0942568c2.jpg","width":968,"height":980},"locale":"ja","path":"/content/papers/ja/classic-cnns/vgg.c040f1a3d61f.md","headings":[{"id":"問題の定義","text":"問題の定義","depth":2},{"id":"問題の解決","text":"問題の解決","depth":2},{"id":"ネットワークアーキテクチャ","text":"ネットワークアーキテクチャ","depth":3},{"id":"訓練の詳細","text":"訓練の詳細","depth":3},{"id":"討論","text":"討論","depth":2},{"id":"lrn-は貢献しなかった","text":"LRN は貢献しなかった","depth":3},{"id":"imagenet-でのパフォーマンス","text":"ImageNet でのパフォーマンス","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/alexnet","relation":"background","topic":"深い畳み込みネットワークの学習"},{"id":"classic-cnns/resnet","relation":"next","topic":"深い畳み込みネットワークの学習"},{"id":"reparameterization/vanillanet","relation":"next","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":"深い畳み込みネットワークの学習"}]}],"text":"2012年のImageNetコンペティションで、AlexNetはtop-5誤り率を16.4%まで下げました。2位は26.2%です。\n\n10ポイント近い差がつき、畳み込みネットワークは一夜にして、日の当たらない技術から、どの研究室も試してみたい技術に変わりました。\n\nそこで、皆が気まずい事実に気づきます。モデルは正確なのに、なぜ正確なのかを誰も説明できないのです。改良しようにも、層の数を変え、フィルタのサイズを少しいじり、1〜2週間学習させてから、スコアが上がったかを見るしかありませんでした。\n\nニューヨーク大学のMatthew ZeilerとRob Fergusは2013年11月にこの論文を公開し、序論でこの状態をはっきりtrial-and-errorと呼んでいます。二人は、まずモデルを理解し、そこで見えた問題をもとに改良しようと考えました。\n\n\n> [!TIP]\n> \n> この論文はよくZFNetと呼ばれます。二人の著者の姓の頭文字を取った名前です。AlexNetをまだ読んでいなければ、先に私たちのノートをどうぞ。\n> \n> - **[[12.09] AlexNet：畳み込みネットワークの台頭](/blog/papers/classic-cnns/alexnet)**\n\n\n## 問題の定義\n\n畳み込みネットワークの第1層を理解するのは難しくありません。第1層のフィルタは画素に直接作用するので、重みを小さな画像として描けば、何を探しているかがわかります。横線、斜線、特定の色の斑点などです。\n\n第2層以降はそうはいきません。第2層のフィルタは第1層の出力に作用するので、重みを描いても、意味の読み取れない数字の集まりにしか見えません。上の層ほど各ユニットが見ているものは抽象的になり、元の画像までたどるのも難しくなります。\n\n当時、すでにいくつかの方法がありました。Erhanらは画像空間で勾配上昇を行い、あるユニットの活性化を最大にする入力を探しましたが、結果は初期値に依存し、そのユニットがどんな変化を許容するのかもわかりません。Leらは最適な入力の近くでヘッセ行列を数値的に計算して不変性を推定しましたが、上位層の不変性は複雑で、2次近似では捉えきれません。Donahueらは、上位層を強く活性化させる画像パッチを直接探しました。ただ、パッチの中のどの構造が鍵なのかは、やはりわかりません。\n\n著者らが求めたのは別のものです。実際の画像1枚と中間層の活性化1つが与えられたとき、それを画素空間へ投影し、**この画像のどの構造**がその活性化を光らせたのかをはっきり見ることです。\n\n## 問題の解決\n\n### 畳み込みネットワークを逆向きにたどる\n\n著者らは、自分たちが2011年に提案したDeconvolutional Network（deconvnet）を借りてきました。元のdeconvnetは教師なし学習のモデルですが、ここではまったく学習させず、プローブとしてだけ使い、学習済みの畳み込みネットワークの横に接続します。\n\n[![上半分には二つの流れが並んでいる。右側は畳み込みネットワークの1層で、下から上へ、下の層のプーリング後の入力が畳み込みフィルタF、ReLU、最大プーリングを通り、最大値の位置がswitchesとして記録される。左側はdeconvnetの層で、上から下へ、上の層の再構成が逆プーリング、ReLU、フィルタFの転置による転置フィルタリングを通り、下の層の再構成になる。下半分は逆プーリングの模式図で、プーリング時に各色ブロックの最大値の位置を記録し、逆プーリング時に上の層の値をその位置に戻す](/content/papers/assets/e846238b05c91faf3e65cc41d18380f105ef60fd65ec5ceaef64d428b9897b31.png)](/content/papers/assets/e846238b05c91faf3e65cc41d18380f105ef60fd65ec5ceaef64d428b9897b31.png)\n\n*原論文Figure 1。[**v3 PDFの3ページ**](https://arxiv.org/pdf/1311.2901v3#page=3)から抜粋。上半分の右側が畳み込みネットワークの1層、左側がその横に接続したdeconvnetの層です。下半分は逆プーリングの模式図です。*\n\nまず上半分の右側を見ます。畳み込みネットワークの1層は下から上へ進み、フィルタリング（$F$）、ReLU、最大プーリングの順に処理します。左側のdeconvnetは上から下へ進み、この3ステップを逆にたどります。逆プーリング、ReLU、転置したフィルタ（$F^T$）によるフィルタリングです。\n\n使い方は次のとおりです。\n\n1. 画像を1枚畳み込みネットワークに入力し、各層の特徴マップを計算します。\n2. ある層の活性化を1つ選び、同じ層のほかの活性化をすべてゼロにします。\n3. 活性化が1つだけ残ったこの特徴マップをdeconvnetに渡し、画素空間に至るまで1層ずつ下へ再構成していきます。\n\n逆向きの3ステップのうち、いちばん説明が必要なのは逆プーリングです。\n\n### 逆プーリングは最大値の位置を覚えておく\n\n最大プーリングは情報を捨てます。$2\\times2$のブロックでは最大値だけが残り、ほかの3つの数は消えてしまいます。この操作には逆関数がありません。\n\n著者らの方法は、上向きに計算するついでに、各ブロックの最大値がどのマスにあったかを記録しておくことです。これをswitchesと呼びます。$4\\times4$の特徴マップで一度試してみましょう。\n\n```python\nimport numpy as np\n\nx = np.array([[1, 3, 2, 0],\n              [4, 2, 1, 5],\n              [0, 1, 7, 2],\n              [2, 6, 3, 1]])\n\npooled = np.zeros((2, 2), dtype=int)\nswitches = {}\nfor i in range(2):\n    for j in range(2):\n        block = x[2*i:2*i+2, 2*j:2*j+2]\n        r, c = np.unravel_index(block.argmax(), block.shape)\n        pooled[i, j] = block[r, c]\n        switches[(i, j)] = (2*i + r, 2*j + c)\n\nprint(pooled)\nprint(switches)\n```\n\n```text\n[[4 5]\n [6 7]]\n{(0, 0): (1, 0), (0, 1): (1, 3), (1, 0): (3, 1), (1, 1): (2, 2)}\n```\n\nプーリング後は$2\\times2$が残ります。`switches`は、各出力が元のどのマスから来たかを記録しています。たとえば右下の7は`(2, 2)`から来ています。\n\n右下のこの活性化を追いたいとします。ほかの3つをゼロにし、switchesに従って元の位置に戻します。\n\n```python\nreconstruction = np.array([[0, 0],\n                           [0, 9]])   # 上の層では、追いたい活性化だけを残す\nunpooled = np.zeros((4, 4), dtype=int)\nfor (i, j), (r, c) in switches.items():\n    unpooled[r, c] = reconstruction[i, j]\nprint(unpooled)\n```\n\n```text\n[[0 0 0 0]\n [0 0 0 0]\n [0 0 9 0]\n [0 0 0 0]]\n```\n\n上の層で再構成された9は、もともと7があった位置に入りました。ほかの位置はすべてゼロです。\n\nこれが逆プーリングです。上向きに進んだときに記録した位置を使って、上の層の再構成を正しい場所に戻します。switchesはこの入力画像に固有のものなので、下まで再構成をたどると、結果は元の画像の小さな一部のように見え、この活性化を光らせた構造が残ります。\n\n残りの2ステップは単純です。\n\n- **ReLU**：畳み込みネットワークの特徴マップはReLUを通るので必ず非負です。そこで各層の再構成にもReLUをもう一度かけ、非負に保ちます。\n- **フィルタリング**：同じフィルタの転置を使います。実装上は、各フィルタを上下左右に反転させるだけです。作用させる対象はReLUを通した再構成で、下の層の元の出力ではありません。\n\n\n> [!NOTE]\n> \n> ここでのdeconvnetは、数学的な意味での逆畳み込み問題を解いてはいません。同じフィルタを転置して、もう一度使っているだけです。今の深層学習フレームワークにある`ConvTranspose2d`もよくdeconvolutionと呼ばれますが、行っているのは同じく転置畳み込みです。\n\n\n著者らは特に、これらの投影はモデルが生成したサンプルではなく、過程全体に生成モデルは関わっていないと注意しています。投影が答えるのは一つのことだけです。この入力のどの部分が、選んだ活性化に寄与しているのか。\n\n### 観察対象のモデル\n\n著者らが観察したモデルはAlexNetによく似た8層構成で、畳み込み5層、全結合2層、最後にsoftmaxが続きます。AlexNetは2枚のGPUに分けるため、一部の畳み込み層では同じGPU上の特徴マップだけに接続していました。ここではそれをすべて接続する形に変え、GTX 580を1枚使って70エポック、約12日かけて学習しています。\n\n学習の段階で、早くも可視化が役に立ちました。第1層の少数のフィルタの値が特に大きくなり、層全体を支配していたのです（後出のFigure 6の(a)）。著者らの対策はフィルタの大きさを制限することでした。ある畳み込みフィルタのRMSが$10^{-1}$を超えたら、この半径まで縮めて戻します。入力画素はおよそ$[-128, 128]$の範囲にあるので、これは第1層で特に重要だと著者らは述べています。\n\n### 各層が見ていたもの\n\n[![第1層はいくつかのフィルタの模様。第2〜5層にはそれぞれ3×3の小さなマス目が多数あり、各マス目の左側が灰色背景のdeconvnet投影、右側が対応するカラーの元画像パッチ。第2層は主にエッジや色の塊、第3層には格子や文字などのテクスチャが現れ、第4層には犬の顔や鳥の脚、第5層にはキーボードや犬など物体全体が現れる](/content/papers/assets/6c45d745e8a2f4b60cc45bea1029353e303d5e3bbee1e62f438c71874fddf883.png)](/content/papers/assets/6c45d745e8a2f4b60cc45bea1029353e303d5e3bbee1e62f438c71874fddf883.png)\n\n*原論文Figure 2。[**v3 PDFの4ページ**](https://arxiv.org/pdf/1311.2901v3#page=4)から抜粋。第2〜5層の各特徴マップについて、検証セットで活性化が最も強い9個を示しています。灰色背景の小さな図がdeconvnet投影、隣のカラーの小さな図が対応する元画像のパッチです。*\n\nこの図はペアで見ます。灰色背景の投影には活性化を光らせた構造だけが描かれ、隣の画像パッチは元の画像です。\n\n著者らは各層を次のように説明しています。\n\n- **第2層**：角、およびエッジと色の組み合わせ。\n- **第3層**：より複雑な不変性を持ち、格子や文字のような似たテクスチャを捉える。\n- **第4層**：クラスに関係するものが現れ始める。犬の顔、鳥の脚など。\n- **第5層**：物体全体を捉え、大きな姿勢の変化も許容する。キーボード、犬など。\n\nペアで見る利点は、第5層の1行2列目で最もはっきりします。その9枚の画像パッチには何の共通点もないように見えますが、投影を見ると、この特徴マップは実は前景の物体ではなく、背景の草を見ていることがわかります。画像パッチだけを見ていたら、このユニットはでたらめに反応していると思ってしまうでしょう。\n\n著者らは、学習中に特徴がどう変わるかも追いました。下位層は数エポックで収束しますが、上位層は40〜50エポック目になってようやく形になります。二人の結論は、モデルは完全に収束するまで学習させる必要がある、というものでした。\n\n別の実験では、平行移動、拡大縮小、回転が特徴に与える影響を測りました。わずかな変換でも第1層の特徴ベクトルは大きく変わりますが、第7層では影響がずっと小さく、平行移動と拡大縮小に対してはほぼ線形です。最終出力は平行移動と拡大縮小に対して安定していますが、回転に対しては、物体自体が回転対称でない限り安定しません。\n\n### 見えた問題をもとにアーキテクチャを直す\n\n可視化が最も実用的に役立つのはここです。著者らはAlexNetの第1層と第2層を取り出して調べました。\n\n[![5組のフィルタの可視化。(a)はフィルタの大きさを制限しなかった場合の第1層で、特に明るいマスが1つある。(b)はAlexNetの第1層、(c)は修正後の第1層。(d)はAlexNetの第2層の投影、(e)は修正後の第2層の投影](/content/papers/assets/416e3ce07fbed24c5bda83322fd60820ab4098de4d461a714d914793f63f41a4.png)](/content/papers/assets/416e3ce07fbed24c5bda83322fd60820ab4098de4d461a714d914793f63f41a4.png)\n\n*原論文Figure 6。[**v3 PDFの7ページ**](https://arxiv.org/pdf/1311.2901v3#page=7)から抜粋。(a)フィルタの大きさを制限しない場合の第1層、(b)AlexNetの第1層、(c)修正後の第1層、(d)AlexNetの第2層、(e)修正後の第2層。*\n\nまず(b)と(c)を比べます。AlexNetの第1層のフィルタには、極端に高い周波数と極端に低い周波数の模様が混在していて、中間の周波数はわずかです。ほとんど何もしていない「死んだ」フィルタもあります。次に(d)と(e)を比べると、AlexNetの第2層の投影にはエイリアシング（aliasing）の跡が現れています。\n\n著者らは問題の原因を第1層に求めました。AlexNetは$11\\times11$のフィルタをストライド4で使っています。これを$7\\times7$、ストライド2に変えました。\n\nストライドがなぜエイリアシングを生むのでしょうか。ストライドとは、サンプリングの間隔です。1次元の縞模様で試してみましょう。5画素ごとに繰り返す模様を、2画素ごと、4画素ごとにサンプリングします。\n\n```python\nimport numpy as np\n\nx = np.arange(40)\nstripe = np.round(np.cos(2 * np.pi * x / 5), 1)   # 5画素ごとに繰り返す縞模様\n\nprint(\"ストライド2：\", stripe[::2][:10])\nprint(\"ストライド4：\", stripe[::4][:10])\n```\n\n```text\nストライド2： [ 1.  -0.8  0.3  0.3 -0.8  1.  -0.8  0.3  0.3 -0.8]\nストライド4： [ 1.   0.3 -0.8 -0.8  0.3  1.   0.3 -0.8 -0.8  0.3]\n```\n\nストライド2の結果は1〜2サンプルごとに上下が入れ替わり、この速い変化をまだ保っています。ところがストライド4の結果はなだらかな起伏になり、5サンプルで1周、つまり20画素で1周する幅の広い縞になっています。元の画像にこんな縞はありません。サンプリングが粗すぎたために生まれた偽の模様です。\n\nAlexNetの第1層のフィルタは、もともと高周波成分を多く含んでいます。そのフィルタで得た特徴マップをストライド4でサンプリングすると、高周波の部分が偽の低周波模様に折り返され、次の層へ渡される可能性があります。この1次元の例は本稿による説明用のものです。論文自体は投影図で現象を示しており、アーキテクチャを修正した後の第2層(e)はずっときれいで、エイリアシングの跡も見られません。\n\nさらに重要なのは、分類の成績もそれに伴って良くなったことです。数字は後の考察で見ます。\n\n\n> [!TIP]\n> \n> その後の数年間、第1層の設定がAlexNetの大きなフィルタと大きなストライドに戻ることはありませんでした。VGGは第1層から全面的に$3\\times3$を使い、ResNetの第1層は$7\\times7$、ストライド2で、ちょうどここと同じです。\n> \n> - **[[14.09] VGG：深い、さらに深く](/blog/papers/classic-cnns/vgg)**\n> - **[[15.12] ResNet：畳み込みネットワーク 100 層](/blog/papers/classic-cnns/resnet)**\n\n\n### 一部を隠して、分類器の反応を見る\n\n投影が答えるのは「この特徴は何を見ているか」です。著者らはもう一つの問いにも答えようとしました。分類器は本当に物体を探しているのか、それとも背景だけを手がかりに当て推量しているのか。\n\n二人は灰色の正方形を画像上で少しずつずらし、さまざまな位置を隠しました。位置ごとに記録するのは二つです。第5層で最も強い特徴マップの活性化の総和と、分類器の出力です。\n\n[![横に並んだ5枚の図。(a)はテニスボールをくわえたポメラニアンで、画面上に灰色の遮蔽用の正方形がある。(b)は遮蔽位置が第5層の最も強い特徴マップの活性化の総和に与える影響のヒートマップで、犬の顔の位置が青い。(c)はこの特徴マップの投影。(d)は正解クラスの確率のヒートマップで、犬の顔の位置で確率が最も低い。(e)は各遮蔽位置で最も確率の高いクラスで、大部分はポメラニアン、犬の顔の付近の数マスはテニスボール、ペキニーズ、またはキースホンドに変わる](/content/papers/assets/a17219e0ee699c0d36ceeb892c3a304fe106143afa91432c0caaaaf91fefbb8b.png)](/content/papers/assets/a17219e0ee699c0d36ceeb892c3a304fe106143afa91432c0caaaaf91fefbb8b.png)\n\n*原論文Figure 7の1行目。[**v3 PDFの7ページ**](https://arxiv.org/pdf/1311.2901v3#page=7)から抜粋。(a)入力画像と灰色の遮蔽用正方形、(b)遮蔽位置が第5層の最も強い特徴マップの活性化の総和に与える影響、(c)この特徴マップの投影、(d)正解クラスの確率、(e)各遮蔽位置で最も確率の高いクラス。*\n\nこれはテニスボールをくわえたポメラニアンです。(b)と(d)の青い領域は、どちらも犬の顔にあります。犬の顔を隠すと第5層の最も強い特徴は弱まり、「ポメラニアン」の確率もはっきり下がります。(e)はさらに面白く、ほとんどの位置で予測はポメラニアンですが、犬の顔が隠れてテニスボールが見えているときには、モデルは「テニスボール」と言い直します。\n\n同じ図の残りの2行は、最も強い特徴と分類器の判断根拠が同じ場所にあるとは限らないことを教えてくれます。2行目はレーシングカーで、第5層の最も強い特徴は車体の文字に反応していますが、分類器が最も敏感なのは車輪です。3行目の画面には複数の物体があり、最も強い特徴は人の顔を選んでいるのに、分類器は犬に最も敏感です。著者らは、分類器が多数の特徴マップを同時に使っているためだと説明しています。\n\n### 異なる画像のあいだの対応\n\n最後の分析は、あまり取り上げられることがありません。従来の認識手法には、人の顔の目と鼻の相対位置を知っている、といった明示的な対応づけの仕組みがよくありました。深層モデルにはそうした設計がないので、著者らは、モデルの内部で暗黙のうちに対応が作られているかを知ろうとしました。\n\n正面を向いた犬の画像を5枚用意し、各画像で同じ部位を隠します（たとえば全部左目を隠す）。隠す前と後の特徴の差を計算し、この5枚のあいだで差の符号がそろっているかを比べます。指標は、2枚ずつの組における符号の差のハミング距離で、低いほど、同じ部位を隠したときの変化がそろっていることを表します。\n\n| 遮蔽位置 | 第5層 | 第7層 |\n| --- | ---: | ---: |\n| 右目 | 0.067 ± 0.007 | 0.069 ± 0.015 |\n| 左目 | 0.069 ± 0.007 | 0.068 ± 0.013 |\n| 鼻 | 0.079 ± 0.017 | 0.069 ± 0.011 |\n| ランダムな位置 | 0.107 ± 0.017 | 0.073 ± 0.014 |\n\n*表：原論文Table 1から数値を抜粋。*\n\n第5層では、目と鼻のスコアがいずれもランダムな位置より低く、著者らはモデルがこの層である程度の部位の対応を作っていると考えています。第7層ではスコアが互いに近く、著者らは、上位層は犬の品種の区別で手一杯なのだろうと推測しています。\n\n## 考察\n\n### ImageNet 2012\n\n著者らはまず、AlexNetの元のアーキテクチャで結果を再現しました。検証セットの誤り率は、元の論文との差が0.1%以内です。続いて、修正後のアーキテクチャに切り替えます。\n\n| モデル | 検証top-1 | 検証top-5 | テストtop-5 |\n| --- | ---: | ---: | ---: |\n| AlexNet、1モデル | 40.7 | 18.2 | — |\n| AlexNet、5モデル | 38.1 | 16.4 | 16.4 |\n| 本論文、1モデル | 38.4 | 16.5 | — |\n| 本論文、5モデル | 36.7 | 15.3 | 15.3 |\n| 本論文、6モデル（中間層を広げた版を含む） | 36.0 | 14.7 | 14.8 |\n\n*表：原論文Table 2から誤り率（%）を抜粋。2011年と2012年の学習データを両方使ったAlexNetは省略しています。*\n\n単一モデルの検証セットでのtop-5誤り率は、18.2%から16.5%に下がりました。6モデルを組み合わせると、テストセットのtop-5誤り率は14.8%です。著者らは脚注で、この成績はすでに同じ年のILSVRC 2013の参加チームに抜かれているとも書いています。\n\n### どの層を外すと影響が大きいか？\n\n次に著者らは、AlexNetのアーキテクチャから一部の層を丸ごと取り除き、ゼロから学習し直しました。\n\n| 変更 | 学習top-1 | 検証top-1 | 検証top-5 |\n| --- | ---: | ---: | ---: |\n| 元のアーキテクチャ（再現） | 35.1 | 40.5 | 18.1 |\n| 第3、4層を除去 | 41.8 | 45.4 | 22.1 |\n| 第7層を除去 | 27.4 | 40.0 | 18.4 |\n| 第6、7層を除去 | 27.4 | 44.8 | 22.4 |\n| 第3、4、6、7層を除去 | 71.1 | 71.3 | 50.1 |\n\n*表：原論文Table 3の上半分から誤り率（%）を抜粋。*\n\n全結合の第6層と第7層にはモデルのパラメータの大半が入っています。これらを外すと、検証top-1誤り率は40.5%から44.8%に上がります。中間の畳み込み2層を外すと45.4%です。どちらも単独で見れば、代償は予想より小さいものでした。両方を一緒に外すとネットワークは4層しか残らず、誤り率は一気に71.3%まで上がります。そこで著者らは、重要なのはネットワークにある程度の深さがあることで、どこか特定の層ではないと考えました。\n\nZFNet自身のアーキテクチャでも同じ実験をしています。全結合層を大きくしても小さくしても、影響はあまりありません。第3、4、5層の特徴マップ数を512、1024、512に広げると、検証top-1は38.4%から37.5%に下がります。さらに全結合層も8192ユニットに増やすと、学習誤り率は10.0%まで下がるのに、検証誤り率は38.3%に戻り、過学習が始まります。\n\n### 別のデータセットに移す\n\n著者らは、ImageNetで学んだ特徴をほかのデータセットに持っていけるかも調べました。第1〜7層を固定し、新しいデータセットで最後のsoftmaxだけを学習し直します。テストデータが学習セットに混ざらないよう、まずCaltech-101とImageNetで重複する44枚、Caltech-256と重複する243枚を見つけ、ImageNetの学習セットから取り除いたうえで、ImageNetモデルを学習し直しました。\n\n- **Caltech-101**（クラスごとに学習画像30枚）：86.5%。当時最良だったBoらは81.4%です。同じネットワークをCaltech-101でゼロから学習させると、46.5%にとどまります。\n- **Caltech-256**（クラスごとに60枚）：74.2%（比較対象は55.2%）。クラスごとの学習画像が6枚だけでも、Boらが60枚で出した結果を上回ります。\n- **PASCAL VOC 2012**：平均79.0%で、当時最良の手法より3.2ポイント低いものの、5つのクラスではそれを上回りました。PASCALの画像は多くが複数の物体を含むシーン全体なのに、モデルは1つのクラスしか出力できません。著者らは、これが不利に働いた理由の一つだと考えています。\n\n同じ時期に、Donahueらの研究も畳み込み特徴の汎化能力を調べていました。著者らはこれを踏まえて、一つの疑問を投げかけています。学習セットが1万枚に満たないベンチマークで、手法の優劣をきちんと比べられるのだろうか？\n\n### 上の層ほど使いやすいのか？\n\n原論文Table 7では、事前学習済みモデルをさまざまな層で切り、その上に線形SVMかsoftmaxをつないでいます。\n\n- **Caltech-101**：第1層だけなら44.8%、続いて順に66.2%、72.3%、76.6%、第5層で86.2%に達し、第7層は85.5%。\n- **Caltech-256**：第1層の24.6%から、第7層の71.7%まで上がり続ける。\n\nおおむね上の層ほど良くなります。Caltech-101では第5層と第7層の差は小さく、Caltech-256では第7層まで改善が続いています。\n\n## 結論\n\nこの論文がしたことは二つです。deconvnetで中間層の活性化を画素へ投影し、その図を使ってAlexNetを診断しました。第1層のエイリアシングと死んだフィルタは、どちらもまず図の上で見つかり、修正すると分類の成績も良くなりました。ここで可視化は、アーキテクチャを調整する道具になっています。\n\n同じ年のILSVRC 2013の分類部門に、ZeilerとFergusは「ZF」の名で参加し、top-5誤り率13.5%で3位でした。優勝はZeilerが率いるClarifaiで、外部データを使わない成績は11.7%です。\n\n可視化の手法そのものも、のちに検証の対象になりました。2014年、Springenbergらは[Striving for Simplicity](https://arxiv.org/abs/1412.6806)で、deconvnetと通常の逆伝播を組み合わせてguided backpropagationを作りました。2018年、Adebayoらの[Sanity Checks for Saliency Maps](https://arxiv.org/abs/1810.03292)は、モデルの重みをランダム化しても、guided backpropagationが出す図はほとんど変わらず、単なるエッジ検出によく似ていることを見つけました。投影図がどれほど鮮明でも、それが本当にモデルに応じて変わるのかは、別に確かめる必要があります。\n\n振り返ると、この論文のアーキテクチャ修正の効果は分類の成績が裏づけています。一方、それぞれの投影図がどこまで忠実なのかという問いは、後の研究に委ねられました。\n","imageSizes":{"/content/papers/assets/e846238b05c91faf3e65cc41d18380f105ef60fd65ec5ceaef64d428b9897b31.png":{"width":696,"height":677},"/content/papers/assets/6c45d745e8a2f4b60cc45bea1029353e303d5e3bbee1e62f438c71874fddf883.png":{"width":1200,"height":1329},"/content/papers/assets/416e3ce07fbed24c5bda83322fd60820ab4098de4d461a714d914793f63f41a4.png":{"width":1280,"height":400},"/content/papers/assets/a17219e0ee699c0d36ceeb892c3a304fe106143afa91432c0caaaaf91fefbb8b.png":{"width":1397,"height":292}}}
