ニューラルネットワークツールキットLIMEを実際に使ってみる:さあ、この不機嫌な人。説明しなきゃいけないことがあるじゃないか

Table of Contents

ニューラルネットワークツールキットLIMEを実際に使ってみる:さあ、この不機嫌な人。説明しなきゃいけないことがあるじゃないか

ディープラーニングは、画像認識と分類における頼りになる「AI」技術となっています。多数のモデルが市販されており、事前に学習済みでダウンロード可能なため、プログラマーが独自のモデルを作成する必要さえない段階に達しています。

これらのモデルのトレーニングは本質的に最適化作業であり、多数の内部重み係数を調整することで各サイクルにおけるエラー数を削減するために、ある程度複雑な(まあ、比較的複雑な)数学的処理を伴います。トレーニングフェーズの終了時には、割り当てられたタスクを実行できるニューラルネットワークが完成しているはずです。

ニューラルネットワーク(そしてディープラーニング)の問題は、一度学習させてしまうと、内部で何が起こっているのか分からなくなってしまうことです。プログラマーは、隠れ層の数、入力層と出力層のニューロンの数、そして内部の接続関係を設定します。

カードを持つロボットの手

ニューラルネットワークで何が起こっているのか調べてみるべきだよ。今、彼らは不正行為をしているって知ってる?

続きを読む

しかし、一度トレーニングすると、大規模なネットワークは、次のような単純な理由からブラック ボックスとして考えることができます。トポロジとすべての内部重みをリストして渡した場合、それをたどって、そのように分類する理由を説明することはほぼ不可能です。

これを従来のプログラムと比較してみましょう。手動でデバッグして動作を説明することは可能です。多少時間はかかるかもしれませんが、可能です。同様に、従来のプログラムを研究すれば、プログラム内の1行を変更した場合の影響を説明できます。しかし、学習済みのニューラルネットワークでは、入力を与えてネットワークをテストし、出力を確認せずに、重みの1つを変更したり、ニューロンを削除したりした場合の影響を説明することはできません。

さらに悪いことに、私が今お渡ししたものと同じ機能を果たすニューラル ネットの他のトポロジーが存在する可能性がありますが、出力からはそれらを区別することはできません。

例えば、これらの既成モデルに何らかのバイアスが組み込まれている場合、これは問題となります。例えば金融サービスでは、こうしたバイアスが、人種などの要素に基づいて潜在的な顧客を差別するといった問題を引き起こす可能性があります。

もし機械が肌の色を理由に融資を断った場合、そのモデルは良いものではない可能性が高いでしょう。顧客がなぜ融資を断ったのかを知りたいと思うのは当然でしょう。私たち、つまりモデルを運用する側も、モデルの内部で何が起こっているのかを知りたいと思うでしょう。そうすることで、モデルを特定し、改善できるからです。

Cor LIMEY – それは合理的な説明だ

では、機械学習モデルに自らを説明させるにはどうすればよいでしょうか?LIMEの登場です。LIMEは、米国ワシントン大学のMarco Tulio Ribeiro、Sameer Singh、Carlos Guestrinによる論文「Why Should I Trust You?: Explaining the Predictions of Any Classifier(なぜあなたを信頼すべきか?:あらゆる分類器の予測を説明する)」で説明されている研究に基づいています。

オリジナルの LIME は数年前のものですが、オリジナルの Python コードの開発は継続されており、Github サイトには活発な問題ページがあり、コードへのプッシュも継続されています。

さらに、2018年3月にはLIME用のRパッケージがCRANリポジトリで公開され、CRANコミュニティにおけるLIMEの利用が急増すると予想されています。実際、Rパッケージに関するカンファレンスはすでにいくつか開催されており、LIME自体もStrataやThe Register主催の今年の機械学習カンファレンスなどのイベントで注目を集め始めています。

このアプローチは、モデルに依存しない方法で、特別に訓練されたモデルが実際にどのように分類を行うかを説明することを目的としています。つまり、テキスト分類器、画像分類器、あるいはデータテーブルを扱う分類器と連携できます。画像分類器の場合、画像を歪めてモデルに提示し、モデルが画像のどの特徴を「認識」しているかを調べるというアイデアです。LIMEは、こちらのGithubリポジトリで公開されています。

LIME は数年前から流通していますが、その実力はいかがでしょうか? Python 実装を試してみました。

LIMEは様々な分類器の説明に使用できますが、ここでは画像分類に限定して説明します。分類器は、「犬」か「犬ではない」かといった単純な二値分類から、画像を幅広いクラスに分類するものまで様々です。多くの場合、分類器は、画像がネットが想定している通りのものである確率を表す数値を用いて分類します。例えば、下の車の画像を見てみましょう。

赤い車、写真はアンディ・コブリー

これをよく知られた画像分類モデルに実行すると、次の出力が生成されます。

752 レーサー、レースカー、レーシングカー 0.000552743 409 両生類、水陸両用車 0.000703063 480 車輪 0.00337563 582 グリル、ラジエーターグリル 0.00342907 818 スポーツカー、スポーツカー 0.460375 512 コンバーチブル 0.467833

最も高い数値を示した分類は、スポーツカーとコンバーチブルで約0.46です。その他はすべて0.1未満です。しかし、なぜモデルは該当の写真をスポーツカーと判断するのでしょうか?モデルがスポーツカーとは全く関係のない特徴を拾っていないと確信できるのでしょうか?この問題を説明する典型的な例として、写真に写っているハスキー犬かオオカミかを認識するように設計された分類器があります。LIMEのオリジナル論文はこちら(PDF、6.4「説明は洞察につながるのか?」、8~9ページ)をご覧ください。

この例では、分類器はうまく機能しましたが、テストの結果、分類器がオオカミの写真の背景に雪を誤って認識していたことが判明しました。これは、雪が降っているオオカミの数を減らし、雪が降っているハスキー犬の数を増やすトレーニングセットを使用することで解決できます。今回のケースでは特に問題はありませんが、自動運転車が同様の誤った動作をした場合、結果は非常に悪くなる可能性があります。例えば、人間を普通の物体と誤認し、回避するどころか衝突させてしまう可能性があります。

ピクセルパニック

このアルゴリズムのパフォーマンスはどの程度でしょうか?LIMEで動作させるための設定は、環境によっては少々面倒です。Tulio Ribeiro氏のGithubリポジトリにあるサンプルはPythonで記述されており、Jupyterノートブック用に最適化されています。私は、基本的な画像解析ツールのコードをDockerコンテナで実行することにしました。これには、多くの頭を悩ませ、多数のPythonライブラリとパッケージ、そして多数の事前学習済みモデルをインストールする必要がありました。いつものように、私の環境で動作させるにはコードを少し調整する必要がありましたが、一度調整すれば問題なく動作しました。

以下は、上記の赤い車の上位 3 つの分類の説明を示す 3 つの出力画像です。

3台のスポーツカー、写真はアンディ・コブリー

これらの画像では、緑色の部分が画像にとってプラス、赤色の部分がマイナスを表しています。ここで興味深いのは(これはあくまで私の説明ですが)、コンバーチブルとスポーツカーは私たちの頭の中では似たようなものだと思いがちですが、実際にはプラスとマイナスが大きく異なることです。

上でハイライト表示されたピクセルは確認できますが、モデルをトレーニングした元の画像を確認して独自の判断を下さない限り、「スポーツカー」と「コンバーチブル」でハイライト表示されたピクセルのセットが異なる理由を理解するのは難しいと思います。

他の車はどうでしょうか?例えば、このモデルはスポーツカーとランドローバーの違いを識別できるでしょうか?下の画像をご覧ください。

ランドローバー、写真はアンディ・コブリー

上位 3 つの説明は次のとおりです。

804 除雪車 0.00192881 865 レッカー車 0.00332598 610 ジープ 0.977946

ジープ(このトレーニングセットはアメリカ製だと思います)とランドローバーが、今のところ最も可能性の高い分類だと思いますが、LIMEはこの画像をどのように分類するのでしょうか?この分類の長所と短所は何でしょうか?

ランドローバー・ライム - 写真:アンディ・コブリー

これはスポーツカーの例と似ていますが、分類器はフロントガラスと車両前面の形状に基づいて分類を行っているようです。ただし、これはあくまで私の理解であり、人によって結果の解釈は異なる可能性があります。そして、それがこのアプローチの弱点です。私は出力結果を可能な限り正確に解釈しようとしていますが、それは私の経験と判断に基づいて行われており、それらは限定的で公平ではない可能性があります。

最後の例: 以前、私は分類モデルをテストするために、以下のユーロラック シンセサイザーの画像を使用しました。これは、そのようなモンスターの画像でトレーニングされたモデルがあまりないと思われるためです。

シンセサイザー、写真はアンディ・コブリー

今回は分類器は次の出力を生成します。

663 モデム 0.00846771 755 無線 0.0624085 689 オシロスコープ、スコープ、ブラウン管オシロスコープ、CRO 0.890522

LIME は、スコープとワイヤレスの説明として以下を生成します。

2台のシンセサイザー、撮影:アンディ・コブリー

クリックして拡大

2つの説明にはいくつか顕著な類似点がありますが、「ラジオ」に最も興味深いのは、非常に明るい数字が表示されている中央部分です。これはラジオの選局表示に似ているのでしょうか?繰り返しになりますが、元のトレーニングセットにアクセスできれば非常に役立ちます。

今のところ、LIMEはブラックボックス分類器の問題に対する興味深いアプローチです。しかしながら、現時点では、研究者が開発中のモデルから妥当な説明を引き出すのを支援するための研究室での使用が適切だと考えています。ブラックボックスの「推論」を真に理解する方法としては、特に機械学習の判断を真に信頼したいのであれば、まだ道のりは遠いかもしれません。

LIMEの現在の実装における大きな問題の一つは、説明文を生成するのにかかる時間です。例えば画像分類器では、画像ごとに説明文を生成するのに約6秒かかりましたが、これはPython実装によるものです。Rのパフォーマンスは分かりませんが、それよりも遅くないとしたら驚きです。

画像分類器の私のコードバージョンはここにあります。®

Discover More