- ホーム
- コラム
- YDC Labコラム
- AIはどこを見ているか?

AIはどこを見ているか?
2020.02.17
Lab研究員 北山
今回は次号以降にも通じるディープラーニングを理解する上で重要な話題です。
人間はある一面に捉われると他の面が見えなく、あるいは見ようとしなくなりがちですが、物事にはいろいろな側面があります。新たな側面を見つめることで、新たな発想につながることがあります。
今回は最適化のアルゴリズム「勾配法」に着目します。
PoCではいろいろなケースに遭遇しますが、正解率が上がらないときどうすればよいかということは共通の課題です。
正解率を上げる方法が分かればベストですが、それが難しいとしても、次のアクションにつなげるための何らかの情報があれば助かります。そうでなくても人間には「知って安心したい」という欲求があるためブラックボックスを嫌がります。
もくじ
- 1.AIはどこを見ているか?
- 2.CAM, Class Activation Mapping
- 3.勾配法(最急降下法)
- 4.Guided Backpropagation
- 5.Grad-CAM
- 6.Guided Grad-CAM
AIはどこを見ているか?
CAM, Class Activation Mapping という手法があります。
CAMの前にCNNの画像識別部分を簡単に説明します。
畳み込みは画像から特徴を抽出します。例えば次図は画像のどのあたりに目や毛、車輪といった特徴があるのか、サイズ7×7の特徴マップに抽出する処理を図示したものです。値の大きさはその特徴がより強く表れていることを意味します。

上図では3つの特徴しかありませんが、実際にはもっと多くの特徴を抽出します。畳み込み層も複数あります。ここではイメージしやすいように目や毛、車輪といった特徴を用いてますが、実際にはそのような人間が理解しやすい特徴ではありません。
注目は特徴マップが空間情報(つまり位置)を保存しているということです。
実際の画像と特徴マップの位置関係は図のような画像を切り出したような関係ではなく、特徴マップ上の1マスが画像上の広範な領域を参照するためもっとボヤけた感じになります。
次に特徴マップを GAP, Global Average Pooling と呼ばれる処理でサマライズします。厳めしい名前ですが特徴毎に平均しているだけです。
平均することで空間情報が失われます。

次に全結合層で、識別境界からの距離 y を求めます。

猫や犬、車など各クラス別に識別境界からの距離 y を求め、もっとも距離が大きいクラスに分類します。
このとき重み w は各クラス毎に値が異なります。犬や猫なら毛や目といった特徴を重視するし、車なら車輪を重視するといった具合です。つまり、重み w の大きさは各クラスがどの特徴を重要視しているかを意味します。重回帰分析で回帰係数の大きさで変数重要度を判断するのと同様です。
CAM, Class Activation Mapping
猫と判定された画像について、AIがどの部分を見て猫だと判断したのかを示すことがCAMの目的です。前述の処理の中で空間情報を失った原因は GAP にあります。
特徴マップは7×7で粒度が荒いとはいえ空間情報を保持しています。
そこで、特徴マップに重み w を掛けて位置別にスコア y を求めれば、特徴マップのどこを重視しているかが分かるんじゃないか、というのがCAMの仕組みです。
可視化するときはサイズ7×7のスコア y を入力画像と同じサイズにリサイズし、ヒートマップ化して入力画像に重ねて表示します。
結果↓ 赤色の部分が重視している(=スコア y が大きい)場所です。
元のサイズは7×7だったので精密な位置ではないことに注意してください。
長くなりますが、ここで終わると話を先へ進められないのでもう少しお付き合いください。
勾配法(最急降下法)
AI がどこを見ているのか、CAMではおおよその場所しか分かりませんでした。
Guided Backprop という手法なら詳細が分かります。
CAMは重み w の大きさに着目しましたが、Guided Backprop は損失の勾配(傾き)に着目します。ニューラルネットワークの学習は損失が少なくなるように重み w を更新しますが、このとき w が大きくなるように修正するということは、その特徴を重視しているということです。逆に w が小さくなるように修正するということは、その特徴を重視していないということです。
ニューラルネットワークの学習で用いられる勾配法では、損失 L の傾きから重み w の更新の向き(大きくするか小さくするか)が決まります。

損失 L の傾きは、損失を重み w で微分すれば求まります。Guided Backpropのイメージを掴んでもらうために、しばらく式が続きます。
ここでは話を簡単にするために、ノードが1つで活性化関数も無いシンプルなニューラルネットワークを考えます。
画像は画素の集合ですが

各画素値を変数 x とすると、このシンプルなニューラルネットワークは重回帰式と等価です。
次図参照↓

損失関数に二乗誤差を用いる場合
損失Lの傾きは
重み w の更新では、損失が減る方向に少しだけ w を修正します。
修正量をコントロールするための係数が学習係数です。
以上がニューラルネットワークの学習の仕組みです。
Guided Backpropagation
ここで改めて重回帰式を見ると、w と x を入れ替えても上で説明した学習の仕組みが成り立つことが分かります。
つまり重み w の修正量ではなく、画素値 x の修正量を求めることができるということです。修正量が大きいということは、そのクラスに対する影響が大きいということなので、画素レベルでの影響度が分かります。これが Guided Backprop の仕組みです。
最適化するのは重み w だということに捉われていると思いつかない発想ですね!
試した結果がこちら↓です。左がオリジナル画像、右が x の修正量、つまりAIが注目している画素です。

やや見づらいですが、CAMより精細です。
犬と猫の顔、特に目のあたりに注目していることが分かります。
Grad-CAM
勾配法はニューラルネットワークが多層になるとネットワークの出力側から入力側に向かって順次、損失を伝播してゆき各層の重みを修正します。これを誤差逆伝播法(back propagation)といいます。

Guided Backprop は入力画素の修正量に着目しましたが、同様のアプローチで中間層の特徴マップについてもAIが注目している領域を可視化することができます。これを Grad-CAMといいます。Guided Backprop とは若干、計算方法が異なります。
結果はこちら↓(元論文からの引用)
猫についてAIが注目している領域

一番左は元画像、右へ行くほど入力層に近い
最終の特徴マップ(左から2番目)ではクラス分類への影響が大きい領域が強調され、入力層に近づくほど広範な領域を見ていることが分かります。
右から2番目の特徴マップでは物体の輪郭が強調されているところが興味深いです。
試した中では Grad-CAM は CAM と似た結果になることが多かったです。
Guided Grad-CAM
Guided Grad-CAM はGuided Backprop と Grad-CAMを組み合わせたものです。
Guided Backprop の結果では犬と猫の両方が強調されており、猫として(あるいは犬として)AIが注目している領域が区別されていませんでした。
一方、Grad-CAM は犬と猫のどちらに着目しているか区別されますが、大雑把すぎて詳細がハッキリしません。そこで、Guided Backprop と Grad-CAM を組み合わせて互いをカバーします。
結果がこちら↓
猫についてAIが注目している領域
次回に続きます。
驚くべきことが明らかに なるかもしれません。
参考文献
Learning Deep Features for Discriminative Localization
Bolei Zhou, Aditya Khosla, Agata Lapedriza, Aude Oliva, Antonio Torralba
https://arxiv.org/abs/1512.
Striving for Simplicity: The All Convolutional Net
Jost Tobias Springenberg, Alexey Dosovitskiy, Thomas Brox, Martin Riedmiller
https://arxiv.org/abs/1412.
Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization
Ramprasaath R. Selvaraju, Michael Cogswell, Abhishek Das, Ramakrishna Vedantam, Devi Parikh, Dhruv Batra
https://arxiv.org/abs/1610.