ディープラーニング入門 (66) リカレントニューラルネットワーク - ビームサーチ)
序文
核心的な内容はブログリンク1ブログリンク2からです作者をたくさん応援していただければ幸いです
この記事は忘れないための記録用です
リカレント ニューラル ネットワーク - ビーム検索
コースウェア
貪欲な検索
seq2seq では、貪欲検索を使用してシーケンスを予測します。
- 現時点で最も予測確率が高い単語を出力する
しかし、貪欲であることはおそらく最適ではありません。
徹底的な検索
最適なアルゴリズム: 考えられるすべてのシーケンスについて、その確率を計算し、最適なものを選択します。
出力辞書のサイズが n で、最長のシーケンスが T の場合、nT 個のシーケンスを調べる必要があります。
- n = 10000,T= 10: n T = 1 0 40 n^T = 10^{40}nT=1 040
- 計算的に実行不可能
ビームサーチ
最良の k 個の候補を保存する
各時点で、各候補に新しい項目 (n 個の可能性) を追加し、kn 個の選択肢の中から最良の k 個を選択します
要約する
ビーム検索は各検索で k 個の最良の候補を保存します
- k = 1の場合、貪欲検索になります。
- k = nの場合の全探索
教科書
前のセクションでは、特定のシーケンス終了トークン「 」が予測シーケンスに現れるまで、出力シーケンスを 1 つずつ予測しました<eos>
。このセクションでは、まず贪心搜索(greedy search)
この戦略を紹介してその問題点を探り、次に他の代替戦略を比較し穷举搜索(exhaustive search)
ます束搜索(beam search)
。
貪欲検索を正式に導入する前に、前のセクションと同じ数学的表記を使用して検索問題を定義します。いつでもステップt ' t't'、デコーダはyt ' y_{t'}yt「の確率はタイムステップt ' t'に依存します。t'前の出力サブシーケンスy 1 , … , yt ' − 1 y_1, \ldots, y_{t'-1}y1、…、yt' −1そして、入力シーケンス\mathbf{c}の情報をエンコードして得られるコンテキスト変数 cc . 計算コストを定量化するには、Y \mathcal{Y}Y は" " を含む出力語彙を表します<eos>
。したがって、この語彙セットの基数は∣ Y ∣ \left|\mathcal{Y}\right| となります。∣ Y ∣は語彙のサイズです。また、出力シーケンスのトークンの最大数をT'T'T'。したがって、私たちの目標は、すべてのO ( ∣ Y ∣ T ' ) \mathcal{O}(\left|\mathcal{Y}\right|^{T'}) から開始することです。O ( ∣ Y ∣T' )を使用して、可能な出力シーケンスの中から理想的な出力を見つけます。もちろん、すべての出力シーケンスについて、<eos>
実際の出力では「 」以降の部分(この文ではない)は破棄されます。
1 貪欲な検索
まず、簡単な戦略を見てみましょう。貪欲検索です。これは、前のセクションでシーケンス予測に使用されました。出力シーケンスのタイム ステップごとに、貪欲検索に基づいて条件付き確率が最も高いトークンを見つけます。つまり、
yt ' = argmax y ∈ YP ( y ∣ y 1 , … , yt ' − 1 , c ) y_ {t'} = \operatorname*{argmax}_{y \in \mathcal{Y}} P(y \mid y_1, \ldots, y_{t'-1}, \mathbf{c})yt「=y ∈ Y引数最大P (と∣y1、…、yt' −1、c )
出力シーケンスに " <eos>
" が含まれるか、その最大長T ' T'に達すると、T’と表示されたら出力は完了です。
図に示すように、<eos>
出力に 4 つのトークン「A」、「B」、「C」、および「」があるとします。各タイム ステップの下にある 4 つの数字は、<eos>
それぞれそのタイム ステップで「A」、「B」、「C」、および「 」を生成する条件付き確率を表します。各タイム ステップで、貪欲検索は条件付き確率が最も高いトークンを選択します。したがって、グラフでは出力シーケンス「A」「B」「C」「」が予測されます<eos>
。この出力シーケンスの条件付き確率は、0.5 × 0.4 × 0.4 × 0.6 = 0.048 0.5\times0.4\times0.4\times0.6 = 0.0480.5×0.4×0.4×0.6=0.048。
それでは、貪欲検索の問題は何でしょうか? 実際には、最优序列(optimal sequence)
最大化する必要があります∏ t ' = 1 T ' P ( yt ' ∣ y 1 , … , yt ' − 1 , c ) \prod_{t'=1}^{T'} P(y_{t' } \mid y_1, \ldots, y_{t'-1}, \mathbf{c})∏t' =1T「P (とt「∣y1、…、yt' −1、c )値の出力シーケンス。入力シーケンスに基づいて出力シーケンスを生成する条件付き確率です。ただし、貪欲検索では最適なシーケンスを保証することはできません。
上の画像の別の例は、この問題を示しています。前の図とは異なり、タイム ステップでは、条件付き確率が 2 番目に高い図 2 のトークン「C」を選択します。タイム ステップおよびタイム ステップの基になる出力サブシーケンスが、図 1 の「A」および「B」から図 9.8.2 の「A」および「C」に変化したため、各タイム ステップの条件付き確率図2ではトークンの数も変更されています。タイム ステップで単語 "B" を選択すると仮定すると、現在のタイム ステップは、条件として最初の 3 つのタイム ステップの出力サブシーケンス "A"、"C"、および "B" に基づきます。これは次と同じです。図1の「A」B」と「C」は異なります。したがって、図 2 のタイム ステップで各トークンが生成される条件付き確率も、図 1 とは異なります。その結果、<eos>
図 2 の出力シーケンス「A」、「C」、「B」、「 」の条件付き確率は、0.5 × 0.3 × 0.6 × 0.6 = 0.054 0.5\times0.3 \times0.6\times0 となります。 6=0.0540.5×0.3×0.6×0.6=0.054。これは、図 1 の貪欲検索の条件付き確率よりも大きくなります。この例は、貪欲検索によって得られた<eos>
"
2 徹底検索
目的が最適なシーケンスを取得することである場合、次の使用を検討できます穷举搜索(exhaustive search)
。 考えられるすべての出力シーケンスとその条件付き確率を徹底的に列挙し、出力の条件付き確率が最も高いものを計算します。
全数探索を使用して最適な系列を求めることもできますが、計算量O ( ∣ Y ∣ T ' ) \mathcal{O}(\left|\mathcal{Y}\right|^{T'})O ( ∣ Y ∣T)は驚くほど高くなる可能性があります。たとえば、∣ Y ∣ = 10000 |\mathcal{Y}|=10000∣ Y ∣=10000およびT' = 10 T'=10T』=10では、 1000 0 10 = 1 0 40 10000^{10} = 10^{40}を評価する必要があります。1000 010=1 040数列、これは膨大な数であり、既存のコンピューターで計算することはほとんど不可能です。ただし、貪欲探索の計算量O ( ∣ Y ∣ T ' ) \mathcal{O}(\left|\mathcal{Y}\right|T')O ( ∣ Y ∣T' )は、全数検索よりも大幅に小さくなります。たとえば、∣ Y ∣ = 10000 |\mathcal{Y}|=10000∣ Y ∣=10000およびT' = 10 T'=10T』=10 の場合、 10000 × 10 = 1 0 5 10000\times10=10^5 を評価するだけで済みます。10000×10=1 05つのシーケンス。
3ビームサーチ
それでは、どの配列検索戦略を選択すべきでしょうか? 精度が最も重要である場合は、明らかに徹底的な検索が必要です。計算コストが最も重要である場合は、明らかに貪欲な検索が必要です。ビームサーチの実際の応用は、これら 2 つの両極端の中間のどこかにあります。
束搜索(beam search)
貪欲検索の改良版です。kというハイパーパラメータがあります束宽(beam size)
。タイム ステップ 1 では、条件付き確率が最も高い k 個のトークンを選択します。これらの k 個のトークンは、それぞれ k 個の候補出力シーケンスの最初のトークンになります。後続の各タイム ステップでは、前のタイム ステップからの k 個の候補出力シーケンスに基づいて、 k ∣ Y ∣ k\left|\mathcal{Y}\right|から進みます。k∣ Y ∣ は、可能な選択肢の中から条件付き確率が最も高い k 個の候補出力シーケンスを選択します。
上の図は、ビーム探索のプロセスを示しています。出力語彙に 5 つの要素のみが含まれているとします。Y = { A , B , C , D , E } \mathcal{Y} = \{A, B, C, D, E\}Y={
A 、B 、C 、D 、E }、そのうちの 1 つは "<eos>
" です。ビーム幅を 2 に設定し、出力シーケンスの最大長を 3 に設定します。タイム ステップ 1 では、仮説の条件付き確率P ( y 1 ∣ c ) P(y_1 \mid \mathbf{c}) がP (と1∣c )の補題はタイムステップ 2 では、すべてのy 2 ∈ Y y_2 \in \mathcal{Y}を計算します。y2∈Y1 :
P ( A , y 2 ∣ c ) = P ( A ∣ c ) P ( y 2 ∣ A , c ) 、P ( C , y 2 ∣ c ) = P ( C ∣ c ) P ( y 2 ∣ C , c ) , \begin{split}\begin{align}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\midC,\mathbf{c}),\end{aligned} \end {スプリット}P ( A 、y2∣c )=P ( A∣c ) P ( y2∣あ、c ) 、P ( C ,y2∣c )=P ( C∣c ) P ( y2∣C 、c )、
これら 10 個の値から最大の 2 つを選択します (例: P ( A , B ∣ c ) P(A, B \mid \mathbf{c})P ( A 、B∣c )和P ( C , E ∣ c ) P(C, E \mid \mathbf{c})P ( C ,E∣c )。次に、タイム ステップ 3 で、すべてのy 3 ∈ Y y_3 \in \mathcal{Y}を計算します。y3∈Y は次のとおりです。
P ( A , B , y 3 ∣ c ) = P ( A , B ∣ c ) P ( y 3 ∣ A , B , c ) , P ( C , E , y 3 ∣ c ) = P ( C , E ∣ c ) P ( y 3 ∣ C , E , c ) , \begin{split}\begin{align}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{align}\end{split}P ( A 、B 、y3∣c )=P ( A 、B∣c ) P ( y3∣あ、B 、c ) 、P ( C ,え、y3∣c )=P ( C ,E∣c ) P ( y3∣C 、え、c )、
これら 10 個の値から最大の 2 つを選択します。つまり、P ( A , B , D ∣ c ) P(A, B, D \mid \mathbf{c}) です。P ( A 、B 、D∣c )和P ( C , E , D ∣ c ) P(C, E, D \mid \mathbf{c})P ( C ,え、D∣c )の場合、6 つの候補出力シーケンスが得られます: (1) A; (2) C; (3) A, B; (4) C, E; (5) A, B, D; (6) C, E 、D.
最後に、これら 6 つのシーケンスに基づいて (たとえば、<eos>
「 」以降を含む部分を破棄して)、最終的な出力候補シーケンスのセットを取得します。次に、条件付き確率の積が最も高くなるシーケンスを出力シーケンスとして選択します。
1 L α log P ( y 1 , … , y L ∣ c ) = 1 L α ∑ t ′ = 1 L log P ( yt ′ ∣ y 1 , … , yt ′ − 1 , c ) , \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ある1ログ_P (と1、…、yL∣c )=Lある1t' =1∑Lログ_P (とt「∣y1、…、yt' −1、c ) 、
ここでLLLは最終候補シーケンスの長さ、α \alphaαは通常0.75 0.750.75。シーケンスが長くなると、上記の式の合計に対数項が多く含まれるため、L α L^\alphaLα は、長いシーケンスにペナルティを与えるために使用されます。
ビーム探索の計算コストは O ( k ∣ Y ∣ T ' ) \mathcal{O}(k\left|\mathcal{Y}\right|T')お( k∣ Y ∣T' ) の場合、結果は貪欲検索と網羅的検索の間になります。実際、貪欲探索は、ビーム幅 1 の特殊なタイプのビーム探索とみなすことができます。ビーム幅を柔軟に選択することにより、ビーム探索は精度と計算コストの間でトレードオフを行うことができます。
4 まとめ
-
シーケンス検索戦略には、貪欲検索、網羅的検索、およびビーム検索が含まれます。
-
貪欲探索によって選択されたシーケンスは計算量が最も少ないですが、精度は比較的低くなります。
-
全数探索により選択された配列は精度が最も高くなりますが、計算量は最も多くなります。
-
ビームサーチでは、ビーム幅を柔軟に選択することで、精度と計算コストの間のトレードオフを行います。