本書は、ディープラーニングのトレーニングコースを提供するサイトfast.aiの創始者らが、PyTorchとその上に構築されたライブラリfastaiを用いてディープラーニングを行う方法を解説するものです。特別な訓練や数学の深い知識がなくても実践できるように、平易な言葉と数多くの図でていねいに説明しています。本書で扱うトピックは非常に幅広く、コンピュータビジョン、自然言語処理、協調フィルタリングによるモデルの訓練、精度、速度、信頼性の向上、実用アプリケーションの作成のほか、データ倫理、性能改善のための最新テクニックについても網羅します。サンプルコードはすべてJupyterノートブックで提供されており、簡単に試すことが可能。元Kaggleトップの起業家、ジェレミー・ハワードと教育のプロ、シルヴェイン・ガガーによる渾身の一冊です。
PyTorchとfastaiではじめるディープラーニング
―エンジニアのためのAIアプリケーション開発
Jeremy Howard、Sylvain Gugger 著、中田 秀基 訳
- TOPICS
- Python
- 発行年月日
- 2021年05月
- PRINT LENGTH
- 584
- ISBN
- 978-4-87311-942-7
- 原書
- Deep Learning for Coders with fastai and PyTorch
- FORMAT
- Print PDF EPUB
関連ファイル
目次
序文 まえがき 第Ⅰ部 ディープラーニングの実際 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 制約 索引