CourseraのML Specializationを毎週分まとめていく(week 2 : Neural Networks and Deep Learning)
Binary Classification
- ニューラルネットワークの学習はフォワードプロパゲーションとバックプロパゲーションによって行われる
- ロジスティクス回はにこう二項分類のためのアルゴリズム
- 画像はベクトライズして処理を行う
- 64*64ピクセルの画像の例では、ピクセルごとのRGBの数値をベクトルにして、xとしている
- 機械学習の一般的な変数表記として、トレーニングセット数をm、パラメータ数をnと表記する
- 教師あり学習の場合、xとyがm個ずつある
- トレーニングセットがm、パラメータがnのxを行列として表記すると上記のようになる
- この時、yは上記のような(1, m)の行列になる
- xとyで行・列が天地している理由は機械学習アルゴリズムの計算の仕方に要因があるのだが、ここら辺はゆくゆく解説が出てくると思われる
Logistic Regression
- ロジスティック回帰は二項分類の手法の1つ
- 上の式の意味は、y = xが与えられたときに"y=1"となる確率
- yのハットは、予測値として出力されたyを表している
- 2項分類では、yが1となる確率を算出する
- 上記のような2次関数では、yが0~1にならない
- 関数をシグモイド関数に通すことで、yが1になる確率に変換することができる
- 上記のzをシグモイド関数に通す
- ちなみに、wTのTは天地の意味
- ちなみに、bとwはθで表記されることもあって、その場合はこういう感じで割り振られる
- シグモイド関数に通すととグラフのような形になる
Logistic Regression Cost Function
- この章では、bとwを求めるためにコスト関数を定義する
- 改めてこのコースでの表記を確認
- 上付のiはi番目の教師データであることを表している
- logistic regressionではこんな感じでm個の教師データがあるときに、yとyハット(予測値)が同じになることを目指す
- 上記のL()はコスト関数(loss function)を表す
- コスト関数は、yハットとyの差分を定義する
- すごく一般的には、上記のようなyハットとyの差分の2乗をコスト関数とすることもできる
- ただし、機械学習の学習過程では、wやbを上記のように増減しながら最適な値を探すのだが、その時に局所解(グラフの谷になっているところ)に行き着いてしまうことがある
- なので、このコースでは差分の2乗ではなく、同じような意味合いを持つ別の関数を利用する
- このコースでは上記の関数を利用している
- この式の意味するところについて、実際にy=1を代入して説明されている
- y=1の時、式の右半分は0になるため、- logyハット のみ残ることになる
- この時、yとyハットの差分を少なくするということは、L() はゼロに近い方がいいので、-logyハットは0に向かうことになる
- -logyハットが0に向かうということは、yハットは1に近づくということで、この式は正しく動作しそうということになる
- 次に、すべてのmのL()を合計することで、コスト関数が完成する
Gradient Descent
- この章では、コスト関数を利用して、どのようにbとwを学習していくかを学ぶ
- 学習は最急降下法でおこなう
- コスト関数を視覚化するとこんな感じ
- この点を動かして、最もコストの低いglobal optiminamを探す
- 局所解がない状態になっている
- 最急降下法では、コストが最低になるように、最も急な勾配を選択して下っていく
- 上記の式で、wの更新を繰り返すことで最低なwを探していく
- αは任意のパラメータで、大きいと学習毎の点の移動幅が大きくなる
- dwは微分式なので、傾きが正の場合にはwがマイナス方向に移動して、傾きが負の場合にはプラス方向にwを動かすことを意味している
Computation graph
- ディープラーニングは、教師データから予測を出力する順誤差伝播法(フォワードプロパゲーション)と、微分と積分によって調整を行う誤差逆伝播法(バックプロパゲーション)の2つによって構成されている
- 上記のようなJを求める式があったとき、フォワードプロパゲーションは下の図のようなグラフで表せる
- 次の章でバックプロパゲーションについて説明がされる
Derivatives with a Computation Graph
- この章ではバックプロパゲーションの微分工程が概念的に何をしているかについて解説がされている
- バックプロパゲーションは抽象的でまだ完全に理解しきれていない
- ビデオを見た限りの理解では、バックプロパゲーションは「computing graphのそれぞれのインプットノードが、アウトプットノードに対してどれくらいの影響があるか」を調べている
- このようなcomputing graphで考える
- vが0.001上昇した時で考えると、Jは0.003上昇する
- これを微分式で考えると、上記のような式になり、vからJへの傾きは3となる
- 同様にaがJにどの程度の影響があるかを考えると、aが0.001増加したときにJは0.003上昇するため、傾きは3となる
- bとcにも同様のことを行う
- computing graph中のいずれかの要素がJ(final output variables)に対してどれだけの影響があるかを、"dvar"で表記する
- aのdvarはdaという感じ
Logistic Regression Gradient Descent
- この章でgradient discentの手法を学んでいく
-
- 真ん中の箱では、Zを損失関数に通している
- gradient discentでは、loss関数が最小になるwやbの変数を探す
- 前章では個別のインプットの微分を行なったが、これからは全体の微分を行う方法を学ぶらしい
- まずは、1つのデータセットに関して見ていく
- シグモイド関数をaで微分すると、こんな感じの式になる
- dzはこんな感じにa-yとなる
- ここで、azは前章で確認したように、da/dzではなくdL/dzである
Gradient Descent on m Examples
- 前章では1個のデータ・セットでgradient discentを行う方法を確認した
- この章では、m個のデータセットに関して見ていく
- この章になるとバックプロパゲーションますます分からん感じになった
- 改めて、コスト関数は上記のような式で表される
- gradient discentでは前章でしたように、微分をバックプロパゲートしていく
- m個のテストデータに関して、w1で微分を行う場合、上記のような式になる
- この時、w1に関しては、m個のテストデータが考慮されていない
- "Gradient Descent"の章で見たように、wやbは上記の式で更新していくのだが、次にこのdw1などの計算の仕方が説明されている
- dw1などはこういった感じの手順でも求めていく
- (ちなみに、前章で確認したように、dz = a - y となる)
- この週のこれ以降は、ディープラーニングというか、pythonの基本的な使い方についてなので省略する