コンピュータの専門書としては異例の大ヒットを記録した『ゼロから作るDeep Learning』の続編。第二弾の本書では、自然言語処理や時系列データ処理に焦点を当て、ディープラーニングを使ってさまざまな問題に挑みます。word2vecやRNN(リカレントニューラルネットワーク)、LSTMやGRU、seq2seqやAttention……ディープラーニングを支えるこれら最先端の技術を実装レベルでマスターできます。前作同様、やさしい言葉で分かりやすくをモットーに、高度に見える技術の裏側をじっくり説明し、実際に作ることで理解を深めます。最後までコンセプトは変わらない。ゼロから作る!
https://www.ohmsha.co.jp/book/9784873118369/
正誤表やDLデータ等がある場合はこちらに掲載しています
まえがき
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の改良(1)
4.1.1 Embeddingレイヤ
4.1.2 Embeddingレイヤの実装
4.2 word2vecの改良(2)
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の改良(1)
8.1.4 Decoderの改良(2)
8.1.5 Decoderの改良(3)
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の計算グラフ
おわりに
参考文献
索引