詳説 Deep Learning ―実務者のためのアプローチ

Book description

エンタープライズ向けのディープラーニングの解説書。企業でディープラーニングアプリケーションを開発、運用するための実践的な手法を紹介します。対象読者はソフトウェア開発の現場で活躍する実務者。前半はディープラーニング初心者、後半はJavaエンジニア向けの構成です。機械学習、ニューラルネットワークの基礎から始め、ディープラーニングの基本的な概念、実際にチューニングを行う際のベストプラクティス、データのETL(抽出・変換・ロード)の方法、Apache Sparkを用いた並列化について、JavaライブラリDeep Learning4J(DL4J)の開発者でもある著者がわかりやすく丁寧に解説します。

Table of contents

  1.  大扉
  2.  原書大扉
  3.  クレジット
  4.  献辞
  5.  日本のAIコミュニティの方々へ
  6.  監訳者まえがき
  7.  まえがき
  8.  1章 機械学習の概要
  9.   1.1 学習する機械
  10.    1.1.1 機械が学習するには
  11.    1.1.2 生物学というヒント
  12.    1.1.3 ディープラーニングとは
  13.    1.1.4 ちょっと寄り道
  14.   1.2 課題の定義
  15.   1.3 機械学習の背後にある数学:線形代数
  16.    1.3.1 スカラー
  17.    1.3.2 ベクトル
  18.    1.3.3 行列
  19.    1.3.4 テンソル
  20.    1.3.5 超平面
  21.    1.3.6 重要な数学的演算
  22.    1.3.7 データからベクトルへの変換
  23.    1.3.8 連立方程式を解く
  24.   1.4 機械学習の背後にある数学:統計
  25.    1.4.1 確率
  26.    1.4.2 条件付き確率
  27.    1.4.3 事後確率
  28.    1.4.4 分布
  29.    1.4.5 標本と母集団
  30.    1.4.6 再抽出の手法
  31.    1.4.7 選択の偏り
  32.    1.4.8 尤度
  33.   1.5 機械学習のしくみ
  34.    1.5.1 回帰
  35.    1.5.2 分類
  36.    1.5.3 クラスタリング
  37.    1.5.4 未学習と過学習
  38.    1.5.5 最適化
  39.    1.5.6 凸最適化
  40.    1.5.7 勾配降下法
  41.    1.5.8 確率的勾配降下法
  42.    1.5.9 準ニュートン法による最適化
  43.    1.5.10 生成モデルと識別モデル
  44.   1.6 ロジスティック回帰
  45.    1.6.1 ロジスティック関数
  46.    1.6.2 ロジスティック回帰の出力を理解する
  47.   1.7 モデルの評価
  48.    1.7.1 混同行列
  49.   1.8 機械学習への理解を深める
  50.  2章 ニューラルネットワークとディープラーニングの基礎
  51.   2.1 ニューラルネットワーク
  52.    2.1.1 生物のニューロン
  53.    2.1.2 パーセプトロン
  54.    2.1.3 多層フィードフォワードネットワーク
  55.   2.2 ニューラルネットワークの訓練
  56.    2.2.1 誤差逆伝播学習
  57.   2.3 活性化関数
  58.    2.3.1 線形
  59.    2.3.2 シグモイド
  60.    2.3.3 tanh
  61.    2.3.4 ハードtanh
  62.    2.3.5 ソフトマックス
  63.    2.3.6 修正線形
  64.   2.4 損失関数
  65.    2.4.1 損失関数の記法
  66.    2.4.2 回帰分析での損失関数
  67.    2.4.3 分類のための損失関数
  68.    2.4.4 再構成のための損失関数
  69.   2.5 ハイパーパラメーター
  70.    2.5.1 学習率
  71.    2.5.2 正則化
  72.    2.5.3 モーメンタム
  73.    2.5.4 スパース度
  74.  3章 深層ネットワークの基礎
  75.   3.1 ディープラーニングの定義
  76.    3.1.1 ディープラーニングとは
  77.    3.1.2 この章の構成
  78.   3.2 深層ネットワークのアーキテクチャーに共通の要素
  79.    3.2.1 パラメーター
  80.    3.2.2 層
  81.    3.2.3 活性化関数
  82.    3.2.4 損失関数
  83.    3.2.5 最適化アルゴリズム
  84.    3.2.6 ハイパーパラメーター
  85.    3.2.7 ここまでのまとめ
  86.   3.3 深層ネットワークの構成要素
  87.    3.3.1 RBM
  88.    3.3.2 オートエンコーダー
  89.    3.3.3 変分オートエンコーダー
  90.  4章 深層ネットワークの主要なアーキテクチャー
  91.   4.1 教師なしの事前訓練済みネットワーク
  92.    4.1.1 DBN
  93.    4.1.2 GAN
  94.   4.2 畳み込みニューラルネットワーク(CNN)
  95.    4.2.1 生物学からの着想
  96.    4.2.2 直感的な解説
  97.    4.2.3 CNNのアーキテクチャーの概要
  98.    4.2.4 入力層
  99.    4.2.5 畳み込み層
  100.    4.2.6 プーリング層
  101.    4.2.7 全結合層
  102.    4.2.8 その他のCNNの適用例
  103.    4.2.9 有名なCNN
  104.    4.2.10 ここまでのまとめ
  105.   4.3 リカレントニューラルネットワーク
  106.    4.3.1 時間という次元のモデル化
  107.    4.3.2 3次元の立体的入力
  108.    4.3.3 マルコフモデルではない理由
  109.    4.3.4 一般的なリカレントニューラルネットワークのアーキテクチャー
  110.    4.3.5 LSTMネットワーク
  111.    4.3.6 ドメインごとの適用例と混合ネットワーク
  112.   4.4 リカーシブニューラルネットワーク
  113.    4.4.1 ネットワークのアーキテクチャー
  114.    4.4.2 リカーシブニューラルネットワークのバリエーション
  115.    4.4.3 リカーシブニューラルネットワークの適用例
  116.   4.5 まとめとさらなる議論
  117.    4.5.1 ディープラーニングは他のアルゴリズムを時代遅れにするか
  118.    4.5.2 最適な手法は問題ごとに異なる
  119.    4.5.3 どのような場合にディープラーニングが必要か
  120.  5章 深層ネットワークの構築
  121.   5.1 深層ネットワークを適切な問題に適用する
  122.    5.1.1 表形式のデータと多層パーセプトロン
  123.    5.1.2 画像と畳み込みニューラルネットワーク
  124.    5.1.3 時系列のシーケンスとリカレントニューラルネットワーク
  125.    5.1.4 ハイブリッドネットワーク
  126.   5.2 DL4Jのツール群
  127.    5.2.1 ベクトル化とDataVec
  128.    5.2.2 ランタイムとND4J
  129.   5.3 DL4JのAPIでの基本的な考え方
  130.    5.3.1 モデルの読み込みと保存
  131.    5.3.2 モデルへの入力データを取得する
  132.    5.3.3 モデルのアーキテクチャーのセットアップ
  133.    5.3.4 訓練と評価
  134.   5.4 多層パーセプトロンのネットワークでCSVデータをモデル化する
  135.    5.4.1 入力データのセットアップ
  136.    5.4.2 ネットワークアーキテクチャーを決定する
  137.    5.4.3 モデルを訓練する
  138.    5.4.4 モデルを評価する
  139.   5.5 手書き数字をCNNでモデル化する
  140.    5.5.1 LeNetをJavaで実装したコード
  141.    5.5.2 入力画像の読み込みとベクトル化
  142.    5.5.3 LeNetのネットワークアーキテクチャー
  143.    5.5.4 CNNを訓練する
  144.   5.6 リカレントニューラルネットワークを使い、シーケンスデータをモデル化する
  145.    5.6.1 LSTMを使ってシェイクスピア風の文章を生成する
  146.    5.6.2 LSTMを使ってセンサーからの時系列シーケンスを分類する
  147.   5.7 オートエンコーダーを使った異常検出
  148.    5.7.1 オートエンコーダーのJavaコード例
  149.    5.7.2 入力データのセットアップ
  150.    5.7.3 オートエンコーダーのネットワークアーキテクチャーと訓練
  151.    5.7.4 モデルを評価する
  152.   5.8 変分オートエンコーダーを使ってMNISTの数字を再構成する
  153.    5.8.1 MNISTの数字を再構成するコード
  154.    5.8.2 VAEのモデルの検討
  155.   5.9 自然言語処理へのディープラーニングの適用
  156.    5.9.1 Word2Vecを使い、単語の埋め込み表現を学習する
  157.    5.9.2 段落ベクトルによる文の離散表現
  158.    5.9.3 段落ベクトルを使って文書を分類する
  159.  6章 深層ネットワークのチューニング
  160.   6.1 深層ネットワークのチューニングに関する基本的な考え方
  161.    6.1.1 深層ネットワークを構築する際の直感的な考え方
  162.    6.1.2 ステップバイステップのプロセスを直感的に理解する
  163.   6.2 入力データとネットワークアーキテクチャーの対応付け
  164.    6.2.1 ここまでのまとめ
  165.   6.3 モデルの目標と出力層の関連付け
  166.    6.3.1 回帰分析モデルでの出力層
  167.    6.3.2 分類モデルでの出力層
  168.   6.4 層の数、パラメーターの数、メモリ
  169.    6.4.1 フィードフォワードの多層ニューラルネットワーク
  170.    6.4.2 層とパラメーターの数をコントロールする
  171.    6.4.3 メモリ使用量を概算する
  172.   6.5 重みを初期化する手法
  173.   6.6 RNNでの重みの直交初期化
  174.   6.7 活性化関数の利用
  175.    6.7.1 活性化関数のまとめ
  176.   6.8 損失関数を適用する
  177.   6.9 学習率を理解する
  178.    6.9.1 パラメーターに対する更新の比率を利用する
  179.    6.9.2 学習率についての推奨事項
  180.   6.10 スパース度が学習に与える影響
  181.   6.11 最適化手法を適用する
  182.    6.11.1 SGDのベストプラクティス
  183.   6.12 並列化やGPUを使って訓練を高速化する
  184.    6.12.1 オンライン学習と並列繰り返しアルゴリズム
  185.    6.12.2 DL4JでのSGDの並列化
  186.    6.12.3 GPU
  187.   6.13 エポック数とミニバッチのサイズ
  188.    6.13.1 ミニバッチのサイズでのトレードオフ
  189.   6.14 正則化の利用法
  190.    6.14.1 正則化項としての事前知識
  191.    6.14.2 最大ノルム正則化
  192.    6.14.3 ドロップアウト
  193.    6.14.4 正則化に関する他のトピック
  194.   6.15 不均衡なクラスの扱い
  195.    6.15.1 クラスに対するサンプリングの手法
  196.    6.15.2 重み付き損失関数
  197.   6.16 過学習への対処
  198.   6.17 チューニングのUIでネットワーク統計量を利用する
  199.    6.17.1 重みの誤った初期化を発見する
  200.    6.17.2 シャッフルされていないデータの検出
  201.    6.17.3 正則化での問題を検出する
  202.  7章 特定の深層ネットワークのアーキテクチャーへのチューニング
  203.   7.1 CNN(畳み込みニューラルネットワーク)
  204.    7.1.1 畳み込みアーキテクチャーでの主なパターン
  205.    7.1.2 畳み込み層の構成
  206.    7.1.3 プーリング層を設定する
  207.    7.1.4 転移学習
  208.   7.2 リカレントニューラルネットワーク
  209.    7.2.1 ネットワークへの入力データと入力層
  210.    7.2.2 出力層とRnnOutputLayer
  211.    7.2.3 ネットワークを訓練する
  212.    7.2.4 LSTMでのよくある問題を解決する
  213.    7.2.5 パディングとマスキング
  214.    7.2.6 マスキングによる評価とスコア付け
  215.    7.2.7 リカレントニューラルネットワークのアーキテクチャーの変種
  216.   7.3 制限付きボルツマン機械
  217.    7.3.1 隠れユニットと入手可能な情報のモデル化
  218.    7.3.2 異なるユニットを利用する
  219.    7.3.3 RBMで正則化を行う
  220.   7.4 DBN
  221.    7.4.1 モーメンタムを利用する
  222.    7.4.2 正則化を利用する
  223.    7.4.3 隠れユニットの個数を決定する
  224.  8章 ベクトル化
  225.   8.1 機械学習でのベクトル化入門
  226.    8.1.1 なぜデータをベクトル化するのか
  227.    8.1.2 表形式の生データの属性を扱う方針
  228.    8.1.3 特徴量の作成と正規化の手法
  229.   8.2 ETLとベクトル化にDataVecを利用する
  230.   8.3 画像データをベクトル化する
  231.    8.3.1 DL4Jでの画像データの表現
  232.    8.3.2 DataVecを使った画像データとベクトルの正規化
  233.   8.4 連続データをベクトル化する
  234.    8.4.1 連続データの主なソース
  235.    8.4.2 DataVecを使って連続データをベクトル化する
  236.   8.5 ベクトル化でテキストを扱う
  237.    8.5.1 単語バッグ
  238.    8.5.2 TF-IDF
  239.    8.5.3 Word2VecとVSMを比較する
  240.   8.6 グラフを取り扱う
  241.  9章 Spark上でDL4Jを用いて機械学習を行う
  242.   9.1 DL4JをSparkやHadoopと併用する
  243.    9.1.1 コマンドラインでSparkを操作する
  244.   9.2 Sparkの実行に対する設定とチューニング
  245.    9.2.1 Mesos上でSparkを実行する
  246.    9.2.2 YARN上でSparkを実行する
  247.    9.2.3 Sparkにおける一般的なチューニングの指針
  248.    9.2.4 Spark上のDL4Jジョブをチューニングする
  249.   9.3 SparkとDL4J向けにMavenのPOMをセットアップする
  250.    9.3.1 pom.xmlファイルに記述する依存先のテンプレート
  251.    9.3.2 CDH 5.x向けのPOMファイルをセットアップする
  252.    9.3.3 HDP 2.4向けのPOMファイルをセットアップする
  253.   9.4 SparkとHadoopでのトラブルシューティング
  254.    9.4.1 ND4Jでの主な問題
  255.   9.5 Spark上でのDL4Jの並列実行
  256.    9.5.1 Spark上で訓練を行う最小限の例
  257.   9.6 Spark上のDL4Jのベストプラクティス
  258.   9.7 Sparkでの多層パーセプトロンの例
  259.    9.7.1 Sparkで多層パーセプトロンのアーキテクチャーをセットアップする
  260.    9.7.2 分散型の訓練とモデルの評価
  261.    9.7.3 DL4JのSparkジョブをビルドし実行する
  262.   9.8 SparkとLSTMでシェイクスピア風の文章を生成する
  263.    9.8.1 LSTMのネットワークアーキテクチャーをセットアップする
  264.    9.8.2 訓練し、進捗を管理し、結果を理解する
  265.   9.9 Spark上の畳み込みニューラルネットワークでMNISTをモデル化する
  266.    9.9.1 Sparkジョブを構成し、MNISTデータを読み込む
  267.    9.9.2 LeNetのCNNアーキテクチャーをセットアップして訓練する
  268.  付録A 人工知能とは何か?
  269.   A.1 これまでの物語
  270.    A.1.1 ディープラーニングの定義
  271.    A.1.2 人工知能の定義
  272.   A.2 今日のAIで、興味を駆り立てているのは何か?
  273.   A.3 冬は来ている
  274.  付録B RL4Jと強化学習
  275.   B.1 序文
  276.    B.1.1 マルコフ決定過程
  277.    B.1.2 用語
  278.   B.2 異なる設定
  279.    B.2.1 モデルフリー
  280.    B.2.2 観測の設定
  281.    B.2.3 シングルプレイヤーと対戦ゲーム
  282.   B.3 Q学習
  283.    B.3.1 方策とそれに続くニューラルネットワーク
  284.    B.3.2 方策反復
  285.    B.3.3 探索と活用
  286.    B.3.4 ベルマン方程式
  287.    B.3.5 初期状態のサンプリング
  288.    B.3.6 Q学習の実装
  289.    B.3.7 Q(s, a)のモデリング
  290.    B.3.8 経験再生(Experience Replay)
  291.    B.3.9 畳み込み層と画像前処理
  292.    B.3.10 履歴の処理
  293.    B.3.11 ダブルQラーニング(Double Q-Learning)
  294.    B.3.12 クリッピング
  295.    B.3.13 報酬のスケーリング
  296.    B.3.14 優先再生(Prioritized Replay)
  297.   B.4 グラフ、可視化、平均Q
  298.   B.5 RL4J
  299.   B.6 結論
  300.  付録C 誰もが知っておくべき数値
  301.  付録D ニューラルネットワークと誤差逆伝播:数学的アプローチ
  302.   D.1 導入
  303.   D.2 多層パーセプトロンの誤差逆伝播
  304.  付録E ND4J APIの使用方法
  305.   E.1 設計と基本的な使い方
  306.    E.1.1 NDArrayの理解
  307.    E.1.2 ND4Jの汎用構文
  308.    E.1.3 NDArrayの動作の基礎
  309.    E.1.4 データセット
  310.   E.2 入力ベクトルの生成方法
  311.    E.2.1 ベクトル生成の基礎
  312.   E.3 MLLibUtilの使用方法
  313.    E.3.1 INDArrayからMLLibベクトルへの変換
  314.    E.3.2 MLLibベクトルからINDArrayへの変換
  315.   E.4 DL4Jを用いたモデル予測
  316.    E.4.1 DL4JとND4Jを一緒に使用する方法
  317.  付録F DataVecの使用方法
  318.   F.1 機械学習へのデータのロード方法
  319.   F.2 多層パーセプトロンへのCSVデータのロード方法
  320.   F.3 畳み込みニューラルネットワーク用の画像データのロード方法
  321.   F.4 リカレントニューラルネットワーク用のシーケンスデータのロード方法
  322.   F.5 データの加工方法:DataVecを用いたデータラングリング(操作)
  323.    F.5.1 DataVecの加工:重要な概念
  324.    F.5.2 DataVecの加工機能:一例
  325.  付録G DL4Jをソースから利用
  326.   G.1 Gitがインストールされていることの確認
  327.   G.2 主要なDL4JのGitHubプロジェクトのクローン方法
  328.   G.3 ZIPファイルを使用したソースのダウンロード方法
  329.   G.4 ソースコードから構築するためのMavenの使用方法
  330.  付録H DL4Jプロジェクトのセットアップ方法
  331.   H.1 新たなDL4Jプロジェクトの作成方法
  332.    H.1.1 Java
  333.    H.1.2 Mavenでの作業方法
  334.    H.1.3 IDE
  335.   H.2 他のMaven POMの設定方法
  336.    H.2.1 ND4JとMaven
  337.  付録I DL4Jプロジェクト用のGPUの設定
  338.   I.1 バックエンドのGPUへの切り替え
  339.    I.1.1 GPUの選択
  340.    I.1.2 マルチGPUシステム上での学習
  341.   I.2 異なるプラットフォーム上のCUDA
  342.   I.3 GPU性能の監視方法
  343.    I.3.1 NVIDIAシステム管理インタフェース
  344.  付録J DL4Jインストールのトラブルシューティング
  345.   J.1 以前のインストール
  346.   J.2 ソースコードからインストールする際のメモリエラー
  347.   J.3 Mavenのバージョンが古い
  348.   J.4 MavenとPATH変数
  349.   J.5 誤ったJDKバージョン
  350.   J.6 C++とその他の開発ツール
  351.   J.7 GPUの監視
  352.   J.8 JVisualVMの使用方法
  353.   J.9 Clojureの使用方法
  354.   J.10 予防策
  355.    J.10.1 他のローカルリポジトリ
  356.    J.10.2 Mavenの依存性のチェック
  357.    J.10.3 依存性の再インストール
  358.    J.10.4 他の何かが失敗した場合
  359.   J.11 異なるプラットフォーム
  360.    J.11.1 macOS
  361.    J.11.2 Windows
  362.    J.11.3 Linux
  363.  参考文献
  364.  著者紹介
  365.  奥付

Product information

  • Title: 詳説 Deep Learning ―実務者のためのアプローチ
  • Author(s): Josh Patterson, Adam Gibson, 本橋 和貴, 牧野 聡, 新郷 美紀
  • Release date: August 2019
  • Publisher(s): O'Reilly Japan, Inc.
  • ISBN: 9784873118802

You might also like

book

生成 Deep Learning ―絵を描き、物語や音楽を作り、ゲームをプレイする

by David Foster, 松田 晃一, 小沼 千絵

生成型ディープラーニングの解説書。「絵を描く」「曲を作る」といった、これまで人間にしかできないと思われていた創造的な作業を機械に行わせるという、いま最もホットな技術の基礎から応用までをJupyterノートブック環境で実際に試しながら学びます。第I部は基礎編です。機械学習プログラミング、変分オートエンコーダ、GANやRNNなど、生成モデルの作成において重要な基礎技術を学びます。第II部は応用編です。CycleGAN、エンコーダ―デコーダモデル、MuseGANなどのモデルを作成し、作画、作文、作曲といった創造的なタスクに取り組みます。さらには、実環境を用いずにゲームプレイの学習を可能にする、世界モデルを使った強化学習にも取り組みます。

book

直感 Deep Learning ―Python×Kerasでアイデアを形にするレシピ

by Antonio Gulli, Sujit Pal, 大串 正矢, 久保 隆宏, 中山 光樹

直感的かつ短いコードでアイデアを形にできるKerasはTensorFlowのラッパーとして大人気のライブラリです。本書でもTensorFlowをバックエンドとして使用し、自然言語処理、画像識別、画像生成、音声合成、テキスト生成、強化学習、AIゲームプレイなどさまざまなモデルをPythonとKerasで実装します。対象読者は、各種のディープラーニングを素早く実装したいプログラマー、データサイエンティスト。ディープラーニングを支える技術の速習にも好適です。数式はなるべく使わずにコードと図で説明します。ニューラルネットワークおよびPython 3の基本を理解している人であれば誰でも始めることができます。

book

実践 Deep Learning ―PythonとTensorFlowで学ぶ次世代の機械学習アルゴリズム

by Nikhil Buduma, 太田 満久, 藤原 秀平, 牧野 聡

2000年代にニューラルネットワークの研究が再び活発になりました。現在、ディープラーニングは近代的な機械学習の道を切り開いている非常に活発な研究領域となっています。Google、Microsoft、Facebookなどの企業では、社内のディープラーニングチームが急成長しています。しかし、多くの人にとってディープラーニングはまだまだとても複雑で困難な課題です。本書ではサンプルのPython 3プログラムと簡潔な説明を通してこの複雑な分野の主要な概念を紹介します。微積分、行列演算、Pythonの基礎があれば誰でも本書を始めることができます。

book

ゼロからはじめるデータサイエンス 第2版 ―Pythonで学ぶ基本と実践

by Joel Grus, 菊池 彰

本書はPythonプログラミングを通してデータサイエンスの基本知識を「ゼロから学ぶ」ことができる入門書です。読者は架空のソーシャルネットワーク運営企業、データサイエンス・スター社のデータサイエンティストとして、さまざまな課題を解決しながら、必要な知識とスキルを着実に積み上げていきます。Pythonプログラミングの基礎から線形代数、統計確率の基礎、回帰、機械学習、ナイーブベイズ、決定木、ニューラルネットワーク、ディープラーニング、自然言語処理、ネットワーク分析、リコメンドシステム、データベースとSQL、MapReduce、データ倫理まで、データサイエンスに必要な幅広い知識をカバーします。