Book description
本書は、ディープラーニングのトレーニングコースを提供するサイトfast.aiの創始者らが、PyTorchとその上に構築されたライブラリfastaiを用いてディープラーニングを行う方法を解説するものです。特別な訓練や数学の深い知識がなくても実践できるように、平易な言葉と数多くの図でていねいに説明しています。サンプルコードはすべてJupyterノートブックで提供されており、簡単に試すことが可能。元Kaggleトップの起業家、ジェレミー・ハワードと教育のプロ、シルヴェイン・ガガーによる渾身の一冊です。
Table of contents
- 表紙
- 序文
- まえがき
- 第Ⅰ部 ディープラーニングの実際
- 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 制約
- 奥付
Product information
- Title: PyTorchとfastaiではじめるディープラーニング ―エンジニアのためのAIアプリケーション開発
- Author(s):
- Release date: May 2021
- Publisher(s): O'Reilly Japan, Inc.
- ISBN: 9784873119427
You might also like
book
ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化
現代のアプリケーションエンジニアは、UIやデータ処理、開発言語、プラットフォームの仕様や癖だけでなく、サーバやネットワークについても、上から下まで、表から裏まで広く知ることを求められます。本書は「ブラウザ」に関連し、インターネットで使用されるさまざまなネットワーク技術をまとめたものです。HTTP/2.0やWebRTCなどの最新技術、WebSocketやXMLHttpRequestなどのブラウザAPI、そしてそれらの土台となるTCPやUDPやトランスポート層についてまでを幅広くカバーします。また改善前後の性能・速さを可能な限り具体化し、それぞれの場面においてのパフォーマンス改善幅を示します。
book
機械学習システムデザイン ―実運用レベルのアプリケーションを実現する継続的反復プロセス
ビジネスとしての機械学習システムの設計や運用についての解説書。本書では、機械学習の最前線で活躍する著者の豊富な経験と知識に基づき、エンド・ツー・エンドの機械学習システムを設計・構築するための基本原則を明らかにします。訓練データの処理方法、特徴の使い方、モデルを再訓練する頻度、監視すべき項目……このような設計上の決定がシステム全体の目的達成にどのように寄与するのかを、実際のケーススタディを通じて理解します。機械学習プロジェクトを成功に導く上で必要な信頼性、拡張性、保守性、およびビジネス要件の変化への適応性を備えた機械学習システムを設計する包括的なアプローチを本書で学ぶことができます。
book
初めてのGraphQL ―Webサービスを作って学ぶ新世代API
今日では多くのWebサービスがRESTアーキテクチャスタイルで実装されています。RESTは2000年にフィールディングの論文で提唱された後に爆発的に普及し洗練されてきました。一方で、本書で紹介するGraphQLは2015年にFacebookによって公開されたRESTとは異なるアプローチのアーキテクチャです。GraphQLの最大の特徴はクエリ言語を用いてデータを操作する点です。クエリ言語の表現力の高さによりクライアントは本当に必要なリクエストを送ることができます。本書ではGraphQLの概要とGraphQLを用いたWebサービスの開発方法を実装例に沿って紹介します。認証やファイルアップロードといった実践的なトピックまで踏み込んだGraphQLの実用的な入門書です。
book
仕事ではじめる機械学習 第2版
2018年の発行以来、多くの読者に支持された書籍を全面改訂! 不確実性の高い機械学習プロジェクトについて、「仕事で使う」という観点から整理するコンセプトはそのままに、初版の発行後に登場した概念や課題を取り上げます。「機械学習でいい感じにしてくれ」と突然上司に言われたとき、本書で学んだことが読者の力になるはずです。本書で得た知識は読者が「いま」困っている問題を解決する助けとなるでしょう。 第2版では、機械学習システムの開発と運用の統合する「ML Ops」、機械学習モデルを解釈し、その妥当性や根拠を明らかにする「機械学習モデルの検証」、ユーザーの行動を学習しながら予測を進める「バンディットアルゴリズム」、意思決定における予測システムの役割や意思決定のデザインを扱う「オンライン広告での機械学習」といった新章を追加しています。