どうも、Panamixkedaです。Qiita2回目の投稿です。
転職きっかけでQiita1回目を書いた後、2回目は何を書こうかな?と割と迷っていたところ、Kindleで「XAI(説明可能なAI)」というものオススメ、いやレコメンドされ、
読んでみるとこれがドストライク。
前回『コンサルに使うならXGBoostあたりまでかな。DNNは説明可能性的に基本難しい。』という冷めたスタンスで、業務改善コンサルのためだけの、一連のデータ可視化・分析手法を書きました。が、これを読んでまあ簡単にあきらめるものではないな、という感じになりましたね。
eXplainable AI、つまり人工知能の説明可能性を高める試みについての本です。色々な手法について書かれております。まあ全手法近似なのですが。
まだまだ発展途上の領域ではありますが、これを読んでAIを説明できる気になりましょう!大丈夫、近似手法だろうが条件付きだろうが、そもそもAIで出した値は全て仮説です。『近似です・仮説です、そしてそうであることはこういった場合にこういう確率でこんなリスクです』を説明すれば、クライアントも提案したモデルを採用してくれる、こともあるでしょう。
では以下手法のご紹介。
##LIME
特徴量の重要度を推定する手法。
まず、少なくともうまくデータを選べば、インプットがそんなに変わらなければアウトプットもあまり変わらない、という仮定を対象のモデルにいたします。(この仮定を忘れてはならない)
適当に教師データを1つとってきます。もとのデータ(x)をちょっとだけいじる作業を繰り返してデータ群を作成、それら摂動データ(z)をモデル(f)にくわせ出てきたデータを近傍データf(z)とします。線形関数gでも設定しまして、コスト関数を適当にf(z)とg(z)間の二乗誤差的な形にでも(※)設定します。
コスト最小化した結果のg(z)の各特徴量に関する傾きが、特徴量の(局所的な)重要度です。
以下少し横道。
ものすごく言葉で書いてますが、これは関数を書くのがめんどいから、という理由だけではなく、機械学習という領域では、
ここに入るのはこういう作用がある関数であると最低限言える必要はあるが、その詳細な形の最適解はとりあえず試してみないとわからん
というマインドが重要だと思っているからです。わかりにくいだろうので※を例にすれば、とりあえずf(z)とg(z)の間の“距離(離れ具合)”と言える数なら、二乗誤差でなくても誤差の3乗でも何でもここに入りうると思っている方がいい、ということです。(この場合で3乗はセンス悪そうですけど)
自然現象を忠実に再現する必要のある自然科学とは違い、色んな関数形を試してみて最も精度が出たり早かったりするものが生き残ればいいというのが、機械学習の研究だと思っています。まあボトムアップに機械学習の理論的側面を構築していく研究もあり、そういった領域の方にはそぐわないマインドかもしれませんが。
##SHAP
ゲーム理論での“シャープレイ値”がもとになってできた手法らしい。大局的な特徴量重要度を推定する手法。
ゲームで言うプレイヤーを特徴量と考え、ある特徴量が推定に“参加”したときとそうでないときの予測値の変化を調べ、それを特徴量の重要度と考えます。ある特徴量が推定に参加しないことを、その特徴量をある固定値にすることで表現します。
加法性がある値であり、複数モデルのアンサンブル(線形)をした時も使用できます。
##その他
他手法、超絶簡単にお伝えいたします。
・Permutaion importance:ある特徴量について、全データでランダムシャッフルしたときの予測値の変化を特徴量の重要度と考えます。
・Partial Dependence Plot:ある特徴量の値を変えていき、予測値(複数データの平均でも取って)の変化をみてグラフ化します。1つの特徴量の中でも、小さい時のグラフの傾きの方が大きい、などが見れる。
・Tree Surrogate:決定木の代理モデルを考えます。同じインプットなら似ているアウトプットを出してくれるほどいい代理モデル、という最終出力しかみない雑さがある。代理モデルでの特徴量重要度と真の特徴量重要度が類似してると仮定する、ということ。もちろん木以外の代理モデルもある。
・Grad-CAM:CNNで使われる。出力に与えるその前のConv層の各セルからの影響の大きさは、出力を各Conv重みで偏微分したもの(誤差逆伝播で出す値)だという発想。特徴量マップのどこが重要かの可視化ができる。
・Integrated Gradients:NNで使われる。まず任意の固定値x'をとり、実データxをとってきたときのモデルの出力値をF(x)とする。パラメタa(0≦a≦1)を用いてx'とxを結ぶ直線をx'+a(x'-x)と表し、F(x)の特徴量xiに対する偏微分値(誤差逆伝播でだす値)をこの積分経路で積分したものを、xiの重要度とする。(※投稿時点での理解。)
・Attention Map:Attenntion層で使われる。Attention層ですごい発火してるということはAttentionに値する領域だろうというトートロジー的発想(だと思っている)。これは今のところ“経験的に”正しい。
##各手法についての注意事項
かなり簡単にですが、分かった雰囲気を感じてもらえるよう説明しました。理解を深めるため、例えば以下のようなことが各手法ではどうなっているということか、まず自分で推理してみてから書籍の方など読んでいただけると、学習効率がいいかもしれません。
・特徴量同士の相互作用は考慮されているか?
・計算量は現実的か?
・1回計算するだけで安心な値か?(偶然大きくなりすぎたり小さくなりすぎる可能性がある値でないか?)
などなど。
AIの説明可能性については発展途上な研究領域ですが、ここでキーワードが出てきた手法はすでにライブラリ化もされたり、実務でも気軽につかるようになっているようです。(つまりちょっとだけ古い)
個人的に説明可能性は学問的にも興味がある領域なので、もう少し最新の論文解説などもまたさせていただくかもしれません。
ではまた、よろしくお願いいたします。