PyTorchとfastaiではじめるディープラーニング

―エンジニアのためのAIアプリケーション開発

[cover photo]
TOPICS
Python
発行年月日
PRINT LENGTH
584
ISBN
978-4-87311-942-7
原書
Deep Learning for Coders with fastai and PyTorch
FORMAT
Print PDF EPUB
Ebook
4,180円
Ebookを購入する
Print
4,180円

本書は、ディープラーニングのトレーニングコースを提供するサイトfast.aiの創始者らが、PyTorchとその上に構築されたライブラリfastaiを用いてディープラーニングを行う方法を解説するものです。特別な訓練や数学の深い知識がなくても実践できるように、平易な言葉と数多くの図でていねいに説明しています。本書で扱うトピックは非常に幅広く、コンピュータビジョン、自然言語処理、協調フィルタリングによるモデルの訓練、精度、速度、信頼性の向上、実用アプリケーションの作成のほか、データ倫理、性能改善のための最新テクニックについても網羅します。サンプルコードはすべてJupyterノートブックで提供されており、簡単に試すことが可能。元Kaggleトップの起業家、ジェレミー・ハワードと教育のプロ、シルヴェイン・ガガーによる渾身の一冊です。

関連ファイル

目次

序文
まえがき

第Ⅰ部 ディープラーニングの実際

1章 ディープラーニングへの旅路
    1.1 万人のためのディープラーニング
    1.2 ニューラルネットワークの簡単な歴史
    1.3 自己紹介
    1.4 ディープラーニングの学び方
        1.4.1 プロジェクトとマインドセット
    1.5 ソフトウェア:PyTorch, fastai, Jupyter(そしてなぜこれらがどうでもいいか)
    1.6 最初のモデル
        1.6.1 ディープラーニング用GPU サーバの取得
        1.6.2 最初のノートブックの実行
        1.6.3 機械学習とは何か?
        1.6.4 ニューラルネットワークとは?
        1.6.5 ディープラーニングのジャーゴンを少し
        1.6.6 機械学習の本質的限界
        1.6.7 画像認識器の動作
        1.6.8 画像識別器が学習したこと
        1.6.9 画像識別器を画像以外のタスクに使う
        1.6.10 ディープラーニング用語の復習
    1.7 ディープラーニングは画像クラス分類だけのものではない
    1.8 検証セットとテストセット
        1.8.1 テストセットを定義する際の判断
    1.9 「きみならどうする?」
    1.10 問題
        1.10.1 さらに詳しく

2章 モデルから実運用へ
    2.1 ディープラーニングの実際
        2.1.1 プロジェクトの開始
        2.1.2 ディープラーニングの現状
        2.1.3 ドライブトレインアプローチ
    2.2 データの収集
    2.3 データからDataLoaders へ
        2.3.1 データ水増し
    2.4 モデルの訓練と、それを用いたデータクリーニング
    2.5 モデルをオンラインアプリケーションにする
        2.5.1 モデルを推論に使う
        2.5.2 モデルからノートブックアプリを作る
        2.5.3 ノートブックから本物のアプリケーションへ変換
        2.5.4 アプリのデプロイ
    2.6 大惨事を避けるには
        2.6.1 予期せぬ結果とフィードバックループ
    2.7 書こう!
    2.8 問題
        2.8.1 さらに詳しく

3章 データ倫理
    3.1 データ倫理の重要な例
        3.1.1 バグと遡求権:医療手当アルゴリズムのバグ
        3.1.2 フィードバックループ:YouTube の推薦システム
        3.1.3 バイアス:Latanya Sweeney 教授「逮捕」
        3.1.4 何がいけないんだ?
    3.2 機械学習と製品設計の統合
    3.3 データ倫理のトピック
        3.3.1 遡求権と説明責任
        3.3.2 フィードバックループ
        3.3.3 バイアス
        3.3.4 逆情報
    3.4 倫理的な問題の特定と対応
        3.4.1 対象となるプロジェクトの解析
        3.4.2 実現するべきプロセス
        3.4.3 多様性の力
        3.4.4 公平性、説明責任、透明性
    3.5 政策の役割
        3.5.1 規制の効果
        3.5.2 権利と政策
        3.5.3 自動車:歴史上の前例
    3.6 まとめ
    3.7 問題
        3.7.1 さらに詳しく
    3.8 ディープラーニングの実際:まとめ

第Ⅱ部 fastai のアプリケーションを理解する

4章 舞台裏:数字のクラス分類器
    4.1 ピクセル:コンピュータビジョンの基礎
    4.2 最初の試行:ピクセル類似性
        4.2.1 NumPy 配列とPyTorch テンソル
    4.3 ブロードキャストを用いたメトリックの計算
    4.4 確率的勾配降下法(SGD)
        4.4.1 勾配の計算
        4.4.2 学習率によるステップ
        4.4.3 SGD による訓練の例
        4.4.4 勾配降下法のまとめ
    4.5 MNIST のロス関数
        4.5.1 シグモイド
        4.5.2 SGD とミニバッチ
    4.6 すべてをまとめる
        4.6.1 最適化器の作成
    4.7 非線形性を加える
        4.7.1 さらに深く
    4.8 用語の復習
    4.9 問題
        4.9.1 さらに詳しく

5章 画像クラス分類
    5.1 犬と猫の識別から、品種の識別へ
    5.2 プリサイズ
        5.2.1 DataBlock のチェックとデバッグ
    5.3 クロスエントロピーロス
        5.3.1 活性値とラベルを見る
        5.3.2 ソフトマックス
        5.3.3 対数尤度
        5.3.4 対数をとる
    5.4 モデルの解釈
    5.5 モデルの改良
        5.5.1 学習率ファインダ
        5.5.2 フリーズ解除と転移学習
        5.5.3 個別学習率
        5.5.4 訓練エポック数の選択
        5.5.5 よりディープなアーキテクチャ
    5.6 結論
    5.7 問題
        5.7.1 さらに詳しく

6章 他のコンピュータビジョン問題
    6.1 マルチラベルクラス分類
        6.1.1 データ
        6.1.2 DataBlock の構築
        6.1.3 バイナリクロスエントロピーロス
    6.2 回帰
        6.2.1 データの組み立て
        6.2.2 モデルの訓練
    6.3 結論
    6.4 問題
        6.4.1 さらに詳しく

7章 SOTA モデルの訓練
    7.1 Imagenette
    7.2 正規化
    7.3 漸近的リサイズ
    7.4 テスト時データ水増し
    7.5 ミックスアップ
    7.6 ラベル平滑化
    7.7 結論
    7.8 問題
        7.8.1 さらに詳しく

8章 協調フィルタリングの詳細
    8.1 データの概要
    8.2 潜在因子の学習
    8.3 DataLoaders の構築
    8.4 協調フィルタリングを1 から作る
        8.4.1 重み減衰
        8.4.2 Embedding モジュールの自作
    8.5 埋め込みとバイアスの解釈
        8.5.1 fastai.collab の利用
        8.5.2 埋め込みの距離
    8.6 協調フィルタリングモデルの立ち上げ
    8.7 ディープラーニングによる協調フィルタリング
    8.8 結論
    8.9 問題
        8.9.1 さらに詳しく

9章 テーブル型データモデルの詳細
    9.1 カテゴリ埋め込み
    9.2 ディープラーニング以外の手法
    9.3 データセット
        9.3.1 Kaggle コンペティション
        9.3.2 データを見る
    9.4 決定木
        9.4.1 日付の取り扱い
        9.4.2 TabularPandas とTabularProc の利用
        9.4.3 決定木の構築
        9.4.4 カテゴリ変数
    9.5 ランダムフォレスト
        9.5.1 ランダムフォレストの構築
        9.5.2 OOB エラー
    9.6 モデルの解釈
        9.6.1 決定木の分散による予測確信度
        9.6.2 特徴量重要度
        9.6.3 重要度の低い変数の削除
        9.6.4 冗長な特徴量の削除
        9.6.5 部分従属プロット
        9.6.6 データリーク
        9.6.7 決定木解釈器
    9.7 外挿とニューラルネットワーク
        9.7.1 外挿問題
        9.7.2 ドメイン外データの検出
        9.7.3 ニューラルネットワークの利用
    9.8 アンサンブル
        9.8.1 ブースティング
        9.8.2 埋め込みと他の手法の組み合わせ
    9.9 結論
    9.10 問題
        9.10.1 さらに詳しく

10章 自然言語処理の詳細:RNN
    10.1 テキストの前処理
        10.1.1 トークン分割
        10.1.2 fastai による単語ベースのトークン分割
        10.1.3 サブワードトークン分割
        10.1.4 fastai による数値化
        10.1.5 言語モデルの訓練のためにテキストをバッチに区切る
    10.2 テキストクラス分類器の訓練
        10.2.1 DataBlock を用いた言語モデル
        10.2.2 言語モデルのファインチューン
        10.2.3 モデルの保存とロード
        10.2.4 テキストの生成
        10.2.5 クラス分類器のためのDataLoaders の作成
        10.2.6 クラス分類器のファインチューン
    10.3 情報操作と言語モデル
    10.4 結論
    10.5 問題
        10.5.1 さらに詳しく

11章 fastai の中位API によるデータマングリング
    11.1 fastai の多層API の詳細 ・
        11.1.1 Transform
        11.1.2 Transform を実装する ・
        11.1.3 パイプライン
    11.2 TfmdLists とDatasets:Transformed Collections
        11.2.1 TfmdLists
        11.2.2 Datasets
    11.3 中位データAPI の適用:SiamesePair
    11.4 結論
    11.5 問題
        11.5.1 さらに詳しく
    11.6 fastai のアプリケーションを理解する:まとめ

第Ⅲ部 ディープラーニングの基礎

12章 言語モデルを1 から作る
    12.1 データ
    12.2 最初の言語モデルを1 から作る
        12.2.1 PyTorch での言語モデル
        12.2.2 最初の回帰型ニューラルネットワーク
    12.3 RNN の改良
        12.3.1 RNN の状態を維持する
        12.3.2 教師信号を増やす
    12.4 多層RNN
        12.4.1 モデル
        12.4.2 活性値の爆発と消失
    12.5 LSTM
        12.5.1 LSTM を1 から作る
        12.5.2 LSTM を用いた言語モデルの訓練
    12.6 LSTM の正則化
        12.6.1 ドロップアウト
        12.6.2 活性値正則化と時間活性値正則化
        12.6.3 LSTM の重み制約による正則化
    12.7 結論
    12.8 問題
        12.8.1 さらに詳しく

13章 畳み込みニューラルネットワーク
    13.1 コンボリューションの魔法
        13.1.1 コンボリューションカーネルのマッピング
        13.1.2 PyTorch によるコンボリューション
        13.1.3 ストライドとパディング
        13.1.4 コンボリューションの式を理解する
    13.2 最初の自作コンボリューションニューラルネットワーク
        13.2.1 CNN の構築
        13.2.2 コンボリューションの計算を理解する
        13.2.3 受容野
        13.2.4 Twitter について ・
    13.3 カラー画像
    13.4 訓練安定性の改善
        13.4.1 シンプルなベースライン
        13.4.2 バッチサイズを増やす
        13.4.3 1 サイクル訓練
        13.4.4 バッチ正規化
    13.5 結論
    13.6 問題
        13.6.1 さらに詳しく

14章 ResNet
    14.1 Imagenette 再訪
    14.2 近代的なCNN:ResNet
        14.2.1 スキップ接続
        14.2.2 SOTA のResNet
        14.2.3 ボトルネック層
    14.3 結論
    14.4 問題
        14.4.1 さらに詳しく

15章 アプリケーションアーキテクチャの詳細
    15.1 コンピュータビジョン
        15.1.1 cnn_learner
        15.1.2 unet_learner
        15.1.3 Siamese ネットワーク
    15.2 自然言語処理
    15.3 テーブル型データ
    15.4 結論
    15.5 問題
        15.5.1 さらに詳しく

16章 訓練のプロセス
    16.1 ベースラインの作成
    16.2 汎用最適化器
    16.3 モメンタム
    16.4 RMSProp
    16.5 Adam
    16.6 重み減衰の分離
    16.7 コールバック
        16.7.1 コールバックの作成
        16.7.2 コールバックの順番と例外
    16.8 結論
    16.9 問題
        16.9.1 さらに詳しく
    16.10 ディープラーニングの基礎:まとめ

第Ⅳ部 ディープラーニングを1 から作る

17章 基礎からのニューラルネットワーク
    17.1 ニューラルネットワーク層を1 から作る
        17.1.1 ニューロンのモデリング
        17.1.2 行列演算を1 から書く
        17.1.3 要素ごとの演算
        17.1.4 ブロードキャスト
        17.1.5 アインシュタインの加法記法
    17.2 順方向パスと逆方向パス
        17.2.1 層の定義と初期化
        17.2.2 勾配と逆方向パス
        17.2.3 モデルのリファクタリング
        17.2.4 PyTorch へ
    17.3 結論
    17.4 問題
        17.4.1 さらに詳しく

18章 CAM を用いたCNN の解釈
    18.1 CAM とフック
    18.2 Grad-CAM
    18.3 結論
    18.4 問題
        18.4.1 さらに詳しく

19章 fastai Learner を1 から作る
    19.1 データ
        19.1.1 Dataset
    19.2 Module とParameter
        19.2.1 シンプルなCNN
    19.3 ロス関数
    19.4 Learner
        19.4.1 コールバック
        19.4.2 学習率のスケジューリング
    19.5 結論
    19.6 問題
        19.6.1 さらに詳しく

20章 おわりに

付録A ブログの作成
    A.1 GitHub Pages を用いたブログ
        A.1.1 レポジトリの作成
        A.1.2 ホームページの設定
        A.1.3 記事の投稿
        A.1.4 GitHub とローカルコンピュータの同期
    A.2 Jupyter でブログ

付録B データプロジェクトチェックリスト
    B.1 データサイエンティスト
    B.2 戦略
    B.3 データ
    B.4 解析
    B.5 実装
    B.6 維持管理
    B.7 制約

索引