A Deep Dive into the Inner Workings of Large Language and Foundation Models

下記のビデオで、[Beatriz Stollnitz](https://twitter.com/beastollnitz) さんが、トークンに関する話や ChatGPT に関する説明を 9 分の YouTube 動画で行っております。

https://www.youtube.com/watch?v=vMVHj9VIrLA

ざっくりと、Chat GPT の歴史などを知りたい方には良いコンテンツですので、ぜひ動画をご覧ください。

動画の発表内容を日本語でまとめましたので、下記もご覧ください。

## イントロダクション  
皆さん、こんにちは。この短いビデオでは、GPTモデルがどのように動作するかについて説明します。  
  
## 生成モデル  
まず、一般的な生成モデルがどのように動作するかについて話しましょう。非常に高レベルに言えば、これらのモデルは　N　個のトークンを入力として受け取り、1つのトークンを出力します。  
<a data-flickr-embed="true" href="https://www.flickr.com/photos/yosshi2007/53060930273/in/dateposted/" title="oai-ntoken"><img src="https://live.staticflickr.com/65535/53060930273_c6d1e17a9f_c.jpg" width="800" height="446" alt="oai-ntoken"/></a><script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script>
  
## トークン  
「トークンとは何かを理解する事は重要です」。これは、とても簡単な考え方です。では、下記でトークンとはどういう物かについて確認してみましょう。OpenAI の場合、トークンは短い文字列のことを指します。例えば、「we」や「need」のような短い単語全体がトークンになることがあります。

<a data-flickr-embed="true" href="https://www.flickr.com/photos/yosshi2007/53060444291/in/dateposted/" title="oai-tokens"><img src="https://live.staticflickr.com/65535/53060444291_cf43e10be6_c.jpg" width="800" height="446" alt="oai-tokens"/></a><script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script>

これらの単語は短く、非常に頻繁に使われるからです。しかし、トークンは単語の一部を指すこともあります。例えば、「anthroformerphize」という単語は非常に長く、あまり一般的には使われないため、3つのトークンに分割されます。」

## OpenAI のトークナイザー
上記は、[OpenAI Tokenizer](https://platform.openai.com/tokenizer)がどのように動作するかの一例であり、[この URL(https://platform.openai.com/tokenizer)](https://platform.openai.com/tokenizer) で、トークンの分割について無料で試すことができます。フォーム内に任意のテキストを入力し、OpenAI がテキストをどのようにトークンに分割するかを実際に確認できます。
  
## トークン化の方法
これが実際に、Tokenizer　がやっている事ですが、すべてのトークンがこのように行われるわけではありません。テキストをトークン化する方法は色々とあります。一方で、テキストを文字ごとにトークン化することができます。これは最も簡単な方法でしょう。各文字がトークンになります。これは実装が簡単であるという利点がありますが、非常に短い文章でも多くのトークンが必要になります。  
  
## トークンの制限  
これらの言語モデルは、一般的に入力できるトークン数に制限があります。したがって、必要以上に多くのトークンを使用するのはあまり良くありません。
そのことを念頭に置いて、なぜ他の極端な方法、つまり各単語をトークンにする方法を利用しないのでしょうか。「各単語をトークンにする方法」は良い方法と思われるかもしれません。同じ量のテキストに対して少ないトークンを使用できるようになります。しかし、これらのモデルは、考慮するすべてのトークンのリストを保持する必要があります。そして、すべての存在する単語の全リストを保持しなければならないのは、少し難しいと想像できるでしょう。  
  
## OpenAIのトークン化のアプローチ  
そのため、OpenAIは中間的な方法を採用しています。つまり、各単語は数文字です。現在、他の企業で見られるほとんどのトークナイザーも同様の方法を採用しているようですが、実装方法には若干の違いがあります。  
  
## 言語モデル  
さて、トークンが何であるかを理解しました。図に戻って、言語モデルがどのように動作するかを理解しましょう。これらはN個のトークンを入力として受け取ります。これは数語、文、新しい段落、全ページなど、モデルのサイズとサポートするトークン数によります。そして、1つのトークンを出力します。これは単語または単語の一部を意味します。 
 
## スライディングウィンドウアプローチ  
これは非常に簡単ですが、実際には、1つのトークンだけを得るわけではありません。たくさんのトークンを得て、たくさんのテキストを得ます。これは、このアイデアがスライディングウィンドウのような方法で適用されるからです。N　個のトークンを入力として受け取り、1つのトークンを出力します。次に、その出力トークンが次の反復の入力トークンに含まれます。そして、あなたは別のトークンを得ます。  
<a data-flickr-embed="true" href="https://www.flickr.com/photos/yosshi2007/53060631269/in/dateposted/" title="oai-anthroformerphize"><img src="https://live.staticflickr.com/65535/53060631269_0a8b2dbfb2_c.jpg" width="800" height="446" alt="oai-anthroformerphize"/></a><script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script>
  
## 決定論的ではない  
また、これを決定論的な方法と想像するかもしれません。つまり、同じトークンのシーケンスを2回与えると、同じトークンが出力されるのでしょうか。答えは違います。これらのモデルは実際には決定論的ではありません。その理由は、これらのモデルが動作する方法にスライドに表示されているものに加えて、もう一つ別の部分を持つためです。それらが返すものは実際にはトークンではなく、全トークンの確率分布です。  

<a data-flickr-embed="true" href="https://www.flickr.com/photos/yosshi2007/53060930268/in/dateposted/" title="oai-token-reduce"><img src="https://live.staticflickr.com/65535/53060930268_8e165123a5_c.jpg" width="800" height="446" alt="oai-token-reduce"/></a><script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script>

## サンプリング  
つまり、それぞれの可能なトークンに対して特定の確率を割り当てる分布です。その分布からサンプリングしてトークンを得ます。サンプリングの方法は、PlaygroundやChatGPTを使用する際の temperature や top P コマンドで制御できます。  
  
## コンセプトの説明  
このアイデア、つまりトークンの入力と出力、これは本当にただのアイディアです。これはアルゴリズムではありません。コードを説明しているわけではありません。このアイデアは歴史的に多くの異なる方法で実装されてきました。実際に新しいアイデアではありません。  
  
## 歴史の概要
70年代には、隠れマルコフモデル（HMM）がありました。HMM　はマルコフ過程であり、マルコフ過程の数学的な定義は、トークンを生成するときに、それが直前のトークンだけを見るというものです。つまり、例えば、「the quick brown fox jumps over the」と入力すると、HMMは「the」だけを見ることができます。それが前に来るものを見ることはできません。したがって、おそらく「person」や「shoe」のようなものを予測するでしょうが、「lazy」を予測することはおそらくありません。仮にそれがあなたが期待するものだったとしてもです。
90年代になると、Ngram　モデルが登場し、この問題を大幅に解決しました。なぜなら、N個のトークンを入力として受け取ることができたからです。しかし、この　N　はかなり少なかったので、できることはかなり限られていました。  

<a data-flickr-embed="true" href="https://www.flickr.com/photos/yosshi2007/53059863312/in/dateposted/" title="oai-history"><img src="https://live.staticflickr.com/65535/53059863312_00a8c37932_c.jpg" width="800" height="446" alt="oai-history"/></a><script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script>

## ニューラルネットワーク  
2000年代になると、ニューラルネットワークが非常に人気になり、モデルに渡すことができるトークンの数を増やしました。当時、人気のあったニューラルネットワークは LSTM と GRU で、これらは RNN の一種です。これらのニューラルネットワークには問題がありました。
それは、ネットワークが長すぎると、モデルの勾配が非常に大きくなる（無限大になる）か、またはゼロになる（消失する）という問題でした。この問題が発生すると、ネットワークを訓練することができ図、ネットワークは学習しなくなります。  
  
## トランスフォーマー  
そして2017年にトランスフォーマーが登場し、多くの問題を解決しました。モデルが取り込むことができる N のサイズを増やし、ニューラルネットワークが持っていた安定性の問題を解決しました。  
  
## トランスフォーマーとアテンションメカニズムの紹介  
また、GPU でより効率的に動作する並列化可能なアルゴリズムを導入しました。トランスフォーマーはアテンション、またはアテンション・メカニズムというアイデアに基づいています。これは、モデルが一部の入力に対して他の入力よりも多くの注意を払うことができます。
例えば、「彼女は店に行きました」という文では、モデルは「買った」という動詞を予測するかもしれません。しかし、その動詞「買った」の時制は、2番目のトークン「行きました」から来ています。それらは一致しなければなりません。モデルはこれを理解し、おそらく「行きました」という単語に対して、「そして」という単語よりも多くの注意を払うでしょう。これがアテンションとトランスフォーマーの基本的なアイデアであり、現在、OpenAIのGPTモデルで使用されているものです。  
  
## OpenAIの最新モデルの概要  
それでは、OpenAI　がリリースした最新の3つのモデルを見てみましょう。
まず、GPT 3.5 があります。これらはすべてトランスフォーマーを使用しています。トランスフォーマーは、2017年にGoogleが発表した「Attention is All You Need」という論文で紹介されました。
次に、ChatGPTは、GPT 3.5のベースモデルに基づいています。そして、それはその上に会話データで微調整する層を持っています。  
<a data-flickr-embed="true" href="https://www.flickr.com/photos/yosshi2007/53060930313/in/dateposted/" title="oai-chatgpt"><img src="https://live.staticflickr.com/65535/53060930313_7c13613e20_c.jpg" width="800" height="446" alt="oai-chatgpt"/></a><script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script>
  

## ChatGPT　と強化学習について 
それがなぜ必要なのかというと、3.5　は完了型のモデルで、いくつかの単語を入力すると、その後に来る可能性のある単語を生成することができます。
一方、ChatGPT　は会話のために訓練されたモデルで、少し異なるパターンを持っています。そして、ChatGPT　はさらに人間のフィードバックによる強化学習で訓練されました。
このアルゴリズムの動作は次のようになります。LLM　に入力を与えると、2つの異なる出力が返ってきます。次に、人間がそれらの出力をランク付けします。そして、人間のランキングはモデルにフィードバックされ、モデルの重みは人間の好みを組み込むために変更されます。この技術は、次の「[Training language models to follow instructions with human feedback](https://cdn.openai.com/papers/Training_language_models_to_follow_instructions_with_human_feedback.pdf)」と呼ばれる論文に基づいています。
これは、2022年に OpenAI によって発表されました。  
  
## 最新モデル - GPT4の紹介  
最後に、最新のモデルである GPT4 は、全く新しいベースモデルに基づいており、人間のフィードバックによる強化学習も使用しています。タイトルのすぐ下にあるのが、コードを使用している場合やプレイグラウンドを使用している場合に選択するモデルの名前です。これらはOpenAIがリリースした各種のモデルを選択するためのものです。それが今日の内容です。ご視聴いただきありがとうございました。