読者です 読者をやめる 読者になる 読者になる

アプリとサービスのすすめ

アプリやIT系のサービスを中心に書いていきます。たまに副業やビジネス関係の情報なども気ままにつづります

書籍『Tensorflowで学ぶディープラーニング入門』の内容まとめ(2章〜5章)#多層ニューラルネットワーク(CNN)で何ができるようになるか

機械学習

前記事の続きです。この記事では書籍『Tensorflowで学ぶディープラーニング入門』の2〜5章を学んで、Tensorflowで何ができるようになるかをまとめています。

あくまで学習メモですが、この書籍を通してTensorflowがどこまで学べるかの参考にしてもらえればと思います。

前置については前記事をご覧ください。2〜5章は多層ニューラルネットワーク(CNN)の全体像を理解し、CNNをコードで実装できるようになる内容です。

この書籍ではMNISTという画像のデータセットを用いて、CNNを実装していきながら全体像を理解する構成になっています。この記事では2〜5章でCNNの理解を通し、「何ができるようになるのか」を淡々と書いていきます。

あくまで学習メモですので、専門用語が出てきますが、なるべくわかりやすく書いたつもりです。




最適化アルゴリズムの実装
機械学習では
・教師ありアルゴリズム
・教師なしアルゴリズム

に大きく分かれます(正確には強化学習アルゴリズムもあり)。ディープラーニングを扱うTensorflowは「教師ありアルゴリズム」が対象になります。

1章のまとめ記事でみたように「教師ありデータアルゴリズム」の基本的なステップは
①与えられたデータを元にして、未知のデータを予測する数式を立てる
②2乗誤差関数(損失関数)を求める
③勾配降下法を使って2乗誤差関数を最小にする

の3つです。『Tensorflowではじめるディープラーニング入門』ではTensorflowを学べるので、このアルゴリズムをコードで実際に実装することが可能になります。





多層ニューラルネットワーク(CNN)の実装
ディープラーニングのほんどのモデルはCNNです。他にもRNNやLSTMなどがありますが、ディープラーニングでは圧倒的にCNNが主流です。

f:id:trafalbad:20170320124339j:plain
CNNの全体図

CNNを構成する
・ソフトマックス関数
ドロップアウト
・全結合層
・プーリング層
・畳み込みフィルター

をコードにより実装することが可能になります。Tensorflowでは各層やフィルターの役割を果たす関数が用意されています。それらは独立して紹介されていますが、それらを実際に組み合わせることでCNNを構成することができます。

これで単純な話、ディープラーニングをコードで実装できる。

*単層ニューラルネットワークも構築可能
また全結合層とソフトマックス関数だけからなる単層ニューラルネットワークも構築できます。これにプーリング層などを加えればCNNになりますが、単層ニューラルネットワークを実装することにより基本的な、ニューラルネットワークの構造を理解できる。



最尤推定法のテクニックが身につく
最尤推定法とは統計学では「与えられたデータが正しい確率を最大化する」方法と言われています。いわゆるロジスティック回帰を難しく言い換えただけですが、この本ではこの言い方になってるのでこう書きました。

要は3ステップの計算式を少しいじくった数式で値を求めた後、ソフトマックス関数で出力値を0〜1の値に変換し、確率問題として扱います。単純に0.5以上であれば確率が高くなります。

ソフトマックス関数だけでなく、最尤推定法にのっとった数式をコードで表現する必要がありますが、そのテクニックが身につきます。
この最尤推定法のテクニックが身につけば、MNISTのような与えられたデータ(トレーニングセット)がテストセットに対する正解率を最大化するテクニックが身につくことになります。



オーバーフィッティング防止テクニック
ディープラーニングの目的は本来、未知のデータに対応できる力(汎用力)をコンピュータに身につけさせるためです。しかし、トレーニングセットのデータにだけ慣れすぎてしまい、汎用力が身につかないことがあります。これを「オーバーフィッティング」といいます。

これを防止する方法として、
・勾配降下法の学習率を設定する方法

・データセットの20%くらいをテストセット用に分けて使用する方法
が紹介されており、この2つのテクニックが身につきます。実際にコードで実装しているので、どのようにすればいいかもわかりやすいはずです。




確率的勾配降下法
与えられたデータセットかとてつもなくデカイ場合、普通の勾配降下法では時間がかかりすぎてしまいます。それを防ぎ、時間を短縮して勾配降下法を行える「確率的勾配降下法」のテクニックが可能になります。

f:id:trafalbad:20170320124552j:plain



ミニバッチ学習
こちらもデータセットがとてつもなくデカイ場合、全てに損失関数を適用して勾配降下法を用いるアルゴリズムを適用していてはとても時間がかかります。

そこで一部のデータだけをランダムで抜き出し、損失関数を適用するアルゴリズムを用いて全体の近似としてみなす方法がミニバッチ学習です。

f:id:trafalbad:20170320124607j:plain

例えばMNISTデータセットなら60000枚の画像データから200枚を選び出し、学習させます。

実際にどうやるかというコード例までのっていて、よくわかります。




プーリング層と畳み込みフィルターによるCNNの精度の向上

CNNを構成するプーリング層と畳み込みフィルターは、それらをどのように組み合わせるかで、CNNの精度が変わります。精度が向上するということは、テストセットに対するトレーニングセットの正解率が高まるということ。

プーリング層では画像などのデータの特徴的な性質(特徴変数)を抽出し、畳み込みフィルターで特徴変数を分類する役割を持ちます。

プーリング層と畳み込みフィルターを組み合わせることで、MNISTデータセットでは97%の正解率を達成しています。




Tensorflowで学ぶディープラーニング入門で習得できるテクニックはこんなところです。もっと書籍を細部まで噛み砕けば、別なテクニックも見つかるかもしれませんが一通り学んだ上でできることはこんなところです。

Tensorflowのチュートリアル5以降はもっと別の書籍やサイトで勉強する必要があります。またここで紹介したCNNは最も基本的なものであり、正規層などを組み込んだもうちょっと発展的なCNNもあります。

関連記事はこちら

trafalbad.hatenadiary.jp



trafalbad.hatenadiary.jp

広告を非表示にする