深度学习模型可解释性(重温入门知识)

 

目录

1. 可解释性是什么

2. 我们为什么需要可解释性?

3. 有哪些可解释性方法


1. 可解释性是什么

0x1:广义可解释性
广义上的可解释性指:

在我们需要了解或解决一件事情的时候,我们可以获得我们所需要的足够的可以理解的信息。
比如我们在调试 bug 的时候,需要通过变量审查和日志信息定位到问题出在哪里。

比如在科学研究中面临一个新问题的研究时,我们需要查阅一些资料来了解这个新问题的基本概念和研究现状,以获得对研究方向的正确认识。

反过来理解,如果在一些情境中我们无法得到相应的足够的信息,那么这些事情对我们来说都是不可解释的。比如刘慈欣的短篇《朝闻道》中霍金提出的「宇宙的目的是什么」这个问题一下子把无所不知的排险者卡住了,因为再高等的文明都没办法理解和掌握造物主创造宇宙时的全部信息,这些终极问题对我们来说永远都是不可解释的。

0x2:在统计学习中的可解释性
在传统统计中,我们通过调查大量的数据来构造和验证假设。我们建立模型来构建规则,我们可以将其纳入我们的模型中。

例如,营销公司可以建立一个模型,将营销活动数据与财务数据相关联,以确定构成有效营销活动的是什么。这是一种自上而下的数据科学方法,可解释性是关键,因为它是所定义规则和过程的基石。由于相关性往往不等于因果关系,所以在进行决策和解释时,需要对模型进行很强的理解。

作为一名数据分析从业者,我们经常关心微调模型以获得最佳性能。

数据科学通常被定义为:'给出具有X标签的数据,并以最小误差找到模型'。

尽管训练高性能模型的能力对于数据科学家来说是一项关键技能,但能够从更大的角度来看是很重要的。

数据和机器学习模型的可解释性是在数据科学的 “有用性”中至关重要的方面之一,它确保模型与您想要解决的问题保持一致,能够正确地解释你的发现是数据科学过程的重要组成部分。

0x3: 機械学習の分野における解釈可能性
1. デシジョン ツリーは現在、業界で最も解釈可能な非線形機械学習アルゴリズムとして認識されています。
特に機械学習の分野では、最もユーザーフレンドリーなデシジョン ツリー モデルを例に挙げます。 、各モデルの意思決定は、モデルの意思決定の根拠を示すための意思決定シーケンスを経ます。

例えば、男性&未婚&医師&ハゲという条件は、「興味がない」という判断に相当する。

さらに、デシジョン ツリー モデルに付属する情報理論に基づくスクリーニング変数基準は、どの変数がモデルの意思決定プロセスで重要な役割を果たすかを理解するのにも役立ちます。

したがって、ある程度、決定木モデルはより解釈可能性の高いモデルであると考えられます。

2. DNN 深層学習モデルの解釈可能性はそれほど明らかではありませんが、
最もユーザーフレンドリーではない多層ニューラル ネットワーク モデルを例にとると、モデルの意思決定の根拠は何ですか?

1/(e^-(2*1/(e^(-(2*x+y))+1) + 3*1/(e^(-(8*x+5*y) )+1 のようになります。 ))+1) は基準として 0.5 より大きく (これはすでに最も単純なモデル構造です)、この一連の非線形関数の重ね合わせ式はニューラル ネットワークの「脳回路」を直接理解することを困難にします。ニューラル ネットワーク ネットワークの習慣はブラック ボックス モデルと考えられます。

人間の脳は、非線形の関係を理解するのが苦手であり、ましてや、組み合わせが何層にも重なった複雑な非線形の組み合わせを理解するのは苦手です。

したがって、自然な思考戦略は、元の高次の意思決定をあまり失わないという前提を保つために、より低い次元での低次の近似写像を見つけること (つまり、低次元の表現方法を見つけること) です。超曲面空間分布 次に、低次の決定曲面を求めます。このようにして、人間は低次の決定面から本来の高次の決定超面を垣間見ることができる。

著者の考え: この考えによれば、t-SNE と PCA の次元削減後の視覚化は低次の近似マッピングであることが実際にわかります。

2. なぜ解釈可能性が必要なのでしょうか?

広い意味で、深層学習モデルの解釈可能性に対するニーズは、主に問題とタスクの理解が不十分なことから生じます。

高度な非線形性により、多層ニューラル ネットワークは非常に高度なモデル表現機能を備えていますが、適切なパラメーター調整手法を使用すると、多くの問題に対して非常に満足のいくパフォーマンスを達成できます。

厄介な問題は、非常に高い精度の機械を作ったにもかかわらず、最終的には非常に適合度の高い、一見無意味に見えるモデルパラメータと判定結果しか得られないことです。モデル開発者として、優れたモデルだけで満足することはできません。

実際、モデルの解釈可能性を探ることは、モデルの動作原理をよく探ることであり、原理を理解していれば、無駄なモデル調整作業を多く行う必要がなくなり、最適化の方向性もより定まるでしょう。

パターン認識の観点から見ると、モデル自体も知識を意味します (またはモデル自体が何らかのパターン知識を保存します)。そして、モデルが (人間が理解できる方法で表現された) データからどのような知識を学習して生成したのかを知りたいと考えます。最終的な決断。潜在的な関連性を発見するのに役立つでしょうか。

たとえば、医師が患者のリスクを判断するのに役立つディープ ラーニング モデルに基づくアプリケーションを開発したいと考えています。最終的な判断結果に加えて、モデルがそのような判断を下す要因を理解する必要がある場合もあります。患者の配慮。

0x1: 解釈可能性に対するさまざまな動機
1. バイアスを特定して軽減する
バイアスはどのデータセットにも存在する可能性があり、データ サイエンティストはバイアスを特定して修正する必要があります。

1. データセットのサイズは制限されている場合があり、すべてのデータを代表しているわけではない場合があります。
2. または、データ取得プロセスで潜在的なバイアスが考慮されていない可能性があります。
偏りは、データを徹底的に分析した後、またはモデルの予測とモデルの入力の関係を分析するときに明らかになることがよくあります。
バイアスの問題に対する単一の解決策はありませんが、説明可能性を高めるための重要なステップは、潜在的なバイアスを認識して検出することであることに注意してください。

1) 特徴量エンジニアリングの逸脱

バーチャル履歴書選考シナリオでは、面接官が提出した履歴書を細分化し、単語索引表を作成しましたが、IT企業の技術部門では男性の求職者が圧倒的に多いという見落としがちな問題がありました。 , そのため、男性の求職者の履歴書には「技術履歴書」などの単語が登場する可能性が高くなります。

これらの単語ベクトルを使用してモデルをトレーニングする場合、採用担当者が「技術プロフィール」を検索すると、女性の履歴書が最下位に保たれてしまいます。

しかしその一方で、この逸脱が意図的なものであれば、この種のバイスも許容されることにも注意する必要があります。例えば、求職者の履歴書を平等に検索するのが目的ではなく、できるだけ技術スキルを持った求職者を見つけることが目的である場合や、採用が男性寄りである場合には、このワードテーブルインデックスのエンコード方式で問題ありません。

結論として、データ マイニング プロジェクトにおけるバイアスは、私たちにとって有益な場合もあれば有害な場合もあり、慎重に扱う必要があります。

2) トレーニングデータサンプルの不均衡な分布

たとえば、小さなデータセットで物体検出モデルをトレーニングしている場合、画像の幅が制限されすぎることがよくあります。データ内のノイズの多い重要でない要素のみを適合させるモデルを回避するには、さまざまな環境、さまざまな照明条件、さまざまな角度でのさまざまなオブジェクトの画像が必要です。

非画像分野、特に NLP テキスト検出の分野では、さまざまなテキスト スタイル (コード スタイル) のサンプル数が不均一に分布していることがよくあります。これは、WEBSHELL Web サイトのバックドアでよく見られます。ハッカーは、次のいずれかを使用する傾向があります。特定のいくつかの WEBSHELL サンプルの場合、この偏差がもたらす最も明白な問題は、モデルがいくつかの非常に小さな黒いサンプルを無視する可能性があることです。

2. 問題のコンテキストを考慮する
ほとんどの問題では、使用しているデータセットは、解決しようとしている問題の大まかな表現にすぎず、機械学習モデルは実際のタスクの複雑さを完全に把握することはできません。純粋に理論上の無限 N サンプルを実際のエンジニアリングで実現するのは非常に困難です。

この時点で、解釈可能なモデルは、モデルに何が含まれ、何が含まれていないのかを理解して説明するのに役立ちます。

3. 一般化とパフォーマンスの向上
解釈性の高いモデルは、通常、より優れた一般化機能を備えています。

解釈可能性は、すべてのデータ ポイントのモデルの詳細をすべて知ることではありません。ソリューションのパフォーマンスを向上させるには、確かなデータ、モデル、問題の理解を組み合わせる必要があります。

0x2: 解釈可能性は、セキュリティの攻撃的および防御的な AI の分野でも必要です.
著者は、近年、業界や技術界で、良好な結果をもたらした多くの実用的なエンジニアリングアプリケーションを見てきました. 深層学習モデルは、膨大なデータとデータに基づいています。大規模な深部構造の検出結果は非常に良好で、国際的なベテラン AV エンジンの検出能力をも上回っています。結果を見る限り、解釈可能性はそれほど必要ではないようですが、結局は結果が一番重要で、世の中には説明できないことが多すぎて、すべてを完全に解釈できるわけではありません。

ただし、著者は、解釈可能性が必要なシナリオがまだいくつかあると考えています。

1. モデル検出パフォーマンスの低下の本当の理由を見つける - 異常の原因を追跡して特定する
ある日の午後、空は晴れていて席でブログを書いていたとき、突然大量の誤報が鳴り響き、あなたの深いところにモデルで一連のエラーが発生しました。レポート。落ち着くためにモデルを緊急にログオフし、次に行うべきことは、誤検知の理由を見つけることです。

しかし、ここで問題が発生します。モデルには 2000 ワットの独自のパラメーターがあり、レイヤーは完全に非線形の組み合わせです。どのニューロンがこのサンプルのバッチで誤検知を引き起こしたかをどのようにして知ることができるでしょうか? 偽陽性を引き起こすこのサンプルのバッチの共通点は何ですか? これらの特徴パターンのうち、モデルによって黒いパターンとして誤認識されるのはどれですか?

この一連の質問により、トレーニングされた深層学習モデルの解釈可能性をより深く調査することができます。

2. 反復最適化の最速の方向性を見つける
モデル開発のプロセスでは誰もが通過する段階があると思います Google で多くの学術論文を読み、さまざまなニューラル ネットワークの組み合わせを試してみると、多くのニューラル ネットワークが存在することがわかりますネットワーク構造が現在提案されており、論文の実験結果も非常に素晴らしいです。現時点では、論文の問題シナリオは私たちのプロジェクトと一致しないかもしれませんが、「幸運の精神」でたくさん試してみます。

最後に、数週間にわたる多数の実験を通じて、モデル構造を「模索」しました。これは、トレーニング セットと検証セットの両方で非常に良好なパフォーマンスを示し、両方とも 99.8/99.9 の精度を獲得しましたが、まだ少量の誤差がありました。 (筆者の私たちが働いている業界は誤検知に敏感であり、誤検知は比較的許容されています。)この時点で、次にそれをどのように最適化するかという問題に直面します。サンプルを増やし続けますか? それとも論文を読み続けてモデル構造を最適化しますか? 異なるニューラルネットワーク構造間に原理的な共通点はあるのでしょうか?

この問題を体系的かつ工学的に解決したい場合は、解釈可能性の研究を行う必要があります。たとえば、解釈可能な視覚化を通じてモデルのホットスポットの重み分布を取得しました。つまり、入力特徴空間内のどの特徴次元がモデルより「派手」で、他の特徴次元が「比較的過小評価されているか」を分析しました。これは正確にこれである可能性があります。これが誤検知の理由の 1 つです。

関連リンク: 

https://www.leiphone.com/news/201805/Ti3mOdeRlWTplIlZ.html
https://cloud.tencent.com/developer/article/1096716
https://zhuanlan.zhihu.com/p/38151985
https://www .jiqizhixin.com/articles/2018-01-10
 

3. どのような解釈方法が利用可能か

機械学習の目的は、データから知識を発見したり問題を解決したりすることであるため、このプロセスでデータまたはモデルに関する理解可能な情報を提供できる限り、知識をより完全に発見し、問題を理解し、解決するのに役立ちます。そうすれば、それらはすべて解釈可能性メソッドとして分類できます。解釈可能性プロセスの手法に従って分類すると、大きく次の 3 つに分類できます。

1. モデル化前の解釈可能性メソッド
2. それ自体が解釈可能なモデルを構築する
3. モデル化後のモデルを説明するために解釈可能性メソッドを使用する0x1:
モデル化前の解釈可能性メソッド
のカテゴリ 実際には、このメソッドには主にデータの前処理またはデータ表示のいくつかのメソッドが含まれます。機械学習は、データから知識や法則を発見するという問題を解決します。扱いたいデータの特性についてほとんど知らない場合、解決したい問題を十分に理解できると期待するのは非現実的です。したがって、モデリング前の解釈可能性手法の鍵は、データ分布の特性を迅速かつ包括的に理解し、モデリング プロセス中に直面する可能性のある問題を検討し、問題にアプローチするための最も合理的なモデルを選択できるようにすることです。可能な限り最善の解決策。

1. 数据可视化
数据可视化方法就是一类非常重要的建模前可解释性方法。大多数时候,我们在真正要研究一个数据问题之前,通过建立一系列方方面面的可视化方法来建立我们对数据的直观理解是非常必须的,特别是当数据量非常大或者数据维度非常高的时候,比如一些时空高维数据,如果可以建立一些一些交互式的可视化方法将会极大地帮助我们从各个层次角度理解数据的分布。

这方面的相关讨论,可以参阅我的另一篇blog。

2. 样本数据探索
还有一类比较重要的方法是探索性质的数据分析,可以帮助我们更好地理解数据的分布情况。比如一种称为 MMD-critic 方法中,可以帮助我们找到数据中一些具有代表性或者不具代表性的样本。

 

 

3. 特征重要性探索
特征重要性是解释模型的一种基本方法

0x2:建立本身具备可解释性的模型
模型本身具备可解释性是最好也是最直接的一类可解释性方法,同样也是一类要求和限定很高的方法(深度神经网络在很多情况下就不具备可解释性),具备可解释性模型大概可以分为以下几种

1. 基于规则的方法(Rule-based)
2. 基于单个特征的方法(Per-feature-based)
3. 基于实例的方法(Case-based)
4. 稀疏性方法(Sparsity)
5. 单调性方法(Monotonicity)
1. 基于规则的方法(Rule-based)
基于规则的方法比如我们提到的非常经典的决策树模型。这类模型中任何的一个决策链都可以对应到一个逻辑规则表示。在决策树中,可解释性通过一连串的 if-else 逻辑组合来表达,

ただし、ルールが表す量が多すぎる場合や、元の特徴自体が特に説明しにくい場合には、ルールベースの方法が適さない場合があります。

2. 単一の特徴に基づく特徴ごとの手法は、
主に線形回帰、ロジスティック回帰、一般化線形回帰、一般化加法モデルなどの非常に古典的な線形モデルであり、このようなモデルは現在最も主流であると言えます。解釈可能な方法。線形回帰式の w と b は非常に解釈可能です。

線形回帰は、非常に古典的な数学モデルと言えます。計量経済学では、経済学や関連分野の論文を含め、ほとんどの書籍で線形モデルについて説明されています。実際、そのほとんどが研究方法としても線形回帰を使用しています。この非常に古典的なモデルは、世界中で毎秒約 800 万回使用されています。

なぜ人々はこのモデルをこれほど好むのでしょうか? モデルの構造が比較的単純であることに加えて、より重要なのは、線形回帰モデルとその変形モデルの一部には非常に強固な統計的基礎があるということであり、統計学は説明可能性を最も重視する学問であると言えます。 . 何百年もの間、数え切れないほどの数学者・統計学者がさまざまな状況におけるモデルのパラメーター推定、パラメーター補正、仮説検定、境界条件やその他の問題について議論しており、その目的は、モデルがさまざまな状況で非常に優れた説明可能性を持つようにすることです。

3. ケースベース法(Case-based)
ケースベース法は、主にいくつかの代表的なサンプルを通してクラスタリング・分類結果を説明する方法です。代表的なサンプルを観察することで、対応するカテゴリのサンプルの巨視的な特徴を直感的に得ることができます。

たとえば、下図に示すベイジアン ケース モデル (BCM) では、サンプルを 3 つのグループに分け、各グループの代表的なサンプルと重要な部分空間を見つけることができます。

 

 

次の最初のタイプのクラスタリングの場合:

緑色の面は代表的なサンプルであり、緑色と四角形は代表的な特徴部分空間 (2 つの特徴次元を含む) です。

このことから、最初のカテゴリの巨視的特徴は緑色の面を持つ正方形の束であるという予備的な判断を得ることができます。
著者の考え方: コミュニティ発見のクラスター センターと Kmeans クラスタリングのクラスター セントロイドも、本質的にはサンプルベースのデータ視覚化の観点を提供できます。
コミュニティの発見についての議論については、私の他のブログを参照してください。

4. スパーシティ法 (Sparsity)
スパース性に基づく手法は、主に情報のスパース性の特性を利用して、モデルの表現を可能な限り単純化します。

たとえば、次の図に示すようなグラフスパース LDA メソッドは、階層的な単語情報に基づいて階層的なトピック表現を形成するため、いくつかの小さなトピックをより一般的なトピックに要約することができ、特定のトピックが何であるかを理解しやすくなります。テーマはの略です。

 

 

5. 単調性
多くの機械学習問題では、一部の入力と出力の間に正負の相関関係が存在しますが、モデルの学習中にこの単調関係を見つけることができれば、モデルの解釈可能性を高めることができます。

たとえば、特定の病気に罹患する確率に関する医師の推定は、主にその病気に関連するいくつかの高リスク要因によって決まり、単調な関係を見つけることは、これらの高リスク要因を特定するのに役立ちます。
しかしその一方で、入力データの特徴空間は高次元の特徴であることが多く、例えば著者のいるセキュリティ分野では、抽象化されたベクトルの特徴も高次元の特徴となることが多い。このような高次元データを前にすると、入出力間の線形相関を見つけることが非常に困難です。

0x3: モデリング後のモデルを説明するために解釈可能性メソッドを使用します。モデリング
後の解釈可能性メソッドは、主にブラック ボックス プロパティを持つ深層学習モデルを対象としており、主に次のカテゴリの作業に分類されます。

1. 隠れ層解析手法
2. シミュレーション/プロキシモデル
3. 感度解析手法
関連リンク:

https://www.leiphone.com/news/201805/Ti3mOdeRlWTplIlZ.html
https://new.qq.com/omn/20180117/20180117A0T4JE.html 
 

4. Lime - 機械学習分類器の予測の説明
Lime は、機械学習の意思決定者が包括的な決定を下す「要因」を視覚的な方法で示します。

0x1: Lime の原理
直感的に言えば、Lime はローカル線形近似を使用してターゲット モデルをシミュレートします。ターゲット モデル自体はグローバルに複雑である可能性がありますが、特徴のローカル インスタンスをより簡単に近似することができます。

対象となるモデルをブラックボックスとして捉え、その説明として低次元の疎線形モデルを継続的かつ段階的な試行を通じて学習します。

下の図は、複雑なモデルの決定関数です。青/ピンクの背景は 2 つの決定面を表しています。明らかに、これは非線形です。

図中の真っ赤な×印がLimeで得られた説明例であり、説明例Xを中心にサンプリングし、そのサンプリングの重み基準をXへの近似度(この場合は大きさ)とすると、線形モデル、つまり点線です。

明らかに、これは局所的に近似された線形モデルであり、グローバルなモデルではありません。

 

 

0x2: ランダムフォレストの決定要因をLimeで説明する

# -*- coding: utf-8 -*-

import lime
import sklearn
import numpy as np
import sklearn
import sklearn.ensemble
import sklearn.metrics

# For this tutorial, we'll be using the 20 newsgroups dataset. In particular, for simplicity, we'll use a 2-class subset: atheism and christianity.
from sklearn.datasets import fetch_20newsgroups
categories = ['alt.atheism', 'soc.religion.christian']
newsgroups_train = fetch_20newsgroups(subset='train', categories=categories)
newsgroups_test = fetch_20newsgroups(subset='test', categories=categories)
class_names = ['atheism', 'christian']

# Let's use the tfidf vectorizer, commonly used for text.
vectorizer = sklearn.feature_extraction.text.TfidfVectorizer(lowercase=False)
train_vectors = vectorizer.fit_transform(newsgroups_train.data)
test_vectors = vectorizer.transform(newsgroups_test.data)

# Now, let's say we want to use random forests for classification. It's usually hard to understand what random forests are doing, especially with many trees.
rf = sklearn.ensemble.RandomForestClassifier(n_estimators=500)
rf.fit(train_vectors, newsgroups_train.target)

pred = rf.predict(test_vectors)
res = sklearn.metrics.f1_score(newsgroups_test.target, pred, average='binary')

print res

# Explaining predictions using lime
from lime import lime_text
from sklearn.pipeline import make_pipeline
c = make_pipeline(vectorizer, rf)

print(c.predict_proba([newsgroups_test.data[0]]))

# Now we create an explainer object. We pass the class_names a an argument for prettier display.
from lime.lime_text import LimeTextExplainer
explainer = LimeTextExplainer(class_names=class_names)

# We then generate an explanation with at most 6 features for an arbitrary document in the test set.
idx = 83
exp = explainer.explain_instance(newsgroups_test.data[idx], c.predict_proba, num_features=6)
print('Document id: %d' % idx)
print('Probability(christian) =', c.predict_proba([newsgroups_test.data[idx]])[0,1])
print('True class: %s' % class_names[newsgroups_test.target[idx]])

# The classifier got this example right (it predicted atheism).
# The explanation is presented below as a list of weighted features.
print exp.as_list()

# These weighted features are a linear model, which approximates the behaviour of the random forest classifier in the vicinity of the test example.
# Roughly, if we remove 'Posting' and 'Host' from the document , the prediction should move towards the opposite class (Christianity) by about 0.27 (the sum of the weights for both features).
# Let's see if this is the case.
print('Original prediction:', rf.predict_proba(test_vectors[idx])[0,1])
tmp = test_vectors[idx].copy()
tmp[0,vectorizer.vocabulary_['Posting']] = 0
tmp[0,vectorizer.vocabulary_['Host']] = 0
print('Prediction removing some features:', rf.predict_proba(tmp)[0,1])
print('Difference:', rf.predict_proba(tmp)[0,1] - rf.predict_proba(test_vectors[idx])[0,1])

# The explanations can be returned as a matplotlib barplot:
fig = exp.as_pyplot_figure()

# The explanations can also be exported as an html page (which we can render here in this notebook), using D3.js to render graphs.
exp.show_in_notebook(text=False)

# Alternatively, we can save the fully contained html page to a file:
exp.save_to_file('./oi.html')

# Finally, we can also include a visualization of the original document, with the words in the explanations highlighted. Notice how the words that affect the classifier the most are all in the email header.
exp.show_in_notebook(text=True)

Relevant Link:

https://github.com/marcotcr/lime
https://www.oreilly.com/learning/introduction-to-local-interpretable-model-agnostic-explanations-lime


转载于:https://www.cnblogs.com/LittleHann/p/9720503.html

パート II: コミュニティ検出の概念と簡単な実装

ソーシャルネットワークでは、ユーザーはあらゆる点に相当し、ネットワーク全体の構造はユーザー間の関係によって形成されます。

このようなネットワークでは、一部のユーザーは比較的密接に接続されており、一部のユーザーは比較的疎に接続されています。より密接に接続されている部分はコミュニティとみなすことができ、内部ノード間には比較的密な接続が存在しますが、2 つのコミュニティ間の相対的な接続は比較的疎です。

全体の全体構造をコミュニティ構造と呼びます。以下の図に示すように、赤と黒の点セットはコミュニティの構造を示しています。

 

参考URL: https://www.cnblogs.com/LittleHann/p/9078909.html
——————————————————
著作権表記:この記事はCSDNブロガー「Give Another」ボウル「元の記事は CC 4.0 BY-SA 著作権規約に従っています。転載する場合は、元のソースのリンクとこの声明を添付してください。
元のリンク: https://blog.csdn.net/qq_35155934/article/details/109189919

おすすめ

転載: blog.csdn.net/modi000/article/details/132297194