ニューラルネットワーク:
入力層、中間層(隠れ層)、出力層の3種類の層からなる。
層の数え方は重みを持つ層のみをカウントするパターン(中間層が1層の場合、2層ネットワークと呼ぶ)とすべての層をカウントするパターン(中間層が1層の場合、3層ネットワークと呼ぶ)があるので注意が必要。
ニューラルネットワークの繋がり方自体はパーセプトロンと同一。
活性化関数:
パーセプトロンの以下の式を一つにまとめる。
y = 0 : x1 * w1 + x2 * w2 + b <= 0
y = 1 : x1 * w1 + x2 * w2 + b > 0
h(x) = 0 (x <= 0)
h(x) = 1 (x > 0)
とすると、パーセプトロンの式は以下のように表すことができる。
y = h(x1 * w1 + x2 * w2 + b)
この時、h(x)のような入力信号の総和を出力信号に変換する関数を活性化関数と呼ぶ。活性化とは発火の意味。
ステップ関数、階段関数:
閾値を境にして出力が切り替わる関数。ニューラルネットワークではステップ関数以外の関数が活性化関数として用いられる。
シグモイド関数:
ニューラルネットワークで用いられる活性化関数のひとつ。
h(x) = 1/(1 + exp(-x)) で表される。
exp(-x)はeの-x乗を意味する。expとはexponential function(指数関数)。
ステップ関数と異なり、滑らかな曲線となる。
0,1以外にも実数をとる。=連続的な実数値の信号が流れる。
ReLU関数:
Rectified Linear Unit。入力が0を超えていれば入力をそのまま出力し、0以下の場合は0を出力する。
h(x) = x ( x>0)
h(x) = 0 (x <=0)
ソフトマックス関数:
出力値はそれぞれ0から1の間に収まり、その総和が1となる関数。
この性質から、確率を出力する際の活性化関数σとして用いられる。
線形関数:
入力値に対して出力値が定数倍になる関数を線形という。
グラフにした場合、1本の直線になる。
恒等関数:
入力値と出力値が同じ関数。
よく利用される記号とその意味
x: 入力値
b: バイアス(発火の閾値)
w: ウェイト、重み付け
a: x * w + b の計算結果として求められる値。この値がそのまま次のノードの値となるわけではない。
z: h(a) (h()は活性化関数)を計算した結果の値。この値が各ノードの値となる。
y: 出力値
σ(シグマ): yを求める際に用いられる活性化関数。回帰問題では恒等関数、2クラス分類問題ではシグモイド関数、他クラス分類ではソフトマックス関数など、出力値の性質によってよく利用される関数は異なる。
変数につけられるインデックス番号の意味
w(i) j k ((i)は右上に、j, kは右下に記載。)
(i): 何層の重み、またはニューロンなのかを指す。1であれば1層目。
j: 次層のニューロンのインデックス番号。
k: 前層のニューロンのインデックス番号。
なお、実装上は慣例としてWのみ大文字が、その他の文字は小文字が変数名として利用される。
また、pythonで実装する際はnumpy.arrayを用いて表現されるため、W1, a2のような変数につく数字は何層目の値なのかを示す。
回帰問題:
連続的な数値の予測を行う分類。
分類問題:
データがどのクラス(分類)に属するか判別する問題。
順方向伝播(forward propagation):
学習済みパラメータにて実施するニューラルネットワークによる推論処理。
正規化(normalization):
データの値を0.0 – 1.0の範囲に収まるよう変換すること。
白色化(whitening):
データ全体の分布の形状を均一にすること。
バッチ処理:
複数件数のデータをまとめて処理すること。
数値計算ライブラリは大きな配列の計算に最適化されているため、小さい計算を繰り返すよりもパフォーマンスがよくなる。
ミニバッチ学習:
機械学習時に損失関数を最小化する際、個別の値に対しての最小化をするのではなく、すべての値に対して損失関数が最小になるよう学習したい。しかし、すべての値を一度に処理すると損失関数の計算量が大きくなりすぎ、性能上現実的ではない。
そこで一定数のデータを無作為に取り出し、そのデータを元に学習を行う。これをミニバッチ学習という。
汎化能力:
訓練データに含まれないデータに対して発揮する能力。
逆に、特定のデータセットだけに過度に対応した状態を過学習(overfitting)という。
損失関数:
機械学習の性能の悪さを示す指標。
機械学習では損失関数を最小化するようにパラメータの学習を行う。
2乗和誤差(mean squared error):
損失関数の一つ。全ての予測結果と教師データの差についてそれぞれ2乗し、合計した上で1/2にした(平均値を取った)もの。
交差エントロピー誤差(cross entropy error):
損失関数の一つ。
one-hot表現を用いている場合、交差エントロピー誤差は正解ラベルの出力結果における予測値がyの場合、-logyで表すことができる。(logは底がeの自然対数logeを表す)
one-hot表現:
正解のラベルを1とし、それ以外は0で表す表記法。
微分:
ある瞬間の変化の量を表したもの。
以下の数式で表される。
df(x)/dx = (f(x + h) – f(x))/h
(hは0に限りなく近づける)
pythonで実装する場合、hの値を小さくし過ぎると丸め誤差が発生し、0.0になってしまう。10^-4程度の値を用いると良い結果が得られることがわかっている。
中心差分、前方差分:
微分する際に、f(x+h) とf(x)の差分のみを用いて計算することを前方差分という。
f(x+h)とf(x-h)の差分を用いて計算することを中心差分といい、前方差分よりも数値微分の誤差を減らすことができる。
数値微分(numerical differentiation):
微小な差分によって微分を求めること。誤差が発生する。
解析微分(analytic differentiation):
数式を展開することで微分を求めること。
例えば、y = x^2 を df(x)/dh = 2xとして解くと、x=2でのyの微分は4となる。
誤差が含まれないため、真の微分として求めることができる。
偏微分:
複数の変数からなる関数の微分。δf/δx0、δf/δx1のように記載する。
ある地点の偏微分を求める際には、変数が一つだけの関数を定義し(変数以外の元変数にはある地点の座標を代入する)、その関数について微分を行うことで1変数の微分と同じように解を求めることができる。
勾配法(gradient method):
現在の場所から勾配方向に一定の距離だけ進み、その先でも再度勾配を求める。これを繰り返すことで最小の値を求める手法。
機械学習の最適化問題、特にニューラルネットワークの学習で使われる。
最小値を探す場合を勾配降下法(gradient descent method)、最大値を探す場合を勾配上昇法(gradient ascent method)と呼ぶ。
確率的勾配降下法(stochastic gradient descent):
確率的に無作為に選ばれたデータ(ミニバッチ)を元に行う勾配降下法。ディープラーニングのフレームワークではよくSGDという名前の関数で実装される。
η(エータ)、学習率:
ニューラルネットワークの学習率(learning rate)。一回の学習で、どれだけ学習すべきか、どれだけパラメータを更新するかを決める値。
一般的には大きすぎても、小さすぎても最適解にたどり着けない。ニューラルネットワークの学習では、学習率の値を変更しながら、正しく学習できているか確認する。
ハイパーパラメータ:
ニューラルネットワークのパラメータ(重みやバイアス)と性質が異なり、訓練データから自動では獲得されないパラメータ。
基本的には人の手によって試行錯誤してうまく学習できる値を見つける。
エポック(epoch):
訓練データを全て使い切った回数を表す単位。例えば1000件の訓練データがあり、100個のミニバッチで10回学習を繰り返した場合、1000件のデータを利用したことになるため、1エポックとなる。
勾配確認(gradient check):
数値微分は実装が簡潔だが、計算速度が遅い。解析的微分(誤差逆伝播法)は計算速度は早いが、実装が複雑である。
そこで、逆伝播法の勾配結果が正しいことを数値微分にて確かめることで双方の欠点を補い合うことができる。
この確認作業を勾配確認という。