最近はChatGPT(Copilotなども含め)がないと仕事がはかどらないような体になってきました。ChatGPTがいるのといないのでは、文章やコードを書く作業時間は少なく見積もっても2倍ぐらいは違いが出るような気がします。例えば、コード全体の設計や、サンプルコードを書いてもらう、はたまたデバッグしてもらう、などの作業自体も効率化されましたが、それらに付随する調べ物の時間がとにかく減ったような感じます。
そんなわけで、ぐっと身近になったChatGPTの内部構造が知りたくなりました。せっかくなのでChatGPTに手伝ってもらい、理解度を上げる作業も効率化してみます。
まずやったこと
LLMはTransformerが重要である、といううっすらとした理解はあったのですが、まずはTransformerについて詳しく書かれた論文を読んでみようと思います。(と言いつつも読むのはChatGPTです)
今回の論文は「Attention is all you need」です。論文を実際に読んでみたい方はリンクから飛んでみてください。
わたしは、ChatGPTに要約してもらいました。
なるほど。論文のタイトルにもある通り、Attention(注意)がアーキテクチャ上も重要な概念なのだということがわかりました。
ただ、ざっくり丸投げしたので、ざっくりした回答しかもらえませんでした。論文をまったく読んでないので、論文の構成と内容を聞いてみます。
ほうほう、、、TransformerモデルとAttentionについて理解をするためには、1と3を掘り下げるのが良さそうだなぁ。と感じられる素晴らしい回答をChatGPTさんは提供してくれています。
Transformerモデルについてもう少し細かく知りたいですねぇ。
もうちょっと詳しくAttentionについて知りたいですね。
なるほど。重要な情報に集中するためにAttentionを向けるということか。つまり、重要度のフラグやタグみたいなイメージなのかなぁ。ということで、確認の為に聞いて見ます。
いぇーい!理解があってたぞ!
調子にのって、重要度をどうやって見つけるのかを聞いてみます。
ChatGPTの回答 いいえ、ちがいます!
げ、、、撃沈
でも、要素間の関係性を数学的に計算する、というところが重要なポイントだということはわかりました。
ここで立て続けに、関係性についてと、要素間の相関度について聞いてみます。
難しい話になって来ました。
ここで論文を見てみると、こんなイラストがありました。Qがクエリで、Kがキーで、Vがバリューですね、きっと。
2つのアプローチがあるようで、論文内の章でいうと以下の部分で詳しく説明されていました。
3.2.1 Scaled Dot-Product Attention
3.2.2 Multi-Head Attention
それぞれの章をChatGPTに日本語にしてもらいました。難しいことが書かれていますが、要は一つのやり方で一回だけやるのがScaled Dot-Product Attentionで、異なるやり方で複数回やるって結果をまとめるのがMulti-Head Attention、ということのようです。(ちなみにChatGPTに確認したところ、あってます、と回答をもらいました)
しかし、この一文がとても気になります。
複数回の計算をするのになぜ計算コストが単一ヘッドアテンションと同様になるのでしょうか。聞いてみましょう。
なるほど。Multi-head Attentionを使う上で、Scaled Dot-Product Attentionが必要になるということですね。わかりやすい。そして、このMulti-Head AttentionがChatGPTの柔軟かつ正確な回答につながってるように思いました。これは、Multi-Head Attentionをもう少し深掘って行く必要がありあそうですね。
一旦、今日はこの辺にしておきましょうかね。しかしChatGPTはいろいろな使い方ができますが、一人で読書会や勉強会をやっているような効果もあるなんて、すごすぎます。