BREAKING NEWS

2018/06/05

Coursera Deep Learningコース備忘録 (Neural Networks and Deep Learning Week 1, 2)

Coursera Neural Networks and Deep Learningコース備忘録 (Week 1, 2)

この記事のまとめ:

背景:

機械学習の勉強のために、以前Andrew Ng先生のCoursera Machine Learningを受講したわけですが、そのさらに実践・応用編として同じくAndrew Ng先生のDeep Learning専攻があり、その中に5つのコースがあります。以前から興味があったのですがなんだかんだで時間は空いたもののまずは1つ目のNeural Networks and Deep Learningコースを受講開始したので、備忘録兼あまり詳細に語られていない部分について文字に起こして理解を深めようと思います。

ニューラルネットワークの数式表記表

特徴ベクトル とラベル からなる教師セットを$(x,y)$ と示し、 次元の情報で、 ( 次元実数空間) と表せます。ラベル は、例えば二項分類問題 (Binary Classification)のケースでは もしくは のみをとり、 と表せます。教師セットが 個あるとき、教師データは のように表せます。

また、特徴ベクトル とラベル をそれぞれコンパクトに表すために行列で表すこともあります。 個の特徴ベクトル を並べた を次のように定義します。


の次元は です。

また、同様に 個のラベル を並べた を次のように定義します。

次元は です。

ロジスティック回帰 (Logistic Regression)

ロジスティック回帰は、二項分類問題 のときに使うアルゴリズムです。予測$\hat{y}$ は

であり、このとき下記で表される予測を行うものがロジスティック回帰です。

はロジスティクス回帰における活性化関数 (Activate Function)であり、シグモイド関数、あるいはロジスティック関数と呼ばれる活性化関数が使われます。 は入力に対するウェイトであり、 はバイアスです。

これらを図で表すと次のように表せます。

なお以後、予測$\hat{y}$ は ラベル との区別のために と表します。

ロジスティクス回帰におけるコスト関数と損失関数

ロジスティック回帰による学習を行うということは、教師セットを用いて、最適な を導くことです。そのために、損失関数 (Loss Function)とコスト関数 (Cost Function)を導入します。

損失関数は正しいラベルと予測値との差を表す関数で、損失関数の値が小さいほど予測精度が高いといえます。ロジスティック回帰(二項分類問題)での損失関数は次の通りです。

また、コスト関数はすべての教師セットの損失関数の平均を表します。コスト関数は次の通り表せます。

これらの関数の意味は、「Explanation of logistic regression cost function」のビデオを見ましょう。(私が軽くスルーしただけ…)

最適な を導くということはコスト関数 が最小となる値を探すことです。ただし、一般的には の次元が高く、数理計算で求まるものではないため、最適化アルゴリズムを用いて近似解を導出します。

最急降下法 (Gradient Decent)

最急降下法は、連続最適化問題を解くための単純な勾配法のアルゴリズムの一つで、コスト関数の傾き(一階微分)に基づいて関数の最小値を探索します。

勾配法では反復法を用いて極小解を求めます。下記のようにコスト関数の変数である を傾きを基に更新していきます。なお、 は学習レートであり、学習の速さを調整するためのパラメータです。

ロジスティクス回帰の最急降下法による学習の実装
コスト関数の傾きの計算

活性化関数がシグモイド関数の場合において、ある教師セットにおける損失関数の傾きは下記のように計算できます。

なお、それぞれの偏微分は下記の通りです。ここでは偏微分の詳細は省略します。

上記で損失関数の傾きを導出できたので、すべての教師セットで平均化すればコスト関数の傾きを導出できます。

ベクトル化

上記では教師セット1つずつに対して損失関数を計算する方法なのですべての教師セットを計算すると 回のループ処理が必要ですが、コンピューターで計算するうえではループ処理よりも行列演算の方が高速に計算ができますので、すべての教師データに対して一度に計算できるようにベクトル化を行います。するとこれまで表現してきた数式は次のように表せます。

なお、バイアス については、もともとベクトルでないため総和のループが残ってしまいそうですが、多くのプログラミング言語であれば、総和関数が用意されているのでそれを使用すればループを回避できます。

反復による学習

ここまでできれば、最急降下法で同じ教師セットを繰り返し実行してウェイト とバイアス をアップデートすればそれなりに予測精度が得られるようになっていきます。


今回は以上です。 最後まで読んでいただき、ありがとうございます。


ブログランキング・にほんブログ村へ  ← 気に入っていただければ応援ポチをお願いします!

Share this:

 
Copyright © 2014 hassiweb. Designed by OddThemes