IN2OUT

学んだインプットをアウトプットするために始めました.誰かの力になれれば嬉しいです.

【#6 論文解説】Xavier, Heの初期値

f:id:bonjiri_3939:20200920005129p:plain
こんにちは,ohashiです.

今回はXavierとHeの初期値の論文をご紹介します.

よく使うモデルの初期値の理由に興味のある方はぜひ!

目的

こんな人向け

  • 社内で扱ったことのない深層学習分野の技術調査を始めたい.
  • ゼミでの論文紹介の前に論文がどんな技術か把握したい.
  • githubのコードを触る前に論文の要点を把握したい.
  • そもそも論文を読むことが苦手.

こんな人向けではない

  • 論文内の数式を完璧に追って理解したい.(要は何がしたいのかの説明を優先します.)
  • 著者または他者実装の追試結果,実装ノウハウを知りたい.(githubをご参照下さい.)

 

論文

 今回はネットワークを学習させる前の重みを初期化する手法に関する論文です.ニューラルネットワークを実装して学習を始めると,毎回異なる精度が出てくる経験はないでしょうか.それはニューラルネットワークの重みパラメータが乱数で初期化されているからです.もちろん乱数のシードを固定すれば再現性はあります.従来は適当な範囲の乱数で初期化していたのですが,それだと学習が収束しなかったり精度が低くなってしまうことが起こりました.今回は,その初期値の範囲をネットワークの大きさに基づいて制限することで学習を精度面で安定させることを目的とした論文を紹介します.

今回まとめるのは以下の2つ:

Understanding the difficulty of training deep feedforward neural networks [AISTATS, 2010]

Authors: Xavier Glorot, Yoshua Bengio

Publication: Proceedings of the Thirteenth International Conference on Artificial Intelligence and Statistics, JMLR Workshop and Conference Proceedings 9:249-256, 2010.

f:id:bonjiri_3939:20200610212748p:plain
 

Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification [CVPR, 2015]

Authors: Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun

Publication: arXiv:1502.01852v1 [cs.CV]

f:id:bonjiri_3939:20200610212807p:plain

 

できるようになったこと

 上記で紹介した2つの論文はいずれもXavierの初期値,Heの初期値と呼ばれ現在でもKerasやPyTorch, Chainer, Tensorflowの組み込み関数に実装されほとんどのネットワークの実装に使用されています.提案されている初期化の範囲はまとめると以下になります.

  • Xavierの初期値:線形な活性化関数に対してノード数の平方の逆数で初期化
  • Heの初期値:非線形な活性化関数にも対応するためXavierの2倍の範囲で初期化

モデルのサイズに基づいて初期化範囲を決定して勾配消失を緩和

 従来はモデルのサイズに関係なく適当な乱数でモデルの重みを初期化して学習を行っていました.その際に,畳み込み層を経るにつれ出力の範囲が徐々に小さくなっていく現象が観測されるようになります.これによって,層が深くなるにつれて畳み込み層を経た出力がどんどん小さくなっていき勾配が伝搬しないという課題が起こるようになりました.そこで,モデルのサイズが大きいものは初期化の乱数を大きい範囲に調整してから初期化する.モデルのサイズが小さいものは初期化の乱数を小さい範囲に調整してから初期化する,という対策が提案されました.ここで,モデルのサイズとは,モデルの前段のニューロンから次段のニューロンへつながるノードの数で表現されます.これにより,従来よりも勾配が消失しにくくなり,効率的に学習されたモデルが高い識別精度を記録できるようになりました.

非線形な活性化関数でも勾配消失を緩和

 Xavierの初期値は線形な関数を扱うときに限定されて導かれた初期化手法です.しかし,現在も現役で採用されている活性化関数ReLUは非線形です.つまり,Xavierの初期値では学習が上手くいかなくなる可能性が高いことが予想されます.そこで,Heらは活性化関数を線形な関数と仮定せずに初期化の範囲を導出することで新たな初期化のための範囲を提案しました.それが,Xavierの初期値よりも2倍広い範囲の初期値を利用することです.意外にもXavierの初期値と似通っていますが,この初期化により識別精度が向上することが報告されています.論文では勾配消失をさらに緩和するためにReLUを改良したPReLUを提案していますが,こちらは識別精度に大きな影響は与えなかったためあまり流行ることはありませんでした.しかし,初期化の範囲に関しては他のモデルでも有効であるという知見が得られたことから,現在のモデルの重みの初期化手法のデファクトとして採用されています.

 

まだできないこと

モデルに最適な初期値の設計

  今回の手法は学習が安定するためには非常に有効な手法ですが,モデルにとって最適な初期値を決定できるものではありません.あくまでXavierの初期値,Heの初期値の範囲で学習を始めると良い,という説を理論的に示した手法です.2015年に発表されて以降,これに代わる目立った初期化の手法は提案されていません.意外とHeの初期値でも学習してみると最終的な精度にぶれが出るため,現状では数回学習させてぶれ幅を把握する必要があります.

 

所感

 モデルの初期化手法は,そのモデルの精度に大きくかかわる重要な要素の内の一つです.しかし,『まだできないこと』でも述べたように,決定論的に一つの答えが出ているわけではなく,適切な範囲の中で初期化を行うことが有効であることが知られている,にとどまっています.つまり,その乱数の中でどの値の組み合わせが一番良い精度を出す初期値なのかは明らかになっていません.これは実装すると身に沁みますが,初期値に依存して精度はかなりばらつきを持ちます.厳密に精度を算出したい場合は統計的に計測することが必要ですね.

 最近提案された活性化関数Mishは使ってみたところ精度のばらつきが非常に少ないことを確認しているため,精度のばらつきは初期値のみではなくて初期値と活性化関数等ほかの要素との組み合わせで抑えることができるのかもしれません.こういったノウハウもまだまだ勉強中です.

 次は自然言語処理のTransformerについて紹介します.段々と画像処理と自然言語処理の研究が統合されつつあるので自然言語処理の研究もキャッチアップしていきます.

 
 

ohashi

 

f:id:bonjiri_3939:20200818220918p:plain

おはし

 2019年入社,深層学習を扱う部署に配属.大学院では動画から脈波を抽出する研究に従事.動画像の理解,人間の魅力の解析,人間の自律神経や生体信号に興味関心.深層学習だと自然言語処理の実用化に興味関心.

 同じ研究分野の人間が利害問わず協力して研究動向を追って,初学者の方に自分が勉強した教材を利用してもらって,研究のコミュニティが広がると嬉しいですよね.AIはとっつきにくい分野ではないことを知ってほしいです.むしろ社会にも実装され始めている現在は,みんなでAIが今できることとできないことを把握して,知恵を絞って面白いアイデアをどんどん出して実現していく段階だと思います.そういった時代に向けて,情報共有の一助になれば幸いです.

ご連絡はお問い合わせフォームからお願い致します.

 

ohashi39.work