ディープラーニング:どの変数が重要であるかを知るにはどうすればよいですか?


20

ニューラルネットワークの用語(y =重み* x +バイアス)の観点から、どの変数が他の変数よりも重要であるかをどのようにして知ることができますか?

10個の入力を持つニューラルネットワーク、20個のノードを持つ1つの隠れ層、1つのノードを持つ1つの出力層があります。どの入力変数が他の変数よりも影響力があるかを知る方法がわかりません。私が考えているのは、入力が重要な場合、最初のレイヤーへの重みの高い接続がありますが、重みは正または負になる可能性があるということです。したがって、入力の重みの絶対値を取得し、それらを合計することができます。より重要な入力は、より高い合計を持ちます。

したがって、たとえば、髪の長さが入力の1つである場合、次のレイヤーの各ノードに1つの接続、つまり20の接続(したがって20の重み)が必要です。各重量の絶対値を取り、それらを合計することはできますか?


3
あなたは確かにそれを行うことができますが、「すべての接続にわたるこの変数のすべての重みの合計」以外に、それが本当に何を意味するのかは明確ではありません。「重要」と呼ぶのは完全にarbitrary意的です。
マシュードゥルーリー

1
変数の重要性を示唆する情報が欲しいだけで、これは良い方法だと思います。
user1367204

回答:


16

あなたが説明することは、実際、ニューラルネット入力の重要性を定量化する1つの標準的な方法です。ただし、これが機能するためには、入力変数を何らかの方法で正規化する必要があることに注意してください。そうしないと、値が大きくなる傾向がある入力変数に対応する重みが比例して小さくなります。たとえば、変数の平均を減算し、標準偏差で除算するなど、さまざまな正規化スキームがあります。変数がそもそも正規化されていない場合は、変数の標準偏差を掛けるなど、重要度の計算で重み自体の修正を実行できます。

Ii=σij=1nhidden|wij|

ここで標準偏差であるI、番目の入力I IれるI番目の入力の重要性、wはI jが接続重みであり、I番目に入力jの第一層に隠れノード番目、及びnは隠されたが数であります最初の層の隠されたノードの。σiiIiiwijijnhidden

別の手法は、問題の入力に関してニューラルネットマッピングの導関数を使用し、入力全体で平均化することです。

Ii=σi|dydxi|

ここで、i番目の入力、yは出力であり、期待値は入力xのベクトルに関して取得されます。xiiyバツ


入力と最初の非表示レイヤーの間の接続のみを使用する場合(すべての非表示レイヤーを使用するのではなく)、これは機能しますか?
user1367204

最初の非表示レイヤーのみを使用する必要があります。1つのレイヤーの後、他の重みは1つの入力にもう1つ以上関連付けられません。これを明確にするために回答を少し編集しました。
サム・マリネ

私は別のアプローチを思い出し、それを答えに加えました。
サム・マリネ

11

やや強引だが効果的なソリューション:

入力機能の1つに定数を使用して、入力を「ドロップ」してみてください。次に、考えられる各ケースについてネットワークをトレーニングし、精度がどのように低下​​するかを確認します。重要な入力は、全体の精度に最大の利点を提供します。


それは確かに可能性です。
SmallChess

6
ただし、落とし穴があります:機能が非常に重要であっても、最初の機能と高度に相関する別の機能がある場合、どちらもあなたの基準では重要と見なされません(最初の機能の欠如は後者の存在によって補われますが、より多くのユニークな"機能がより重要にそのように)表示されます
Firebugの

これはいつか試験切除(より具体的にはマイクロ切除)と呼ばれている
Veltzerドロン

7

105

浅いネットワークの場合、これは変数の重要度を定義する例を示します。

本当に深いネットワークの場合、人々は変数の重要性についてあまり語らない。入力は画像のピクセルなどの生レベルの特徴であるためです。


私は自分の意図を反映するようにコメントを編集しました。私は、5つのノードではなく、最初のレイヤーで20のノードを言うつもりでした。浅いネットと深いネットを区別してくれてありがとう。
user1367204

9
@ hxd1011は慢なものではありませんが、深いということは、何千もの隠れたユニットではなく、より多くの層を意味します:)。
ラファエル

3

これについて見つけアイブそのほとんどが精巧に上場されているこのサイトより具体的にあなたが見ることができ、この。線形モデルのみについて話す場合、重みを正規化して解釈可能にする必要がありますが、これでも上記のリンクで誤解を招く可能性があります。入力の重要性(Garson、Gedeon、Milne)を解釈するために重みの複雑な関数を作成しようとした人もいますが、これでも誤解を招く可能性があります。一般的に、結果を一粒の塩で解釈することをお勧めします。

@rhadarの答えに同意しますが、その入力の平均値を使用して定数を使用する代わりにそれを追加し、ネットワークを再訓練することを忘れないでください。

PS:申し訳ありませんが、リンクを投稿したりコメントを投稿したりすることはできません。


1

あなたが持っていることを考えると:

  1. 分類タスク
  2. 訓練されたモデル
  3. 正規化された機能(0〜1)

誰もが試しましたか:

  1. バイアスをゼロにする
  2. 毎回、1つのホットベクトルをフィーチャとして渡します。1つを除くすべてのフィーチャはゼロです。
  3. 出力を調べます。

その場合、この出力はネットワーク内のこの1信号のパスの出力も表すため、出力はフィーチャの「重要性」を指定する数値になると思います。

これは、迷路内で電球を1つだけ照明し、出口から出る光を測定するようなものです。


これはあまり役に立たないと思います。評価したいのは、その入力の変動が出力にどの程度影響するか(単独で、または他の機能と組み合わせて)
-elachell
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.