オペレーションズ・リサーチ学会機関誌の 2015 年 4 月号に 7 ページの記事を書きました.

上の記事は「ニューロサイエンスと数理モデリング」という特集のうち,深層学習を紹介する 3 つの記事の一つとして書きました. OR 学会誌のバックナンバーを読みながら,最適化の観点で深層学習の話を整理したいと思い上のような記事を書きました. なので,どちらかというと自分の頭を整理するのが主目的みたいになっています. 入門・概要的な内容もお願いされていたので,導入は機械学習自体の説明から入っています(限りなく必要最低限という感じにしてしまいましたが).

この原稿を書いたのは昨年末です. 深層学習界隈はスピードが速く,それから進んだ部分もありますので,いくつか記事の内容を補足します.

活性化関数

ReLU がよく使われますが,最近は超パラメータ $0<a<1$ を使った leaky ReLU $\max(ax, x)$ も使われます. [He et al.] ではさらにこの $a$ も学習する Parametric ReLU が提案されています. これらは最終的な性能に貢献します.

最適化手法

モーメンタム法や RMSprop がよく使われますが,最新の研究では Adam [Kingma&Ba] が使われ始めています. Adam は,モーメンタム法と RMSprop を組み合わせたような手法です. 超パラメータがいくつかありますが,試したところでは初期学習率を除いて論文にあるデフォルトの値でうまくいくことが多いようです. 凸な目的関数についてのみですが,理論解析(リグレット上界)もあります.

解の分布の理論解析

記事では,ガウス確率場に従う非凸関数の停留点分布を解析した結果を紹介しましたが,この話は実際にはニューラルネットの目的関数については何も言っていません. そこで,ReLU を用いたニューラルネットによる二値分類について [Choromanska et al.] で実際に解析されました. これは,記事で紹介した研究と同様に統計力学の結果を用いています. Choromanska らの論文では,最適化を(少々むりやりな仮定をいくつか入れて)スピングラスモデルのエネルギー最小化に帰着し,統計力学の方で解析されていたエネルギー停留点の分布に関する結果をニューラルネットの言葉に翻訳しています. 結果として,指数の小さな停留点に遭遇する確率はエネルギーがある程度大きい(損失が大きい)ところではほとんどゼロで,それより小さなエネルギーバンドに入ると段々大きくなっていくということがわかりました. このエネルギーバンドはさらに指数の値ごとに帯状に分かれていて,閾値をまたぐごとに指数の大きい停留点が徐々になくなっていきます. 指数の大きい停留点は勾配法で抜け出しやすいため,この結果は比較的せまいエネルギーバンドまでは勾配法で到達できること,そのエネルギーバンドに突入すると途端に最適化が難しくなることを示唆しています.

モデル圧縮

原稿の流れ上,モデル圧縮の話は浅いニューラルネットの学習という文脈だけで紹介しました. モデル圧縮については,蒸留 (distillation) と呼ばれるテクニックが [Hinton et al.] で提案され,注目されています. これはモデル圧縮の中でも,アンサンブル結果を一つのニューラルネットに集約するという文脈を意識した内容になっています.

同じテクニックを使う話として FitNets [Romero et al.] という論文もあります. FitNets の目的は,狭くて深いネットワークの最適化です. ニューラルネットは,狭くて深いほど最適化が難しいと言われています. FitNets では,広くて(比較的)浅いネットワークを教師として,より狭くて深いネットワークを最適化します. 結果として,もとのネットワークより少ないパラメータ数でより識別性能の良いネットワークが得られます. パラメータ数が減る上に精度も上がるということで,モデル圧縮の可能性を感じる結果です.

最適化のテクニック

ほかに原稿を書いたあとに発表された重要なテクニックとして,バッチ正規化 [Ioffe & Szegedy] に触れないわけにはいきません. これは,各活性化関数の手前でミニバッチを正規化するというものです. これまでも,入力データを白色化することで学習が大幅に加速することは知られていました. また,各層で値のスケールが一定になるようにパラメータ初期値の分散をうまく選ぶことで,特に初期の最適化が加速することも知られていました. バッチ正規化は,このスケール合わせと白色化をすべての層で明示的に行うことで,どんなに深いネットワークでも勾配が減衰せずに逆伝搬するようにします. 論文の報告では,ILSVRC のような大規模な学習課題で,(同じエラー率に到達するまでの反復回数という意味で)14 倍程度の高速化が達成され,state of the art なエラー率を達成しています.


改めてまとめてみると,この 3 ヶ月程度でこんなに進んだんだなあと驚きます. 深層学習は最適化に絞ってもまだまだトピックが山ほど出てきそうです.