深層学習day3 Section7:Attention Mechanism
要点まとめ
seq2seq では最終的なthroughout vectorが固定長であるため、長い文章になると意味を正しく表現できない問題がある。文章の長さに応じて出力するベクトル長が変化する仕組みが必要となる。 そのため Attention Mechanismが発明され、どの単語が重要なのかを判断して中間層を更新する仕組みがある。このことで、固定長ベクトルでもより適切な表現を中間層として保持することが可能になっている。
実装演習
実装演習なし
確認テスト等考察
RNN:Recurrent Neural Networkは時系列データを扱うために、時間軸で情報を関連付ける仕組みを持ったNN。
word2vec:単語をone-hot-vectorではなく、embedded表現とすることで、より小さなサイズで自然言語を扱えるようにする表現方法。
seq2seq:embedded表現のベクトルを入力として内部の隠れ層を更新するEncoderと、隠れ層から一文を作成するDecoderとからなる、自然言語用のネットワーク。
Attention:seq2seqで隠れ層の更新を行う際に、各単語の重要度・関連度により更新量に重みを付けることで、固定長ベクトルでもより適切な内部表現を作成する仕組み。
追加演習
ぜろつく②の8章 Attentionの実装を実施。 Attentionを適用することで、2回のEPOCHで十分なAccuracyを得ることができる。
深層学習day3 Section6:word2vec
要点まとめ
単語を機械学習が扱えるベクトルに変換するときに、one-hot-vectorだと単語の数だけの要素数になってしまい、数万という要素数になってしまう。これを、embedding表現にすることで要素数が数百のベクトルで表現するようにする手法をword2vecという。
word2vecを用いてサイズの小さなベクトルに変換することで、事前言語を現実的な計算速度で扱えるようになった。
実装演習
なし
確認テスト等考察
単語を個別の単語として扱うone-hot-vectorではなく、単語を意味として扱うembedding表現とすることで、より小さなサイズで自然言語で表現することを可能にしている。
追加演習
ぜろつく②の3章でCBOWの実装を実施。
深層学習day3 Section5:seq2seq
要点まとめ
seq2seqとは機械翻訳等に用いられる自然言語用のネットワーク。 2つのネットワークから成り、1つ目は入力から隠れ層のベクトル表現に変換する。(Encoder)
2つ目は隠れ層のベクトル表現を別の表現に変換する。(Decoder)
Encoder RNN
自然言語を機械翻訳への入力するためには、文章を単語で区切りone-hotベクトルで表現すると単語の数(1万~数10万)程度になるが、あまりに大きすぎる。これを小さな情報量で表現するために、embedding表現という 意味を表現する数百程度のベクトルで表現する。
実際の学習ではembedding表現のベクトルを入力として隠れ層を更新していき、最後の入力で更新された後の隠れ層をfinal stateとしてとっておく。final state がthroughout vectorと呼ばれ、入力した文の意味を表すベクトルとなる。
単語をembedding表現に変換する方法は人間がラベル付けを行うのではなく、機械学習で行う。 googleが開発したBERTというものがあり、MLM(Masked Language Model)という、ある文の一部の単語を推測するようなモデルを学習させることでemgedding表現への変換を教師なし学習で行うことができる。
Decoder RNN
Encoderが作成した隠れ層から別の文章を生成する機能のこと。
HRED
seq2seqは入力一文、出力一文の応答しかできないという問題があり、前後の文脈は関係がなかった。 seq2seqの入力に対して得られた隠れ層を次の入力の隠れ層に引き継ぐことで、過去の発話を加味した応答ができることを期待したもの。しかし、応答がワンパターンで短くなりがちという欠点があった。
VHRED
VHREDはHREDに対して、VAEの潜在変数の概念を導入したもの。 平均0分散1の情報になる。
オートエンコーダー
元々画像認識で用いられたもので、入力画像をより小さい情報に変換するエンコーダーと、元の画像に戻すデコーダーを教師なし学習させるもの。に次元削減する機能といえる。
実装演習
講義ビデオ中に無し。
確認テスト等考察
1が双方向RNN、2がseq2seq、3が構文木、4がLSTMを指している。
追加演習
ゼロつく2の7章にある、seq2seqを写経実施。
深層学習day3 Section3:GRU
要点まとめ
LTSMでは演算負荷が大きく、学習時間がかかってしまうのが問題だった。
GRU (Gated Recurrent Unit)は演算量を削減して改善したもの。
数式
入力対する重み、前回の出力に対する重みを用いて、
リセットゲートの出力
活性化関数を通すと、
また、更新ゲートの出力は、
これらから、次の出力を計算する。
実装演習
predict_wordを流して確認。
確認テスト等考察
LSTMは部品の数が多い。その背景として、CECが記憶機能だけで学習機能を持たない。そのため入力ゲートや出力ゲートなどの機能を使用する必要があり、演算量を増加させていた。
深層学習day3 Section1:再帰型ニューラルネットワークの概念
要点まとめ
RNNの概要
再帰型ニューラルネットワーク (RNN=Recurrent Neural Network)とは、時系列データのように時間的な繋がりを持つデータを扱うためのネットワーク。
時系列データの代表例としては、音声データ・テキストデータ等がある。
通常のNNでは入力→中間層→出力という構成だが、中間層への入力に対して一つ前の時系列データの中間層からを入力とすることで、時間軸の繋がりを持つ構成にしたものをRNNという。
RNNの数学的な記述
は活性化関数を通す前、活性化関数を通したものを という中間層となる。
出力側も同様に、活性化関数を通す前を、活性化関数を通した後の出力をとしている。
誤差逆伝播の記述
BPTT(Back Propergation Through Time)の式は前記のRNNの式を微分を用いるが、かなり複雑。
パラメータの更新式は
実装演習
バイナリ加算についてのRNNの結果を確認。
確認テスト等考察
現在の中間層への、前の中間層からの入力にも重みがあるのがRNNの特徴である。
深層学習day3 Section2:LSTM
要点まとめ
RNNは時系列を遡るほど勾配が消失していき、長い時系列の学習が困難である。特に活性化関数にシグモイド関数を用いると、シグモイド関数の微分の最大値が0.25なので、勾配消失問題が発生しやすくなる。
LSTM(Long Short Term Memory)は、勾配消失問題を発生しにくいようにした学習器である。
勾配消失や勾配爆発が起きないようにするためには、時間をいくら遡っても勾配が1であれば勾配は消失も爆発もしなくなる。 数式で表現すると、
CEC
Constant Error Carousel. 過去の入力層や中間層を全て記憶するための部品。 重みが一律であるため、学習機能は存在しない。
入力ゲートと出力ゲート
入力ゲートは入力層からの入力に対して重みを掛けたものと、前回の出力値に対して重みを掛けたものを用いて、CECに対して出力には重みを掛けて出力する。 出力ゲートも同様に入力層からの入力に対して重みを掛けたものと、前回の出力値に対して重みを掛けたものを用いて出力する。
忘却ゲート
過去の情報を不要になったタイミングで情報を忘却する機能。
覗き穴結合
入力ゲートや出力ゲートに対してもCECの情報を用いたら良いのではないかということで、試みられたがあまり効果が無かった。
実装演習
確認テスト等考察
シグモイド関数の微分の最大値は0.25。 これは、シグモイド関数の微分を考えると明らか。