ニューラルネットワークとは
ニューラルネットワークは脳の神経細胞(ニューロン)のネットワークを参考に作られた数理モデルである。
ニューラルネットワークに入力を与えると、内部で計算が行われ、何らかの出力が行われる。
入力を\(x\),出力を\(y\)とするとニューラルネットワーク全体を一つの関数\(f\)と捉えて、ニューラルネットワークは\(y=f(x)\)を計算する関数であると捉えることが可能になる。
前向き伝搬ネットワーク関数
まずは回帰・分類用線形モデルから振り返ろう
$$ y(\mathbf{x}, \mathbf{w})=f\left(\sum_{j=1}^M w_j \phi_j(\mathbf{x})\right) $$
という形だったが、これは次のように解釈する
- 入力データ\(x\)を非線形基底関数\(\phi_j(x)\)による写像
- それぞれの基底関数に対応する重み\(w_j\)をかけ、すべての基底関数についての合計を求める。(線形結合)
- 非線形活性化関数\(f\)を適用し、出力\(y\)を得る。
例:多項式曲線フィッティング
多項式曲線フィッティングでは\(\phi_j(x)=x^j\)
$$
y(x, \mathbf{w})=w_0+w_1 x+w_2 x^2+\ldots+w_M x^M=\sum_{j=0}^M w_j x^j
$$
分類問題の場合 | 回帰問題の場合 |
活性化関数→非線形(シグモイドなど) | 活性化関数→恒等関数(\(x = f(x)\)) |
このモデルの問題点として、基底関数が固定されており柔軟性に欠けることがあげられる
というわけでどうにかして、このモデルを拡張して非線形基底関数をパラメータに依存するようにして、重みパラメータと基底パラメータを同時に学習するようにしたい。
そうすれば、より柔軟で高い表現力を持ったモデルを作ることができる。これが基本的なニューラルネットワークのモデルの考え方で、ここからはそのモデルを導く。
順伝播の流れを理解しよう
このように右に向かって入力から出力へと流れるネットワークを考えてみよう。この流れのことを順伝播という。
ここからは、入力Xから数式的にどのように計算して出力Yが得られるのか段階的にひとつひとつ見ていこう。
多層ネットワークの層の数え方
ところで、ニューラルネットワークは上図のように表されることが多く、このようなネットワークは3層ネットワークと呼ばれることもあるがここでは2層ネットワークと呼ぶことにする。
というのも、ネットワークの性質を定めるのに重要な適応的な重みをもつ層は2つだからである。
step
1重みづけ線形和+バイアス
まずは入力層と第一層(隠れ層)の処理から考えてみよう。
第一層では、入力変数\(x_1, \ldots, x_D\)とそれぞれの重み\(w_{j i}^{(1)}\)を掛け合わせて足し合わせる。ここで\(j\)は隠れ層のユニットの番号であり、\(i\)は入力変数の番号である。数式で書くと、以下のようになる。
$$ a_j=\sum_{i=1}^D w_{j i}^{(1)} x_i+w_{j 0}^{(1)} $$
この式では、バイアスパラメータ\(w_{j 0}^{(1)}\)も足している。バイアスパラメータは、ニューロンがどれだけ容易に発火するかを調整する役割がある。
メモ
ニューラルネットワークの順伝播で行う行列の積は、幾何学の分野では「アフィン変換」と呼ばれ、ここでの処理を「アフィンレイヤ」と呼ぶこともあるよ
step
2活性化関数による非線形変換
この線形和を微分可能な活性化関数\(h\)で変換する。これにより非線形性がモデルに導入される。数式で表すと以下のようになる。
$$ z_j=h\left(a_j\right) $$
隠れ層でよく使われる活性化関数
tanh | Sigmoid | ReLU | PReLU |
$$ f(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}} $$tanh関数は活性化関数としてよく用いられる。tanh関数はシグモイド関数と形状が非常に似ており、座標(0,0)を起点として点対称なS字型の曲線でシグモイド関数と異なり出力が-1から1までの値をとる。シグモイド関数は微分すると勾配消失の問題があるが、tanh関数は微分した後の係数が0から1までの値をとるため勾配消失が起こりにくい。 | $$ f(x)=\frac{1}{1+e^{-x}} $$$$ \frac{d f(x)}{d x}=f(x)(1-f(x)) $$このようにシグモイド関数の微分は簡単に計算することができる。ニューラルネットワークにおいてパラメータの更新過程では誤差逆伝播という微分を利用した方法を用いるが、シグモイド関数はこのように微分後の関数を用意に求めることができるしかし、微分後の関数の最大値は0.25であり、誤差逆伝播法では出力層から入力層に向かって勾配を乗法していくため、層が深いほど0に近づいていってしまう勾配消失が起こりやすい | $$ f(x)= \begin{cases}0 & (x<0) \\ x & (x \geq 0 \text { })\end{cases} $$ このReLU関数なら微分しても勾配消失が起こりにくい。\(x = 0\)で滑らかにつながっていないからそこでは微分できないと思うかもしれないが、ディープラーニングの計算過程ではそこで微分するような場面はほとんどないため気にする必要はない。なので、ReLU関数は現在、活性化関数として非常によく使われる。 | $$ f(\alpha, x)= \begin{cases}\alpha x, & x<0 \\ x, & x \geq 0\end{cases} $$ PReLU関数の方はxが0より小さい範囲で出力値が下がっていっているのが分かる。xが0より小さい範囲でも値をわずかに持つことから、ReLU関数と違ってx<0でも値が更新される。これにより、ReLU関数を用いたときよりも良い結果をもたらす場合がある。 |
step
3重みづけ線形和+バイアス
先ほどのステップ1と同じく、これらの値の線形和を計算して、出力ユニットの活性を計算する。ここで、隠れ層の出力を使い、新たな重みとバイアスで計算する。
$$ a_k=\sum_{j=1}^M w_{k j}^{(2)} z_j+w_{k 0}^{(2)} $$
\(k\)は出力のユニットの番号であり、\(K\)は出力の総数である。この変換はネットワークの第二層に相当する。
step
4活性化関数による非線形変換
最後に、出力ユニット活性を適当な活性化関数で変換してネットワークの出力\(y_k\)を計算する。これがネットワークの最終的な出力となる。
出力層の活性化関数の選び方
活性化関数をどのように選ぶかは、データの性質と目標変数がどのように分布すると考えられるかに依存する。
二値分類問題の場合 | シグモイド関数 $$ \sigma(x)=\frac{1}{1+\exp (-x)} $$
|
多クラス分類問題の場合 | softmax関数 $$ \sigma\left(x_k\right)=\frac{\exp \left(-x_k\right)}{\sum_j \exp \left(-x_j\right)} $$
|
回帰問題の場合 | 恒等関数 $$ \sigma(x)=x $$
|
まとめると、ニューラルネットワークの右方向、入力から出力までの流れ(順伝播)は行列演算と非線形変換の繰り返しである。ということができる。
この4つのステップの演算をすべてまとめて数式にすると、
$$
y_k(\mathbf{x}, \mathbf{w})=\sigma\left(\sum_{j=1}^D w_{k j}^{(2)} h\left(\sum_{i=1}^D w_{j i}^{(1)} x_i+w_{j 0}^{(1)}\right)+w_{j 0}^{(2)}\right)
$$
ここで、出力ユニット活性化関数にシグモイド関数を用いていて、\(\mathbf{w}\)はすべての重みパラメータとバイアスパラメータをまとめたベクトルである。
すなわち、ニューラルネットワークモデルとは、調整可能なパラメータ\(\mathbf{w}\)による入力Xから出力Yへの非線形関数である。
Deepな構造への拡張
ここまで見てきたように結局のところ、ニューラルネットワークというのは行列演算と非線形変換の繰り返しであるので
簡単に層の追加を考えることができる。
層が一個増えると行列演算と非線形変換が一回増える。
もっとシンプルな形にしよう
先ほどのプロセスでは重みパラメータとバイアスパラメータは別のものとして扱っていたが、まとめて扱ってあげることでもっとシンプルな形で表しなおしてみよう
これは入力変数に\(x_0=1\)と固定された入力変数\(x_0\)を追加することで、重みパラメータ集合の中にバイアスパラメータを含めることができる。
そうすると以下のようにスッキリと表すことができるようになる。
ニューラルネットワークと多層パーセプトロン
このようにニューラルネットワークモデルは二段階の処理からなり、それぞれがパーセプトロンアルゴリズムと似ている。
パーセプトロンとの類似点
パーセプトロンアルゴリズムも、入力と重みの線形和を計算し、その結果を非線形関数で変換する。ニューラルネットワークの各層の処理は、このパーセプトロンの計算と似ている。
パーセプトロンアルゴリズムを思い出してみよう。パーセプトロンアルゴリズムは以下の式で表される一般化線形モデルを構成する。
\begin{aligned}
& y(\mathbf{x})=f\left(\mathbf{w}^{\mathrm{T}} \phi(\mathbf{x})\right) \\
& f(a)=\left\{\begin{array}{l}
+1, a \geq 0 \\
-1, a<0
\end{array}\right.
\end{aligned}
$$
とこの式とその形をみると、これは隠れ層がないニューラルネットワークの同一の形式であることがわかる。
シグモイド関数とステップ関数の違い
しかし、パーセプトロンではステップ関数を用いるのに対して、ニューラルネットワークではシグモイド関数などの連続な非線形関数を用いる。ステップ関数は、ある値を境に急に値が変わる関数で、シグモイド関数は滑らかに値が変わる関数である。
パーセプトロン | ニューラルネットワーク |
ステップ関数:入力がある閾値を超えると急に1になり、それ未満では0になる関数。 | シグモイド関数:入力が大きくなるにつれて、滑らかに0から1へ変化する関数。 |
微分不可能 | 微分可能 |
微分可能性の重要性
このシグモイド関数の連続性が重要な点である。連続な関数は微分可能であり、つまり、どのように少しずつ変化するかが数学的に表現できる。この微分可能性が、ニューラルネットワークの訓練における中心的な役割を果たす。
ニューラルネットワークを訓練する際、誤差逆伝播法などの手法で、出力の誤差を元にネットワークの各重みを調整する。この調整には、関数の微分が必要となる。シグモイド関数のような滑らかな関数を用いることで、この微分が可能になり、効率的な訓練が可能となる。
ニューラルネットワークは、多層の構造と非線形関数によって、複雑なデータの特徴を捉えることができる。この非線形関数が連続であることで、微分可能となり、ネットワークの訓練が効率的に行える。この微分可能性は、ニューラルネットワークが多層パーセプトロンとして広く使用される理由の一つである。
層を飛び越えた結合
通常のニューラルネットワークでは、隣接する層の間にのみ結合(つながり)がある。入力層から隠れ層へ、隠れ層から出力層へのように、隣り合う層同士がつながっている。
「層を飛び越えた結合」とは、隣り合わない層の間に直接結びつける結合のことだ。例えば、入力層と出力層を直接結ぶような結合である。このような結合は、ネットワークの構造をより複雑にし、柔軟な表現を可能にする。
この「層を飛び越えた結合」は、シグモイド関数を持つ隠れユニットのネットワークで近似することができて具体的には、以下の方法で行うことができる
- 第一層での隠れユニットへの重みを十分小さくする
- 隠れユニットから出力ユニットへの重みを大きくする
これで近似できている理由は、隠れユニットへの重みが十分小さいと、シグモイド関数は線形となる。つまり、入力と出力がほぼ比例する。その分だけ隠れユニットから出力ユニットへの重みを大きく取ることで、入力層と出力層の間の直接のつながりを近似することができる。
「層を飛び越えた結合」は、ニューラルネットワークの構造をより複雑にする手法である。通常の隠れユニットを使用しても、特定の設定下でこの飛び越えた結合を近似することができる。この方法は、ネットワークの表現力を高め、より複雑な関係を学習することが可能となる。
つまり、パラメータを調整すればスキップ結合無しのNNで表現可能である。
フィードフォワード構造
ニューラルネットワークの設計において、ネットワーク図という概念が非常に重要だ。ネットワーク図は、数学的な関数と直接対応し、その関数がどのようにデータを処理するのかを視覚的に表す。
このネットワーク図を使うと、より一般的な関数へと発展させることができる。すなわち、多くの入力と隠れ層、出力を持つより複雑なネットワークを設計することが可能だ。だが、この時に重要な制限がある。それは「フィードフォワード構造」でなければならないということだ。
フィードフォワード構造とは、ネットワーク内でデータが一方向に流れることで、閉じた有向閉路(ループ)を持っていない構造のことを指す。この制限がある理由は、出力が入力の決定論的な関数であること、つまり入力が同じなら必ず同じ出力になることを保証するためだ。ループがあると、出力が変動する可能性があるため、この保証ができなくなる。
スパースなネットワーク
このネットワークはスパース(疎)であることがある。つまり、ある層に可能なすべての結合ではなく、その一部だけが存在するネットワークを考えることができて、そのようなスパースなネットワーク構造の例が、畳み込みニューラルネットワーク(CNN)である。
万能近似器
ニューラルネットワークの一つの興味深い特性は、それが「万能近似器」としての能力を持つということだ。これについての説明を分かりやすく解説する。
まず、「万能近似器」とは何かを理解する必要がある。この用語は、ニューラルネットワークがある条件下で、任意の関数を近似する能力があるということを意味する。
具体的には、例えば線形出力を持つ2層ネットワークにおいて、隠れユニットが十分に多ければ、コンパクトな定義域内でのどんな連続関数でも、どれだけ精度を高くしたいかに応じて近似できるのだ。隠れユニットの活性化関数として、広い範囲の関数を使用してもこの性質は成り立つ(ただし、多項式を除く)。これは、ニューラルネットワークが非常に複雑な関数やデータ構造も表現できる可能性を秘めていることを示す。
しかし、ここで重要なのは、この理論的な性質がニューラルネットワークの「良さ」を再確認するものであっても、実際の問題でどう使うかは別の課題であるということだ。
実際にニューラルネットワークを訓練する際、与えられた訓練データ集合に対して、どうやって最適な重みやバイアス、つまりパラメータの値を見つけるかが重要だ。この最適なパラメータの探索は、通常様々な最適化技術を用いて行うが、必ずしも簡単ではない。
万能近似定理は、理論的にはニューラルネットワークが非常に強力であることを示すが、実際にはその能力を最大限に引き出すためには、適切な訓練方法やパラメータの調整が欠かせない。
したがって、この「万能近似器」としての性質は非常に興味深いものだが、それだけでなく、訓練データに対する適切な学習の方法や、適切なモデルの選択など、さらなる検討と工夫が必要であることを理解することが大切だ。
重み空間対称性
ここで、特定の2層ネットワークを考える。このネットワークはM個の隠れユニットを持ち、各層間は完全に結合している。活性化関数としてはtanhを使用している。このニューラルネットワークを一つの大きな関数として捉えてみよう。
tanh活性化関数についてだが、この関数は奇関数であり、\(tanh(-a) = -tanh(a)\)という性質がある。
さて、重要なのは、隠れユニットへのすべての重みとバイアスの符号を反転させると、このネットワークの出力が変わらないということだ。これは何を意味するのか?
- まず、隠れユニットへのすべての重みとバイアスの符号を反転すると、tanh活性化関数の性質から、隠れユニットの出力の符号も反転する。
- この符号の反転は、隠れユニットから出る重みの符号を全て反転させることで、完全に打ち消すことができる。
この結果、一部の重み(あるいはバイアス)の符号を反転させても、ネットワーク全体の入出力関数は変わらない。これを一般化すると、M個の隠れユニットがある場合、任意の与えられた重みベクトル\(\mathbf{w}\)と等価な重みベクトルは全部で\(2^M\)個存在する。
さらに、ある隠れ素子のバイアスを別の素子のものと取り換える。これはすべての素子に関して和が取られるので出力には影響がない。
このとき隠れ素子がM個だとすると、\(M!\)通りの並べ替え問題となる。すなわち、任意のパラメータに対して\(2^M M!\)個の対称性が存在する。
この性質が何を意味するのかというと、ニューラルネットワークにおいて、同じ関数を表現するための重みベクトルが複数存在するということだ。ベイズモデル比較を考える際には、この性質が重要になることがある。同じ関数を表現する重みベクトルが複数あるため、モデルの複雑さやパラメータの選び方について考慮する必要があるのだ。
ネットワークの訓練
とりあえず、ネットワークパラメータ\(\mathbf{w}\)の決定問題への単純なアプローチとして二乗和誤差関数を最小化することを考える。
二乗和誤差関数はのように表される。
$$
E(\mathbf{w})=\frac{1}{2} \sum_{n=1}^N\left\{y\left(\mathbf{x}n, \mathbf{w}\right)-t_n\right\}^2
$$
この部分が最小となる\(\mathbf{w}\)を\(\mathbf{w}_{\mathrm{ML}}\)とする。ただし
\(\mathbf{x}_n\) : 入力特徴ベクトル \((n=1,2, \ldots, N)\)
\(\mathbf{t}_n\) : 目標値ベクトル \((n=1,2, \ldots, N)\)
\(\mathbf{w}\) : ネットワーク全体の重みパラメータ
しかしながら、ネットワークの出力を確立的に解釈すると、より一般的な学習を考えることができるようになる。
出力変数がガウス分布に従うと仮定することで、確率的な不確実性を取り入れることができる。これによって、出力が確定的な値ではなく、確率分布として得られる。このような確率的な枠組みは、データが持つノイズや未知の要素に対する耐性を高め、さらには新しいデータに対する予測の信頼区間を推定することも可能にする。
回帰問題篇
まずは、回帰問題として任意の実数値を取れる一つの目標変数\(t\)を考える。そして\(t\)は\(\mathbf{x}\)に依存する平均を持つガウス分布に従うと仮定する。
$$
p(t \mid \mathbf{x}, \mathbf{w})=N\left(t \mid y(\mathbf{x}, \mathbf{w}), \beta^{-1}\right)
$$
\(y(\mathbf{x}, \mathbf{w}):\)平均(NNの出力)
\(\beta^{-1}:\) 精度
因みに、ここでの出力ユニットの活性化関数では恒等写像を考えれば十分で、というのもそのようなネットワークで任意の\(\mathbf{x}\)から\(y\)への連続関数を近似できるからである。
N個の独立確率分布に従う観測値\(\mathbf{X}=\left\{\mathbf{x}_1, \mathbf{x}_2, \ldots, \mathbf{x}_N\right\}\)とそれぞれに対応する目標値\(\mathbf{t}=\left\{t_1, t_2, \ldots, t_N\right\}\)からなるデータ集合が与えられたとき、尤度関数は
$$
p(\mathbf{t} \mid \mathbf{X}, \mathbf{w}, \beta)=\prod_{n=1}^N p\left(t_n \mid \mathbf{x}_n, \mathbf{w}, \boldsymbol{\beta}\right)
$$
と表されて、負の対数関数を適応して以下のような誤差関数を得る
$$
\frac{\beta}{2} \sum_{n=1}^N\left\{y\left(\mathbf{x}_n, \mathbf{w}\right)-t_n\right\}^2-\frac{N}{2} \ln (\beta)+\frac{N}{2} \ln (2 \pi)
$$
学習すべきパラメータは重み\(\mathbf{w}\)と精度の\(\beta\)
最尤推定
まずは、\(\mathbf{w}\)を求めよう。\(\mathbf{w}\)に関して無関係な項を削除することによって
結局、尤度関数を最大化することは
$$
E(\mathbf{w})=\frac{1}{2} \sum_{n=1}^N\left\{y\left(\mathbf{x}_n, \mathbf{w}\right)-t_n\right\}^2
$$
この二乗和誤差関数を最小化することと同じで、\(E(\mathbf{w})\)を最小化する\(\mathbf{w}\)は最尤推定解となるので、\(\mathbf{w}_{\mathrm{ML}}\)とあらわすことにする。
次に精度\(\beta\)に関して最適化を行おう。
精度\(\beta\)に関して微分して0とすれば
$$
\begin{array}{r}
\frac{1}{2} \sum_{n=1}^N\left\{y\left(\mathbf{x}_n, \mathbf{w}_{M L}\right)-t_n\right\}^2-\frac{N}{2 \beta}=0 \\
\frac{1}{\beta_{M L}}=\frac{1}{N} \sum_{n=1}^N\left\{y\left(\mathbf{x}_n, \mathbf{w}\right)-t_n\right\}^2
\end{array}
$$
ただし、この\(\beta_{ML}\)は重み\(\mathbf{w}\)に関して反復最適化が完了した後でないと一意に決定できない。
目的変数が多変量の場合
目的変数の分布は先ほどの議論を拡張して等方性の多変量ガウス分布を仮定する
$$
p(\mathbf{t} \mid \mathbf{x}, \mathbf{w})=N\left(\mathbf{t} \mid \mathbf{y}(\mathbf{x}, \mathbf{w}), \beta^{-1} \mathbf{I}\right)
$$
尤度関数は単一の場合と同様に尤度関数は以下のように表される。
$$
p(\mathbf{t} \mid \mathbf{X}, \mathbf{w}, \beta)=\prod_{n=1}^N p\left(\mathbf{t} \mid \mathbf{x}_n, \mathbf{w}, \beta\right)
$$
これまた同様に負の対数尤度関数を取ると
$$
\frac{\beta}{2} \sum_{n=1}^N\left(\mathbf{t}_n-\mathbf{y}\left(\mathbf{x}_n, \mathbf{w}\right)\right)^T\left(\mathbf{t}_n-\mathbf{y}\left(\mathbf{x}_n, \mathbf{w}\right)\right)-\frac{N K}{2} \ln (\beta)+\frac{N K}{2} \ln (2 \pi)
$$
と表される。
最尤推定(多変量)
同じように重みパラメータに関して最適化していく。
\(\mathbf{w}\)について無関係な項を削除して考えると、やはり
$$
\begin{aligned}
& \frac{1}{2} \sum_{n=1}^N\left(\mathbf{t}_n-\mathbf{y}\left(\mathbf{x}_n, \mathbf{w}\right)\right)^T\left(\mathbf{t}_n-\mathbf{y}\left(\mathbf{x}_n, \mathbf{w}\right)\right) \\
& =\frac{1}{2} \sum_{n=1}^N\left\|\left(\mathbf{y}\left(\mathbf{x}_n, \mathbf{w}\right)\right)-\mathbf{t}_n\right\|^2
\end{aligned}
$$
となり、多変量の場合も尤度関数の最大化は、二乗和誤差関数の最小化となる。
この最小化する最尤解を\(\mathbf{w}_{\mathrm{ML}}\)とする。
次に\(\beta\)に関して微分して0とすれば
$$
\begin{gathered}
\frac{1}{2} \sum_{n=1}^N\left(\mathbf{t}_n-\mathbf{y}\left(\mathbf{x}_n, \mathbf{w}_{M L}\right)\right)^T\left(\mathbf{t}_n-\mathbf{y}\left(\mathbf{x}_n, \mathbf{w}_{M L}\right)\right)-\frac{N K}{2 \beta}=0 \\
\frac{1}{\beta}=\frac{1}{N K} \sum_{n=1}^N\left(\mathbf{t}_n-\mathbf{y}\left(\mathbf{x}_n, \mathbf{w}_{M L}\right)\right)^T\left(\mathbf{t}_n-\mathbf{y}\left(\mathbf{x}_n, \mathbf{w}_{M L}\right)\right) \\
\quad=\frac{1}{N K} \sum_{n=1}^N\left\|\left(\mathbf{y}\left(\mathbf{x}_n, \mathbf{w}_{M L}\right)-\mathbf{t}_n\right)\right\|^2
\end{gathered}
$$
結局
$$
\frac{1}{\beta_{\mathrm{ML}}}=\frac{1}{N K} \sum_{n=1}^N\left\|\mathbf{y}\left(\mathbf{x}_n, \mathbf{w}_{\mathrm{ML}}\right)-\mathbf{t}_n\right\|^2
$$
となる。
誤差関数の性質
ニューラルネットワークが回帰問題を解いている場合を考える。つまり、出力の活性化関数に恒等関数\(y_k=a_k\)を使用している。
先ほどの最尤推定で出てきた二乗和誤差関数を\(a_k\)で微分してみよう。
$$
\begin{aligned}
\frac{\partial E(\mathbf{w})}{\partial a_k} & =\frac{\partial}{\partial a_k}\left(\frac{1}{2} \sum_{n=1}^N\left\|\mathbf{y}_n-\mathbf{t}_n\right\|^2\right)=\frac{\partial}{\partial a_k}\left(\frac{1}{2} \sum_{n=1}^N\left(y_{n k}-t_{n k}\right)^2\right) \\
& =\frac{\partial}{\partial a_k}\left(\frac{1}{2} \sum_{n=1}^N\left(a_{n k}-t_{n k}\right)^2\right)=\sum_{n=1}^N\left(y_{n k}-t_{n k}\right)
\end{aligned}
$$
つまり
$$
\frac{\partial E(\mathbf{w})}{\partial a_k}=y_k-t_k
$$
ということが言えて、この性質はとてもオンライン学習の場合を考えればとても便利で、めっちゃ簡単に計算することができる。
この性質は後の誤差逆伝播法で使われるのだ。
二値分類篇
ここまでは回帰問題について考えてきたが、ここからは2クラスに分類することを考えよう。
1つの目標変数\(t\)で、
\(\mathcal{C}_1\):\(t = 1\)
\(\mathcal{C}_2\):\(t = 0\)
で分類されるとする。
2クラス分類で、確率として解釈するために0~1に出力の値を収めたいのでシグモイド関数を活性化関数とする単一の出力を持つネットワークを考える。となると、各クラスの事後確率は以下のように与えられる。
$$
p\left(C_1 \mid \mathbf{x}\right)=y \quad p\left(C_2 \mid \mathbf{x}\right)=1-y
$$
目的変数の条件付き分布はベルヌーイ分布となるので
$$
\begin{aligned}
p(t \mid \mathbf{x}, \mathbf{w}) & =p\left(C_1 \mid \mathbf{x}\right)^t p\left(C_2 \mid \mathbf{x}\right)^{1-t} \\
& =y(\mathbf{x}, \mathbf{w})^t\{1-y(\mathbf{x}, \mathbf{w})\}^{1-t}
\end{aligned}
$$
よって、負の対数関数は
$$
\ln (p(t \mid \mathbf{x}, \mathbf{w}))=-\{t \ln (y(\mathbf{x}, \mathbf{w}))+(1-t) \ln (1-y(\mathbf{x}, \mathbf{w}))\}
$$
訓練集合が独立な観測値である場合には、負の対数尤度で与えられる誤差関数は
$$
E(\mathbf{w})=- \sum_{n=1}^N \{t_n \ln \left(y_n\right)+\left(1-t_n\right) \ln \left(1-y_n\right)\}
$$
という二値分類の交差エントロピー誤差関数になる。ここではラベル付けが正しくなされているという前提のもと計算しているので、ノイズ精度\(\beta\)に相当するものはない。そしてそれは、ラベル付け誤差を許容できるように簡単に拡張することができる。
クラス分類問題では二乗和の代わりに交差エントロピーを使う方が、高速で高い汎化性能を示す。
マルチラベリングの場合
\(K\)個の異なる2クラス分類問題を解くときには、各々の活性化関数がロジスティックシグモイド関数である\(K\)個の出力を持つネットワークを用いればよく、各々の出力に2クラスラベル\(t_k \in \{0,1\}\)が割り当てられる。それぞれのクラスラベルが独立であるとすれば、目的変数の条件付き分布は
$$
p(\mathbf{t} \mid \mathbf{x}, \mathbf{w})=\prod_{k=1}^K y_k(\mathbf{x}, \mathbf{w})^{t_k}\left\{1-y_k(\mathbf{x}, \mathbf{w})\right\}^{1-t_k}
$$
同様に負の対数を取って独立な観測を考えれば
$$
E(\mathbf{w})=-\sum_{n=1}^N \sum_{k=1}^K \{t_{n k} \ln \left(y_{n k}\right)+\left(1-t_{n k}\right) \ln \left(1-y_{n k}\right)\}
$$
ただし\(y_{n k}\)は\(y_k\left(\mathbf{x}_n, \mathbf{w}\right)\)を表す。これがマルチラベリング問題の交差エントロピーである。
多クラス分類篇
多クラス分類問題においては活性化関数にsoftmax関数が使われるのであった。
$$
y_k(\mathbf{x}, \mathbf{w})=\frac{\exp \left(a_k(\mathbf{x}, \mathbf{w})\right)}{\sum_j \exp \left(a_j(\mathbf{x}, \mathbf{w})\right)}
$$
その理由はマルチラベリングの時と同じく。値域が0~1の間で総和が1となるので、確率として解釈することができるからである。
標準的な多クラス分類問題、すなわち、それぞれの入力はK個の排他的なクラスの一つに割り当てられている問題を考えよう。2値の目標変数\(t_k \in \{0,1\}\)は各クラスをワンホットエンコーディングで表しており、ネットワークの出力は\(y_k(\mathbf{x}, \mathbf{w})=p\left(t_k=1 \mid \mathbf{x}\right)\)と解釈する。このとき、誤差関数は $$ E(\mathbf{w})=-\sum_{n=1}^N \sum_{k=1}^K t_{k n} \ln y_k\left(\mathbf{x}_n, \mathbf{w}\right) $$ と表される
ただし、\(y_k(\mathbf{x}_n, \mathbf{w})\): \(n\)番目のデータが\(k\)番目のクラスに属する確率(モデルの出力)
尤度を最適化することは、交差エントロピー誤差関数であるこの関数を最小化することと等価である。
誤差関数まとめ
これまでの話をまとめると、出力ユニットの活性化関数と誤差関数は解くべき問題の形によって自然に選択される。
回帰問題での誤差関数は二乗和誤差関数
分類問題の誤差関数は交差エントロピー誤差関数と呼ばれ、二乗和誤差最小化よりも高速かつ高い汎化性能を持っている。
回帰 | 二値分類 | マルチラベリング | 多クラス分類問題 | |
活性化関数 | 恒等関数 | シグモイド関数 | シグモイド関数 | ソフトマックス関数 |
誤差関数 |
パラメータ最適化
誤差関数を選べたら、\(E(\mathbf{w})\)を最小にする重みベクトル\(\mathbf{w}\)を見つけることを考えよう。先ほどのネットワークの訓練の話ではしれっと見つけたことにしてたが、もう少し深堀りしてみる。
ニューラルネットワークの学習の目的は、誤差関数の値をできるだけ小さくする重みパラメータ\(\mathbf{w}\)を見つけることにある。これは最適なパラメータを見つける問題であり、そのような問題を解くことを最適化という。
しかし、ニューラルネットワークの最適化はとても難しい問題である。それはパラメータ空間が非常に複雑で最適な解は簡単には見つけることができないからで、ディープなネットワークになればなるほど難しい問題になっていく。
例えるなら、広大な乾燥地帯を旅する冒険家が目隠しをした状態で最も深い谷底を探し当てるようなもの。
この厳しい条件下で大きな手掛かりになってくるのが、地面の「傾斜」。冒険家は周りの景色は見えないが、今いる場所の地面がどちらに傾いているのかは分かる。そこで、今いる場所で最も傾斜がきつい方向に進もうというのが一つの戦略として考えることができる。
つまり、誤差関数を幾何的に捉えて、その勾配\(\nabla E(\mathbf{w})\)を使って勾配がゼロになる点を探すということに他ならない。
勾配が0になる点というのはつまり、
$$
\nabla E(\mathbf{w})=0
$$
を満たすということで、このような点は最小値を取る必要条件になっている。もしそうでないと\(-\nabla E(\mathbf{w})\)の方向に少し動かしたときに、さらに誤差関数を小さくできてしまう。
このような点は停留点と言われており、それらは極小点、極大点、鞍点に分けられる。
停留点の分類
極小点:連続関数が減少⇒増加に切り替わる点
極大点:連続関数が増加⇒減少に切り替わる点
鞍点:ある方向では極大点、別の方向では極小点となる点
しかし、ニューラルネットワークにおいて誤差関数の重みパラメータ\(\mathbf{w}\)への依存性には高い非線形性があるので、勾配が0になるような点は多く存在する。
実際、「重み空間対称性」の議論から任意のパラメータで\(2^M M !\)個の等価な点のグループが存在している。
しかし、一般的には単なる等価な点ではない極小点が存在して、誤差関数の最小点と言える極小点を大域的最小点とよび、それ以外、つまり最小点よりも大きな極小点を局所的極小点と呼ぶ。
難しいのは、見つけた極小点が本当に大域的最小点であるのかどうかは知ることができないので、よりいい感じの解が欲しいのであれば、何個か極小点を比較する必要がある。
極小点の見つけ方
さて、肝心のどのように極小点を見つけるかなのだが、やはり解析的に解をみつけることは困難を極める。なのでここでは、数値的な反復して逐次的に探索していく方法を取ることにする。
この連続な非線形関数の極小点を逐次的に探索するアルゴリズムはたくさん存在するが、ほとんどのテクニックにおいてその基本的なアプローチは同じで
- 初期値\(\mathbf{w}^{(0)}\)を選ぶ
- \(\mathbf{w}^{\tau+1}=\mathbf{w}^\tau+\Delta \mathbf{w}^\tau\)という形で連続的にステップ移動する(ただし\(\tau\)は反復ステップ数)
という2ステップをこなしていく。
つまり、結局勾配の計算が必要になる。
ヘッセ行列と極小点
最適化問題を解く前にテイラー展開による局所的な近似に出てくるヘッセ行列と極小点の関係を理解しよう。
テイラー展開の局所二次近似
誤差関数を重み空間内のある点\(\hat{\mathbf{w}}\)の周りでのテイラー展開
ただし、三次以上の項は省略されている。
この式を単純に微分すると
$$
\nabla E \cong \mathbf{b}+\mathbf{H}(\mathbf{w}-\hat{\mathbf{w}})
$$
となり、点\(\hat{\mathbf{w}}\)周りでは誤差関数と勾配のどちらも、これらはいい感じの近似精度になる。
さて、この点\(\hat{\mathbf{w}}\)を極小点\(\mathbf{W}^*\)として、極小点まわりの局所二次近似を見てみよう。このとき、極小点では\(\left.\nabla E\right|_{\mathbf{w}=\mathbf{w}^*}=0\)が成り立つので、線形項が消えて以下のように表される。
$$
E(\mathbf{w})=E\left(\mathbf{w}^{\star}\right)+\frac{1}{2}\left(\mathbf{w}-\mathbf{w}^{\star}\right)^{\mathrm{T}} \mathbf{H}\left(\mathbf{w}-\mathbf{w}^{\star}\right)
$$
ここで、ヘッセ行列は\(\mathbf{W}^*\)で評価されており、つまり\(\left.(\mathbf{H})_{i j} \equiv \frac{\partial E}{\partial w_i \partial w_j}\right|_{\mathbf{w}=\mathbf{w}^*}\)となっている。
このヘッセ行列を幾何的に解釈するために、ヘッセ行列の固有方程式を考える。
$$
\mathbf{H} \mathbf{u}_i=\lambda_i \mathbf{u}_i
$$
固有ベクトル\(\mathbf{u}\)は完全正規直交系をなして、つまり
$$
\mathbf{u}_i^{\mathrm{T}} \mathbf{u}_j=\delta_{i j}=\left\{\begin{array}{l}
1(i=j) \\
0(i \neq j)
\end{array}\right.
$$
が成り立つ。
ここで、\(\mathbf{w}-\mathbf{w}^*\)を正規直交基底の線形和で表現すると
$$
\mathbf{w}-\mathbf{w}^*=\sum_i \alpha_i \mathbf{u}_i
$$
という形で書ける。これは原点を\(\mathbf{w}^*\)に平行移動して、各軸を固有ベクトルに合わせるように座標変換したものと考えることができる。
よってこの式を使って極小点での誤差関数を置き換えると
$$
\begin{aligned}
E(\mathbf{w}) & \cong E\left(\mathbf{w}^*\right)+\frac{1}{2}\left(\mathbf{w}-\mathbf{w}^*\right)^T\mathbf{H} \left(\mathbf{w}-\mathbf{w}^*\right)\\
& =E\left(\mathbf{w}^*\right)+\left(\sum_i \alpha_i \mathbf{u}_i^T\right) \mathbf{H}\left(\sum_j \alpha_j \mathbf{u}_j\right) \\
& =E\left(\mathbf{w}^*\right)+\left(\sum_i \alpha_i \mathbf{u}_i^T\right)\left(\sum_j \alpha_j \lambda_j \mathbf{u}_j\right) \\
& =E\left(\mathbf{w}^*\right)+\sum_i \alpha_i^2 \lambda_i
\end{aligned}
$$
つまり
$$
E(\mathbf{w}) \cong E\left(\mathbf{w}^*\right)+\sum_i \alpha_i^2 \lambda_i \tag{*}
$$
振り返ると、誤差関数を幾何的に捉えることを目標に据えていたわけだが、この式より、実はこの座標系における誤差関数の等高線は楕円になるということが言える。
正定値
ここで話を進めるために「正定値」の概念が必要になってくる。正定値の定義を確認すると
行列\(\mathbf{H}\)は
すべての\(\mathbf{v} \neq 0\)に対して\(\mathbf{v}^{\mathrm{T}} \mathbf{H} \mathbf{v}>0\)
を満たすとき、その時に限り正定値であると言われる。
そして大事な正定値行列の大事な性質が「すべての固有値が正である」ことが「\(\mathbf{H}\)は正定値」であることの必要十分条件である。ということである。
そして、ここで一番言いたかったことは。点\(\mathbf{w}^*\)におけるヘッセ行列が正定値⇔定常点\(\mathbf{w}^*\)は極小値ということである。
勾配情報の利用
勾配情報を利用しない場合
局所二次近似中の独立なパラメータ数は
なので、独立なパラメータの個数は\(W\)は\(\mathbf{w}\)の次元数とすると
$$
W+\frac{W(1+W)}{2}=\frac{W(W+3)}{2}
$$
となる。つまり、極小値の特定には\(\mathcal{O}\left(W^2\right)\)の独立な情報が必要で。さらにそれぞれの点で誤差関数の評価をしなければならず、それには\(\mathcal{O}\left(W\right)\)の計算が必要なので、結局勾配を利用しない場合、極小値を求めたければ\(\mathcal{O}\left(W^3\right)\)の計算量が必要になる。
勾配情報を利用する場合
ある点での勾配\(\nabla E(\mathbf{w})\)はW個の情報を持っているので、\(\mathcal{O}\left(W\right)\)回の勾配の評価で誤差関数の極小値を見つけることができる。誤差逆伝播法を使えば各勾配の評価は\(\mathcal{O}\left(W\right)\)ステップで実行可能なので、結局\(\mathcal{O}\left(W^2\right)\)回のステップで極小値を見つけることができる。
これが、ニューラルネットワークにおいて勾配情報が使われる理由である。
勾配法による最適化
まずイメージとして\(-\nabla E(\mathbf{w})\)はその点から最も減少する方向であるので、それに従って何回か移動を繰り返していけばいつか極小点にたどり着けるのでは?!
という見つけ方で、本当にいろんな方法が存在している。ここからはその方法をいろいろ見ていくが、まずはそれらの最適化手法を評価するための基準について整理する。
最適化手法の評価基準
- 大域収束性(満たすor満たさない)
初期値によらず収束するかどうか - 収束率(一次収束<<超一次収束<<二次収束)
一回の反復で極限までの距離がどのような速度で減少するか
数列\(\{x_k\}\)が極限\(x^*\)にp次収束するとは
$$
\left|x_{k+1}-x^*\right| \leq c\left|x_k-x^*\right|^p \quad(0<c<1)
$$
また、超一次収束とは
$$
\left|x_{k+1}-x^*\right| \leq c_k\left|x_k-x^*\right|\left(\lim _{k \rightarrow \infty} c_k=0\right)
$$
勾配降下法
一つ目の勾配を用いた極小値を見つける方法は勾配降下法と呼ばれる手法で、最もシンプルな手法である。
勾配降下法
$$
\mathbf{w}^{(\tau+1)}=\mathbf{w}^{(\tau)}-\mu \nabla E\left(\mathbf{w}^{(\tau)}\right)
$$
\(\mu\) :学習率 (固定値)
\(\tau\) : 更新回数のインデックス
勾配降下法の特徴
- 収束が非常に遅い(一次収束)
- 収束性が初期値の選び方に依存しない(大域的収束性)
- ハイパーパラメータの設定がめんどくさい
- 局所的極小値にハマる
というように、非常に分かりやすい手法だが、実際にはそんなに良いアルゴリズムではない。
共役勾配法
これは勾配降下法の進化版と言える方法で、更新方向の過去の情報も使って決める勾配法
共役勾配法
$$
\mathbf{w}^{(\tau+1)}=\mathbf{w}^{(\tau)}-\alpha^{(\tau)} \mathbf{p}^{(\tau)}
$$
\(\alpha^{(\tau)}\)は一次元探索で決定(ニュートン法で紹介)。ここで、
$$
\begin{aligned}
& \mathbf{p}^{(\tau)}=-\mathbf{g}^{(\tau)}+\beta^{(\tau)} \mathbf{p}^{(\tau-1)} \\
& \mathbf{g}^{(\tau)}=\nabla E(\mathbf{w}) \quad \beta^{(\tau)}=\frac{\left\|\mathbf{g}^{(t)}\right\|^2}{\left\|\mathbf{g}^{(\tau-1)}\right\|^2}
\end{aligned}
$$
共役勾配法の特徴
- 収束が勾配降下法に比べ高速
- 収束性が初期値の選び方に依存しない(大域的収束性)
- ハイパーパラメータの設定必要なし
- 局所的極小値にハマる
ニュートン法
ヘッセ行列も使用して最適化を行う方法としてニュートン法がある。
ニュートン法
$$
\mathbf{w}^{(\tau+1)}=\mathbf{w}^{(\tau)}-\alpha^{(\tau)} \mathbf{H}^{-1} \nabla E\left(\mathbf{w}^{(\tau)}\right)
$$
\(\alpha^{(\tau)}\):ステップサイズ(一次元探索)
\(\tau\) : 更新回数のインデックス
ステップサイズの一次元探索とは
誤差関数を更新方向にぶった切った時に最も凹んでいる位置に来るようにステップサイズを決定する
ニュートン法の特徴
- 収束が非常に速い(二次収束)
- 収束性が初期値に依存する
- ハイパーパラメータの設定必要なし
- ヘッセ行列の逆行列が不安定になる場合がある
- 局所的極小値にハマる
準ニュートン法
先ほどのニュートン法を進化させて、欠点を克服しよう!!
準ニュートン法
逆行列の計算を近似で置き換える。
$$
\mathbf{w}^{(\tau+1)}=\mathbf{w}^{(\tau)}-\alpha^{(\tau)} \mathbf{H}^{(\tau)} \nabla E\left(\mathbf{w}^{(\tau)}\right)
$$
ステップサイズ\(\alpha^{(\tau)}\)は同じく一次元探索で決定する。
逆行列の更新(BFGS法)
$$
\mathbf{H}^{(\tau+1)}=\mathbf{H}^{(\tau)}+\frac{\mathbf{y}^{(\tau)} \mathbf{y}^{(\tau) \mathrm{T}}}{\mathbf{s}^{(\tau) \mathrm{T}} \mathbf{y}^{(\tau)}}-\frac{\mathbf{H}^{(\tau)} \mathbf{s}^{(\tau)} \mathbf{s}^{(\tau) \mathrm{T}} \mathbf{H}^{(\tau)}}{\mathbf{s}^{(\tau) \mathrm{T}} \mathbf{H}^{(\tau)} \mathbf{s}^{(\tau)}}
$$
ただし、
$$
\begin{aligned}
& \mathbf{s}^{(\tau)}=\mathbf{w}^{(\tau+1)}-\mathbf{w}^{(\tau)} \\
& \mathbf{y}^{(\tau)}=\nabla E\left(\mathbf{w}^{(\tau+1)}\right)-\nabla E\left(\mathbf{w}^{(\tau)}\right)
\end{aligned}
$$
準ニュートン法の特徴
- 収束が速い(超一次収束)
- 収束が初期値に依存しない(大域的収束性)
- 局所的極小値にハマる
- 逆行列を直接計算しない。
勾配法による最適化まとめ
学習時のデータ量の使い方の違い
勾配降下法において、誤差関数は訓練集合に関して定義されるが、それぞれの反復ステップで\(\nabla E\left(\mathbf{w}\right)\)を評価してやる必要がある。
バッチ学習
パラメータの更新にすべての訓練データを用いるのがバッチ学習。更新方法は
- すべての訓練データを用いて地点\(\mathbf{w}^{(\tau)}\)における勾配を求める。(\(E(\mathbf{w})=\sum_{n=1}^N E_n(\mathbf{w})\))
- 新たな探索地点\(\mathbf{w}^{(\tau)}\)を傾きと学習率\(\mu\)を使って更新する。
- 傾きが0となる\(\mathbf{w}\)を見つけるまで1,2を繰り返す。
バッチ学習の性質として、学習結果が安定しやすいが、新たな学習データが追加されるたびに、全データを用いて再度計算を行わなければならない。
なので、このバッチ学習は全データ数が少ない時に有効。
ミニバッチ学習
訓練データの中から一部、\(n\)個のデータを取り出してパラメータの更新をするのがミニバッチ学習で、取り出した訓練データのことをミニバッチと呼び、取り出したデータ数\(n\)のことをミニバッチサイズという。更新方法は
- データからランダムに\(n\)個のデータを取り出す
- \(n\)個のデータを用いて地点\(\mathbf{w}^{(\tau)}\)における勾配を求める。\(E(\mathbf{w})=\sum_{n=1}^{n} E_n(\mathbf{w})\left( n<N\right)\)
- 新たな探索地点\(\mathbf{w}^{(\tau)+1}\)を勾配と学習率\(\mu\)を使って更新する
- 1~3を繰り返す。
ミニバッチ学習はニューラルネットワークでよく使われる。
オンライン学習
訓練データの一つを取り出してパラメータの更新をするのがオンライン学習で、以下のように更新を行う。
- N個のデータからランダムに1つのデータを取り出す。
- 1個のデータを用いて地点\(\mathbf{w}^{(\tau)}\)における勾配を求める
- 新たな探索地点\(\mathbf{w}^{(\tau)+1}\)を傾きと学習率\(\mu\)を用いて更新する。
- 1~3を繰り返す。
オンライン学習は結果が不安点になりやすく、一つ一つのデータに対して更新を行うため外れ値にも反応しやすい。
確率的勾配降下法(SGD)
勾配降下法のオンライン(ミニバッチ)学習バージョンを確立的勾配降下法(SGD)という。
確率的勾配降下法のメリット | 確率的勾配降下法のデメリット |
|
|
momentum[1986]
momentumとは「運動量」という意味で、物理チックに極小点を探す方法である。更新則は
$$
\begin{gathered}
v^{(\tau+1)} = \alpha v^{(\tau)}-\eta \frac{\partial L}{\partial W} \\
w^{(\tau+1)} = w^{(\tau)}+v^{(\tau)}
\end{gathered}
$$
vは物理で言うところの「速度」に対応し、\(\alpha\)は「空気抵抗」に相当する。つまり、\(\alpha = 0\)ならSGD
Momentumはボールが転がるように動く。
AdaGrad[J.Duchi et al. 2012]
学習率を調整するアルゴリズムとして、学習率を減衰させていくアルゴリズムであるAdaGradを紹介する。
更新則は以下のようである。
$$
\begin{aligned}
& r^{(\tau+1)}=r^{(\tau)}+\nabla E\left(w^{(\tau)}\right)^2 \\
& w^{(\tau+1)}=w^{(\tau)}-\frac{\alpha}{\sqrt{r}+1} w^{(\tau)}
\end{aligned}
$$
AdaGradは過去の勾配の二乗和を全て保持している。そのため、学習を進めれば進めるほど、更新度合いは小さくなる。実際のところ、無限に学習を行ったとすると更新量は0になる。つまり動かなくなってしまう
これを改善した方法としてRMSPropというのがある。
RMSProp(2012)
$$
\begin{aligned}
r^{(\tau+1)} & =\gamma^{(\tau)}+(1-\gamma) \nabla E\left(w^{(\tau)}\right)^2 \\
w^{(\tau+1)} & =w^{(\tau)}-\frac{\alpha}{\sqrt{r}+\varepsilon} w^{(\tau)}
\end{aligned}
$$
Adam[M.D. Zeiler et al. 2015]
AdamはMomentumとAdaGradの融合で、現在最もよく使われている今アツい最適化アルゴリズムである。
RMSPropの改良版でもあり、勾配に関しても以前の情報を指数関数的に減衰させながら伝えることで、次元量の問題に対応している。
更新則は
$$
\begin{aligned}
& v^{(\tau+1)}=\beta v^{(\tau)}+(1-\beta) \nabla E\left(w^{(\tau)}\right) \\
& r^{(\tau+1)}=\gamma r^{(\tau)}+(1-\gamma) \nabla E\left(w^{(\tau)}\right)^2 \\
& w^{(\tau+1)}=w^{(\tau)}-\frac{\alpha}{\sqrt{r / 1-\gamma^\tau}+\varepsilon} \frac{v}{1-\beta^\tau}
\end{aligned}
$$
論文推奨値は
$$
\begin{gathered}
\beta=0.9 \\
\gamma=0.999 \\
\varepsilon=10^{-8}
\end{gathered}
$$
Adamによる更新過程は、お椀上をボールが転がるような動きをする。Momentumも同じような動きをしていたが、Momentumよりも左右の揺れが軽減されている。
結局どの更新手法がいいの??
学習の速さで言えばAdaGradが早い感じで、SGDは他の学習手法に比べて遅い。
一般的にはSGDよりも他の三つの方が学習が速いが、全ての問題に対して優れた手法というのは存在せず。得手不得手がそれぞれの手法にある。
今でもSGDが使われている研究もあるし、MomentumやAdaGradも試す価値がある。
Adamは大人気^^
参考先
- https://www.dragonarrow.work/articles/195
- https://ai-trend.jp/basic-study/neural-network/sgd/
- https://www.slideshare.net/t_koshikawa/prml-5-pp227pp247