本書はコードを動かしながら学び、機械学習が使えるようになることを目的とした書籍です。現実的な問題を出し、サンプルデータを示しながら、機械学習で問題を解決に導くまでの一連の手法を体系立てて解説します。
深層学習以外の機械学習にはscikit-learnを使い、機械学習プロジェクトの流れ、データからモデルを学習する方法、データの処理・クリーニングなどの基礎から、特徴量の選択や過学習、データの次元削減など応用までを学びます。深層学習にはTensorFlowとKerasを使い、ニューラルネットワークの構築と訓練、ニューラルネットワークアーキテクチャ、深層学習や強化学習、さらにTensorFlowの分散処理のメカニズムや実装までを幅広く解説します。
第2版では教師なし学習と深層ネットワーク訓練手法、コンピュータビジョンテクニック、自然言語処理、Tensor Flowの大規模な訓練や効率的なデータの取り扱いについての解説を拡充し、新たに畳み込みニューラルネットワークを使ったシーケンス処理とGANによる画像生成の説明を追加しました。サンプルコードはすべてTensorFlow2に準拠しています。
すべてのコードがGitHub上で公開されており、Jupyter Notebookを使って試しながら学ぶことができます。アルゴリズムの説明に終始せず、実際の業務で必要となる機械学習のスキルをまとめた本書は機械学習を学びたいエンジニア必携の一冊です。
scikit-learn、Keras、TensorFlowによる実践機械学習 第2版
Aurélien Géron 著、下田 倫大 監訳、長尾 高弘 訳
- TOPICS
- 発行年月日
- 2020年11月
- PRINT LENGTH
- 832
- ISBN
- 978-4-87311-928-1
- 原書
- Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition
- FORMAT
- Print PDF EPUB
目次
監訳者まえがき はじめに 第I部 機械学習の基礎 1章 機械学習の現状 1.1 機械学習とは何か 1.2 なぜ機械学習を使うのか 1.3 応用の例 1.4 機械学習システムのタイプ 1.4.1 教師あり/教師なし学習 1.4.2 バッチ学習とオンライン学習 1.4.3 インスタンスベース学習とモデルベース学習 1.5 機械学習が抱える難問 1.5.1 訓練データ例の品質の低さ 1.5.2 現実を代表しているとは言えない訓練データ 1.5.3 品質の低いデータ 1.5.4 無関係な特徴量 1.5.5 訓練データへの過学習 1.5.6 訓練データへの過小適合 1.5.7 一歩下がって復習しよう 1.6 テストと検証 1.6.1 ハイパーパラメータの調整とモデルの選択 1.6.2 データのミスマッチ 1.7 演習問題 2章 エンドツーエンドの機械学習プロジェクト 2.1 実際のデータの操作 2.2 全体像をつかむ 2.2.1 問題の枠組みを明らかにする 2.2.2 性能指標を選択する 2.2.3 前提条件をチェックする 2.3 データを手に入れる 2.3.1 ワークスペースを作る 2.3.2 データをダウンロードする 2.3.3 データの構造をざっと見てみる 2.3.4 テストセットを作る 2.4 データを研究、可視化して理解を深める 2.4.1 地理データの可視化 2.4.2 相関を探す 2.4.3 属性の組み合わせを試してみる 2.5 機械学習アルゴリズムが処理しやすいようにデータを準備する 2.5.1 データをクリーニングする 2.5.2 テキスト/カテゴリ属性の処理 2.5.3 カスタム変換器 2.5.4 特徴量のスケーリング 2.5.5 変換パイプライン 2.6 モデルを選択して訓練する 2.6.1 訓練セットを訓練、評価する 2.6.2 交差検証を使ったよりよい評価 2.7 モデルを微調整する 2.7.1 グリッドサーチ 2.7.2 ランダムサーチ 2.7.3 アンサンブルメソッド 2.7.4 最良のモデルと誤差の分析 2.7.5 テストセットでシステムを評価する 2.8 システムを本番稼働、モニタリング、メンテナンスする 2.9 試してみよう 2.10 演習問題 3章 分類 3.1 MNIST 3.2 二項分類器の訓練 3.3 性能指標 3.3.1 交差検証を使った正解率の測定 3.3.2 混同行列 3.3.3 適合率と再現率 3.3.4 適合率と再現率のトレードオフ 3.3.5 ROC曲線 3.4 多クラス分類 3.5 誤分類の分析 3.6 多ラベル分類 3.7 多出力分類 3.8 演習問題 4章 モデルの訓練 4.1 線形回帰 4.1.1 正規方程式 4.1.2 計算量 4.2 勾配降下法 4.2.1 バッチ勾配降下法 4.2.2 確率的勾配降下法 4.2.3 ミニバッチ勾配降下法 4.3 多項式回帰 4.4 学習曲線 4.5 線形モデルの正則化 4.5.1 Ridge回帰 4.5.2 Lasso回帰 4.5.3 Elastic Net 4.5.4 早期打ち切り 4.6 ロジスティック回帰 4.6.1 確率の推計 4.6.2 訓練と損失関数 4.6.3 決定境界 4.6.4 ソフトマックス回帰 4.7 演習問題 5章 サポートベクトルマシン(SVM) 5.1 線形 SVM分類器 5.1.1 ソフトマージン分類 5.2 非線形 SVM分類器 5.2.1 多項式カーネル 5.2.2 類似性特徴量の追加 5.2.3 ガウス RBFカーネル 5.2.4 計算量 5.3 SVM回帰 5.4 舞台裏で行われていること 5.4.1 決定関数と予測 5.4.2 訓練の目標 5.4.3 二次計画法 5.4.4 双対問題 5.4.5 カーネル化された SVM 5.4.6 オンライン SVM 5.5 演習問題 6章 決定木 6.1 決定木の訓練と可視化 6.2 決定木による予測 6.3 クラスの確率の推計 6.4 CART訓練アルゴリズム 6.5 計算量 6.6 ジニ不純度かエントロピーか 6.7 正則化ハイパーパラメータ 6.8 回帰 6.9 不安定性 6.10 演習問題 7章 アンサンブル学習とランダムフォレスト 7.1 投票分類器 7.2 バギングとペースティング 7.2.1 scikit-learnにおけるバギングとペースティング 7.2.2 OOB検証 7.3 ランダムパッチとランダムサブスペース 7.4 ランダムフォレスト 7.4.1 Extra-Tree 7.4.2 特徴量の重要度 7.5 ブースティング 7.5.1 アダブースト(AdaBoost) 7.5.2 勾配ブースティング 7.6 スタッキング 7.7 演習問題 8章 次元削減 8.1 次元の呪い 8.2 次元削減のための主要なアプローチ 8.2.1 射影 8.2.2 多様体学習 8.3 PCA 8.3.1 分散の維持 8.3.2 主成分 8.3.3 低次の d次元への射影 8.3.4 scikit-learnの使い方 8.3.5 因子寄与率 8.3.6 適切な次数の選択 8.3.7 圧縮のための PCA 8.3.8 ランダム化 PCA 8.3.9 逐次学習型 PCA 8.4 カーネル PCA 8.4.1 カーネルの選択とハイパーパラメータの調整 8.5 LLE 8.6 その他の次元削減テクニック 8.7 演習問題 9章 教師なし学習のテクニック 9.1 クラスタリング 9.1.1 K平均法 9.1.2 K平均法の限界 9.1.3 画像セグメンテーションとしてのクラスタリング 9.1.4 前処理のためのクラスタリング 9.1.5 半教師あり学習の一部としてのクラスタリング 9.1.6 DBSCAN 9.1.7 その他のクラスタリングアルゴリズム 9.2 混合ガウスモデル 9.2.1 混合ガウスモデルを使った異常検知 9.2.2 クラスタ数の選択 9.2.3 混合ベイズガウスモデル 9.2.4 異常/新規検知のためのその他のアルゴリズム 9.3 演習問題 第II部 ニューラルネットワークと深層学習 10章 人工ニューラルネットワークとKerasの初歩 10.1 生物学的なニューロンから人工ニューロンへ 10.1.1 生物学的ニューロン 10.1.2 ニューロンによる論理演算 10.1.3 パーセプトロン 10.1.4 MLPとバックプロパゲーション 10.1.5 回帰 MLP 10.1.6 分類 MLP 10.2 Kerasによる MLPの実装 10.2.1 TensorFlow 2のインストール 10.2.2 シーケンシャル APIを使った画像分類器の構築 10.2.3 シーケンシャル APIを使った回帰 MLPの構築 10.2.4 関数型 APIを使った複雑なモデルの構築 10.2.5 サブクラス化 APIを使ったダイナミックなモデルの構築 10.2.6 モデルの保存と復元 10.2.7 コールバックの使い方 10.2.8 TensorBoardを使った可視化 10.3 ニューラルネットワークのハイパーパラメータの微調整 10.3.1 隠れ層の数 10.3.2 隠れ層あたりのニューロン数 10.3.3 学習率、バッチサイズ、その他のハイパーパラメータ 10.4 演習問題 11章 深層ニューラルネットワークの訓練 11.1 勾配消失/爆発問題 11.1.1 Glorotと Heの初期値 11.1.2 飽和しない活性化関数 11.1.3 バッチ正規化 11.1.4 勾配クリッピング 11.2 事前学習済みの層の再利用 11.2.1 Kerasによる転移学習 11.2.2 教師なし事前学習 11.2.3 関連タスクの事前学習 11.3 オプティマイザの高速化 11.3.1 モーメンタム最適化 11.3.2 NAG 11.3.3 AdaGrad 11.3.4 RMSProp 11.3.5 Adam、Nadam最適化 11.3.6 学習率のスケジューリング 11.4 正則化による過学習の防止 11.4.1 ℓ1、ℓ2 正則化 11.4.2 ドロップアウト 11.4.3 モンテカルロ(MC)ドロップアウト 11.4.4 重み上限正則化 11.5 まとめと実践的なガイドライン 11.6 演習問題 12章 TensorFlowで作るカスタムモデルとその訓練 12.1 TensorFlow弾丸旅行 12.2 TensorFlowの NumPyのような使い方 12.2.1 テンソルとそのオペレーション 12.2.2 テンソルと NumPy 12.2.3 型変換 12.2.4 変数 12.2.5 その他のデータ構造 12.3 モデルと訓練アルゴリズムのカスタマイズ 12.3.1 カスタム損失関数 12.3.2 カスタムコンポーネントを含むモデルの保存とロード 12.3.3 カスタム活性化関数、初期化子、正則化器、制約 12.3.4 カスタム指標 12.3.5 カスタムレイヤ 12.3.6 カスタムモデル 12.3.7 損失や指標にモデルの内部状態を反映させる方法 12.3.8 自動微分を使った勾配の計算 12.3.9 カスタム訓練ループ 12.4 TensorFlow関数とグラフ 12.4.1 自動グラフとトレーシング 12.4.2 TF関数のルール 12.5 演習問題 13章 TensorFlowによるデータのロードと前処理 13.1 データ API 13.1.1 変換の連鎖 13.1.2 データのシャッフル 13.1.3 データの前処理 13.1.4 1つにまとめる 13.1.5 プリフェッチ 13.1.6 tf.kerasのもとでのデータセットの使い方 13.2 TFRecord形式 13.2.1 TFRecordファイルの圧縮 13.2.2 プロトコルバッファ入門 13.2.3 TensorFlow Protobuf 13.2.4 Exampleのロードとパース 13.2.5 SequenceExample protobufを使ったリストのリストの処理 13.3 入力特徴量の前処理 13.3.1 ワンホットベクトルを使ったカテゴリ特徴量のエンコード 13.3.2 埋め込みを使ったカテゴリ特徴量のエンコード 13.3.3 Kerasの前処理層 13.4 TF Transform 13.5 TFDSプロジェクト 13.6 演習問題 14章 畳み込みニューラルネットワークを使った深層コンピュータビジョン 14.1 視覚野のアーキテクチャ 14.2 畳み込み層 14.2.1 フィルタ 14.2.2 複数の特徴量マップの積み上げ 14.2.3 TensorFlowと Kerasによる実装 14.2.4 メモリ要件 14.3 プーリング層 14.3.1 Kerasと TensorFlowによる実装 14.4 CNNのアーキテクチャ 14.4.1 LeNet-5 14.4.2 AlexNet 14.4.3 GoogLeNet 14.4.4 VGGNet 14.4.5 ResNet 14.4.6 Xception 14.4.7 SENet 14.5 Kerasを使った ResNet-34 CNNの実装 14.6 Kerasで事前学習済みモデルを使う方法 14.7 事前学習済みモデルを使った転移学習 14.8 分類と位置特定 14.9 物体検知 14.9.1 全層畳み込みネットワーク 14.9.2 YOLO(You Only Look Once) 14.10 セマンティックセグメンテーション 14.11 演習問題 15章 RNNとCNNを使ったシーケンスの処理 15.1 再帰ニューロンとレイヤ 15.1.1 記憶セル 15.1.2 入出力シーケンス 15.2 RNNの訓練 15.3 時系列データの予測 15.3.1 ベースライン指標 15.3.2 単純な RNNの実装 15.3.3 深層 RNN 15.3.4 複数のタイムステップ後の予測 15.4 長いシーケンスの処理 15.4.1 不安定な勾配問題への対処 15.4.2 短期記憶問題への対処 15.5 演習問題 16章 RNNと注意機構による自然言語処理 16.1 文字 RNNを使ったシェイクスピア風テキストの生成 16.1.1 訓練セットの作り方 16.1.2 シーケンシャルデータセットの分割方法 16.1.3 シーケンシャルデータセットの複数のウィンドウへの分割 16.1.4 文字 RNNモデルの構築と訓練 16.1.5 文字 RNNモデルの使い方 16.1.6 シェイクスピア風の偽文書の生成 16.1.7 ステートフル RNN 16.2 感情分析 16.2.1 マスキング 16.2.2 事前学習済みの埋め込みの再利用 16.3 ニューラル機械翻訳のためのエンコーダ−デコーダ・ネットワーク 16.3.1 双方向 RNN 16.3.2 ビームサーチ 16.4 注意機構 16.4.1 ビジュアル注意 16.4.2 必要なものは注意だけ:Transformerアーキテクチャ 16.5 言語モデルにおける最近のイノベーション 16.6 演習問題 17章 オートエンコーダとGANを使った表現学習と生成型学習 17.1 効率のよいデータ表現 17.2 不完備線形オートエンコーダによる PCA 17.3 スタックオートエンコーダ 17.3.1 Kerasによるスタックオートエンコーダの実装 17.3.2 再構築の可視化 17.3.3 Fashion MNISTデータセットの可視化 17.3.4 スタックオートエンコーダを使った教師なし事前学習 17.3.5 重みの均等化 17.3.6 オートエンコーダの層ごとの訓練 17.4 畳み込みオートエンコーダ 17.5 再帰型オートエンコーダ 17.6 ノイズを除去するオートエンコーダ 17.7 スパース・オートエンコーダ 17.8 変分オートエンコーダ(VAE) 17.8.1 Fashion MNIST風の画像の生成 17.9 GAN 17.9.1 GANの訓練の難しさ 17.9.2 深層畳み込み GAN 17.9.3 PGGAN(Progressive Growing of GANs) 17.9.4 StyleGAN 17.10 演習問題 18章 強化学習 18.1 報酬の最大化の学習 18.2 方策探索 18.3 OpenAI Gym入門 18.4 ニューラルネットワークによる方策 18.5 行動の評価:信用割当問題 18.6 方策勾配法 18.7 マルコフ決定過程 18.8 TD学習 18.9 Q学習 18.9.1 探索方策 18.9.2 近似 Q学習と深層 Q学習 18.10 深層 DQNの実装 18.11 深層 Q学習のバリアント 18.11.1 ターゲット Q値の固定化 18.11.2 ダブル DQN 18.11.3 優先度付き経験再生 18.11.4 Dueling DQN 18.12 TF-Agentsライブラリ 18.12.1 TF-Agentsのインストール 18.12.2 TF-Agents環境 18.12.3 環境の仕様 18.12.4 環境ラッパーとアタリ前処理 18.12.5 訓練のアーキテクチャ 18.12.6 DQNの作り方 18.12.7 DQNエージェントの作り方 18.12.8 再生バッファと対応するオブザーバの作り方 18.12.9 訓練指標の作り方 18.12.10 ドライバの作り方 18.12.11 データセットの作り方 18.12.12 訓練ループの作り方 18.13 広く使われている RLアルゴリズム 18.14 演習問題 19章 大規模なTensorFlowモデルの訓練とデプロイ 19.1 TensorFlowモデルのサーブ 19.1.1 TF Servingの使い方 19.1.2 GCP AI Platform上での予測サービスの作成 19.1.3 予測サービスの使い方 19.2 モバイル/組み込みデバイスへのモデルのデプロイ 19.3 GPUを使った計算のスピードアップ 19.3.1 自前の GPU 19.3.2 GPU装着仮想マシン 19.3.3 Colaboratory 19.3.4 GPU RAMの管理 19.3.5 オペレーション、変数のデバイスへの配置 19.3.6 複数のデバイスにまたがる並列実行 19.4 複数のデバイスによるモデルの訓練 19.4.1 モデル並列 19.4.2 データ並列 19.4.3 Distribution Strategy APIを使った大規模な訓練 19.4.4 TensorFlowクラスタによるモデルの訓練 19.4.5 Google Cloud AI Platformでの大規模な訓練ジョブの実行 19.4.6 AI Platform上でのブラックボックス型のハイパーパラメータ調整サービス 19.5 演習問題 19.6 ありがとう! 付録A 演習問題の解答 A.1 1章:機械学習の現状 A.2 2章:エンドツーエンドの機械学習プロジェクト A.3 3章:分類 A.4 4章:モデルの訓練 A.5 5章:サポートベクトルマシン(SVM) A.6 6章:決定木 A.7 7章:アンサンブル学習とランダムフォレスト A.8 8章:次元削減 A.9 9章:教師なし学習のテクニック A.10 10章:人工ニューラルネットワークと Kerasの初歩 A.11 11章:深層ニューラルネットワークの訓練 A.12 12章:TensorFlowで作るカスタムモデルとその訓練 A.13 13章:TensorFlowによるデータのロードと前処理 A.14 14章:畳み込みニューラルネットワークを使った深層コンピュータビジョン A.15 15章:RNNと CNNを使ったシーケンスの処理 A.16 16章:RNNと注意機構による自然言語処理 A.17 17章:オートエンコーダと GANを使った表現学習と生成型学習 A.18 18章:強化学習 A.19 19章:大規模な TensorFlowモデルの訓練とデプロイ 付録B 機械学習プロジェクトチェックリスト B.1 問題の枠組みと全体像をつかむ B.2 データを手に入れる B.3 データを研究する B.4 データを準備する B.5 有望なモデルを絞り込む B.6 システムを微調整する B.7 ソリューションをプレゼンテーションする B.8 本番稼働! 付録C SVM双対問題 付録D 自動微分 D.1 手計算による微分 D.2 有限差分近似 D.3 フォワードモード自動微分 D.4 リバースモード自動微分 付録E その他の広く知られているANNアーキテクチャ E.1 ホップフィールドネットワーク E.2 ボルツマンマシン E.3 制限付きボルツマンマシン E.4 DBN E.5 自己組織化マップ 付録F 特殊なデータ型 F.1 文字列 F.2 不調和テンソル F.3 疎テンソル F.4 テンソル配列 F.5 集合 F.6 キュー 付録G TensorFlowグラフ G.1 TF関数と具象関数 G.2 関数定義とグラフの調べ方 G.3 トレーシングの詳細 G.4 自動グラフによるダイナミックループ G.5 TF関数における変数、その他のリソースの処理 G.6 tf.kerasのもとで TF関数を使うか否かの指定方法 索引