こんにちは、インフォマティクスで機械学習業務を担当している大橋です。
今回は初心に返って、深層学習で用いられる活性化関数の性質やパラメータの初期化をテーマに取り上げたいと思います。
目次
はじめに
活性化関数や初期値が悪いと、ネットワークが局所解にはまりやすくなり学習の収束の悪さや予測精度の低下を招きます。
本記事はネットワークのダイナミクスを解析しそれらの弱点の改善手法を提案した論文 [1][2]についての解説です。
現在では、Xavierの初期化、Heの初期化として知られているものになります。
活性化関数に関しては現在はあまり用いられなくなったものも含まれますが、なぜ用いられなくなったのかを知っておくのも有益だと思います。
Xavierの初期化
[1]について解説します。
この論文は2010年当時、層を深くすると初期化方法やネットワークの構造によって学習が失敗していたのを受けて、その原因を詳細に調べたものです。
対象にしたタスクはMNIST, CIFAR-10, ImageNet等のデータを用いた画像識別です。
解析に用いたネットワークは線形変換+活性化関数の層を積み重ねた出力層がSoftmaxの簡単なネットワークのみを考えます。
つまり、\(i\)層での入力を\(z^{(i)}_{k}\)、線形変換の行列とバイアスをそれぞれ\(w^{(i)}_{kl}, b^{(i)}_{k}\)、活性化関数を\(f\)としたときに以下の変換を行うネットワークです。
出力層のみ\(f\)はSoftmax関数です。
\(s^{(i)}_{k}=\sum_{l}w^{(i)}_{kl}z^{(i)}_{l}+b^{(i)}_{k}\)
\(z^{(i+1)}_{k}=\left[ f(s^{(i)})\right]_{k}\)
このような簡単なネットワークでも、初期化方法や活性化関数の選択を間違えると学習がうまくいかなくなります。
実験では4層ないしは5層のネットワークを考えています。現在から考えると非常に浅いネットワークです。約10年前ですが時代を感じます。
[1]では活性化関数の影響も考察しています。主題から外れるので興味のある方のみ参照してください。
活性化関数の違い
先ず活性化関数の違いによるネットワークのダイナミクスの違いを見てみます。活性化関数としてSigmoid、Hyperbolic Tangent、Softsignの3つを考えます。
どれもReLUの登場によって最近では頻繁に使われている印象は受けませんね。
この記事で紹介する初期化方法と比較用に、"通常の"初期化方法として\(b^{(i)}\)をゼロとし、\(w^{(i)}\)を以下のように一様分布でランダムに設定するものを採用しています。
\(n\)は前層のサイズです。
\(w^{(i)} \sim U\left[ -\frac{1}{\sqrt{n}},\frac{1}{\sqrt{n}}\right]\)
手始めに"通常の"初期化方法・活性化関数がSigmoidの場合の学習過程を見てみます。
学習の過程で各エポックごとの各層の出力の平均と分散を取ったものが以下の図1です。縦線が分散の幅を表します。学習は4層のネットワークで行われたものです。
図1:参考文献[1]より抜粋
最終隠れ層の出力が、学習初期段階で急激に0になっていることが分かります。また、入力に近い側の層は初期100エポックくらいまではほとんど変化がありません。
つまり、誤差の逆伝播による勾配の情報がうまく伝わっていないことが分かります。100エポックを過ぎた辺りから、この膠着状態から抜け出して学習が進み始めています。
この現象が起きる原因として[1]では、「初期化の方法が悪いと入力層に近い側で取り出される情報に意味がなく、これらの情報よりもパラメータ数も少なく調整しやすい出力層のバイアス項を最適化することによって精度を出そうとするから」と推測しています。
つまり、学習の初期は各層の出力に意味がなく出力層の出力\(Softmax(wz+b)\)において\(wz\)の依存度を下げ、bのみによる最適化をしようとする推測です。その結果として、最終隠れ層の出力\(z\)を0に近づけようとします。
このような挙動はSigmoidに限らない現象ですが、Sigmoidの出力を0にしようとすると入力を\(-\infty\)にする必要があり、一度ネットワークがその状態になってしまうと抜け出すのに時間がかかってしまいます。
またそのよう領域では誤差逆伝播の勾配の値も0に近づいていき、1ステップのパラメータ更新量が小さくなるため、ますます抜け出しにくくなります。これが長い膠着状態の原因と推測しています。
SoftsignやHyperbolic Tangentは出力が0の領域は入力が0で、その領域は近似的線形関数になっているので勾配も0にならないため、膠着状態が長引くようなことは起きないと推測されます。
"通常の"初期化方法・活性化関数がHyperbolic Tangentで同様の解析を行った結果が図2上段です。学習は5層のネットワークで行われたものです。
Softmaxの時のような最終隠れ層の出力が飽和することはなくなっています。しかし、学習が進むにしたがって入力層側から出力層側に向けて順々に飽和する現象が見られます。[1]ではこれの原因の考察は保留されています。
"通常の"初期化方法・活性化関数がSoftsignの解析は図2下段です。学習は5層のネットワークで行われたものです。こちらは、出力層・中間層が飽和することもなくなっています。
図2:参考文献[1]より抜粋
さらに学習終了時の各層の出力のヒストグラムを見てると(以下図3)、Hyperbolic Tangentの場合(図3上段)は\(\pm 1, 0\)近辺に値が集中しており飽和していることが分かります。
一方Softsignの場合(図3下段)はそのような現象が見受けられず、非線形領域\((-0.8,-0.6)\)、\((0.6,0.8)\)に多く値を持ち学習が良好に進んだことが分かります。
図3:参考文献[1]より抜粋
以上の解析から、学習の速度や活性化関数の状況を見てSoftsign \( > \) Hyperbolic Tangent \( > \) Sigmoidが成り立ちそうです。
初期化の改善
活性化関数の解析で分るのは、「ネットワークのある層の出力が\(\pm 1,0\)等に偏ってしまったり誤差逆伝播による勾配の情報がうまく伝わらないことが学習の進行を遅くしたり精度を低下させる原因となっていそうだ」ということでした。
層を深くしたときに勾配の値が0(\(\pm \infty \))に集中してしまう現象は勾配消失(爆発)と言われている現象です。少なくとも初期化の段階では、このようなことが起こらないようにすれば、学習がある程度改善しそうです。
それを実現したのがXavierの初期化です。具体的には初期化の段階で各層の出力と、誤差逆伝播による勾配の分散が小さくならないように(=各層で同一になるように)します。以下で具体的に導出します。
ネットワークの損失関数を\(E\)とすると、パラメータ\(s^{(i)}_{k}, w^{(i)}_{lk}\)の微分は以下で書けます。
\(\frac{\partial E}{\partial s^{(i)}_{k}}=\left[ f^{\prime}(s^{(i)})\right]_{k}\sum_{l}w^{(i+1)}_{lk}\frac{\partial E}{\partial s^{(i+1)}_{l}}\)
\(\frac{\partial E}{\partial w^{(i)}_{lk}}=z^{(i)}_{l}\frac{\partial E}{\partial s^{(i)}_{k}}\)
各層での活性化関数の出力の分散\(Var\left[z^{(i)}\right]\)を同一に、また各層での誤差逆伝播の勾配の分散\(Var\left[\frac{\partial E}{\partial s^{(i)}}\right]\)を同一にすることを考えます。
活性化関数を一般のままにしてしまうと、解析が複雑になるため[1]では「活性化関数は線形関数」を仮定して議論しています。
つまり、\(f^{\prime}(x)=1\)を仮定します。Softsign関数もHyperbolic Tangentも原点付近では近似的にこの条件が成り立っています。また、「初期化に関して平均0の分布を用いる」ことも仮定しています。
一般に2つの独立な確率変数の\(X,Y\)の平均\(E\left[ X\right],E\left[ Y\right]\)、分散\(Var\left[ X\right],Var\left[ Y\right]\)とその和と積の分散\(Var\left[ X+Y\right],Var\left[ XY\right]\)の関係は以下です。
\( Var\left[X+Y\right]=Var\left[X\right]+Var\left[Y\right]\)
\( Var\left[XY\right]=Var\left[X\right]Var\left[Y\right]+Var\left[X\right]E\left[Y\right]^2+Var\left[Y\right]E\left[X\right]^2\)
ここで\(X,Y\)の平均が\(0\)であると仮定すると、以下のように積の分散は分の積になります。
\( Var\left[XY\right]=Var\left[X\right]Var\left[Y\right]\)
これらの関係を用いると、\(z^{(i)}\)と\(\frac{\partial E}{\partial s^{(i)}}\)の分散\(Var\left[z^{(i)}\right]\)と\( Var\left[ \frac{\partial E}{\partial s^{(i)}}\right]\)はそれぞれ以下の様に計算できます。
\( Var\left[z^{(i)}\right]=Var\left[x\right]\prod^{i-1}_{i^{\prime}=0}n_{i^{\prime}}Var\left[w^{(i^{\prime})}\right]\)
\( Var\left[ \frac{\partial E}{\partial s^{(i)}}\right]=Var\left[ \frac{\partial E}{\partial s^{d}}\right]\prod^{d-1}_{i^{\prime}=i}n_{i^{\prime}+1}Var\left[w^{(i^{\prime})}\right]\)
各層での分散が一定であるためには、全ての\(i,i^{\prime}\)で以下が成り立つ必要があります。
\( \cases{ Var\left[z^{(i)}\right]=Var\left[z^{(i^{\prime})}\right] \\ Var\left[ \frac{\partial E}{\partial s^{(i)}}\right] =Var\left[ \frac{\partial E}{\partial s^{(i^{\prime})}}\right]}\)
つまり、任意の\(i\)に対して以下が成り立てばよいです。
\( \cases{ n_{i}Var\left[w^{(i)}\right]=1 \\ n_{i+1}Var\left[w^{(i)}\right]=1}\)
この関係は、任意の\(i\)に対して\(n_{i}=n_{i+1}\)が成り立っていない限り解をもちません。そこでこれらの条件を出来る限り成り立つように、以下が成り立つよう要請してみます。
\(Var\left[w^{(i)}\right]=\frac{2}{n_{i}+n_{i+1}}\)
このような要請を満たす初期化が[1]で提案されている初期化方法です。
これが成り立つようにはどのような分布で\(w\)を初期化したら良いでしょうか。平均が0であればどのような分布でも良いのですが、参考文献[1]では一様分布を用いています。
\(w\)を一様分布\( U\left[ -a,a\right]\)で初期化した時その分散は\(\frac{a^2}{3}\)となります。この分散が先の\(\frac{2}{n_{i}+n_{i+1}}\)と一致すればよいため以下の分布で初期化すればよいことが分かります。これがXavierの初期化です。
\( w^{(i)}\sim U\left[ -\sqrt{\frac{6}{n_{i}+n_{i+1}}},\sqrt{\frac{6}{n_{i}+n_{i+1}}}\right]\)
平均が0で分散が\(\frac{2}{n_{i}+n_{i+1}}\)であればよいので、一様分布に限らず様々な分布で実現可能です。例えば平均\(\mu\)、分散\(\sigma\)の正規分布\(\mathcal{N}(\mu ,\sigma )\)の場合、以下のように初期化すれば先の条件を満たします。
\( w^{(i)}\sim \mathcal{N}\left(0,\sqrt{\frac{2}{n_{i}+n_{i+1}}}\right)\)
初期化の違いによる精度の改善
[1]で提案された初期化を用いると、学習のダイナミクスや精度がどのように変わるかを見ていきます。
まず初期化直後の活性化関数のヒストグラムを見てみると図4になります。図4上段が"通常の"初期化で、図4下段が今回提案された初期化方法です。
図4:参考文献[1]より抜粋
通常の初期化の場合は出力層に近づくにしたがって分散が小さくなり0に集中しているのに対し、提案手法では各層同じような分布になっていることが分かります。
同様に、誤差逆伝播の勾配のヒストグラムを表したのが以下の図5です。図5上段が"通常の"初期化で、図5下段が今回提案された初期化方法です。
図5:参考文献[1]より抜粋
"通常の"初期化方法では入力層に近づくにしたがって勾配が0に集中しています。一方提案された手法では各層同じような分布を持っており、少なくとも学習初期では勾配消失が起きていないことが分かります。
さらに初期化の違いによるモデルの精度の違いを見てみましょう。データセット・活性化関数・初期化方法の違いによる精度(エラー率)をまとめたものが表1です。
活性化関数名の後にNと表記されているものが提案された初期化方法によるもので、無印のものが"通常の"初期化によるものです。
表1:参考文献[1]より抜粋
提案された初期化手法を用いた方が概ね"通常の"初期化方法に比べ精度が高くなっていることが分かります。初期化の方法がダイナミクスだけではなく最終的な結果にまで影響を与えていることが分かります。
最後にネットワークのダイナミクスをまとめたものが以下の図6です。詳細は論文にあたることをお勧めしますが、初期化の違いにより初期での学習の進み方に差異が生じていることが見て取れます。
またSigmoid関数の場合、4層の場合膠着状態の脱出にかなりの時間を要しており特に5層のネットワークの場合では脱出できていないことが分かります。
図6:参考文献[1]より抜粋
Heの初期化
ここではHeの初期化[2]について解説します。Xavierの初期化では活性化関数が線形であることを仮定していました。これを非線形系関数に拡張したのが次に紹介する参考文献[2]の内容です。
初期化の拡張
ここで考える非線形関数はReLU若しくはPReLUです。PReLUとは\(a\)を実数としたとき(通常は\(0\leq a<1\))に以下のような関数です。\(a=0\)の場合は特別にReLUと呼ばれます。
\(f(x)=\cases{x \mbox{ for } x > 0\\ax \mbox{ for } x\leq 0}\)
[1]の初期化の導出では、線形な関数(\(a=1\))を仮定してしていたため活性化関数の出力の平均は0として良かったですが、ReLUやPReLUの場合は非対称であるため、そうではありません。
平均がゼロでないためXavierの初期化の章で解説したように、確率変数の積の分散は分散の積になりません(\(Var\left[ XY \right] \neq Var\left[ X \right] Var\left[ Y \right]\))。この点を修正したものがHeの初期化です。
具体的には以下のように変更されます。\(w\)自体は平均0の対称な分布で初期化されるため変更はありませんが、活性化関数を通した後の\(z\)に関しては平均は0ではありません。つまり、順伝播の分散はXavierの初期化の章での計算から以下となります。
\( \begin{eqnarray}Var\left[ s^{(i)}\right] &=& n_{i}Var\left[ w^{(i)}z^{(i)}\right] \\ &=& n_{i}Var\left[ w^{(i)}\right] E\left[z^{(i)}{}^2\right] \\ &=& \frac{1}{2}(1+a^2)n_{i}Var\left[ w^{(i)}\right] Var\left[s^{(i-1)}\right] \end{eqnarray}\)
2段目の等式が変更点です。3段目の等式でPReLUの関数形の情報を用いています。
逆伝播の勾配の分散も同様に以下になります。
\( \begin{eqnarray}Var\left[ \frac{\partial E}{\partial z^{(i)}}\right] &=& n_{i+1}Var\left[ w^{(i)} \frac{\partial E}{\partial s^{(i)}}\right] \\ &=& n_{i+1}Var\left[ w^{(i)} \right] Var\left[ \frac{\partial E}{\partial s^{(i)}}\right] \\ &=& \frac{1}{2}(1+a^2)n_{i+1}Var\left[ w^{(i)} \right] Var\left[ \frac{\partial E}{\partial z^{(i+1)}}\right] \end{eqnarray}\)
2段目の等式で\(w^{(i)}\)と\( \frac{\partial E}{\partial s^{(i)}} \)が独立という仮定を用いています。3段目の等式でPReLUの関数形の情報を用いています。
以上から任意の\(i\)で以下が成り立ちます。
\( Var\left[s^{(i)}\right]=Var\left[x\right]\prod^{i-1}_{i^{\prime}=0}\frac{1}{2}(1+a^2)n_{i^{\prime}}Var\left[w^{(i^{\prime})}\right]\)
\( Var\left[ \frac{\partial E}{\partial z^{(i)}}\right]=Var\left[ \frac{\partial E}{\partial s^{d}}\right]\prod^{d-1}_{i^{\prime}=i}\frac{1}{2}(1+a^2)n_{i^{\prime}+1}Var\left[w^{(i^{\prime})}\right]\)
Xavierの初期化の時と同様に、分散が一定であるためには以下が成り立てばよいです。
\(\cases{ \frac{1}{2}(1+a^2)n_{i}Var\left[w^{(i)}\right]=1 \\ \frac{1}{2}(1+a^2)n_{i+1}Var\left[w^{(i)}\right]=1}\)
この関係は任意の\(i\)に対して\(n_{i}=n_{i+1}\)が成り立っていない限り解をもちません。
Xavierの初期化の場合は、そこでこれらの条件を出来る限り成り立つように以下が成り立つようにしましたが、[1]ではどちらか一方が成り立つように要請します。つまり以下のどちらかを満たすようにします。
\(\cases{ Var\left[w^{(i)}\right]=\frac{2}{(1+a^2)n_{i}} \mbox{ for all } i \\ Var\left[w^{(i)}\right]=\frac{2}{(1+a^2)n_{i+1}} \mbox{ for all } i }\)
このような要請を満たす初期化が[2]で提案されているHeの初期化です。
一様分布の場合は、以下のどちらかを満たすようにすれば良いです。
\( \cases{ w^{(i)}\sim U\left[ -\sqrt{\frac{6}{(1+a^2)n_{i}}},\sqrt{\frac{6}{(1+a^2)n_{i}}}\right] \mbox{ for all } i \\ w^{(i)}\sim U\left[ -\sqrt{\frac{6}{(1+a^2)n_{i+1}}},\sqrt{\frac{6}{(1+a^2)n_{i+1}}}\right] \mbox{ for all } i }\)
また正規分布の場合、任意の\(i\)に対して以下のように初期化すれば先の条件を満たします。
\(\cases{w^{(i)}\sim \mathcal{N}\left(0,\sqrt{\frac{2}{(1+a^2)n_{i}}}\right) \\ w^{(i)}\sim \mathcal{N}\left(0,\sqrt{\frac{2}{(1+a^2)n_{i+1}}}\right)}\)
初期化の違いによる精度差
[2]ではImagenetの画像識別タスクを学習させて精度の比較を行っています。ネットワークはVGGを基本としたものを採用しています。詳細は[2]を参照してください。
活性化関数にReLUを用いた場合に、先のXavierの方法で初期化した場合と[2]の方法で初期化した場合のネットワークの学習過程を示したものが図7と図8です。
図7は22層のネットワークで学習させたもので、図8は30層のネットワークを学習させたものです。
図7:参考文献[2]より抜粋
図8:参考文献[2]より抜粋
活性化関数にReLUを用いており[1]の方法で想定されていない状況なので、フェアな比較ではないですが、22層の場合は[2]の方法が学習が速く進んでいることが分かります。
また層数を30まで多くしてみると、[1]の方法ではまったく学習が進まなくなっていることが分かります。つまり、活性化関数によって初期化の方法を変える必要性があるということを示唆しています。
また、その初期化の影響は層を深くするとより顕著に表れることが分かります。
まとめ
今回はネットワークの活性化関数や初期化の方法についての基本的な話題を解説してみました。
一様分布での通常の初期化、[1]の方法、[2]の方法を比較してみると分散が数倍程度しか変わらないことが見て取れます。このような些細な違いでもネットワークの学習に大きな影響が出るというのは驚きです。
近年ではSkip Connection等のネットワークの構成の改善、Batch Normalization等の強力な正規化手法の確立やより良い活性化関数の提案等もあって論文出版時に比べ格段に学習しやすくなっていますね。
特にSkip Connectionについては入力を出力にそのまま伝えるので、各層での出力・誤差微分の分散が揃うことを初期化時のみならず学習の過程でも常にある程度保証します。
Heの初期化・Xavierの初期化は初期化時でしか分散が揃うことを保証しないので、Skip Connectionは強力なネットワーク構造であることが分かります。
本記事では省略した部分もあるので、詳細が気になる方は元論文[1][2]にあたられることをお勧めします。
物体検出などAI機械学習を活用したシステムの構築に関するご相談(無料)を承っています
参考文献
[1]Glorot, X. & Bengio, Y.. (2010). Understanding the difficulty of training deep feedforward neural networks. Proceedings of the Thirteenth International Conference on Artificial Intelligence and Statistics, in PMLR 9:249-256
[2]He, Kaiming & Zhang, Xiangyu & Ren, Shaoqing & Sun, Jian. (2015). Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification. IEEE International Conference on Computer Vision (ICCV 2015). 1502. 10.1109/ICCV.2015.123.