🗂
ニューラルネットワークに登場する関数の用語定義メモ
参考文献:ゼロから作るDeep Learning①
参考文献をもとに、自分が理解しやすいような言い回しでまとめなおした学習メモです。
活性化関数
- ニューラルネットワーク内において、ある層から次の層に出力された値を次の層に入力する前に計算される関数
- 例:入力層から[a1, a2, a3]が第1層に出力されて、それぞれに活性化関数を計算して[h(a1), h(a2), h(a3)]が第2層への入力に利用される(正確に言うと重みパラメータが行列計算で掛け合わされる)
- 主に利用される関数
- シグモイド関数
-
1 / (1 + np.exp(-x))
で計算できる- 覚え方としては、x=0のとき0.5になるのがポイントなのでそれで覚えられる
- 全部の出力結果が0〜1の間になる
- このコードではnumpy配列を受け取って一度にシグモイド関数の結果を計算できる
-
- ReLU関数
- 共通した特徴
- 非線形
- 出力が0から1の間に収まる
- シグモイド関数
出力層の活性化関数
- 回帰問題
- 恒等関数
- 回帰問題とは、連続的な数値の予測を行う問題。ある層から出力された時点で連続的な数値になりえるので変換する必要がないといえる
- 分類問題
- ソフトマックス関数
- 端的に言えば、e^anの総和を分母として、e^akを分子として計算された値
- とはいえ、Pythonのnumpyで計算するときは先に全要素の指数関数計算した値をもとめて、分母は指数関数の和を取ったものをもとめて割り算したらいいだけ
- 出力は0〜1の間に収まり、かつ総和が1になる特性を持つ(当然ながら)
- なので確率と解釈できる
- 分類問題とは、あらかじめ用意された候補のどれに該当するかを分類する問題。確率的にどれが一番高いかを測定する必要があるため、出力の最適化ができるソフトマックス関数が必要
- ただ、ソフトマックス関数を掛け合わせても最大値は変わらないので、最大値だけほしい場合は省略できるのが実際のところ
- ソフトマックス関数
損失関数
- ニューラルネットワークの出力と教師データの差異をもとめることで、ニューラルネットワークのその時点での性能の悪さを測定する関数
- ニューラルネットワークの出力は配列(行列)になっているし、教師データも正解のみを1としたone-hot表現などを用いることで、同次元の配列にして差を計算することができる
- 損失関数の例
- 2乗和誤差
- 配列のそれぞれの要素の差を2乗して、その総和をもとめる(なので2乗和)
- 最後に2で割る
- これはおそらく微分したときにy=xにするためかと思われる。普通は2乗するとy=2xになっちゃう
- 交差エントロピー誤差
- yの自然対数をtkに掛けたものの総和を取るのだが、one-hot表現の場合tk=0が1つを除き全部なので、実質自然対数の値そのものになる
- ソフトマックス関数を掛けていると出力は最大1になっているので、本当に誤差が0なら自然対数の出力は0になる(0乗が1なので)
- したがって、誤差が小さくなるほど0に近づくので、損失関数の条件を満たしている
- 2乗和誤差
- 損失関数を使う理由は、ニューラルネットワークのKPIを連続的な値にして誤差逆伝播法によって改善しやすくするため
- もし33%、といった定数を評価指標にした場合、飛び飛びの値で改善することになるので微分によって改善ができなくなる
損失関数の微分
- 数値解析による微分は計算時間がかかるので、誤差逆伝播法による勾配の計算がメジャーになっている
- 勾配とは
- ある関数のあるパラメータにおいて、関数の出力を減らす方向のこと
- 一般に微分した結果にマイナス1を掛けたものが勾配になっている
- 数値解析による微分では偏微分によって勾配をもとめる
- 勾配の結果はベクトルのようになる。x1,x2,x3...それぞれの偏微分を合わせたベクトルになる
- 勾配とは
- 誤差逆伝播法
- 合成関数の微分はそれぞれの関数の微分の積によって表されるという、連鎖律の原理を活用した手法
- ニューラルネットワークの出力は合成関数で表現できるため、それぞれの計算を関数とみなして偏微分を求められる
- このようすを図で示す手法として計算グラフがある
- 計算グラフ
- 乗算ノード
- 乗算の逆伝播を行うときは、もう一方の入力信号を乗算した値が逆伝播されていく
- 微分すると自身の変数の次元数は1減るので偏微分の考え方だともう一方の入力信号だけが残る
- 乗算の逆伝播を行うときは、もう一方の入力信号を乗算した値が逆伝播されていく
- 乗算ノード
Discussion