Transformerはどうしてそんなに上手にAttentionをはじき出すことが出来るのでしょうか?それは次回の記事でTransformerのアルゴリズムの詳細を見ながら考察したいと思います。Need」という論文タイトルは、「これだけで全部いけるんだぜ」という今のGPTまでのポテンシャルを2017年の時点で予見していたような気もして、非常に言い得て妙な論文タイトルですね。*8GPTは自己回帰モデル(テキスト→次の単語)さて、ここへ来てだいぶ話を戻しますが、冒頭で述べた例は「テキストを入力してテキストを出力」するというものでした。実際にはGPTの場合は少し違っていて、「テキストを入力すると次の単語を出力」する、より厳密に言うと「トークン列を入力すると次のトークンを出力する」モデルになります。これを対話システムとして用いるには、文の区切りだけでなく、対話の発言の区切りをも特別な記号として用意しておいて、GPTが自分で発言している途中のトークン列も、次の単語を出力するための入力トークンとして使えばよいですね。直前の995トークン+「Yes」「,」「I」「Do」「.」を見て「(発言終わり)」を出すという風に、1000トークンを処理する動作を6回やることになります。GPTの実際の構造WikipediaのGPTのページに図があるので転載します。オリジナルのGPTの構造(GPT-1かな?)この図を見てわかる通り、矢印は上向きなのでエンコーダともデコーダとも取れますが、実際に「トークン列→次の単語」として使いたいときは、デコーダ(冒頭に掲載したTransformerの図の右半分)として使えばよいですね。「生成モデル」からサンプリングする、という先に述べた方法を使えばよいわけです。このGPTのTransformerの図をみると、エンコーダとデコーダという風に分かれていないところが特徴と言えます。入力と出力のペアを用意しておかなくても、いわば入力データだけあれば、次節で説明する「マスキング」を使って学習させることで自己回帰モデルを作ることができます。「教師なし学習」が可能になります。Transformrの段数を非常に多く積み上げることでLLMを構成します。GPT-3の場合は96段なのでした。トークン長を長くとるためには、一つのTransformerが持つ学習パラメータの数もそれだけ多く必要になります。これはまさにモンスター級の計算機パワーでぶんなぐる感じですね。マスクの付け方の違いGPTとは別の(Transformerベースの)代表的な深層学習言語モデルに、BERTというのがあります。途中の単語」というモデルです。「出力した単語のあと」も考慮するモデルです。前後の単語を考慮する分、GPTと比べると学習データが少なく済んだり、言語モデルの大きさも同じ性能でコンパクトに出来たりするそうです。これはこれで、例えば穴埋め問題とか、大規模データの検索システムで問い合わせに対してふさわしいデータを特定したりとか、自然言語処理の色んなタスクに応用が利くモデルではあります。GPTとBERTは学習のさせ方がちょっと違います。GPTの場合は、出力した単語よりも後の情報を使うのはご法度です。データを学習する際に、マスキングテープみたいな感じで出力対象の単語以降の単語を「マスク(口封じ)」して見ないようにします。BERTの場合は、対称の単語だけをマスクします。やって、トークン長ぶんのデータを用意してガサっと学習に掛けるのはどちらも一緒です。BERTは「途中の単語」を出すモデルなので、当然「次の単語」も出そうと思えば出せるはずです。それならGPTよりBERTのほうが汎用的で強そうに見えませんか?しかしGPTは「次の単語」を出すというだけのモデルに特化しました。それはなぜでしょうか?次節以降で述べます。プロンプトによる利便性GPTが「次の単語を出す」というタスクに特化したせいで、プロンプトを与えることでふるまいをその場で容易にカスタマイズできるという利便性が生まれました。これが、BERTが持つ「どんな位置の単語でも出せる」という汎用性がもたらすベネフィットを大幅に上回ったのだと思います。few-shotプロンプトは、本記事の読者のあなたならきっとよく知ってるor耳にしたことがあるでしょう。ChatGPTに、実例を少数与えるだけで、意図をくみ取って以降のやりとりをそれに合わせたものに変えることができるという能力です。prompting)釘を刺したり、といったメタ的な指令をすることで実例を一つも与えなくてもパフォーマンスが大きく改善されることです。promptingは、GPTがそれ自体の仕組みとしては1時記憶/短期記憶を持たないため、途中の思考過程をいわば「カンニングペーパー」に書き起こさせることで、直前のトークンを「短期記憶の代わりにカンペ」を見れるようになり性能が大幅に改善するというものになります。GPTが注目される理由2:「教師なし」大規模事前学習の有効性そうしたLLMの汎用的な能力を可能とするのが、主に「教師なし」学習のおかげで莫大なデータを超大規模LLMに食わせることができる点です。GPT-3の学習データがWikipediaに載っていたので下表に転載します。GPT-3の学習データ(Wikipediaより)Wikipedia全体もかなりの量の情報があると思いますが、それが全体のわずか3%とのことで、なかなかの大規模データですね。これだけの量ともなると人間の手でデータを作りこまなければいけない「教師あり学習」は困難でしょう。教師なし学習で大量のデータを与えて、それをバッチリ理解しきる超大規模言語モデルと莫大な資金を投じて大量の計算機リソースをぶんまわす、それがGPTの研究チームが採用した戦略ですね。前回の記事に対して、はてブのコメントでこれについて疑問を書いてくださった方が居ましたので軽くふれておきます。ChatGPTを使ってみると、日本語と英語で、内容的に同じ意味のテキストを投入しても、結果が異なっていることが結構あります。これは、トークンの切り出し方の違いになります。英語では単語(句読点やクオートなどの記号)単位でトークンが切り出されますが、日本語の場合は文字単位になります。漢字は2トークンとしてカウントされるようです。*9トークンが単語よりも細かい文字のレベルなので、それを単語のレベルまで引き上げるのには、最初に入力データとして単語列から出発する場合と比べて、余分に解析を必要とします。Transformerの段数はGPT-3では96とのことでしたが、日本語だとトークンが文字なので、入力データであるトークン列に近い浅い層でのTransrformerは、文字から単語を認識するのに「消費」されてしまいます。英語の場合は、トークンは単語です。したがって、英語と日本語で、意味としては同じ内容の言葉をChatGPTに与えた場合、英語のほうがクオリティは基本的には高くなります。私の勤務先の会社の同僚は、日本語をいったんdeepLなどの翻訳システムで英語に翻訳してからChatGPTに食わせて、英語で返ってきた言葉をまた日本語に戻す、というツールを自分で作って使っているそうですが、これはGPTというかTransformerの仕組みを考えればと非常に理に適っているといえます。大規模言語モデル)では、「作り込み」や「カスタマイズ」の深さに大きく分けて3段階のレベルがあります。development)」この3つを混同しないことは非常に大切です。最近、政府や国会で議論されている国産LLMはレベル3を指していますし、GPTからChatGPTを作ったプロセスはレベル2です。最近大流行のプロンプトエンジニアリングはレベル1ですね。いうわけでここまでで、各技術の定性的な説明を終えます。(2.2)「Transformerのアルゴリズム詳細」へ続きます。いう記号的な手法に統計的な機械学習を融合しようとする研究もおこなわれていました。私が大学院修士の時の研究室のテーマの一つがそれでした。(私自身は別の研究テーマでした)*4:もし前者のようにスパースになるのだとしたら、情報が詰まってるところだけを取りまわすようにすれば計算資源(メモリとかプロセッサ)を節約できるかもしれませんね。いうテーマで論文をサーベイしてみるのも面白いかもしません。*5:こう書くと、全然手を動かさず読んだり見聞きしたりしただけで本記事を書いてることがバレますね。*6:ちなみにこれは2017年の論文ですが、当時この研究成果はそれまでの自然言語処理システムのパフォーマンスを大幅に塗り替えたそうです。それも、自然言語処理には「対話」とか「要約」とか「知識検索」とか「機械翻訳」とかとか色んなタスクがありますが、様々なタスクにおいて圧倒的な性能を「汎用」的な一つの仕組みで叩き出したという点が驚異的です。ブレークスルーですね。*7:これらの図がどうやって作られたかは論文にはあまり詳しくは書かれていませんでしたが、でっち上げではないことは確かですね。*8:そのTransformerの研究論文を公に出したグーグルは、その後OpenAIのGPTによってTransformerがGPTへと洗練/昇華され、今やメインビジネスで将来が危ぶまれるまでになっちゃってるのだから皮肉なものです。APIの課金体系としてそうなってはいますが、ChatGPTで日本語を使ったときに内部で漢字1文字がトークン2つ分のデータ長を持っているのかどうかは私は知りません。本ブログ、GPT考察シリーズの途中ですが番外編を適宜挟んでいき...2023-03-20GPTの仕組みと限界についての考察(1)GPT4が登場してChatGPTが盛り上がってますね。8はてなブログをはじめよう!isobe324649さんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。