ITと哲学と

IT系エンジニアによる技術と哲学のお話。

Neural Networks and Deep Learning - Neural Networks Basics

CourseraでNeural Networks and Deep Learningを受講し始めました. www.coursera.org

2week目です. 1weekの内容はこちら

内容

この週の講義の前半を一言で表すと,2値分類問題をニューラルネット的な考え方を取り入れたロジスティック回帰で解くといった内容です. コスト関数の定義,(最急)勾配法の説明を行い,勾配法で必要となるコスト関数の各変数での微分を計算するために便利な方法(チェインルール)を紹介するといったような流れです.

講義の後半はPythonの使い方とfor文を使わないでコーディングするためのベクトル化の説明です. for文を使わないでベクトル化したコーディングができると最適化が効いて処理が早く完了するので,そうしましょうというような内容.

コードの見た目的にもfor文を使って手続きがつらつらと書かれているよりも宣言的に書かれている方が見やすくてベターだと感じました.

コスト関数自体の導出はOptionとなっているビデオを見ると結構詳しく開設されていますが,ここら辺の丁寧さは下記の別コースの方が親切かもしれません.

www.coursera.org

まあ本講座はMLの各アルゴリズムの説明を目的としたものではなくDeepLearningに入門するためのものなので,そういう棲み分けになってるんでしょうね

後ぶっちゃけ,この週の動画,かなり多いです...

勾配法

ロジスティック回帰のコスト関数は下に凸な形をしているため,局所解が存在しないものになっている. そのため,ある時点でのコスト関数を求めた後,そのコストが下がる方向に各係数を更新してあげればよりコストが低くなる係数の組み合わせが見つかるという考え方が勾配法です. 「コストが下がる方向」を知るために勾配を求める必要がありこれがコスト関数を各係数で微分することで求まります.

チェインルール

L=f(w), w=g(x+y)というようなx+y=>w=>Lと変換していく1つの処理の流れがあった場合,dL/dx, dL/dyを求める便利な方法があります. 合成関数の微分の際にあるチェインルールがまさにそれで,dL/dx = dL/dw * dw/dx, dL/dy = dL/dw * dw/dy というような形で求めることができます. この時dL/dwは使いまわすことができます.

ロジスティック回帰レベルではそんなに便利さは感じませんでしたが,これがニューラルネットワークでの各係数を更新するための勾配を求めるのに使われるとても便利なルールになっているようです

ベクトル化

各計算を行列の計算に当てはめていくことで,for文を明示的に書かなくて行列の計算という形でコーディングできるようにする手法です. これによって最適化されるので計算が早く完了します.

感想

やはりAndrew先生の説明はわかりやすいです. ただ,全編英語で聞いてるのはしんどいので字幕表示しながら受けているのですが,一部の動画で字幕がずれているケースがあり,ちょっとしんどかったです.

ちなみにプログラミング課題ではロジスティック回帰を用いた猫の分類ロジックを実際に書きます. 拍子抜けするくらい簡単に70%程度の精度で猫判定器が作れるのは嬉しい驚きでした.