【技術本】直感DeepLearning
https://amzn.to/3Uer8ge
【技術本】直感DeepLearning
へポスト
Kerasを使った文字認識学習、言語認識(単語分散表現)、文章生成、画像生成、音声生成、予測、コンピュータにテレビゲームを学習させ上達させる、などをPython実装を踏まえて実践体感できる。
内容は、ディープラーニングがある程度分かっていて、ライブラリを使って実践応用したい人向け。
本書でも、ディープラーニングのアーキテクチャであるニューラルネットワークの説明から解説してくれているが、初心者は「ゼロから作るDeep Learning」シリーズを事前に読むことをお勧めする。ニューラルネットワーク(RNN含む)や、その中で使用される誤差逆伝播法、言語認識における単語の分散表現(word2vec)なども、解説がやさしく詳しいのでステップアップに最適。
本書の見どころであるKerasによる様々なディープラーニングの実装レシピの数々だが、ソースはまるごとgitからクローン出来る。各章ごとに必要なライブラリが「requirements.txt」にまとめられているので、「pip install -r requirements.txt」により一発で各ライブライのバージョンを併せた環境構築ができる。
冒頭で述べた通り、様々なタイプのディープラーニングのサンプルコードが紹介され、ページの大半がソースコードとソースコードの解説、実行結果に費やされており、まさにレシビ集という感じだ。(比率 = [理論説明]1:[実装に関する解説]3 くらい)
個人的に気になったのは、
・Quiverの使用:ニューラルネットワークの可視化(画像を読み込んで、各層ごとにどのような画像を保持してるか視認できる)
・スタイルトランスファーによる特定の画風スタイルを適用させて画像を生成する。
・AIに実際のゲームを学習させ上達させる。
などです。
ちょっとしたWebサービスとして今現在(2018/08時点)運用されているバックエンドのディープラーニング基本実装レベルのサンプルと言っていいくらいの内容を知ることができて、非常に興味深く最後まで読むことができました。
視覚的に効果が分かる学習も含まれているので、ディープラーニングに興味があり、自分で応用して新しい何かを作りたい人は、良い足掛かりになるのではないでしょうか。お勧めです。
----
※実行環境メモ
[mac環境ではpythonのバージョン管理はpyenvがお勧め]
brew install pyenv
pyenv install 3.6.0
pynev global 3.6.0
pyenv rehash
pyenv versions
[隔離されたpython環境構築はvirtualenvがお勧め]
cd $WORK_DIR
virtualenv env
[macでのpython実行時エラーの対応]
このメッセージがもし出たら下記対応をする「Python is not installed as a framework...」
原因:matplotlib関連のエラー。以下のファイルを作る。
~/.matplotlib/matplotlibc
ファイルに下記を記述する。
backend : TkAgg
TkAggをバックエンドで使用するよう指定すればOK
----
概要、メモは以下の通り。
1.ニューラルネットワークの基礎
パーセプトロンの解説
シグモイド関数
ニューロンは曖昧な答えが可能
(0と1の判定だけでなく、小数点以下を含めた実数の出力値を出せるようになる)
活性化関数
シグモイド
正規化線形関数(ReLU)
ソフトマックス関数:シグモイド関数を一般化したもの
[実装例]:手書き数字認識
・通常版
・隠れ層追加による精度向上版
・隠れ層にドロップアウトを使用し精度向上版
・勾配降下法を発展させたRMSprop,Adam使用版
精度向上のための設定変更の検証
ドロップ率
学習エポック数
学習率
内部隠れ層追加
バッチ計算サイズ変更
過学習を避ける
誤差逆伝播法の解説
CNNは対象データの局所性を保持しつつ抽象的なレベルでの学習ができる
2.KerasのインストールとAPI
インストール
設定
Docker上へのKerasのインストール
API紹介
事前定義済みのニューラルネットワーク用API(ニューラルネットワーク、各種関数)
ユーティリティ(各種保存、コールバック、チェックポイント)
TensorBoardの使用
Quiverの使用:ニューラルネットワークの可視化
[実装例]:quiverを使用した可視化のデモ
※注意:読み込む画像は縦横比が同じ正方形の画像である必要あり
3.畳み込みニューラルネットワーク
空間的な特徴を捉えることができる、画像分類に適したネットワーク
畳み込みを行う畳み込み層、サイズ圧縮を行うプーリング層が交互に重なり構成
[実装例]:CNNの実装例(手書き数字認識)
KerasによるLeNetの実装
※前章の実装例の精度が92%前後だったのが、99%台に上昇。
学習量を徐々に落としていったときの検証
常に全結合ネットワークより精度がいい
[実装例]:CIFAR-10の画像認識
・畳み込み層を重ねたモデル
・Data Augmentationによる改善版
認識画像の回転、拡大縮小、左右反転などをしてデータを拡張して学習
・画像分類
・組み込みのVGG-16モデルを使用したもの
・学習済みのモデルを特徴抽出器として活用したもの
・転移学習(学習されたモデルを他の新しいタスクに適用)を使用したもの
4.GANとWaveNet
GAN:本物を見分けがつかないような画像生成のための学習(贋作の作成)
贋作作成、贋作鑑定と敵対させて学習させる(=敵対的生成ネットワーク)
[実装例]:畳み込み層GAN(DCGAN)の実装
[実装例]:Kerasを利用したGANの実装
[実装例]:CIFAR-10の画像を生成するGANの実装
WaveNet:人間の声や楽器の音を高精度で再現する学習
パラメトリック音声合成システム
音声合成を行うための特徴量を保持したモデルを作成する手法
[実装例]:KerasによるWaveNetの実装
5.単語分散表現
分散表現
単語の意味を、その単語の文脈中に出現する別の単語との関係によってとらえる
word2vecアーキテクチャ
CBOW:文脈からターゲットの単語を予測
Skip-gram:ターゲットの単語から前後の単語を予測
[実装例]:サードパーティライブラリgensimでword2vecモデルをより容易に実装
GloVe:単語表現のグローバルベクトル=分散表現
事前学習済みベクトルの使用
[実装例]:CNNでゼロから分散表現を学習
[実装例]:word2vecで学習した分散表現のファインチューニング
[実装例]:Gloveで学習した分散表現のファインチューニング
[実装例]:事前学習したネットワークから分散表現を検索する
6.リカレントニューラルネットワーク
時系列データの学習を可能とする
株価、天気などでも求められる長期的傾向と呼ばれる過去のデータを考慮
[実装例]:RNNを用いたテキスト生成
[実装例]:LSTMによる多対1のRNNを構築して学習
[実装例]:GRU(LSTMの亜種)で品詞のタグ付け
[実装例]:双方向RNNによる品詞のタグ付け
[実装例]:ステートフルRNNで電力消費量の予測
・名の通りステートフルであり、学習中にバッチ間で状態を維持できる。
7.様々なディープラーニングのモデル
[実装例]:Keras function APIの使い方
[実装例]:回帰問題を扱うネットワークを構築する方法:回帰モデルで大気中ベンゼンの濃度の予測
[実装例]:自己符号化器で教師なし学習を行う方法:文ベクトルの作成
function APIを組み合わせてネットワークを構築する方法
[実装例]:複合ネットワークを実装し、質疑応答を行うMemoruNetwork
backend APIを利用したカスタムコンポーネントの作成方法
[実装例]:層のカスタマイズ:
・Lambda層の使用
・カスタムの正規化層を作成する
画像に対する生成モデルの適用
学習データに近いデータを生成するように学習させたモデル
[実装例]:生成モデルの実装:Deep Dream
[実装例]:Deep Dreamの応用:スタイルトランスファー
・ターゲットの画像を、特定の画風スタイルを適用させて生成する。
8.AIによるゲームプレイ
機会学習の強化学習の適用
ボールキャッチゲームを学習させる
「左へ移動」「留まる」「右へ移動」の分類問題
マルコフ決定過程でアプローチ
実際にキャッチボールゲームの実行環境構築
ゲーム画面キャプチャソフト(FFmpeg)
[実装例]:Deep Q-networkの実装
・エージェントにゲームをプレイさせる
9.総括
付録A GPUを考慮した開発環境の構築
以上。
へポスト