ゼロから作るDeep Learning ❷

―自然言語処理編

[cover photo]
TOPICS
Data Science , Database , Python
発行年月日
PRINT LENGTH
432
ISBN
978-4-87311-836-9
FORMAT
Print PDF EPUB
Ebook
3,960円
Ebookを購入する
Print
3,960円

コンピュータの専門書としては異例の大ヒットを記録した『ゼロから作るDeep Learning』の続編。第2弾の本書では、自然言語処理や時系列データ処理に焦点を当て、ディープラーニングを使ってさまざまな問題に挑みます。word2vecやRNN(リカレントニューラルネットワーク)、LSTMやGRU、seq2seqやAttention……ディープラーニングを支えるこれら最先端の技術を実装レベルでマスターできます。前作同様、やさしい言葉で分かりやすくをモットーに、高度に見える技術の裏側をじっくり説明し、実際に作ることで理解を深めます。最後までコンセプトは変わらない。ゼロから作る!

関連ファイル

正誤表

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

正誤表


本書の正誤情報は以下のページで公開しています。

https://github.com/oreilly-japan/deep-learning-from-scratch-2/wiki/errata

目次

まえがき

1章 ニューラルネットワークの復習
    1.1 数学とPythonの復習
        1.1.1 ベクトルと行列
        1.1.2 行列の要素ごとの演算
        1.1.3 ブロードキャスト
        1.1.4 ベクトルの内積と行列の積
        1.1.5 行列の形状チェック
    1.2 ニューラルネットワークの推論
        1.2.1 ニューラルネットワークの推論の全体図
        1.2.2 レイヤとしてのクラス化と順伝播の実装
    1.3 ニューラルネットワークの学習
        1.3.1 損失関数
        1.3.2 微分と勾配
        1.3.3 チェインルール
        1.3.4 計算グラフ
        1.3.5 勾配の導出と逆伝播の実装
        1.3.6 重みの更新
    1.4 ニューラルネットワークで問題を解く
        1.4.1 スパイラル・データセット
        1.4.2 ニューラルネットワークの実装
        1.4.3 学習用のソースコード
        1.4.4 Trainerクラス
    1.5 計算の高速化
        1.5.1 ビット精度
        1.5.2 GPU(CuPy)
    1.6 まとめ

2章 自然言語と単語の分散表現
    2.1 自然言語処理とは
        2.1.1 単語の意味
    2.2 シソーラス
        2.2.1 WordNet
        2.2.2 シソーラスの問題点
    2.3 カウントベースの手法
        2.3.1 Pythonによるコーパスの下準備
        2.3.2 単語の分散表現
        2.3.3 分布仮説
        2.3.4 共起行列
        2.3.5 ベクトル間の類似度
        2.3.6 類似単語のランキング表示
    2.4 カウントベースの手法の改善
        2.4.1 相互情報量
        2.4.2 次元削減
        2.4.3 SVDによる次元削減
        2.4.4 PTBデータセット
        2.4.5 PTBデータセットでの評価
    2.5 まとめ

3章 word2vec
    3.1 推論ベースの手法とニューラルネットワーク
        3.1.1 カウントベースの手法の問題点
        3.1.2 推論ベースの手法の概要
        3.1.3 ニューラルネットワークにおける単語の処理方法
    3.2 シンプルなword2vec
        3.2.1 CBOWモデルの推論処理
        3.2.2 CBOWモデルの学習
        3.2.3 word2vecの重みと分散表現
    3.3 学習データの準備
        3.3.1 コンテキストとターゲット
        3.3.2 one-hot表現への変換
    3.4 CBOWモデルの実装
        3.4.1 学習コードの実装
    3.5 word2vecに関する補足
        3.5.1 CBOWモデルと確率
        3.5.2 skip-gramモデル
        3.5.3 カウントベース v.s. 推論ベース
    3.6 まとめ

4章 word2vecの高速化
    4.1 word2vecの改良①
        4.1.1 Embeddingレイヤ
        4.1.2 Embeddingレイヤの実装
    4.2 word2vecの改良②
        4.2.1 中間層以降の計算の問題点
        4.2.2 多値分類から二値分類へ
        4.2.3 シグモイド関数と交差エントロピー誤差
        4.2.4 多値分類から二値分類へ(実装編)
        4.2.5 Negative Sampling
        4.2.6 Negative Samplingのサンプリング手法
        4.2.7 Negative Samplingの実装
    4.3 改良版word2vecの学習
        4.3.1 CBOWモデルの実装
        4.3.2 CBOWモデルの学習コード
        4.3.3 CBOWモデルの評価
    4.4 word2vecに関する残りのテーマ
        4.4.1 word2vecを使ったアプリケーションの例
        4.4.2 単語ベクトルの評価方法
    4.5 まとめ

5章 リカレントニューラルネットワーク(RNN)
    5.1 確率と言語モデル
        5.1.1 word2vecを確率の視点から眺める
        5.1.2 言語モデル
        5.1.3 CBOWモデルを言語モデルに?
    5.2 RNNとは
        5.2.1 循環するニューラルネットワーク
        5.2.2 ループの展開
        5.2.3 Backpropagation Through Time
        5.2.4 Truncated BPTT
        5.2.5 Truncated BPTTのミニバッチ学習
    5.3 RNNの実装
        5.3.1 RNNレイヤの実装
        5.3.2 Time RNNレイヤの実装
    5.4 時系列データを扱うレイヤの実装
        5.4.1 RNNLMの全体図
        5.4.2 Timeレイヤの実装
    5.5 RNNLMの学習と評価
        5.5.1 RNNLMの実装
        5.5.2 言語モデルの評価
        5.5.3 RNNLMの学習コード
        5.5.4 RNNLMのTrainerクラス
    5.6 まとめ

6章 ゲート付きRNN
    6.1 RNNの問題点
        6.1.1 RNNの復習
        6.1.2 勾配消失もしくは勾配爆発
        6.1.3 勾配消失もしくは勾配爆発の原因
        6.1.4 勾配爆発への対策
    6.2 勾配消失とLSTM
        6.2.1 LSTMのインタフェース
        6.2.2 LSTMレイヤの組み立て
        6.2.3 outputゲート
        6.2.4 forgetゲート
        6.2.5 新しい記憶セル
        6.2.6 inputゲート
        6.2.7 LSTMの勾配の流れ
    6.3 LSTMの実装
        6.3.1 TimeLSTMの実装
    6.4 LSTMを使った言語モデル
    6.5 RNNLMのさらなる改善
        6.5.1 LSTMレイヤの多層化
        6.5.2 Dropoutによる過学習の抑制
        6.5.3 重み共有
        6.5.4 より良いRNNLMの実装
        6.5.5 最先端の研究へ
    6.6 まとめ

7章 RNNによる文章生成
    7.1 言語モデルを使った文章生成
        7.1.1 RNNによる文章生成の手順
        7.1.2 文章生成の実装
        7.1.3 さらに良い文章へ
    7.2 seq2seq
        7.2.1 seq2seqの原理
        7.2.2 時系列データ変換用のトイ・プロブレム
        7.2.3 可変長の時系列データ
        7.2.4 足し算データセット
    7.3 seq2seqの実装
        7.3.1 Encoderクラス
        7.3.2 Decoderクラス
        7.3.3 Seq2seqクラス
        7.3.4 seq2seqの評価
    7.4 seq2seqの改良
        7.4.1 入力データの反転(Reverse)
        7.4.2 覗き見(Peeky)
    7.5 seq2seqを用いたアプリケーション
        7.5.1 チャットボット
        7.5.2 アルゴリズムの学習
        7.5.3 イメージキャプション
    7.6 まとめ

8章 Attention
    8.1 Attentionの仕組み
        8.1.1 seq2seqの問題点
        8.1.2 Encoderの改良
        8.1.3 Decoderの改良①
        8.1.4 Decoderの改良②
        8.1.5 Decoderの改良③
    8.2 Attention付きseq2seqの実装
        8.2.1 Encoderの実装
        8.2.2 Decoderの実装
        8.2.3 seq2seqの実装
    8.3 Attentionの評価
        8.3.1 日付フォーマットの変換問題
        8.3.2 Attention付きseq2seqの学習
        8.3.3 Attentionの可視化
    8.4 Attentionに関する残りのテーマ
        8.4.1 双方向RNN
        8.4.2 Attentionレイヤの使用方法
        8.4.3 seq2seqの深層化とskipコネクション
    8.5 Attentionの応用
        8.5.1 Google Neural Machine Translation(GNMT)
        8.5.2 Transformer
        8.5.3 Neural Turing Machine(NTM)
    8.6 まとめ

付録A sigmoid関数とtanh関数の微分
    A.1 sigmoid関数
    A.2 tanh関数
    A.3 まとめ

付録B WordNetを動かす
    B.1 NLTKのインストール
    B.2 WordNetで同義語を得る
    B.3 WordNetと単語ネットワーク
    B.4 WordNetによる意味の類似度

付録C GRU
    C.1 GRUのインタフェース
    C.2 GRUの計算グラフ

おわりに
参考文献
索引