ベースラインモデルの設計と性能改善のプロセス

問題設定:ベースラインモデルの必要性

性能指標の妥当な水準を決定した後は、どのようなソフトウェア要求を達成する場合であれ、機能要求全般を一通り満たす妥当なシステムを可能な限り早期に完成させることが求められる。問題設定によっては、深層学習の技術を利用せずに開発を進めることもできる。例えば線形の重みを正しく選択することで解決可能な問題であるなら、ロジスティック回帰モデルのような単純な確率モデルから始めても良い。一方、物体認識や音声認識、統計的機械翻訳のような「AI完全(AI-complete)」な問題ならば、初めから深層学習のモデルを採用していくことが望ましい。

通常のソフトウェア開発では、アルゴリズムはデータ構造と関連している。深層学習の開発においても、データ構造がアルゴリズムの選択を方向付けることがある。例えば、固定長のベクトルを入力とする教師あり学習を実行したい場合は、全結合層を有した深層ニューラルネットワークを用いることが基本的な選択となる。画像のように、入力データが既知の構造をトポロジーとして有している場合には、深層畳み込みニューラルネットワークが有用となる。入力や出力が系列データとなる場合には、再帰的ニューラルネットワークを用いることになる。

最適化アルゴリズムは、大抵の場合、確率的勾配降下法が採用される。しかし学習率をエポック数に応じて減衰させることが効果的な探索を成し得ることが経験的に認識されているために、例えば100エポックごとに学習率に0.1を掛けるようなアルゴリズムが用いられる場合もあれば、より適応的に学習率を減衰させていくAdamのようなアルゴリズムが好んで利用される。バッチ正規化は、深層畳み込みニューラルネットワークなどのようなモデルにおいて、最適化の性能に劇的な効果をもたらす。最初のベースラインモデルにバッチ正規化を導入する理由は何も無い。だが最適化の性能に問題が見受けられるならば、直ぐに導入するべきでもある。

データセットとして数千件以上のサンプルが得られない限りは、初めから早期終了やドロップアウトのような何らかの正則化を導入しておくことが有用となる。

一方、教師なし学習に基づいた正則化の有用性は、問題設定の領域に依存する。例えば自然言語処理のような分野では、one-hotベクトルのような豊富な情報が含まれていない入力データが大多数になる以上、単語や文の埋め込みを可能にする教師なし学習から大きな効果が得られることが期待されている。

他方、画像のようなトポロジーで構造化されているデータセットが得られる場合には、必ずしも教師なし学習が必要となるとは限らない。自然言語処理以外の分野では、ラベル付きサンプルが極端に少ない状況で半教師あり学習を設計する場合ならともかく、教師なし学習による効果は期待されていない。したがって、自然言語処理や半教師あり学習に取り組む場合以外は、わざわざベースラインモデルに教師なし学習を採用する必要は無いと考えられる。

派生問題:性能改善

性能指標とベースラインモデルを設定した後は、その性能水準を満たすための試行錯誤が続く。この試行錯誤の段階でも、幾つかの「意思決定」が必要になる。

初期に実装したモデルの精度や速度が性能水準を満たさない場合、代替的な問題解決策を模索しなければならない。多くの性能改善の場面で、最適化アルゴリズムや正則項の選択を見直すことが求められる。しかし一方で、精度が向上しない理由がデータの不足にある場合もあり得なくはない。

一方、深層学習は多くのハイパーパラメタで制御される。そのハイパーパラメタの中には、実行処理時間やメモリ負荷に関わるパラメタもある。多くのハイパーパラメタは最適化や正則化に関与するために、一つのハイパーパラメタを変えただけでも、性能に大きな影響を与える場合がある。

大量のデータと多くのハイパーパラメタによって駆動される深層学習のシステムは、多くの副作用を伴わせている。言い換えれば、深層学習のシステムは参照透過ではない。したがって、単に性能が悪いという結果を観測したとしても、その原因がアルゴリズム自体にあるのか、それともアルゴリズムの実装にバグが生じているためなのかを判断するのは比較的困難である。

問題解決策:データセットの追加

新たにデータを蒐集すべきか否かの決定を方向付けるのは、訓練データを用いた場合の性能とテストデータを用いた場合の性能の区別である。例えば訓練誤差が許容範囲を超える場合、学習アルゴリズムは既に利用可能な既存のデータを活用できていないことになる。この場合、更にデータを増やしたところで、学習アルゴリズムを改善しない限りは、訓練誤差の向上には至らない。

モデルの性能を落とす要因となるのは、データの量的な不足だけではない。データの品質もまた重要である。もし学習アルゴリズムを改善しても性能が向上しない場合には、問題はデータの品質にあると推測できる。例えばデータに含まれるノイズが大き過ぎる場合や、望ましい出力を予測するために必要な正しい入力がデータに含まれていない場合も想定できる。その場合は、よりクリーンなデータを集めるか、より情報が豊富に含まれているデータを集め直す必要がある。

訓練データを用いた場合の性能が期待された水準を満たす場合、次に観察するべきなのはテストデータを用いた場合の性能である。もしテスト誤差をはじめとした性能も期待通りなら、もはややるべきことは何も残っていない。一方、テストデータを用いた場合の性能が訓練データを用いた場合の性能よりも著しく劣る場合、新たにデータを用意することは有用な改善策となる。しかし、データを追加することにもコストが発生する。正則化を徹底すれば、テストデータを用いた場合の性能は訓練データを用いた場合の性能により近付く可能性もある。故に、データを追加する場合のコストパフォーマンスと、アルゴリズムを改善することで正則化を徹底した場合のコストパフォーマンスの比較の観点から、データを追加するか否かの意思決定を敢行しなければならない。

データを追加するか否かの意思決定は、専ら人的コストとの関連から実施される傾向にある。例えばWebクローラ型人工知能のように、Web上のデータを蒐集の対象とする場合、データの追加は事実上自動化可能である。少なからず人的なコストは最小化できる。それ故、こうした分野では、データを追加するという選択肢が選択される可能性は高い。一方、分類問題や自然言語処理のように、ラベル付きサンプルの配備やアノテーションが要求される場合には、データを追加するコストが嵩張ることとなる。データを追加するという解決策を採用する場合、最大のボトルネックとなるのは人間である。

いざデータを追加するという意思決定を下すにしても、具体的にどの程度のデータを追加するべきなのかを予め決定しておかなければならない。その背後に人的なコストパフォーマンスがある以上、闇雲にデータを追加すれば良いという話には断じてなり得ない。一般的に更なるデータ追加を実施する場合、その必要量の見積もりには、既に入手できているデータで実施される。僅かな数のサンプルを追加したところで、汎化誤差が劇的に向上することは無い。そのため、例えば連続した実験で、データ数を倍にしていくなど、訓練データのサイズを対数スケールで変化させて実験することによって、必要なデータ量が見積もられる。

問題解決策:ハイパーパラメタの調節

一般的にハイパーパラメタは手動で設定される。その多くは、例えば初期化メソッドやコンストラクタへの引数として入力される。手動によるハイパーパラメタの調節では、実行時間と利用可能なメモリの制約の範囲で最小の汎化誤差を求めることが目指される。ハイパーパラメタの調節は、モデルの表現能力、最適化能力、そして正則化による汎化能力をタスクの複合性に適合するように実施される。モデルの層が多いほど、あるいは層ごとのユニット数が多いほど、モデルの表現能力は向上する。しかし、学習アルゴリズムが誤差を最小化する関数を発見できなかった場合や正則化によって最適化が妨げられている場合、モデルは必ずしもそうした関数を学習できるとは限らない。

ハイパーパラメタの調節もまた、正則化同様、コストパフォーマンスの観点から選択される「投資」的な取り組みとなる。隠れ層のユニット数を増やせば、確かにモデルの表現能力は向上する。しかし、ユニット数が増えれば重み行列のサイズが増えることになるため、メモリ負荷が過大となる。層数を増やした場合も同様だ。この場合は重み行列そのものの個数が増えることがボトルネックとなる。畳み込みニューラルネットワークにおける畳み込みのカーネル幅は、モデル内のパラメタ数に相関している。それ故カーネル幅を広げれば、それだけモデルの表現能力は増す。だがカーネル幅が広いほど、出力の次元が減ることになる。ゼロパディングのような方法によってこの影響を減らさない限り、モデルは劣化することになる。だがこのゼロパディングも増価させれば、メモリ負荷が高まる。

したがって、ハイパーパラメタの調節は、それ自体が一種の最適化問題である。つまり調節者は、ハイパーパラメタの組み合わせ最適化問題を解こうとしているのである。この場合、ハイパーパラメタが決定変数となる。最適化すべきコストは、そのハイパーパラメタを利用した訓練結果から得られる検証集合誤差である。機械学習ライブラリを「暗がりに鬼を繋ぐが如く」利用するエンジニアたちが闇雲にハイパーパラメタを操作しようとした場合の盲点となるのは、制御しているモデルの最適化の能力が、当のエンジニア自身が持つ最適化の能力に依存している点である。そうなると、もはやハイパーパラメタの調節者は、もはやモデルの出力値を観測することで一喜一憂している場合ではない。

グリッドサーチ

データの追加処理とは異なり、ハイパーパラメタの調節を自動化することは、どのようなモデルにおいても、原理的に実現可能である。ハイパーパラメタの調節が組み合わせ最適化問題であるのならば、組み合わせ最適化アルゴリズムによって、ハイパーパラメタの調節を自動化することが可能になる。例えば「グリッドサーチ(grid search)」は、主にハイパーパラメタが三つ以下の場合に利用される自動化手法である。グリッドサーチを用いる場合、ユーザーは各ハイパーパラメタに関して探索対象となる値の集合を選択する。この集合は小さく有限の大きさである。その後、グリッドサーチのアルゴリズムを利用することで、各ハイパーパラメタの値の集合のデカルト積の中で、ハイパーパラメタの値の全ての組み合わせに対してモデルを学習する。そして、最良の検証集合誤差を出力する実験結果で設定していたハイパーパラメタの組み合わせを、最適な組み合わせとして選択する。

多くの場合、グリッドサーチのユーザーが最初に指定する探索範囲は、過去の研究事例で指定されていた同ハイパーパラメタの最小値と最大値の範囲として保守的に選択される。一般的にグリッドサーチは、その範囲内の大方対数スケール上の値を取る。とはいえグリッドサーチは、ハイパーパラメタの個数が増大していくにつれて、その計算コストを指数関数的に高めてしまう。

ランダムサーチ

「ランダムサーチ(random search)」はより探索効率を高めたグリッドサーチの代替案として知られている。この探索アルゴリズムではまず、各ハイパーパラメタに対する周辺分布を定義する。例えば二値のハイパーパラメタに対してはベルヌーイを、離散的なハイパーパラメタに対してはマルチヌーイを、正の実数値のハイパーパラメタに対してはその対数スケールの一様分布を、それぞれ定義する。グリッドサーチの場合とは異なり、より大きな値の集合を探索しながら計算コストとの増大も回避できるように、ハイパーパラメタの値を離散化するべきではない。

ランサムサーチがグリッドサーチよりも効率良く探索できるのは、グリッドサーチとは異なり、ランダムサーチはあるハイパーパラメタの二つの値で同じ結果が得られる場合には無駄な探索を実行しないためである。グリッドサーチの場合は他のハイパーパラメタがこの2回の探索で同じ値を有している一方で、ランダムサーチの場合は通常異なる値を有している。そのため、こえっら二つの値の間の変化によって検証集合誤差に大きな差異が生じない場合、グリッドサーチでは同じ試行を2回繰り返すことになる一方で、ランダムサーチでは他のハイパーパラメタについて独立した探索を2回実行する。

参考文献

  • Elsken, T., Metzen, J. H., & Hutter, F. (2018). Neural architecture search: A survey. arXiv preprint arXiv:1808.05377.
  • Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep learning (adaptive computation and machine learning series). Adaptive Computation and Machine Learning series, 800.

執筆者