conta's diary

思ったこと、やったことを書いてます。 twitter: @conta_

3分で分かるDeep Learningの “Dark Knowledge"

最近Deep Learning界隈で話題のDark Knowledgeについて。

Deep Learningの教祖、Hinton先生がとあるところで”Dark Knowledge”というタイトルで発表されていました。 最初タイトルを見た時に、やばい、黒魔術的な何かか?!中二病的な何かか!と思いました笑
“Don’t be evil”なんてなかったんや。。。 というわけではなく、翻訳するとおそらく”隠れた知識”や”影の知識”になるのではないかと思います。(多分狙ってると思いますが)
面白そうだったので3分で理解できる範囲でざっとまとめてみます。

コンセプト

Deep Learningでクラス分類の学習をする際、一般的にアウトプットとしてSoftmax関数が利用されます。 学習器のアウトプットおける、Softmaxの最大値が指し示すものが推定されたクラスになります。 このSoftmax関数によるアウトプットには分類をする以外の能力(Softmaxのアウトプットに現れる何らかの相関関係)があり、 その性質をうまく利用することで、学習するネットワークをより小さく(より少ないパラメータで)、 少ない学習データセットでも高い性能を発揮できる、とのことです。

f:id:contaconta:20141204013458p:plain

例えば、(いぬ、ねこ、...、くるま)のクラスを持った画像の識別器を作ったとします。 その識別器の "ねこ" の出力は、"くるま” の出力よりも見た目の近い ”いぬ” の出力に何らかの相関が現れそうだなーという気がしますよね。
”くるま” と ”ねこ” よりも ”いぬ” と “ねこ" の方が似ている、といった なんらかの半教師的な情報の有効活用しよう、というのが今回のコンセプトだと思います。 (こういった本来のタスクでない隠れた知識のことを”Dark Knowledge”と読んでいるのでしょうか)

どうやるの?

Soft targets(?)という考え方を導入します。

通常のSoftmax関数を利用したロス関数{ \displaystyle Loss^{hard} }は下記のようになります。

{ \displaystyle
p_i =   \frac{exp \left( x_i  \right)} { \sum_{k=1}^{N} exp \left( x_k  \right)}
}

{ \displaystyle
Loss^{hard} = -\sum_{k} y_k \log{  \left(p_i  \right) }
}

*ここで { \displaystyle y_k} は 正解なら1, 不正解なら0 をとる。

一旦上記を学習した後、ここで得た出力から各クラスにおけるSoftmax出力の アンサンブル平均をとって、

{ \displaystyle
p_i(T) =   \frac{exp \left( \frac {z_i} {T}  \right)} { \sum_{k=1}^{N} exp \left( \frac{z_k} {T}  \right)}
}

を計算し、ラベルデータと見立てることで下記のロスを計算します。

{ \displaystyle
Loss^{soft} = -\sum_{k} p_k(T) \log{  \left(p_i   \right) }
}

*ここでTは“temperature”と呼ばれるパラメータ。クロスエントロピーの調整に使う。

これによって先ほどの理論を実現します(たぶん)。

実際どうなの?

MINST(数字認識)のデータセットでの実験では Dark knowkedge を使うとDropoutを使わなくても同等の性能を出すことができたそうです。 (しかも、ネットワークのパラメータの数も少なくできている) また、”3”のデータを抜きでネットワークの学習をした後、バイアスを調整しただけで98.6%の性能を出せたそうです。 (つまり、"3"というデータを一度も見ることなく"3"を認識できたということ?)

まとめ

Soft targets area a VERY good regularizer

だそうです。(嘘書いてたらごめんなさい)

いろいろ応用が効きそうなアイディアですね。 でも実際にやるとなると色々と大変そう。
(Deep Learningのパラメータ職人による”Dark Knowledge”が必要な気がします)

もっと詳しく知りたい方は、Dark Knowledge を読んでみてください٩(๑❛ᴗ❛๑)۶ そして詳しいところご教授お願いします(´・ω・`)