今やChat GPTについて知らない人はいないんじゃないか?って思えるぐらい有名になりました。しかし、何でこんな物が突然現れたのか不思議に思う方も多いのではないでしょうか?そこで、Chat GPTが登場するまでの様々な技術について、数式は使わずに平易に解説していくシリーズとして「Chat GPT はどうやって生まれてきたのか?」を連載しています。今回はその5回目となります。第3回の終わりに予告したとおり、時系列処理と機械翻訳と題して、RNN,LSTM,GRUとseq2seqについて解説します。
1. GPTって何の略?
これまで、第1回では「ディープラーニング」,第2,3回で「AlexNet」,第4回で「word2vec」を取り上げてきました。AlexNetは画像系の技術ですが、ディープラーニングの火付け役として重要なのでとりあげました。画像系においてAlexNet以降も様々な新しい技術が登場していますが、このシリーズではChat GPTに焦点を絞りますますので、今後は画像系の話題は出てこない予定です。
ところで、Chat GPTのGPTって何の略でしょうか?御存知の方もおられると思いますが、Generative Pre-trained Transformer の略です。ここで出てくる Transformer は、自然言語処理で利用されるモデルの名前です。Transformer は、その名前からわかるように、元々は機械翻訳のために作られたものなのです。そこで、今回はニューラルネットを使った機械翻訳の始まりについて取り上げてみたいと思います。
なお、「自然言語」という言葉に馴染みのない方は、普通に「言語」に読み替えて頂いて大丈夫です。コンピュータに指示するための「プログラミング言語」が登場したので、これと区別するために、従来の人間どうしの会話のための「言語」を「自然言語」と呼ぶようになっただけです。「携帯電話」の登場によって、それまでの普通の「電話」を「固定電話」と呼ぶようになったのと同じですね。ちなみに、このような言葉を「レトロニム」と呼びます。
2. ニューラルネットによる時系列処理と機械翻訳
AlexNetのように画像を扱う場合は、入力画像のサイズを合わせておく事ができたのですが、ニューラルネットを機械翻訳に使おうとすると、文により長さが異なるという問題がありました。そのため、最初はRNN(Recurrent Neural Network)が利用されました。RNNは日本語では「再帰型ニューラルネット」と呼びます。このRNNですが、元々は時系列処理のために考え出されたもので、研究は1990年代まで遡ります。
ここでは、時系列処理から順に説明していきます。
2.1 時系列処理
時系列データを扱うのが時系列処理です。時系列データというのは、時間の経過順に並んだデータのことで、例えば、店舗の売上、株価、気温・降水量、Webサイトへのアクセス数などがあります。
時系列処理では、一般に過去のデータから将来の値を予測することが求められます。ニューラルネットを使わない統計的予測モデルを以下に示します。
AR(自己回帰)モデル Auto Regressive model
MA(移動平均)モデル Moving Average model
ARMA(自己回帰移動平均)モデル Auto Regressive Moving Average model
ARIMA(自己回帰和分移動平均)モデル Auto Regressive Integrated Moving Average model
SARIMA(季節変動自己回帰和分移動平均)モデル Seasonal ARIMA model
ここでは、各モデルの説明は省略しますが、現在の値と過去の値の関係を数式(モデル)で表し、当てはめによって数式の各係数を決定することによって予測式を作成します。この予測式を使って将来の値を予測します。
2.2 RNN(Recurrent Neural Network)
RNNは、時系列処理用に考案されたニューラルネットです。過去の値を参照できるようにループ構造を持たせているのが特長です(図1)。図中のxtytはそれぞれ入力と出力を示します。htはytを算出するための内部の値で、隠れ状態と呼びます。なお、添え字のtは時間を表します。
一般のニューラルネットと同様に、入力に対する正解があれば学習できます。学習には、本来ならRNN用に考案されたBPTTを使うのが正しいはずですが、簡略化して一般のバックプロパゲーション(誤差逆伝播法)で代用する場合もあります。バックプロパゲーションに関しては第1回(ディープラーニング)で少し触れましたので、そちらも参考にしてください。
BPTT(Back-Propagation Through Time) RNNにおいて、バックプロパゲーションの考え方をループを遡って適用させる手法です。1990年代に発表されました。
2.3 LSTMとGRU
RNNは時間方向に深い(ディープな)ニューラルネットと捉えることができます。このため、一般のニューラルネットと同様に勾配消失現象に直面し、かなり前の情報をうまく扱うことができませんでした。この弱点の解消をねらったのが、LSTM(Long Short-Term Memory)やGRU(Gated Recurrent Unit)です。以降では、それぞれについて説明していきます。なお、勾配消失現象については、第1回(ディープラーニング)でも触れましたので、そちらも参考にしてください。
2.3.1 LSTM(Long Short-Term Memory)
LSTMはRNNに記憶セルと3つのゲートを追加して長期の記憶ができるようにしたものです。
図2(右)にLSTMの構成図を示します。図中ⓕⓘⓞは、それぞれ、forget gate, input gate, output gate の学習部分で、⨂はゲートの実行部分です。破線で囲んだ部分がそれぞれ1つのゲートを構成しています。ⓕⓘⓞの出力は0~1の値をとり、0(全閉)~1(全開)でゲートを開閉するイメージとなります。⨁は流入したデータを足し合わせます。
図2(中)に各ゲートの学習部分を消去した図を、比較のために図2(左)にRNNの構成図を示します。図中のCtが記憶セルで、これが長期記憶を担います。動作の概要を説明すると、まず forget gate で必要とあれば長期記憶を忘れます。これは、突然データの傾向が変化したときなどに過去を忘れることが必要な場合があるからです。次に、ⓖが算出した新しい結果を input gate で調整して長期記憶と足し合わせ、これが新しい長期記憶の値となります。長期記憶には残しても短期的には不要なものもあるので、output gate で調整して新しいhtとし、次に送ります。また、図ではhtをそのまま出力ytとしています。
詳しく説明してきませんでしたが、htやCt,xt,ytもベクトルです。ゲートによるコントロールはベクトルデータの各要素に対して個別に作用できます。例えば、forget gate で、ある特定の要素だけは忘れて、他の要素は忘れないという動作が可能です。
2.3.2 GRU(Gated Recurrent Unit)
LSTMは性能は良いのですが、計算量が多いのが難点でした。構成を簡略化して計算量を減らしたのがGRUです。記憶セルを廃止し、ゲートの数を3つから2つに減らしてあります。GRUの構成を図3(右)に示します。図中、ⓡは reset gate,ⓤは update gate の学習部分です。update gate は、過去の隠れ状態と新しく計算した結果の配合比率を決めています。
なお、GRUの性能はLSTMとほぼ同じという比較結果がでています。
2.4 ニューラルネットによる機械翻訳
文章は単語の並びですが、時間とは関係がないので「時系列データ」とは言わず、単に「系列データ」と呼びます。文章を系列データとしてRNNやLSTMなどで処理することで、語順を考慮できるようになり、ニューラルネットによる機械翻訳が実現できます。
2012年のAlexNet登場以来ディープラーニングに注目が集まっており、機械翻訳にもディープラーニングを使う研究が盛んになりました。そして、2014年に英語-フランス語の機械翻訳において、従来の統計的機械翻訳の性能に追いついたとして、下記の論文が発表されました。(当時の最高峰には僅かに及びませんでしたが、フレーズベース統計的機械翻訳のベースラインは大幅に超えました)
タイトル:Sequence to Sequence Learning with Neural Networks(2014年)
著者:Ilya Sutskever, Oriol Vinyals, Quoc V. Le
所属:Google
主著者は、連載第3回でも注目したイリヤ・サツケバーです。以下では、この論文について説明します。
2.4.1 seq2seq
seq2seqとは、「系列データを入力すると系列データが出力される」という意味の、Sequence to Sequencを簡略化した表記です。ここでは、この論文で発表されたモデルをseq2seqと呼ぶことにします。
図4はseq2seqの概念図です。A,B,C,<EOS>を入力するとW,X,Y,Z,<EOS>が出力されることを示しています。なお、<EOS>は end of sentence の略で、文の終わりを示します。
図4はseq2seqの考え方をシンプルに表した概念図で、以下の3点が実際とは違っています。
EncoderとDecoderに分かれている
4層Stacked LSTMを使用している
入力単語は逆順に入れる
以降で、順に説明していきます。
2.4.1.1 EncoderとDecoderに分かれている
図4では区別されていませんが、英語をベクトルに変換するLSTM(Encoder)とベクトルをフランス語に変換するLSTM(Decoder)に分かれています。Encoder-Decoderモデルと呼ばれる構成で、seq2seq発表以前からニューラルネット機械翻訳で利用されています。Decoder はそれまでの単語系列から次の単語を予測するモデルを構成しています。Encoder が作成した英文全体を表現しているベクトル(LSTMなのでhtとCt)を初期状態とすることで、その内容をフランス語の単語系列に変換します。
2.4.1.2 4層Stacked LSTMを使用している
浅いLSTMよりも深いLSTMの方が圧倒的にパフォーマンスに優れていたため、Encoder, Decoder共にLSTMを4層分重ねたStacked LSTMを使用しています。
2.4.1.3 入力単語は逆順に入れる
実験により、⼊⼒⽂の単語の順序を逆にすることが非常に有益であることがわかったため、実際には入力単語を逆順に入れます。
2.4.1.4 seq2seq のまとめ
seq2seqについて、その他のスペックを以下にまとめます。
翻訳: 英語→フランス語
単語数: 英語16万語 フランス語8万語 それ以外の単語は「UNK」に統一
単語埋め込みの次元: 1000次元
単語埋め込み(embedding): 単語を分散表現にすること。分散表現については、本連載の前回(第4回)記事を参照してください。
学習用データ数: 1200万文
構成:初期値とトレーニング順の異なる5種類の4層Stacked LSTMのアンサンブル
アンサンブル(ensemble):複数のモデルを学習させて多数決(や平均)で予測値を出すこと
「5種類でアンサンブル」という点で、力業(ちからわざ)感が否めないですが、シンプルなモデルでここまでできる事を示しています。この後、グーグル翻訳もニューラルネット翻訳が採用されるようになり、以下の論文で紹介されています。
3. まとめ
今回は、「時系列処理と機械翻訳」と題して、RNNやLSTMなどの再帰型ニューラルネットについて解説し、ニューラルネットを使った機械翻訳の基礎について説明しました。次回は、「seq2seq + attention」 と題してattentionの始まりについてお届けする予定です。