ディープラーニングの手法 ①活性化関数 ②勾配降下法
ディープラーニングの研究が活発になり、
今では事前学習が必要なくなった。
これを実現したのは、誤差逆伝搬(バックプロパゲーション)での
勾配消失問題の最大の原因であった活性化関数を工夫する
テクニックを用いたことだった。
活性化関数
シグモイド関数以外にどういったものが
用いられているか。
1.tanh関数(ハイパボリックタンジェント)
2.ReLU関数(Rectified Linear Unit)
2-1. Leaky ReLU関数
2-2. Parametric ReLU
2-3. Randomized ReLU
tanh関数は、シグモイド関数を線形変換したもので-1から1の範囲をとるのが特徴。
シグモイド関数の微分のMAXが0.25であったのに対し、tanh関数の微分のMAXは1なので、勾配消失しにくい。
ただし最大が1のため大体は1未満となり、深いネットワークでは勾配消失を防ぎにくいのが実情。
ReLU関数は、y=max(0,x)という、現在もっともよく使われているもの。
微分すると、x>0の場合は常にMAXの1が得られるので誤差逆伝搬の際に勾配消失しにくい。
ただしx<0の場合、微分値0のため学習がうまくいかない場合もあることに注意が必要。
Leaky ReLU関数はReLUの派生版。
x<0でもわずかに傾きをもっており、ReLUよりも勾配消失しにくく、より精度が出やすい。ただし実際はReLUのほうが良い場合もあり、必ずしもよい関数とは言い切れない。
Parametric ReLU(x<0の直線の傾きを学習によって最適化)、Randomized ReLU(複数の傾きをランダムに試す)といった派生版もあるが、どれが一番いいかは一概には言えない。
学習率の最適化
機械学習が目指すのは、モデルの予測値と実際の値との誤差をなくすこと。
どう実現するかで様々なアプローチがある。
数学的にアプローチする際に、誤差を誤差関数として定義しこれをいかに
最小化していくかということになる。
関数の最小化とは微分。
すなわち誤差関数の最小化とは、それぞれの層の重みで誤差関数を微分した値がゼロになるような重みを求めればよいことになる。
(ただし調整すべき重みは複数あるので、微分とはいえ「偏微分」となる)
しかし、一般的にニューラルネットワークで解こうとする問題は入力が多次元のため最適なパラメータが簡単に求まらないケースがほとんど。
そこで、アルゴリズムを用いて最適解を探索するアプローチがとられる。
この手法を勾配降下法という。
勾配降下法
ディープラーニングの学習に用いられるアルゴリズムで、勾配(微分値≒接線の傾き)に沿って降りていくことで解を探索する。
x^(k+1) = x^k - α*f'(x^k) (α>0)
k: エポックと呼ぶ。何回繰り返し計算したかを示す。
α: 学習率と呼ばれるハイパーパラメータ。勾配に沿って一度にどれだけ降りていくかを決めるもの。
ニューラルネットワークでは、各パラメータ(重み)に対して勾配降下法を適用することで最適解を求める。つまりニューラルネットワークの学習とは
勾配降下法を用いて繰り返し計算を行うことを指す。
なぜ学習に時間がかかるかというと、最適解が見つかるまでひたすら探索をしているから、ということになる。
課題と解決法-①
勾配がゼロになる点が複数ある場合に、本当の最適解(大域最適解)なのか、見せかけの最適解(局所最適解)なのかを見抜くことができない。
<解決法>
学習率(前述のα)の値を大きく設定する。
ただし大きいままだと最適解を飛び越えて探索し続ける問題もあるので
適切なタイミングで学習率の値を小さくしていくことが必要。
課題と解決法-②
3次元以上ではより厄介なことがある。鞍点(あんてん)と呼ばれる点で、ある次元から見れば極小だが、別の次元から見ると極大となるもの。
鞍点は一般的に勾配の小さな平坦な地点に囲まれる場合が多いので、
一度鞍点付近に陥ると抜け出すことが困難。この状態をプラトーという。
<解決法>
どの方向に沿って勾配を進んでいるときに学習率を大きく(小さく)すべきかを考える。1990年代にこの鞍点問題への対処が考えられたモーメンタムという手法は、物理でいう惰性の考え方を適用したもので、最適化の進行方向に学習を加速させることで学習の停滞を防ぐもの。
さらに効率的な手法が立て続けに考えられ、古いものからAdagrad、Adadelta、RMSprop、Adamがある。
それぞれアルゴリズムは異なるが、土台になっているのはモーメンタムと同じで、どの方向に学習を加速すればいいか、学習を収束させるかを考えたもの。新しい手法ほどより効率化が進んでおり、現在はRMSpropあるいはAdamが用いられるケースがほとんど。
参考文献: