Transformer の説明で「RNN と違って並列に計算できる」ってよく出てくる
そもそも RNN って何をしてたん
【疑問】Transformer の前の RNN って、何がダメで置きかえられたん?【AI】
>>1
RNN(再帰型ニューラルネット)は、文を1単語ずつ順に読んで、それまでの内容を1本のベクトル(隠れ状態) にまとめながら進む
は 番目の単語のベクトル、・・ は全部の時刻で共通のパラメータ。 は値を 〜 に押しこむ関数
>>2
前の に新しい単語を混ぜて、また にする、のくり返しか
>>3
そう。いちばん小さい例で、 も も1個の数、、、、 とする
入力が (最初だけ1)なら
>>4
最初の1の情報が、1歩ごとにだいたい半分になってるな
>>5
この例では、 を掛けるたびに小さくなる。何十単語も前の情報は、ほとんど残らない
学習でも同じことが起きる。何十歩も前の単語にまで誤差を伝えるとき、微分を何十回も掛けることになる
>>6
掛け算が続くと小さくなる、ってやつか
>>7
そう。 を で微分すると で、 は1以下。この例なら1歩あたり0.5以下やから、20歩さかのぼると
遠い単語の影響が学習に届かない(勾配消失)。逆に が大きいと、掛け算で爆発することもある
それをどうにかしたのが LSTM?
>>9
LSTM(Hochreiter と Schmidhuber、1997年)は、 とは別に「記憶セル」を持って、ゲートという0〜1の係数で「どれだけ書きこむか」「どれだけ出すか」を学習する
記憶セルは足し算で次の時刻に渡るから、掛け算で細っていかない道ができる。あとから「どれだけ忘れるか」を決めるゲートも加えられた
>>10
それでも Transformer に置きかえられたんやろ
>>11
いちばん大きいのは計算の順番。 を出すには が要るから、100単語の文なら100回、順番に計算するしかない
Transformer の Attention(Vaswani ら、2017年)は、全部の単語の組を一度に計算できる。GPU で並列に回せるから、大量のデータで学習しやすい
>>12
遠い単語の話はどうなったん
>>13
Attention では、どの2単語の間も1回の計算で直接つながる。RNN みたいに、間の単語を全部通って情報を運ばなくていい
>>14
じゃあ RNN にいいところはないん
>>15
ある。1単語進むごとの計算量が、それまでの長さに関係なく一定
Transformer は、新しい単語を1個出すたびに、それまでの全部の単語との Attention を計算するから、長くなるほど1歩が重くなる
>>16
最近、RNN みたいな考え方がまた出てきてるって聞いた
>>17
状態を1本にまとめて順に更新する形のモデル(状態空間モデルなど)が研究されてる。Mamba(Gu と Dao、2023年)がよく知られてる
学習のときは並列に計算できる工夫をしつつ、文を作るときは RNN のように一定の計算で進める、というのがねらい
RNN のパラメータの数は、文の長さで増えるん?
>>19
増えない。全部の時刻で同じ ・・ を使い回してるから
が128次元、 が64次元なら
文が10単語でも1000単語でも、この数は同じ
>>20
同じパラメータを使い回してたら、学習のときの微分はどうなるん
>>21
時刻ごとに出した の微分を全部足す。時間の方向に展開した長いネットに誤差逆伝播法をかけるのと同じで、通時的誤差逆伝播(BPTT)と呼ぶ
順に読むから並列にできん、遠い情報は掛け算で細る。それを LSTM がゆるめて、Transformer は直接つないだ、やな
管理人のひとこと
- RNN は で1単語ずつ順に読み、それまでの内容を隠れ状態にまとめる。パラメータは全時刻で共通なので、文の長さで増えない。
- の例では最初の情報が と細る。微分も掛け算で細り()、遠い単語の影響が学習に届かない(勾配消失)。
- LSTM は記憶セルとゲートで、足し算で情報を渡す道を作った。Transformer は全単語の組を一度に計算でき、並列化しやすく、遠い単語とも直接つながる。
- RNN は1歩の計算量が長さによらず一定という利点があり、状態空間モデル(Mamba など)でこの考え方が再び研究されている。