はじめに
従来の機械学習手法では、なるべく入力と出力の関係を人手で明らかにすることで、妥当なモデルを準備してきました。更に入力データも、学習にとって重要なもののみを抽出することで、効率性を高めてきました。
一方でニューラルネットワークは入力と出力の間に複雑なモデルを仮定し、その複雑なモデルを学習により上手く調整することで回帰や分類を行います。
このような背景から、ニューラルネットを従来の手法と同じように学習させるのでは上手く行かないことが分かります。人手で抽出しなければいけなかった情報や、適切に設計しなければいけなかったモデルを、ニューラルネット自信が自分で学習できるためにはそれ相応の工夫がいるわけです。
伝統的な学習の工夫
正規化、標準化、無相関化、白色化
これらは従来より使われてきた手法です。
学習で与える多次元データに関して、前処理を施しておくことで学習の効率が上がることが知られています。ニューラルネットでもこれらは有効に働きます。
正規化
正規化は学習データに対して、値がの範囲に収まるように加工を施すことです。場合によってはにすることもあります。方法は単純で、学習データの中で最も大きな値(あるいは最も大きな絶対値)を取り出し、全てのデータをその値で割るだけです。
という具合です。Mnistなどの画像データは、各ピクセルがの値を取っていますから、通常で割るという処理を行ってから学習をします。正負両方の値を取るような信号を学習させたい場合は、の範囲に加工してから学習させるという方法も考えられるでしょう。
多次元データに対してこのような処理が必ず有効であるかは分かりません。
なぜなら、学習データの各成分の大きさを均等に扱っていいかわからないからです。画像であれば、すべてピクセルの値(濃淡)であって、対等に扱えるデータの代表です。
一方で各次元が(身長、体重、体脂肪率)などになっていた場合は、成分毎に意味合いが全く異なるため、各成分毎に正規化をする(身長は身長だけで正規化する)ことが必要になるかもしれないということです。
標準化
標準化も取りうる値の範囲を制限するように入力データを加工をします。しかし正規化ほど厳密に値の範囲を指定しません。標準化では入力データの平均をに分散をにするような加工を施します。これにより、データは概ねの範囲に留まりますが、この範囲を飛び出るデータも出てきます。
という計算を行って
という変換を行います。和も商も成分毎に行えば、各成分毎に平均分散のデータができあがります。
画像のように人工的なデータの場合は以内の値にいつでも収まっています。従って学習の際も予測の際も同じ固定の処理を行えば良いということになります。
一方で観測して集めたデータは必ずしも範囲が明確ではないため、統計的なパラメータを使ってこのような加工をするのが一般的です。
今回述べた正規化はあまり使われるものではありませんので、「正規化」と言ったらこの「標準化」のことを指す場合も多いです。
無相関化
無相関化は多次元データの各成分が何らかの関係を持っている場合に、その関係性を解消することに使われます。
例えば天候に関するデータ(雲の量、気温、紫外線量)などが集まったとすれば、明らかにデータの各成分は何らかの関係性を持っています。
このような場合に、
新しい指標1=A×雲の量+B×気温
新しい指標2=C×雲の量+D×紫外線量
という計算をして、新しい指標1と新しい指標2が無相関にしてみます(そのようなABCDを見つける)。
この新しい指標は物理的に何を意味しているかは定かでないにしても、天候に関するデータから遊園地の来場者数を予測したい場合に置いて、役立つ指標が出来上がるかもしれません。
また、出来上がった指標のうち、重要な指標はごく少数かもしれません。この前処理は主成分分析と全く同等のもので、新しい指標のことを主成分と呼びます。
主成分を少数取り出せば特徴抽出として使えますが、全ての成分を残しても構いません。
白色化
無相関化して出来上がった新たな指標(主成分)は、各成分毎に全く取りうる値の範囲が異なります(主成分分析自体が、変動の大きな指標と小さな指標を分離する役割を持つ)。仮に上手い指標が見つかったと結論づけられるのならば、変動が大きな指標を学習データとして使えばいいでしょう(特徴抽出)。
一方で、あくまで無相関にしたいだけであったならば、成分毎に値の大きさが全く異なるのは不都合である場合があるので、取りうる値の範囲を制限したいということになります。
そこで無相関化して出来上がった新たなデータに対して、標準化を適応するのが白色化です。
通常、無相関化の処理を行う時点で平均はに直され、分散は固有値問題を解いた際に得られるため、無相関化の処理の中で白色化の処理を簡単に追加することが可能です。
正則化
正則化は過学習を抑えるための重要な手法です。
分類にしても回帰にしても、入出力関係についてを上手く調整するのが目的です。この際にが際限なく自由に値を取れてしまっては過学習してしまう危険性があります。
そこで、に対して何らかの制約を入れてやるのが正則化です。
学習が損失関数を最小化するという形で定式化されている場合、この損失関数に加えて正則化項を追加します。
一般的な形としては
という表現になり、は正則化の強さを決める度合いです。メインはあくまで第一項の方であるため、通常はなどと小さな値が設定されます。
最小化をする際に、の方を小さくできた(学習が進んだ)としても、の方をあまり大きくするのはダメですよという制約を入れていることになります。
正則化は、確率モデルにおいて最大事後確率推定を行っていることに相当します。
正則化
正則化は、パラメータのほとんどの成分がとなるように制約を入れます。ほとんどの成分がであるということは、データの成分の中で重要なものは少数であるという仮定を置いていることになります。
この正則化によって、学習データが膨大な次元を持っていたとしても不要な成分を落としてくれるため、過学習が抑えられることが期待できます。
数式としては
という形になります。
は各成分の絶対値の和です。
したがってこの値を小さくするためには、ほとんどの成分がにならざるを得ません。
正則化
正則化は、パラメータをベクトルと見たときに、ベクトルがあまりに大きくなることを防ぐ制約を入れます。
数式としては
という形になります。
各成分の二乗を考慮することになるため、極端に大きな成分が現れるのを防いでくれます。
elastic net
この呼び名は、特に回帰の場合に用いられます。
特に特別な概念はありません。正則化と正則化を両方入れるものです。
はいつもどおり正則化の強さを決める係数です。は正則化と正則化をどれだけの割合で混ぜ込むかを決める係数です。細かいこと気にしなければとりあえず、両方ぶち込んで適当にそれぞれ係数決めればいいです。単純に正則化を入れまくってるものだと思えば、当然分類問題でも応用可能です。
伝統的な工夫について
これらの手法はニューラルネットでも有効に働きます。
正則化などはモデルの自由度をかなり大きめに取るニューラルネットでは、過学習抑制にかなり有効に働きます。
前処理も有効に働くことが知られています。特に(この記事で言う)標準化に関しては広く応用され、入力データだけに留まらず、ニューラルネットの各層ごとに標準化を行うバッチ正規化は頻繁に用いられています(ニューラルネットでは標準化を正規化と言います。正規化は非常に広い意味があるので、場所に応じてかなり言葉の使い方が変わるので注意が必要です)。
ニューラルネットワークの学習の工夫
バッチ正規化
上でも述べた通り、各層ごとに標準化を行います。
各層に入力が入る直前に標準化を行う場合もあれば、層が出力を行った直後に標準化を行う場合もあります。これらの違いは、線形変換と標準化の順序をどうするかというところです。
ある層の計算は、以下のように線形変換をしてバイアスを加えた後に活性化関数を作用させることで達成されます。
ここでバッチ正規化の処理をで表現するとして、
とするのか
の違いです。ラダーネットワークでは後者の方法が取られていますが、必ずしもこちらが良いとは限らないようです。
ドロップアウト
ある層の出力について以下で記述されるとしましょう。
このときの成分を一定の割合でにしてしまうのがドロップアウトです。
通常各層ごとに異なるドロップアウト率を選ぶことができ、必ずしも全ての層で実行する必要はありません。
要するに情報の伝達をあえて断ち切り、少数の情報だけで学習を行うようにするのです。これにより、実質モデルの自由度は低下し、過学習が防がれます。
そうするならば、最初からユニットの数を減らせばいいと思うかもしれませんが、このドロップアウトは学習を回す毎に、異なるユニットを選定します。
例えば1000回の学習が行われた時には、毎回異なるドロップアウトが用いられていたため、最終的には1000個の異なるネットワークのパターンを学習させ、最終的に1つのニューラルネットに統合させたことになります。従ってアンサンブル学習に相当するであろうと言われています。
ノイズ混入
ニューラルネットを学習させる際に、わざと入力データにランダムにノイズを混入させます。
それでも教師データは変わらないため、ノイズに強いニューラルネットが出来上がることが期待できます。最たる例は雑音除去自己符号化器です。
自己符号化器は
として、となるように学習を行います。すなわちニューラルネットは入力データをそのまま再現できるような構成となるよう学習されます。
その後、
の部分だけを取り出しましょう。そうしたとしても、ニューラルネットはの情報を復元できるようなを作り出せるように学習されているため、を次元削減などに使うことができます。
雑音除去自己符号化器は、自己符号化器を学習させる際に入力データにわざとノイズを混入させます。
こうしてとなるように学習できるのであれば、ニューラルネットは内部でを排除する機能を備えたと言えます。
このような手法は自己符号化器に限らなくても、応用の可能性があるでしょう。
勾配ノイズ
学習は勾配法によって行われます。
勾配法はを
と更新する手法です。一方で、この手法では第二項の微分(勾配)が小さくなった際に学習が停滞してしまいます。それを避けるために様々な手法(Adam)などが考案されており、上手く学習を進めるような工夫がずっと考えられ続けています。
そこで計算された勾配に対してランダムな変動を与えて動き方揺さぶってやることで、学習を改善できる可能性があります。単純なアイデアですが、一定の成果も得られているようです。
ニューラルネットの学習の工夫
これらの工夫は、ニューラルネットという表現力豊かな構造のモデルだからこそできることです。理論的にガチガチに設計されたモデルでは中々できない工夫ばかりです。
一方で、理論的にニューラルネットの工夫の有用性を確認できないというのも事実で、ほとんどが経験則(実験で上手く行った)というものばかりです。
この点において理論研究がやはりまだまだ進んでいない段階で、試行錯誤が終わる日はまだ遠いかもしれません。
学習の工夫をする上では、人間が決めなければいけないハイパーパラメータがたくさん登場します。これらも実験的に決めていくしか無いため、ニューラルネットの学習というのは非常に時間がかかってしまいます。しかし、時間を掛けただけの成果を出してくれるものでもありますから、勉強を継続していきたいです。