第4週はニューラルネットワークの入門編です。前半は定性的な説明でちょっと頭を休める感じなのですが、数学的な表現となるとこうなってしまいます。

machine learning - Stanford university

machine learning – Stanford university

プログラミング課題は手書き文字(数字)の認識問題です。データセットが予め用意されているのでやることはこれまでの課題と変わりません。前半がロジスティック回帰(one-vs-all)を使ったパラメータ決めとそれによる認識、後半がニューラルネットワークを使った認識です。データは20x20pxの画像が5000組です。20×20のデータというのは、これまで住宅の面積とかベッドルームの数とかせいぜい2次元程度だったものが400次元になったということですね。最初のころのビデオでデータの次元が1000とか10000とかいう話をしていてそんなもの人力で管理しきれないだろうと思ったのですが、今意味がわかりました。

ロジスティック回帰のほうはまずデータセットからfmincgという関数を使ってパラメータ(重みづけ)を求めます。このへんの関数はもうブラックボックスです。ここで得られたパラメータを使って改めて5000個の画像について各クラス(文字)ごとの出力(得点)を求めて最大値のものを予測結果として出します。正解率は95%ぐらいです。画像を1次元の線データに引き延ばしたものを使ってここまで正解率が高いのは意外でした。

ニューラルネットのほうは中間層があるのでパラメータの行列も2組となります。パラメータの導出は難しいらしく今回は用意されていました。コード自体はロジスティック回帰のものと大差はありません。階層が1個多いので行列の掛け算が2重になります。正解率は97.5%ぐらいで少し向上しました。

いまのところロジスティック回帰とニューラルネットの違いがよくわかっていません。ニューラルネットでは中間層が増えたということと、出力にシグモイド関数を適用することがあるのですが。中間層は今回25個ということで決められていました。これは400と比較するとかなり少ないですね。ここで情報量を縮約するという意味合いなのでしょうか。

それにしても問題の本質的な意味を理解しながらプログラミング課題を行なうのは難しいです。コーディングは完全に(洒落じゃなく)機械的にやっています。