scikit-learn、Keras、TensorFlowによる実践機械学習 第2版

[cover photo]
TOPICS
発行年月日
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
Ebook
5,280円
Ebookを購入する
Print
5,280円

本書はコードを動かしながら学び、機械学習が使えるようになることを目的とした書籍です。現実的な問題を出し、サンプルデータを示しながら、機械学習で問題を解決に導くまでの一連の手法を体系立てて解説します。
深層学習以外の機械学習にはscikit-learnを使い、機械学習プロジェクトの流れ、データからモデルを学習する方法、データの処理・クリーニングなどの基礎から、特徴量の選択や過学習、データの次元削減など応用までを学びます。深層学習にはTensorFlowとKerasを使い、ニューラルネットワークの構築と訓練、ニューラルネットワークアーキテクチャ、深層学習や強化学習、さらにTensorFlowの分散処理のメカニズムや実装までを幅広く解説します。
第2版では教師なし学習と深層ネットワーク訓練手法、コンピュータビジョンテクニック、自然言語処理、Tensor Flowの大規模な訓練や効率的なデータの取り扱いについての解説を拡充し、新たに畳み込みニューラルネットワークを使ったシーケンス処理とGANによる画像生成の説明を追加しました。サンプルコードはすべてTensorFlow2に準拠しています。
すべてのコードがGitHub上で公開されており、Jupyter Notebookを使って試しながら学ぶことができます。アルゴリズムの説明に終始せず、実際の業務で必要となる機械学習のスキルをまとめた本書は機械学習を学びたいエンジニア必携の一冊です。

目次

監訳者まえがき
はじめに

第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関数を使うか否かの指定方法

索引