GPT
https://gyazo.com/054a17d116b4e7513b0cdd46b21c6b78
ビジネスの現場で、よく使われる、Excel、CSV、固定長ファイル、RDBにあるデータなどは古くはデータマイニングと呼ばれている時代から統計処理によく使われていました。数値データやカテゴリカルなデータがメインのため、これらのデータは簡単に統計関数に入力できます。
え、Excelとか(あと書いてないけどPDFなども入ると思ってる)って学習データとして使われてきたの?sta.icon
解析できないし無理じゃない?そうでもないん?
それとも手作業で頑張って入れてるん?
いかに数字に変換するか
GPT、ひいては自然言語処理のお話を突き詰めると、結局は「文章というデータをどのようにベクトルに変換するか」というのが本質なように思います。
ニューラルネットワークは人間の脳内で起こっている生体現象を数理モデルに落とし込んだアルゴリズムとして有名ですが、目的に応じた様々なタイプのネットワークが開発されています。
CNN、GAN、RNNなどがある
GPTもRNNが前進
RNN
RNNは主に、自然言語の深層学習に効果を発揮するアルゴリズムです。入力された文章を単語に区切り、その単語をニューラルネットワークで計算し、その計算結果を次の単語の計算に利用するという処理を文章の全ての単語に再帰的(Recurrent)に繰り返すニューラルネットワークということでRNN(Recurrent Neural Network)と呼ばれています。
並列処理できない
短文をいくら理解しても長文を書けるようにはならない
長文を書くためには「短文の集合」以上の何かがあるが、それがRNNにはない
ここでは関係代名詞という文法を例にしているsta.icon
Transformer
で、RNN改良してて「もうRNNやめればいいじゃね?」となって、改良に使っていた一要素をメインに据えた
GPTもTransformer
Generative ⇒ 生成的という意味を持ち、文章生成能力が高いということを指しています。
Pretrained ⇒ 事前学習済み、つまり、Open AI社によって、膨大な学習データで既に学習済のモデルだということを指しています。
Transformer ⇒ その学習がTransformerで行われたということで
https://gyazo.com/097d912a2f887478f869b028d1707568
GPT
GPTとは、「入力された文章の次に配置される可能性が最も高い単語を推論する計算機(ニューラルネットワーク)」ということになります。
https://gyazo.com/a1df536126860a5adc8a86f80a346642
encode
1: input embbeding
仮に「日本」という単語のIDが3000番だったとした場合、下図のように、3000番目に1が入り、その他は全て0で埋められた一行のベクトルが生成されます。
そんな感じなんだ。なんつか行列っぽいねsta.icon
https://gyazo.com/f82ebb97c3cca7f2bc9ecb2ed62c0f90
https://gyazo.com/58f4d600b9d68dc0ebcbfc0f1045560b
普通につくるとでかいベクトルだけど、これじゃ扱いづらいのでもうちょっとコンパクトにする
線形射影ってのはよーわからん
それがいわゆる埋め込みベクトルらしいねsta.icon
2: Positional Encoding
ベクトル計算だけだと語順が壊れるので、語順は語順でメモしておいてあとで復元する
https://gyazo.com/f84cc20ffd29cfb4f085e7496f211e4f
Attention
例えば画像分類や物体検出にニューラルネットワークを使う例を考えてみましょう。下記のような画像に何が映っているかを検出する場合、人間であれば、瞬時に車だということが認識できます。その認識は、この画像を無意識に、「物体」と「背景」に分け、「物体」に「注意を向ける」ことから始まっています。
これは、「物体に注意を向ける」ことにより、「背景の情報を処理しなくてよい」ので瞬時に認識できると言い換えることができます。この人間の脳内で行われているAttention(つまり注意を向けていないところは処理しなくていい)と呼ばれる処理を採用したことがTransformerの最大の成功理由であると同時に、ここ数年の自然言語処理の著しい精度向上の最大の要因だと言われています。
要はフォーカス
全部処理するんじゃなくて最初から処理しない部分を切り捨てる
重み付けと言ってもいい
GPTは学習済モデルですから、大規模データで事前学習した際に、「高い」という単語と「山」という単語が非常に関連の高い単語同士であるということを既に理解しています。したがって、この二つの単語の重み付けを優先し「10」という大きな値を割り当てるイメージです。同じように入力された文章内の全ての単語に対して重み付けを行います。
decode
decoderにはdecoderの事情があるので、encoderとは別の重み付けとか計算してる
最終的には推論をぐるぐる回す
日本で一番高い山
日本で一番高い山 + 富士山
これを使ってさらに推論する
日本で一番高い山富士山は缶ジュース
日本で一番高い山富士山は缶ジュースが800円
……
量子コンピューティングもそうだけど
そして、でてきたものをスコアリングして「総じてスコアが高ければその機構は有効だった」的な発想です。そこに必ずしも「なぜスコアがよくなったか」という理論は不要というのが、魔法の計算機であるニューラルネットワークなのだと思います。