10. 現代的な再帰型ニューラルネットワークnavigate_next 10.8. ビームサーチ
クイック検索
code
ソースコードを表示
PDF ノートブック GitHub English 中文版
ディープラーニングを深く学ぶ
Table Of Contents
  • 序文
  • インストール
  • 記法
  • 1. はじめに
  • 2. 前提知識
    • 2.1. データ操作
    • 2.2. データ前処理
    • 2.3. 線形代数
    • 2.4. 微分積分
    • 2.5. 自動微分
    • 2.6. 確率と統計
    • 2.7. ドキュメント
  • 3. 回帰のための線形ニューラルネットワーク
    • 3.1. 線形回帰
    • 3.2. 実装のためのオブジェクト指向設計
    • 3.3. 合成回帰データ
    • 3.4. 線形回帰のスクラッチ実装
    • 3.5. 線形回帰の簡潔な実装
    • 3.6. 汎化
    • 3.7. 重み減衰
  • 4. 分類のための線形ニューラルネットワーク
    • 4.1. ソフトマックス回帰
    • 4.2. 画像分類データセット
    • 4.3. 分類の基礎モデル
    • 4.4. スクラッチからのソフトマックス回帰の実装
    • 4.5. Softmax回帰の簡潔な実装
    • 4.6. 分類における汎化
    • 4.7. 環境と分布シフト
  • 5. 多層パーセプトロン
    • 5.1. 多層パーセプトロン
    • 5.2. 多層パーセプトロンの実装
    • 5.3. 順伝播、逆伝播、および計算グラフ
    • 5.4. 数値安定性と初期化
    • 5.5. ディープラーニングにおける汎化
    • 5.6. ドロップアウト
    • 5.7. Kaggleで住宅価格を予測する
  • 6. ビルダーのためのガイド
    • 6.1. 層とモジュール
    • 6.2. パラメータ管理
    • 6.3. パラメータの初期化
    • 6.4. 遅延初期化
    • 6.5. カスタム層
    • 6.6. ファイル入出力
    • 6.7. GPU
  • 7. 畳み込みニューラルネットワーク
    • 7.1. 全結合層から畳み込みへ
    • 7.2. 画像のための畳み込み
    • 7.3. パディングとストライド
    • 7.4. 複数入力チャネルと複数出力チャネル
    • 7.5. プーリング
    • 7.6. 畳み込みニューラルネットワーク(LeNet)
  • 8. 現代的な畳み込みニューラルネットワーク
    • 8.1. 畳み込み深層ニューラルネットワーク(AlexNet)
    • 8.2. ブロックを用いたネットワーク(VGG)
    • 8.3. Network in Network(NiN)
    • 8.4. マルチブランチネットワーク(GoogLeNet)
    • 8.5. バッチ正規化
    • 8.6. 残差ネットワーク(ResNet)と ResNeXt
    • 8.7. 密に接続されたネットワーク(DenseNet)
    • 8.8. 畳み込みネットワークのアーキテクチャ設計
  • 9. 再帰ニューラルネットワーク
    • 9.1. シーケンスの扱い
    • 9.2. 生テキストを系列データに変換する
    • 9.3. 言語モデル
    • 9.4. 再帰型ニューラルネットワーク
    • 9.5. ゼロからの再帰ニューラルネットワークの実装
    • 9.6. リカレントニューラルネットワークの簡潔な実装
    • 9.7. 時間を通した逆伝播
  • 10. 現代的な再帰型ニューラルネットワーク
    • 10.1. 長短期記憶(LSTM)
    • 10.2. ゲート付き再帰ユニット(GRU)
    • 10.3. 深層再帰ニューラルネットワーク
    • 10.4. 双方向リカレントニューラルネットワーク
    • 10.5. 機械翻訳とデータセット
    • 10.6. エンコーダ–デコーダアーキテクチャ
    • 10.7. 機械翻訳のためのシーケンス・ツー・シーケンス学習
    • 10.8. ビームサーチ
  • 11. 注意機構と Transformer
    • 11.1. クエリ、キー、値
    • 11.2. 類似度によるアテンションプーリング
    • 11.3. アテンションのスコアリング関数
    • 11.4. バーダナウ注意機構
    • 11.5. マルチヘッドアテンション
    • 11.6. 自己注意機構と位置エンコーディング
    • 11.7. Transformerアーキテクチャ
    • 11.8. 画像向けTransformer
    • 11.9. Transformerによる大規模事前学習
  • 12. 最適化アルゴリズム
    • 12.1. 最適化と深層学習
    • 12.2. 凸性
    • 12.3. 勾配降下法
    • 12.4. 確率的勾配降下法
    • 12.5. ミニバッチ確率的勾配降下法
    • 12.6. モメンタム
    • 12.7. Adagrad
    • 12.8. RMSProp
    • 12.9. Adadelta
    • 12.10. Adam
    • 12.11. 学習率スケジューリング
  • 13. 計算性能
    • 13.1. コンパイラとインタプリタ
    • 13.2. 非同期計算
    • 13.3. 自動並列化
    • 13.4. ハードウェア
    • 13.5. 複数GPUでの学習
    • 13.6. 複数GPUのための簡潔な実装
    • 13.7. パラメータサーバー
  • 14. コンピュータビジョン
    • 14.1. 画像拡張
    • 14.2. ファインチューニング
    • 14.3. 物体検出とバウンディングボックス
    • 14.4. アンカーボックス
    • 14.5. マルチスケール物体検出
    • 14.6. 物体検出データセット
    • 14.7. シングルショット・マルチボックス検出
    • 14.8. Region-based CNNs (R-CNNs)
    • 14.9. セマンティックセグメンテーションとデータセット
    • 14.10. 転置畳み込み
    • 14.11. 完全畳み込みネットワーク
    • 14.12. ニューラル・スタイル変換
    • 14.13. Kaggle における画像分類(CIFAR-10)
    • 14.14. Kaggle における犬種識別(ImageNet Dogs)
  • 15. 自然言語処理: 事前学習
    • 15.1. 単語埋め込み(word2vec)
    • 15.2. 近似学習
    • 15.3. 単語埋め込みの事前学習のためのデータセット
    • 15.4. word2vec の事前学習
    • 15.5. グローバルベクトル(GloVe)による単語埋め込み
    • 15.6. サブワード埋め込み
    • 15.7. 単語の類似性とアナロジー
    • 15.8. Transformerによる双方向エンコーダ表現(BERT)
    • 15.9. BERTの事前学習のためのデータセット
    • 15.10. BERTの事前学習
  • 16. 自然言語処理: 応用
    • 16.1. 感情分析とデータセット
    • 16.2. 感情分析: 再帰型ニューラルネットワークの使用
    • 16.3. 畳み込みニューラルネットワークを用いた感情分析
    • 16.4. 自然言語推論とデータセット
    • 16.5. 自然言語推論: Attention の利用
    • 16.6. 系列レベルおよびトークンレベルのアプリケーションのための BERT のファインチューニング
    • 16.7. 自然言語推論: BERTのファインチューニング
  • 17. 強化学習
    • 17.1. マルコフ決定過程(MDP)
    • 17.2. 値反復
    • 17.3. Q学習
  • 18. ガウス過程
    • 18.1. ガウス過程入門
    • 18.2. ガウス過程の事前分布
    • 18.3. ガウス過程推論
  • 19. ハイパーパラメータ最適化
    • 19.1. ハイパーパラメータ最適化とは何か?
    • 19.2. ハイパーパラメータ最適化 API
    • 19.3. 非同期ランダムサーチ
    • 19.4. マルチフィデリティ・ハイパーパラメータ最適化
    • 19.5. 非同期逐次半減法
  • 20. 生成的敵対的ネットワーク
    • 20.1. 生成的敵対的ネットワーク
    • 20.2. Deep Convolutional Generative Adversarial Networks
  • 21. レコメンデーションシステム
    • 21.1. レコメンダーシステムの概要
    • 21.2. MovieLens データセット
    • 21.3. 行列分解
    • 21.4. AutoRec: オートエンコーダによるレーティング予測
    • 21.5. レコメンダシステムのための個人化ランキング
    • 21.6. パーソナライズドランキングのためのニューラル協調フィルタリング
    • 21.7. シーケンスを考慮した推薦システム
    • 21.8. 特徴豊富な推薦システム
    • 21.9. 因子分解機
    • 21.10. Deep Factorization Machines
  • 22. 付録: 深層学習のための数学
    • 22.1. 幾何と線形代数的操作
    • 22.2. 固有分解
    • 22.3. 単変数微積分
    • 22.4. 多変数微積分
    • 22.5. 積分計算
    • 22.6. 確率変数
    • 22.7. 最尤推定
    • 22.8. 分布
    • 22.9. ナイーブベイズ
    • 22.10. 統計学
    • 22.11. 情報理論
  • 23. 付録: ディープラーニングのためのツール
    • 23.1. Jupyter Notebook の使用
    • 23.2. Amazon SageMaker の使用
    • 23.3. AWS EC2 インスタンスの使用
    • 23.4. Google Colab を使う
    • 23.5. サーバーとGPUの選択
    • 23.6. この本への貢献
    • 23.7. ユーティリティ関数とクラス
    • 23.8. d2l API ドキュメント
  • 参考文献
ディープラーニングを深く学ぶ
Table Of Contents
  • 序文
  • インストール
  • 記法
  • 1. はじめに
  • 2. 前提知識
    • 2.1. データ操作
    • 2.2. データ前処理
    • 2.3. 線形代数
    • 2.4. 微分積分
    • 2.5. 自動微分
    • 2.6. 確率と統計
    • 2.7. ドキュメント
  • 3. 回帰のための線形ニューラルネットワーク
    • 3.1. 線形回帰
    • 3.2. 実装のためのオブジェクト指向設計
    • 3.3. 合成回帰データ
    • 3.4. 線形回帰のスクラッチ実装
    • 3.5. 線形回帰の簡潔な実装
    • 3.6. 汎化
    • 3.7. 重み減衰
  • 4. 分類のための線形ニューラルネットワーク
    • 4.1. ソフトマックス回帰
    • 4.2. 画像分類データセット
    • 4.3. 分類の基礎モデル
    • 4.4. スクラッチからのソフトマックス回帰の実装
    • 4.5. Softmax回帰の簡潔な実装
    • 4.6. 分類における汎化
    • 4.7. 環境と分布シフト
  • 5. 多層パーセプトロン
    • 5.1. 多層パーセプトロン
    • 5.2. 多層パーセプトロンの実装
    • 5.3. 順伝播、逆伝播、および計算グラフ
    • 5.4. 数値安定性と初期化
    • 5.5. ディープラーニングにおける汎化
    • 5.6. ドロップアウト
    • 5.7. Kaggleで住宅価格を予測する
  • 6. ビルダーのためのガイド
    • 6.1. 層とモジュール
    • 6.2. パラメータ管理
    • 6.3. パラメータの初期化
    • 6.4. 遅延初期化
    • 6.5. カスタム層
    • 6.6. ファイル入出力
    • 6.7. GPU
  • 7. 畳み込みニューラルネットワーク
    • 7.1. 全結合層から畳み込みへ
    • 7.2. 画像のための畳み込み
    • 7.3. パディングとストライド
    • 7.4. 複数入力チャネルと複数出力チャネル
    • 7.5. プーリング
    • 7.6. 畳み込みニューラルネットワーク(LeNet)
  • 8. 現代的な畳み込みニューラルネットワーク
    • 8.1. 畳み込み深層ニューラルネットワーク(AlexNet)
    • 8.2. ブロックを用いたネットワーク(VGG)
    • 8.3. Network in Network(NiN)
    • 8.4. マルチブランチネットワーク(GoogLeNet)
    • 8.5. バッチ正規化
    • 8.6. 残差ネットワーク(ResNet)と ResNeXt
    • 8.7. 密に接続されたネットワーク(DenseNet)
    • 8.8. 畳み込みネットワークのアーキテクチャ設計
  • 9. 再帰ニューラルネットワーク
    • 9.1. シーケンスの扱い
    • 9.2. 生テキストを系列データに変換する
    • 9.3. 言語モデル
    • 9.4. 再帰型ニューラルネットワーク
    • 9.5. ゼロからの再帰ニューラルネットワークの実装
    • 9.6. リカレントニューラルネットワークの簡潔な実装
    • 9.7. 時間を通した逆伝播
  • 10. 現代的な再帰型ニューラルネットワーク
    • 10.1. 長短期記憶(LSTM)
    • 10.2. ゲート付き再帰ユニット(GRU)
    • 10.3. 深層再帰ニューラルネットワーク
    • 10.4. 双方向リカレントニューラルネットワーク
    • 10.5. 機械翻訳とデータセット
    • 10.6. エンコーダ–デコーダアーキテクチャ
    • 10.7. 機械翻訳のためのシーケンス・ツー・シーケンス学習
    • 10.8. ビームサーチ
  • 11. 注意機構と Transformer
    • 11.1. クエリ、キー、値
    • 11.2. 類似度によるアテンションプーリング
    • 11.3. アテンションのスコアリング関数
    • 11.4. バーダナウ注意機構
    • 11.5. マルチヘッドアテンション
    • 11.6. 自己注意機構と位置エンコーディング
    • 11.7. Transformerアーキテクチャ
    • 11.8. 画像向けTransformer
    • 11.9. Transformerによる大規模事前学習
  • 12. 最適化アルゴリズム
    • 12.1. 最適化と深層学習
    • 12.2. 凸性
    • 12.3. 勾配降下法
    • 12.4. 確率的勾配降下法
    • 12.5. ミニバッチ確率的勾配降下法
    • 12.6. モメンタム
    • 12.7. Adagrad
    • 12.8. RMSProp
    • 12.9. Adadelta
    • 12.10. Adam
    • 12.11. 学習率スケジューリング
  • 13. 計算性能
    • 13.1. コンパイラとインタプリタ
    • 13.2. 非同期計算
    • 13.3. 自動並列化
    • 13.4. ハードウェア
    • 13.5. 複数GPUでの学習
    • 13.6. 複数GPUのための簡潔な実装
    • 13.7. パラメータサーバー
  • 14. コンピュータビジョン
    • 14.1. 画像拡張
    • 14.2. ファインチューニング
    • 14.3. 物体検出とバウンディングボックス
    • 14.4. アンカーボックス
    • 14.5. マルチスケール物体検出
    • 14.6. 物体検出データセット
    • 14.7. シングルショット・マルチボックス検出
    • 14.8. Region-based CNNs (R-CNNs)
    • 14.9. セマンティックセグメンテーションとデータセット
    • 14.10. 転置畳み込み
    • 14.11. 完全畳み込みネットワーク
    • 14.12. ニューラル・スタイル変換
    • 14.13. Kaggle における画像分類(CIFAR-10)
    • 14.14. Kaggle における犬種識別(ImageNet Dogs)
  • 15. 自然言語処理: 事前学習
    • 15.1. 単語埋め込み(word2vec)
    • 15.2. 近似学習
    • 15.3. 単語埋め込みの事前学習のためのデータセット
    • 15.4. word2vec の事前学習
    • 15.5. グローバルベクトル(GloVe)による単語埋め込み
    • 15.6. サブワード埋め込み
    • 15.7. 単語の類似性とアナロジー
    • 15.8. Transformerによる双方向エンコーダ表現(BERT)
    • 15.9. BERTの事前学習のためのデータセット
    • 15.10. BERTの事前学習
  • 16. 自然言語処理: 応用
    • 16.1. 感情分析とデータセット
    • 16.2. 感情分析: 再帰型ニューラルネットワークの使用
    • 16.3. 畳み込みニューラルネットワークを用いた感情分析
    • 16.4. 自然言語推論とデータセット
    • 16.5. 自然言語推論: Attention の利用
    • 16.6. 系列レベルおよびトークンレベルのアプリケーションのための BERT のファインチューニング
    • 16.7. 自然言語推論: BERTのファインチューニング
  • 17. 強化学習
    • 17.1. マルコフ決定過程(MDP)
    • 17.2. 値反復
    • 17.3. Q学習
  • 18. ガウス過程
    • 18.1. ガウス過程入門
    • 18.2. ガウス過程の事前分布
    • 18.3. ガウス過程推論
  • 19. ハイパーパラメータ最適化
    • 19.1. ハイパーパラメータ最適化とは何か?
    • 19.2. ハイパーパラメータ最適化 API
    • 19.3. 非同期ランダムサーチ
    • 19.4. マルチフィデリティ・ハイパーパラメータ最適化
    • 19.5. 非同期逐次半減法
  • 20. 生成的敵対的ネットワーク
    • 20.1. 生成的敵対的ネットワーク
    • 20.2. Deep Convolutional Generative Adversarial Networks
  • 21. レコメンデーションシステム
    • 21.1. レコメンダーシステムの概要
    • 21.2. MovieLens データセット
    • 21.3. 行列分解
    • 21.4. AutoRec: オートエンコーダによるレーティング予測
    • 21.5. レコメンダシステムのための個人化ランキング
    • 21.6. パーソナライズドランキングのためのニューラル協調フィルタリング
    • 21.7. シーケンスを考慮した推薦システム
    • 21.8. 特徴豊富な推薦システム
    • 21.9. 因子分解機
    • 21.10. Deep Factorization Machines
  • 22. 付録: 深層学習のための数学
    • 22.1. 幾何と線形代数的操作
    • 22.2. 固有分解
    • 22.3. 単変数微積分
    • 22.4. 多変数微積分
    • 22.5. 積分計算
    • 22.6. 確率変数
    • 22.7. 最尤推定
    • 22.8. 分布
    • 22.9. ナイーブベイズ
    • 22.10. 統計学
    • 22.11. 情報理論
  • 23. 付録: ディープラーニングのためのツール
    • 23.1. Jupyter Notebook の使用
    • 23.2. Amazon SageMaker の使用
    • 23.3. AWS EC2 インスタンスの使用
    • 23.4. Google Colab を使う
    • 23.5. サーバーとGPUの選択
    • 23.6. この本への貢献
    • 23.7. ユーティリティ関数とクラス
    • 23.8. d2l API ドキュメント
  • 参考文献

10.8. ビームサーチ¶

10.7 章 では、エンコーダ–デコーダアーキテクチャと、それらをエンドツーエンドで学習するための標準的な手法を導入した。しかし、テスト時の予測については、各時刻で次に来ると予測される確率が最も高いトークンを選び、ある時刻で特別な文末トークン “<eos>” を予測するまで続ける greedy 戦略だけを述べた。
この節では、まずこの greedy search 戦略を形式化し、実務者がしばしば直面する問題を明らかにする。その後、この戦略を2つの代替手法、すなわち exhaustive search(説明には有用だが実用的ではない)と beam search(実務で標準的な手法)と比較する。

まず、 10.7 章 の慣例を借りて、数学的記法を整えよう。任意の時刻 \(t'\) において、デコーダは、語彙中の各トークンが次に系列に現れる確率(すなわち \(y_{t'+1}\) のもっともらしい値)を表す予測を出力する。これは、直前のトークン \(y_1, \ldots, y_{t'}\) と、入力系列を表現するためにエンコーダが生成した文脈変数 \(\mathbf{c}\) に条件づけられている。計算コストを定量化するために、出力語彙(特別な文末トークン “<eos>” を含む)を \(\mathcal{Y}\) と表す。また、出力系列の最大トークン数を \(T'\) とする。私たちの目標は、\(\mathcal{O}(\left|\mathcal{Y}\right|^{T'})\) 個の可能な出力系列の中から、理想的な出力を探索することである。なお、“<eos>” トークンが現れた後はそれ以降のトークンは存在しないため、この数は異なる出力数をやや過大評価している。しかし、ここではこの数が探索空間の大きさをおおよそ捕えていると考えてよい。

10.8.1. Greedy Search¶

10.7 章 の単純な greedy search 戦略を考える。ここでは、任意の時刻 \(t'\) において、\(\mathcal{Y}\) の中から条件付き確率が最も高いトークンを単純に選ぶ。すなわち、

(10.8.1)¶\[y_{t'} = \operatorname*{argmax}_{y \in \mathcal{Y}} P(y \mid y_1, \ldots, y_{t'-1}, \mathbf{c}).\]

モデルが “<eos>” を出力した時点で(あるいは最大長 \(T'\) に達した時点で)、出力系列は完了する。

この戦略はもっともらしく見えるし、実際それほど悪くはない。計算負荷が非常に小さいことを考えると、費用対効果はかなり高いと言える。
しかし、効率のことを少し脇に置くと、より合理的なのは、(貪欲に選ばれた)最も確率の高いトークン列 ではなく、最も確率の高い系列 を探索することだと思えるかもしれない。ところが、この2つはかなり異なる場合がある。最も確率の高い系列とは、式 \(\prod_{t'=1}^{T'} P(y_{t'} \mid y_1, \ldots, y_{t'-1}, \mathbf{c})\) を最大化する系列である。機械翻訳の例では、デコーダが本当に基礎となる生成過程の確率を復元しているなら、これが最も確からしい翻訳を与えるはずである。残念ながら、greedy search がこの系列を与える保証はない。

例で見てみよう。出力辞書に “A”、“B”、“C”、“<eos>” の4つのトークンがあるとする。 図 10.8.1 では、各時刻の下にある4つの数は、その時刻に “A”、“B”、“C”、“<eos>” を生成する条件付き確率をそれぞれ表している。

../_images/s2s-prob1.svg

図 10.8.1 各時刻で、greedy search は条件付き確率が最も高いトークンを選ぶ。¶

各時刻で、greedy search は条件付き確率が最も高いトークンを選ぶ。したがって、出力系列 “A”、“B”、“C”、“<eos>” が予測される(図 10.8.1)。この出力系列の条件付き確率は \(0.5\times0.4\times0.4\times0.6 = 0.048\) である。

次に、 図 10.8.2 の別の例を見てみよう。 図 10.8.1 とは異なり、時刻2では、条件付き確率が 2番目に高い トークン “C” を選ぶ。

../_images/s2s-prob2.svg

図 10.8.2 各時刻の下にある4つの数は、その時刻に “A”、“B”、“C”、“<eos>” を生成する条件付き確率を表す。時刻2では、条件付き確率が2番目に高いトークン “C” が選ばれる。¶

時刻3は時刻1と2の出力部分系列に基づくため、その部分系列が 図 10.8.1 の “A” と “B” から、 図 10.8.2 の “A” と “C” に変わると、 図 10.8.2 における時刻3の各トークンの条件付き確率も変化する。時刻3でトークン “B” を選ぶとしよう。すると時刻4は、最初の3時刻の出力部分系列 “A”、“C”、“B” に条件づけられるが、これは 図 10.8.1 の “A”、“B”、“C” とは異なる。したがって、 図 10.8.2 における時刻4で各トークンを生成する条件付き確率も 図 10.8.1 とは異なる。その結果、 図 10.8.2 における出力系列 “A”、“C”、“B”、“<eos>” の条件付き確率は \(0.5\times0.3 \times0.6\times0.6=0.054\) となり、 図 10.8.1 の greedy search よりも大きくなる。この例では、greedy search によって得られる出力系列 “A”、“B”、“C”、“<eos>” は最適ではない。

10.8.2. Exhaustive Search¶

最も確からしい系列を得ることが目的なら、exhaustive search を使うことを考えられる。つまり、あり得るすべての出力系列とその条件付き確率を列挙し、その中で予測確率が最も高いものを出力する。

これなら確かに望む結果が得られるが、計算コストは \(\mathcal{O}(\left|\mathcal{Y}\right|^{T'})\) と非常に高く、系列長に対して指数的であり、しかも語彙サイズという巨大な底を持つ。たとえば、\(|\mathcal{Y}|=10000\)、\(T'=10\) のとき、どちらも実用上は小さい数であるが、\(10000^{10} = 10^{40}\) 個の系列を評価する必要があり、これは将来見込まれるどんな計算機の能力をも超えている。一方、greedy search の計算コストは \(\mathcal{O}(\left|\mathcal{Y}\right|T')\) である。驚くほど安価であるが、最適とはほど遠いものである。たとえば、\(|\mathcal{Y}|=10000\)、\(T'=10\) のとき、評価すべき系列は \(10000\times10=10^5\) 個で済む。

10.8.3. Beam Search¶

系列デコードの戦略は連続的なスペクトル上にあると考えられる。その中で beam search は、greedy search の効率と exhaustive search の最適性の間の妥協点を提供する。最も基本的な beam search は、1つのハイパーパラメータ、すなわち beam size \(k\) によって特徴づけられる。この用語を説明しよう。時刻1では、予測確率が最も高い \(k\) 個のトークンを選ぶ。それぞれが、\(k\) 個の候補出力系列の最初のトークンになる。以降の各時刻では、前の時刻の \(k\) 個の候補出力系列に基づいて、\(k\left|\mathcal{Y}\right|\) 通りの候補から、予測確率が最も高い \(k\) 個の候補出力系列を選び続ける。

../_images/beam-search.svg

図 10.8.3 ビームサーチの過程(beam size \(=2\)、出力系列の最大長 \(=3\))。候補出力系列は \(\mathit{A}\)、\(\mathit{C}\)、\(\mathit{AB}\)、\(\mathit{CE}\)、\(\mathit{ABD}\)、\(\mathit{CED}\) である。¶

図 10.8.3 は、例を用いて beam search の過程を示している。出力語彙が5要素、すなわち \(\mathcal{Y} = \{A, B, C, D, E\}\) で、そのうち1つが “<eos>” だとする。beam size を2、出力系列の最大長を3とする。時刻1では、条件付き確率 \(P(y_1 \mid \mathbf{c})\) が最も高いトークンが \(A\) と \(C\) だとしよう。時刻2では、すべての \(y_2 \in \mathcal{Y}\) について、

(10.8.2)¶\[\begin{split}\begin{aligned}P(A, y_2 \mid \mathbf{c}) = P(A \mid \mathbf{c})P(y_2 \mid A, \mathbf{c}),\\ P(C, y_2 \mid \mathbf{c}) = P(C \mid \mathbf{c})P(y_2 \mid C, \mathbf{c}),\end{aligned}\end{split}\]

を計算し、これら10個の値の中から最大の2つ、たとえば \(P(A, B \mid \mathbf{c})\) と \(P(C, E \mid \mathbf{c})\) を選ぶ。すると時刻3では、すべての \(y_3 \in \mathcal{Y}\) について、

(10.8.3)¶\[\begin{split}\begin{aligned}P(A, B, y_3 \mid \mathbf{c}) = P(A, B \mid \mathbf{c})P(y_3 \mid A, B, \mathbf{c}),\\P(C, E, y_3 \mid \mathbf{c}) = P(C, E \mid \mathbf{c})P(y_3 \mid C, E, \mathbf{c}),\end{aligned}\end{split}\]

を計算し、これら10個の値の中から最大の2つ、たとえば \(P(A, B, D \mid \mathbf{c})\) と \(P(C, E, D \mid \mathbf{c})\) を選ぶ。その結果、6つの候補出力系列が得られる。すなわち、(i) \(A\); (ii) \(C\); (iii) \(A\), \(B\); (iv) \(C\), \(E\); (v) \(A\), \(B\), \(D\); (vi) \(C\), \(E\), \(D\) である。

最後に、これら6つの系列に基づいて最終的な候補出力系列の集合を得る(たとえば、“<eos>” を含む部分とその後を破棄する)。そして、次のスコアを最大化する出力系列を選ぶ。

(10.8.4)¶\[\frac{1}{L^\alpha} \log P(y_1, \ldots, y_{L}\mid \mathbf{c}) = \frac{1}{L^\alpha} \sum_{t'=1}^L \log P(y_{t'} \mid y_1, \ldots, y_{t'-1}, \mathbf{c});\]

ここで \(L\) は最終的な候補系列の長さであり、\(\alpha\) は通常 0.75 に設定される。(10.8.4) の和には、長い系列ほど対数項が多く含まれるため、分母の \(L^\alpha\) は長い系列にペナルティを与える。

beam search の計算コストは \(\mathcal{O}(k\left|\mathcal{Y}\right|T')\) である。この結果は、greedy search と exhaustive search の中間に位置する。greedy search は、beam size を1に設定したときに現れる beam search の特殊な場合とみなせる。

10.8.4. まとめ¶

系列探索の戦略には、greedy search、exhaustive search、beam search がある。beam search は、beam size を柔軟に選ぶことで、精度と計算コストのトレードオフを提供する。

10.8.5. 演習¶

  1. exhaustive search を beam search の特殊な種類として扱うことはできるか。なぜか、あるいはなぜできないか。

  2. 10.7 章 の機械翻訳問題に beam search を適用せよ。beam size は翻訳結果と予測速度にどのような影響を与えるか。

  3. 9.5 章 では、ユーザが与えたプレフィックスに続くテキストを生成するために言語モデルを使った。これはどの種類の探索戦略を使っているか。改善できるか。

Table Of Contents

  • 10.8. ビームサーチ
    • 10.8.1. Greedy Search
    • 10.8.2. Exhaustive Search
    • 10.8.3. Beam Search
    • 10.8.4. まとめ
    • 10.8.5. 演習
Previous
10.7. 機械翻訳のためのシーケンス・ツー・シーケンス学習
Next
11. 注意機構と Transformer