Coursera の講座について
Coursera の講座については、いろいろなかたが絶賛しているので、機械学習をこれから勉強しようとか、少しかじったけどもっと網羅的に理解したいとかという人には最適です。僕も最近、一通り終えました。
(参考) レビューなどはこちら
機械学習をゼロから1ヵ月間勉強し続けた結果
深層学習へ
それから、分類の問題(二値ではなく多値)にもう少し踏み込もうと考え、TensorFlow を触ってみたり、深層学習の本を読んだりしています。
- 多分もっともわかりやすいTensorFlow 入門 (Introduction)
- Deep MNIST for Experts | TensorFlow
- 深層学習 (機械学習プロフェッショナルシリーズ)
前述の講座のおかげで、理解がはやく、ものすごいさくさく勉強が進むのですが、2点ほどその講座では触れられていなかったことがありましたので、ここにまとめておきたいと思います。
正規化 / 正則化
まず、正則化についてです。講座では英語だったので regularization と呼ばれ(書かれ)ていましたが、日本語訳は正規化となっていました。日本語の書籍を読むと、正則化という訳をあてるほうが多いようでした。
それから、正則化はこれ!というような紹介のされかたをしていましたが、講座で紹介されていたのは数ある正則化手段のうちのたったひとつであるということがわかりました。
講座で解説されていた正則化はいわゆる「重み減衰」と呼ばれる方法です。
$$ + \frac{ \lambda }{ 2m }\sum_{ j = 1 }^{ n }\theta_j^2 $$
このような「自身の重み」に比例してペナルティを課す(減衰させる)方法です。
正則化にはこれのほかにも、重みを減衰させるのではなく、大きな重みは上限を設ける「重み上限」の方法などがあります。
$$ \sum_{ j = 1 }^{ n }\theta_j^2 < c $$
例えばこれを満たさなかったら、$ \theta $ に1未満の数字を掛けるという手法です。そして現在では「重み減衰」より「重み上限」のほうが上回る効果があるという報告もあるようです。(前述の書籍「深層学習」より)
活性化関数
講座ではニューラルネットワークの活性化関数に、sigmoid 関数を使っていました。
h_\theta(x) = \frac{ 1 }{ 1 + e^{ -\theta^T x } }
活性化関数にsigmoid を使った場合の誤差関数
J(\theta) = -\frac{1}{m} \Bigl[\sum_{i=1}^m y^{(i)}\log h_\theta(x^{(i)}) + (1 - y^{(i)})\log(1 - h_\theta(x^{(i)}))\Bigr]
こちらも数ある活性化関数のうちのひとつです。特に、sigmoid は二値分類で使うものですが、講座では多値分類でもそのままsigmoid を使っていました。しかし、多値分類ではソフトマックス関数というものを使う方が一般的かつ、精度もよいようです。TensorFlow のチュートリアルで、MNIST の手書き文字認識をするときはソフトマックス関数を使っていました。下記の記事で、そのチュートリアルの活性化関数部分を、ソフトマックス関数を使う場合とsigmoid 関数を使う場合とを比較しています。
- 多分もっともわかりやすいTensorFlow 入門 (Introduction) ある程度イテレーション数を増やして調整すると、結果はあまり変わりませんでしたが、若干ソフトマックス関数のほうが収束がはやい、もしくは着地の精度がよいように感じました。)
ソフトマックス関数の中身も少し紹介しておきます。
h_\theta(x) = \frac{ e^{ \theta^Tx } }{ \sum_{ j = 1 }^{ K }e^{ \theta^Tx } }
(数学的に厳密ではありませんが、イメージはこういう形です)
ニューラルネットワークの活性化関数は「あるユニットはそのユニットへの入力すべてに依存」していましたが、ソフトマックス関数は少し特殊で「当該ユニットへの入力だけでなく、そのレイヤーへの全ての入力」に依存します(分母部分)。
そしてその場合の誤差関数は下記のようになります。
J(\theta) = -\sum_{i=1}^m\sum_{j=1}^k y_j^{(i)}\log h_\theta(x_j^{(i)})
これは交差エントロピー(cross entropy)と呼ばれます。TensorFlow のチュートリアルではこれらを使っています。
リファレンス
いずれも下記の書籍に詳細が載っているのでおすすめです。
深層学習 (機械学習プロフェッショナルシリーズ)