深層学習day3


1.時系列データに対するニューラルネットワーク

 時間的順序を追って一定間隔ごとに観察され、しかも相互に統計的依存関係が認められるようなデータの系列を時系列データと呼ぶ。時々刻々変化する状態量(音声やテキストも含む)は時系列データに含まれる。
 時系列データの分析上の特徴としては、データそれぞれを独立したものと見なすのではなく、「ある時点のデータが、それ以降に発生するデータに何らかの影響を及ぼしている」と考えることである。時系列データに対するニューラルネットワークは時間的な依存関係を活かした構成となっている。最も基本的なものはRNN(Recurrent Neural Network、再帰ニューラルネットワーク)という。

1-1.RNNの構成

 RNNの構成で特徴的な所は、各層の出力が、次の層の入力としても利用されることである。これは、「ある時点の入力が、それ以降の出力に影響を及ぼす」ことを表している。

f:id:black_07:20210702192710p:plain
RNNの構成
 数式で関係を記述する。
  u^{t} = W_{(in)}x^{t} + Wz^{t-1}+ b
  z^{t} = f(W_{(in)}x^{t} + Wz^{t-1}+ b)
  v^{t} = W_{(out)}z^{t} + c
  y^{t} = g(W_{(out)}z^{t} + c)
  f,gはそれぞれ中間層、出力層への活性化関数

 RNNのネットワークでは、3つの重みがある。
 ・入力から現在の中間層を定義する際にかけられる重み W_{(in)}
 ・中間層から出力を定義する際にかけられる重み W_{(out)}
 ・1つ前の中間層から現在の中間層を定義する際にかけられる重み W

 それぞれの重みの更新式は次の通りとなる。

f:id:black_07:20210702194928p:plain
RNNの重み更新式

 演習問題として、バイナリ(2進数)加算を扱った。RNNにより各桁の繰上りを考慮した2つの数の加算結果を推論していく。

f:id:black_07:20210702201744p:plain
中間層の次元

 中間層の次元は8、16、32あたりが一番早く収束する。4だと収束せず、64だと収束するが、回数がかかる。

f:id:black_07:20210702201854p:plain
重み初期化方法

 従来型が最も早く収束する。

f:id:black_07:20210702201941p:plain
活性化関数

 シグモイドが一番良好、ReLUだと勾配爆発、tanhだと勾配消失により収束しない。

1-2.LSTM(Long Short-Term Memory)

 RNNの問題点は短時間(せいぜい10-100程度)のデータしか処理できないことである。さらに長い時間のデータを利用しようとすると、勾配消失/爆発の問題が発生する。
 LSTMはRNNの勾配消失問題を解決すべく作られた。中間層の単純なニューロンの代わりにLSTMブロックで置き換えることで長期の時間依存性も短期の時間依存性も学習できる。

f:id:black_07:20210702210521p:plain
LSTMの構成
  • CEC(Constant Error Carousel) 誤差を維持することによって、誤差勾配が1と一定になり勾配消失や誤差は発生しない。その反面、ニューラルネットワーク特有の学習特性を持っていない。
  • 入力ゲートと出力ゲート 学習特性を持たせるため入力ゲートと出力ゲートを追加し、それぞれのゲートへの入力値の重みを重み行列W、Uで可変可能とした。
  • 忘却ゲート 過去の情報が要らなくなった(例 劇的な変化が発生した)場合、そのタイミングで情報を忘却させる。
  • 覗き穴結合 CECの値がゲートの制御に用いられていないため、出力ゲートが閉じている状態だと、どのゲートもCECにアクセスすることができない。覗き穴結合はCECの情報が3つのゲートの制御に関与できるようにする構造を指す。

1-3.GRU (Gated Recurrent Unit)

f:id:black_07:20210702214802p:plain
GRUの構成

 LSTMでは、長い時間のデータを利用できる反面、パラメータ数(CEC、入力ゲート、出力ゲート、忘却ゲート)が多く、計算負荷が高くなる問題があった。GRUでは、入力ゲートと忘却ゲートを統合し、「更新ゲート」とまとめることで計算負荷を低減している。

1-4.双方向RNN

f:id:black_07:20210702214954p:plain
双方向RNNの構成

 これまで説明したネットワークは過去の情報だけを扱う前提だが、双方向RNNは未来の情報も加味することが可能なモデルである。当然ながら、未来の情報が分かっていなければ使えないが、文章の推敲や、機械翻訳に適している。

2.RNNによる自然言語処理

2-1.Seq2Seq

 通常のRNNは入力と出力の長さや順序が同じでなければならない。
一方、Seq2Seqはオートエンコーダーと同様、Encoder-Decoderモデルの一種で、入力側と出力側で別々のRNNを使い、情報の縮約をしてから復元を実施する。
機械対話や機械翻訳に使用される。
Encoder RNN
各時刻ごとに時系列データ(文章など)が入力される。
EncoderのRNNレイヤでは、入力シーケンスを処理した結果として内部状態を入力した文の意味を表すベクトルとして返す。

Decoder RNN
ターゲットとなるシーケンスの前の文字が与えられた場合、ターゲットシーケンスの次の文字を予測するように訓練する。

【Decoder RNNの処理手順】
1. Decoder RNN:Encoder RNNのfinal state(thought vector)から、各tokenの生成確率を出力していく。final stateをDecoder RNNのinitial stateとして設定し、Embeddingを入力。
2. Sampling:生成確率に基いてtokenをランダムに選ぶ。
3. Embedding:2で選ばれたtokenをEmbeddingしてDecoder RNNへの次の入力とする。
4. Detokenize:1-3を繰り返し、2で得られたtokenを文字列に直す。

HRED
過去n-1個の発話から次の発話を生成する。
Seq2seqでは会話の文脈無視で応答がなされたが、HREDでは前の単語の流れに即して応答されるため、より人間らしい文章が生成される。
Seq2seqとContext RNN(Encoderのまとめた各文章の系列をまとめて、これまでの会話コンテキスト全体を表すベクトルに変換する構造)を組み合わせた構造により、過去の発話の履歴を加味した応答を生成している。
課題1:確率的な多様性が字面にしかなく、会話の「流れ」のような多様性がない。
→ 同じコンテキスト(発話リスト)を与えられても、答えの内容が会話の流れとしては毎回同じものしか出せない。
課題2:短く情報量に乏しい答えをしがちである。
→ 短いよくある答えを学ぶ傾向がある。

VHRED
HREDにVAEの潜在変数の概念を追加することにより、HREDの課題を解決した構造。

2-2.Word2Vec

 RNNでは、単語のような可変長の文字列をニューラルネットワークに与えることはできない。
word2vecでは学習データからボキャブラリを作成し、「ボキャブラリ数×任意の単語ベクトルの次元数」の重み行列により、大規模データの分散表現の学習を現実的な計算速度とメモリ量で実現可能にした。
結果の数値ベクトルは、生のテキストをデータの視覚化、機械学習、および深層学習に適した数値表現に変換するために使用できる。
 Word2Vecには、skip-gram法(Continuous Skip-Gram Model)とCBOW(Continuous Bag-of-Words Model)のふたつのモデルが内包されている。skip-gram法は、中心のある単語から周辺の単語を予測する手法である。一方、CBOWは周辺の単語から中心語を予測するという逆の手法を取る。

2-3.Attention

 連続したデータを扱う際に過去の重要なポイントに着目する(=Attention)手法を指す。具体的には質問に回答するときに、相手の質問の中の特定キーワードに注目する。

f:id:black_07:20210703095832p:plain
Attentionの具体例

- Seq2SeqとAttentionの違い Seq2Seqでは入力情報をEncoderで圧縮したベクトルをDecoderに伝えるため、入力文章が長いとその情報をDecoderに正確に伝えることが難しくなる。この問題に対して、AttentionではDecode時に入力/出力の相互の関連性について重みを付与した。