クリプキクローネ日記帳

ある種の音楽と数学とランニングはミニマルなところが似ていると思う。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

深層学習 [岡谷貴之(著)] (講談社)

はやりのディープラーニングについての本を読みました。
最近「ニューラルネットワークでこれができました」というニュースが多いですが、
結局それぞれのノードにどういう意味があって何をやっているのか分からないので、
いつももやもやした気持ちでいました。

そのもやもやがこの本でわずかにとけました。
というのも、畳み込みニューラルネットワークでライオンの写真を判定する例が出てくるんですが、
各層の各ノードのフィルタ情報とその出力がすべて画像化されて並んでいるページがあるのです。
数百個の画像と6つのヒストグラムが7ページにわたって並んでいてかなり見応えがあります。
壮観です。

正直そんな画像を見てもほとんど何も分からないんですが、迫力が違います。
生データに近い情報が持っている真実味というか、脚色されていないリアル感があります。

説明のために過度に簡略化して、
「これはライオンを、これは犬を判定するノードです」
とか、
「これはダイナミックレンジの情報を抽出しています」
とか、
分かりやすいけど嘘っぽい説明をされるより、
こういう画像の列挙の方が「なんだか分からないけどすごい」感があります。
分からないんじゃだめじゃないか、というのはさておき。


活性化関数はロジスティック関数(シグモイド関数)がメジャーだけど、
値域に制限がなければ恒等写像でいいし、
出力が多クラス分類であればソフトマックス関数のようなものがふさわしい。
性能のいい悪いよりも、そもそもやりたいことが違うから違う関数になる。
たしかに。

誤差関数(損失)は二乗和がメジャーだけどいろいろ。
誤差関数は勾配降下法で小さくする。
この辺は数値解析のニュートン法あたりと似た雰囲気。
不毛な極小につかまらないように確率でやるあたりも。
毎回誤差関数の評価をやると大変だからミニバッチという単位でグルーピングするあたりは
データの多いこのジャンルならでは。

過適合(過学習)の話も統計でおなじみ。
いろんな分野の話が組み合わさってるんだな。
過学習を防ぐ1つの方法として、誤差関数に重みの二乗和を付加して、あんまり極端な重みにならないようにする。
単位の違うもの同士を足し算しているような違和感も若干ある。

もう1つの方法として、よく聞くドロップアウトの手法。
ある確率でノードを削除して1つのノードに頼りすぎないようにする。

データの正規化はどこまでやるべきかかなり難しそうな話題。
平均と標準偏差を揃えるとか、白色化とか。
主成分分析のPCA白色化や、フィルタの位相を対称にするZCA白色化など。
事前のデータ加工でここまでやるのか。
ここはばらつきが少ない、とかそういうことも重要な情報な気がするけど、
正規化した方がうまくいくんだろうか。

モデル平均は、いくつもネットワークを作って平均を答えとする。
有効な手法とかかれているけど、ただの大数の法則に聞こえてしまう。

重みの初期値、修正量、サンプルの順序、ミニバッチの組み方あたりは、試行錯誤感あり。
モメンタムという方法で重みを修正すると、誤差関数が同じところをジタバタしなくて済む場合がある。
ニュートン法みたい。

誤差逆伝播法(バックプロパゲーション)は、
勾配降下法の微分を奥まったところのノードまで簡単に計算したいという話。
ネット上のざっくりした説明を読むと、
「評価結果をじゅんぐりじゅんぐり前の人たちに伝えますよ」
みたいな結構ふんわりした話だと思っていたけど、
誤差関数の微分でしっかり秩序立って説明されているので
すごく納得しやすい。

自己符号化器はおもしろい。
自分自身が答え。
重みの初期値を決めるのにも有効。
中間層のノードが入力ノードより多ければ恒等写像で自分自身に100%一致するので無意味だけど、
あえて中間層を多くしておいて、活性化する数を最小限に抑えるスパーズ正則化が有効。
ここでも活性化する数を抑えるために誤差関数に余計な項を加える。

そして話題の畳み込みニューラルネット(CNN)。
最初から畳み込み層とかプーリング層とか決めてしまうのはずいぶん恣意的に見えるけど、
それで抜群の効果が出てるらしいからいい方法なんだろう。
特にプーリング層はただ平均化して情報を捨ててるようにしか見えないけど、
それでうまくいくっていうのはどういう理屈なんだろう。
ここでライオンのおもしろすぎる例が出てくる。
各ノードの画像を眺めているだけで楽しい。
膨大なアセンブラを眺めているような気分。
ほとんど分からないけどたまに意味の分かりそうなところがあって、
よく分かんないけどよくできてるなーと感心。

再帰型ニューラルネット(RNN)は同じ層に繰り返しデータが入るので、
以前の情報を活用する時系列データ(音声とか)に有効。
再帰と聞くだけでワクワクしますね。不完全性定理的な。関係ないけど。
誤差関数の微分にはRTRL(real time recurrent learning)と、
BPTT(backpropagation through time)が知られている。
4文字の略語はきつい。

逆伝播はあんまり戻るとしんどいので
LSTM(Long Short Term Memory)という手法でメモリみたいに情報を記憶する。
4文字の略語はきつい。

ボルツマンマシン。
層のない無向グラフの各ノードに確率変数が紐づいたもの。
確率変数はエッジの重みとノードのバイアスで定まるエネルギー関数の分布に従う。
このあたりはまだ気持ちをつかみきれず。
ボルツマン分布に従う変数はギブスサンプリングで取得できる。
ここに、もともとなかった隠れノードを追加して、
可視変数の層と隠れノードの層を分けると制約ボルツマンマシン(RBM)になる。
どういう時に有用なのかまだよく分からないけど、
そもそもディープラーニング自体、制約ボルツマンマシンあたりから来ているらしい。
ドロップアウトもそうだけど、確率はほんとにここぞというときに強い。
神はサイコロを振る模様。

分かりやすくていい本でした。
でもこういうテーマは本を読むよりとにかく手を動かして実装するべきなんだろう。
そのうちやる気になったらやってみよう。やる気になったら。
  1. 2016/10/05(水) 23:40:38|
  2. | トラックバック:1
  3. | コメント:0
<<離散数学パズルの冒険 - 3回カットでピザは何枚取れる? [T.S.マイケル(著) 佐藤かおり、佐藤宏樹(訳)] (青土社) | ホーム | GPU並列図形処理入門 - CUDA・OpenGLの導入と活用 [乾正和(著)] (技術評論社)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://myumbrella.blog42.fc2.com/tb.php/332-2c4bc021
この記事にトラックバックする(FC2ブログユーザー)

http://www.valras-plage.net/xl-trigger/

アイスランドクローネ日記帳 深層学習 [岡谷貴之(著)] (講談社)
  1. 2016/12/02(金) 05:50:36 |
  2. http://www.valras-plage.net/xl-trigger/
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。