Coursera Deep Learning専門講座の受講メモ (コース5 - Sequence Models - Week 3)

この記事のまとめ:
  • CourseraのDeep Learning専門講座コース5: Sequence ModelsのWeek 3の受講メモとして、要点とよくわからなかったところを補完のために調べたことなどを備忘録としてまとめています。
  • Week 3ではSequence to sequenceモデルとして、機械翻訳、音声認識の応用を学びます。

コース3:Structuring Machine Learning Projectsについて

3週間の内容は次の通りです。

Week 3の概要

このコースのWeek 3では、下記のことについて学びます。

  • Sequence to sequenceモデルとして、機械翻訳、音声認識の応用
  • Beam searchアルゴリズム
  • 長期記憶のためのAttention Model
Sequence to sequenceモデル

Sequence to sequenceモデルは機械翻訳や音声認識に役立つモデルです。

機械翻訳で使われるSequence to sequenceモデルのアーキテクチャの一つとして、次のようなネットワークがあります。

エンコーダー部とデコーダー部に分かれ、各ブロックはGRUやLSTMが使われます。エンコーダー部では翻訳したい元の言語の文章を入力し、デコーダー部で翻訳結果が出力されます。

Week 1で扱った言語モデルと機械翻訳モデルとの違いはエンコーダー部のみです。つまり機械翻訳モデルはConditional言語モデルといえます。

具体的には、言語モデルは下式で表せるモデルです。

それに対して、機械翻訳は下式で表せるモデルです。

これを最適化する手法として、最も共通的に使われるアルゴリズムとしてBeam Searchアルゴリズムがあります。

Beam search アルゴリズム

から までの単語を辞書から選んでくる際に、次のように選択します。

  1. が最も大きい 個候補として挙げる。
  2. 1.で候補に挙げたそれぞれの に対して、 が最も大きい の組み合わせを 個候補として挙げる。
  3. 2.で候補に挙げたそれぞれの の組み合わせに対して、 が最も大きい の組み合わせを 個候補として挙げる。
  4. まで繰り返し。

ここで はビーム幅と呼ばれます。一般化すると次のように表現できます。

なお、この計算では値は非常に小さくなり、浮動小数点演算上、アンダーフローを起こしてしまう可能性があります。つまり、極端に短い文章を出力する可能性があります。そのため、次のように変換すると安定することがわかっています。

なお、 はハイパーパラメーターで、 などが使われます。

ビームサーチアルゴリズムを学ぶ際、下記も参考になります。

なお、ビーム幅が1のとき、ビームサーチアルゴリズムは、貪欲法 (Greedy algorithm)と同じになります。

画像のキャプション付け

機械翻訳に似たアーキテクチャとして、画像のキャプション付けのモデルがあります。AlexNetの最後のSoftmax層をなくして、RNNのOne-to-manyモデルの入力として使います。これがエンコーダー部として働き、デコーダー部ではキャプションの文章が出力されます。

Attention Model

これまで扱ってきたモデルで機械翻訳を行おうとすると長文での翻訳精度が非常に低くなるという問題があります。これはRNNが長期記憶できないことによる影響です。そこでAttention Modelという新しいニューラルネットワークについてみていきます。

がどのくらい に注意を払うかを示す量です。なお、次の値を取ります。

このようなネットワークとすることでより、長い文章でも記憶することができ、長文を人間が翻訳する考え方に近い機械翻訳が可能になります。

をどのように決めるかどうかは適切な方法があるというわけではありません。ニューラルネットワークを構築して勾配法で最適化する方法もひとつです。

Speech Recognition

音声認識においては、生の音声データを事前にスペクトグラムに変換しておくことが一般的です。これは人間の耳ですらそのようにしているためです。

また音声認識においてもう一つの共通的なトレンドとして、音素 (Phoneme)で認識することです。

CTC cost (Connectionist Temporal Classification)

CTCコスト関数ではRNNの入力と出力の長さが同じRNNを扱います。一般的にはRNNとして双方向GRUや双方向LSTMの深層モデルを使います。しかし、入力は音声データに対して出力は文字ですので、通常入力に対して出力の長さは短いです。CTCコスト関数ではRNNの出力として、候補となる文字を続けて出力することと、ブランク文字"_"を許容します。ブランク文字は空白文字とは異なる文字として扱います。例えば、"the quick brown fox"という文章に対して、"ttt_h_eee___ ____qqqq____…"といったように出力することを許容します。そして、重複した文字は取り除いて認識させるようにします。

Trigger word detectionは現在でも発展しており、使用するべきアルゴリズムのコンセンサスはありません。


今回は以上です。 最後まで読んでいただき、ありがとうございます。
CourseraのDeep Learning専門講座の他のコースの受講メモ

コメント

このブログの人気の投稿

LinuxでのnVidia GPUのオーバークロック・電力チューニング方法