私は新しいLLMを発明した

AGIに仕事を奪われたい
この記事は約14分で読めます。

7,815 文字

I Invented a New LLM
This is my biggest project yet!Voice type with Peach Beta 🍑: ...

私はこの数週間、ChatGPTやその他の言語モデルとは全く異なる仕組みで動作する、新しい種類のAI言語モデルを作る実験をしていました。ChatGPTに「答えを書く前に静かに考えて計画を立てることができますか」と尋ねると、実は嘘をつくでしょう。そして、その嘘を指摘すれば認めるはずです。なぜなら、ChatGPTのアーキテクチャは、これまで生成されたすべての単語を取り込み、次の単語を予測することに基づいているからです。これは、より多くの単語を出力せずに「考える」ことができないということを意味します。
私は言葉なしで考えることができるモデルを作ることに成功しました。この動画では、どのようにしてそれを作ったのか、どのように機能するのか、何が従来のモデルより優れているのか、そして何が劣っているのかをお見せします。始めましょう。
現在のAIモデルをすべて見てみると、同じアーキテクチャを使用しています。すべてがトランスフォーマーです。それが私が何か新しいものを作ろうと思った唯一の理由でした。まずはChatGPTのような古典的なトランスフォーマーがどのように機能するかを理解することから始めましょう。
文章を生成したい場合、まずテキストに対して行うことは、トークン化です。これは、テキストを異なるチャンクに分割し、各単語または部分語をベクトルつまり数字のリストに関連付けることを意味します。今は、その数字が何であるかは重要ではなく、固有であることが重要です。例えば「let」という単語には常に同じ固有の数字のリストが関連付けられています。そして、この数字の行列がトランスフォーマーへの入力となります。
ここからはテキストを表示しませんが、各列がトークンに関連付けられていることを覚えておいてください。トランスフォーマーの最初の部分はアテンションブロックです。その仕組みについて詳しくは説明しませんが、直感的には、すべてのトークンを取り、それぞれのトークンが他のすべての関連するトークンに関する情報を保持できるように混合する機械と考えることができます。
次のステップはフィードフォワードネットワークで、これはアテンションの出力を入力として受け取り、その重みに基づいて変換する最も単純な種類のニューラルネットワークです。これらのフィードフォワードネットワークは直感的に理解するのがはるかに難しいです。なぜなら、実際に何をしているのか誰も本当に知らないからです。一連の数学的関数として考えることができ、それが入力全体を何度も1つの数字に組み合わせて、入力と構造に基づいて全く異なる出力にマッピングします。
フィードフォワードネットワークの前にアテンションレイヤーを置く構造は、トランスフォーマーブロックと呼ばれます。完全なトランスフォーマーモデルでは、これらのトランスフォーマーブロックを何度も積み重ね、コンテキストを理解するためのアテンションと、実際に計量を操作するためのフィードフォワードネットワークを交互に配置します。最後の層で、次のトークンを完成させるためのオプションのソートされたリストが得られます。
そして今、この新しいトークンシーケンスと新しいトークンを一緒に取り、これをトランスフォーマーに再び入力して、より長い文章を生成することができます。ChatGPTが実際にメッセージに応答する方法は、会話をスクリプトのように入力し、そのスクリプトの自分の部分だけを完成させることです。
モデルをトレーニングする方法は、テキストの細切れにされた非常に多くの部分を与え、次の単語を推測させることです。そして、非常にスマートなアルゴリズムを使用して、その間違いを使って将来より少ない間違いをするようにモデルの層を調整します。
トランスフォーマーがどのように機能するか、大規模言語モデルがどのように機能するかについて別の動画を作って欲しいという場合は、コメントで教えてください。ただ、この動画については、非常に簡略化されていますが、これで十分だと思います。
私は本当にこのチャンネルを真剣に考え、もっと多くの動画を作り、それらを改善して、どんどん良くしていきたいと思っています。しかし、それらは非常に時間がかかり、実際にお金も多く無駄にしています。そこで、より持続可能にするために、少なくともいくらかの収益を生み出すことを試みたいと思います。Patreonを開くことも考えましたが、無意味なサブスクリプションの代わりに、皆さんに本当に役立つものを提供したいと思いました。
そこで、音声入力に使える本当にシンプルですが、非常に便利だと思うアプリを作りました。Apple、Google、Windowsに付属の音声入力よりもはるかに優れています。なぜなら、OpenAI Whisperを使用して文字起こしを生成するからです。そして、素晴らしいウェブサイトも作りました。リンクをクリックした人だけが利用できます。動画の残りをお楽しみください。
よく考えてみると、ChatGPTのようなモデルは、私たちとは全く違う方法で考えています。あなたに質問をすれば、おそらく答えを言う前でも、どのように答えを表現するかを知る前でも、答えのアイデアを持つことができるでしょう。ChatGPTはそうではありません。アイデアも思考も持っていません。彼のアイデアはただの言葉です。何かを計画するなら、言葉で計画する必要があります。
では、この制限を持たないモデルをお見せしましょう。アイデアを持ち、テキストに変換する前にアイデア自体と対話することができます。3つのモデルがあると想像してください。最初のモデルはテキストを入力として受け取り、テキストをアイデアに変換します。2番目のモデルは質問のアイデアを取り、それを回答のアイデアに変換します。そして3番目のモデルは、回答のアイデアをテキストに戻します。
「アイデア」について話すとき、何を意味しているのでしょうか?人間はアイデアを持っていますが、それをどう機械に翻訳するのでしょうか?機械学習では、すべてが数字であり、私が話しているこれらのアイデアも、私たちが見つける必要がある数字の配列です。
各テキストについて、そのテキストで何が起きているかを説明する数字の良い表現を見つける必要があります。それにはテキスト自体を含めるべきではなく、テキストの意味、テキストの意味論的意味を含めるべきです。また、この意味論的意味を取り、それをテキストに戻す方法も見つける必要があります。
幸いなことに、科学者はすでに機械学習でこれを行う非常に良い方法を見つけています。入力として画像を受け取り、出力として正確に同じ画像を再現しようとするニューラルネットワークを想像してください。しかし、ネットワークの中央には非常に小さなボトルネックがあります。このケースでは、ネットワークは画像を2つの数字で表現し、次にそれらの2つの数字を使用して全体の画像を再作成しようとします。
これはオートエンコーダーと呼ばれるもので、エンコーダー、デコーダー、そしてボトルネックがあります。このケースでは、ボトルネックはわずか2つの数字です。2つの数字だけなので、手書きの数字を大量に取ってネットワークをトレーニングしてみましょう。
ここで、いくつかの画像を取り、それらを対応する2つの数字にエンコードし、ボトルネックの一方の数字をX、もう一方をYとするXY平面に画像を配置してみましょう。とても驚くべきことが見えてきます。ネットワークに「2」や「1」が何であるかを教えなかったにもかかわらず、ランダムな手書きの数字の画像を提供しただけで、同じ種類の数字が一緒にグループ化されていることがわかります。すべての8が同じ場所に、すべての3が同じ場所に、すべての1が同じ場所にあることがわかります。
つまり、中央のこれら2つの数字は、それが表す数字の意味をある程度エンコードしています。画像を再作成するだけでトレーニングしたにもかかわらず、ある意味で、これら2つの数字は、それらが表す手書きの数字のアイデアを保持しています。
大きな疑問は、手書きの数字で行ったのと同じことをテキストでもできるかということです。画像で使用したものと非常に似たアーキテクチャを使用することができます。エンコーダー、ボトルネック、デコーダーです。ただし、一つの違いは、手書きの数字は2つの数字で表現できますが、可能なすべてのテキストにはもっと多くの数字が必要になります。私が見つけた最小限のものは1,024なので、これをこのネットワークに使用します。
これらの1,024の数字を使用して、デコーダーを使って元の入力を再作成することができます。エンコーダーは実際にはトランスフォーマーなので、ビデオの冒頭で話したChatGPTなどの大きなモデルが使用するのと全く同じアーキテクチャを使用しますが、次の単語を予測する代わりに、元の入力を再作成しようとする1,024の数字を出力します。
これらの1,024の数字はテキストのアイデアを表します。ちょうど手書きの数字の画像内の数字のアイデアを2つの数字が表したのと同じように。今、私たちがする必要があるのは、これらの1,024の数字を取り、元の入力を再作成するデコーダーを作ることです。このデコーダーは、予想通り、これらの1,024の数字を取り、エンコーダーが受け取った元の入力を生成しようとする別のトランスフォーマーです。
このネットワークをトレーニングする方法は、エンコーダーにいくつかのテキストを与え、テキストのアイデアを表す1,024の数字を取得することです。次に、デコーダーを使用して、同じ文を再度生成しようとします。そして、入力と出力の違いを使用して、将来より少ない間違いをするようにネットワークを変更することができます。この過程を多くの文で繰り返します。私は英語のウィキペディアからのランダムな部分を使用しました。
多くのデータでトレーニングした後、テストすることができます。テストする一つの方法は、「スコットランドの国の動物はユニコーン」のような文を取り、それをエンコードして対応する数字を取得し、「サメは木より前に存在した」のような別の文でも同じことを行い、それらの数値配列の平均を取ることです。
次に、デコーダーを使用してこれらの数字をテキストに戻すことができます。デコードされた平均は「サメはユニコーンの木の前に国の動物だった」となり、数字の平均をデコードしたものがデータ自体の平均として意味があることを確認でき、トレーニングが成功したことを意味します。
すでにテキストをアイデアに変換し、アイデアをテキストに戻すネットワークができましたが、まだ考える部分が欠けています。モデルは質問に答える方法を知りません。
これまで、これらの1,024の数字をテキストのアイデアと呼んできましたが、正式には機械学習の分野ではこの概念は「データの潜在表現」と呼ばれるでしょう。潜在表現は、テキストや数字の画像のような元のデータの、より少ない次元での意味的に濃密な表現です。
そのため、質問の潜在表現を取り、それを回答の潜在表現に変換するネットワークを「潜在操作器」と呼びました。この動画で話したすべてのネットワークとは異なり、この潜在操作器は実際にはトランスフォーマーではありません。私のテストでは、このネットワークのアーキテクチャは実際にはそれほど重要ではなく、ビデオの実装部分で話すいくつかのトリックを使ったフィードフォワードネットワークを使用しました。
テキストを再構築するためにオートエンコーダーをトレーニングした後、実は潜在操作器をトレーニングするためにデコーダーは必要ありません。例えば、「気候変動をどのように修正するか」のような入力があるとします。エンコーダーを使用して、この質問の潜在表現を生成することができます。次に、その質問への回答を取り、潜在表現も生成します。
これら2つの潜在表現ができたら、テキストが何であったかを覚えておく必要さえありません。潜在操作器は単に最初の潜在表現を2番目の潜在表現に変換する方法を学ぶ必要があります。その後、デコーダーを使用して、この2番目の潜在表現を望ましい回答にデコードできるようになります。
なぜこれが通常のトランスフォーマーのように次の単語を推測するよりも優れていると思うのか?正直なところ、より優れているかどうかはわかりません。しかし、この動画の目的は、私が機能する何か異なるものを作ることでした。いくつかの利点があると思います。
1つ目は、思考が言葉に制約されないことです。頭の中で言葉を使わずに考える能力は、実際に私たちをはるかに知的にしていると思います。そして、AIがそれをできることは重要だと思います。
2つ目は、このモデルを多くの異なる言語で動作するようにトレーニングすることがはるかに簡単なことです。なぜなら、各言語に対して異なるエンコーダーデコーダーをトレーニングできますが、思考部分、つまり潜在操作器は同じままにできるからです。このモデルの知性は、異なる言語間でより一貫性があるでしょう。
次のことは、エンコーダーとデコーダーが十分に良くなれば、つまり入力を正確に再構築することを学習すれば、実際には現在以上に言語を理解する必要がなく、それをいくつかの数字に凝縮して、異なる言語を使用して知性だけを改善することがはるかに効率的だということです。言語理解は、十分に大きなエンコーダーデコーダーネットワークでは十分に良いからです。
最後のことは、潜在空間が滑らかであるため、過適合させることがはるかに難しいということです。
実際にこのAIと会話して、その回答を見て、どれだけ良いのかを見る前に、それを機能させるために行った実装について本当に簡単に見てみましょう。
エンコーダーデコーダーネットワークを作るために、Hugging Faceで見つけたこのモデルに大きく依存しました。これが存在することに非常に感謝しています。なぜなら、なければこの動画を作るのにもっと時間がかかったからです。
次の説明は実際に非常に技術的なものになるので、技術的な説明に飽きたら飛ばしても構いません。しかし、潜在操作器をどのように作ったかをお伝えしたいと思います。
これはフィードフォワードネットワークですが、最終的にはかなり複雑なアーキテクチャを使用しました。その理由は、ネットワークに多くのパラメータを持たせたかったからですが、単純にレイヤーをどんどん追加すると、勾配の減少または爆発が生じます。このネットワークは、非常に浅いネットワークであると同時に非常に深いネットワークであるため、この問題を解決します。このネットワークのフォワード関数は以下の通りです。
さて、皆さんが待ち望んでいた瞬間です。モデルをテストして、いくつかの質問をしてみましょう。期待に合わせて、私のモデルは250万の例だけでトレーニングされました。これはChatGPTがトレーニングされたものの1%にも満たず、数時間だけ私のラップトップでトレーニングされました。目標は、既存のソリューションよりも優れたものを示すことではなく、概念実証を示すことです。非常に大きなモデルをトレーニングするリソースはありませんが、機能するかどうかを見てみましょう。
まず、簡単なトリビア質問から始めましょう。「フランスの首都は何ですか?」モデルの出力は「パリ」で、これは正しい一語の答えです。
次の質問は「世界最大の国は何ですか?」モデルの出力は「中国とロシア」です。正しい答えは「ロシア」だけですが、なぜ中国を含めたのかはわかりません。おそらく人口が多いからかもしれませんが、部分的に正解です。
次の質問は「どのアメリカの州がサンシャインステートとして知られていますか?」出力は「フロリダとカリフォルニア州」です。答えは「フロリダ」だけです。インターネットで確認したところ、なぜカリフォルニアを追加したのかわかりませんが、再び部分的に正解です。
回答が技術的に正確でなくても、質問に関連する回答を与えるという事実は、私の意見では非常に印象的です。
次の質問は「HTTPは何の略ですか?」彼が与えた答えは「HTTPはHTTPインターネットプロトコルの略です」と書かれており、それが何の略であるかの説明ではありませんが、質問に関連しています。いいですが、失敗でもあります。HTTPはハイパーテキスト転送プロトコルを表していますが、正直、トレーニングデータにあったかどうかは確認していないので、少し不公平かもしれません。
さて、トリビア質問から離れて、「マインドフルネス瞑想を説明してください」というような説明を求めてみましょう。出力はかなり長いものでした。「瞑想は、あなたの心を意識し、あなたの思考に集中することです。これはマインドフルネス瞑想の練習で、数分で完了することができます。マインドフルネスを使用すると、人々はリラックスし、穏やかになり、感情を引き起こさないように促されます。ウィリーによると」。ウィリーが誰なのかわかりませんが、答えは完全に正しくはありませんが、非常に関連性があります。失敗でもあり、成功でもあります。
より多くの例を見ていきましょうが、このモデルがどのように機能するかを感じ取れるように、より速く進めます。
「抗生物質を説明してください」と尋ねると、これはかなり複雑な質問ですが、答えの質はかなり低いです。依然として関連性はありますが、「抗生物質は、細菌やウイルスを治療するために使用できる抗生物質のグループです」というような内容です。この回答にはたくさんの問題がありますが、それでも関連性があり、このアーキテクチャが実現可能であることを証明していると思います。
ペンギンについての物語を書いてくれるよう頼むと、答えはペンギンに関する「熱に浮かされた夢」のようなものでした。質問にある程度一致するので、成功と言えるでしょう。
最後の質問では、JSONで物語を書いてもらいましたが、出力はこれでした。嘘ではありません。単に244個のスペースを印刷しただけです。非常に奇妙です。トレーニングデータのどこでそのアイデアを得たのかわかりませんが、この質問を複数回尋ねるたびに、単なるスペースの量が異なりました。
私のYouTubeチャンネルはまだ非常に小さいので、私のチャンネルをクリックして他の動画が面白いかどうかを見てくださると本当に感謝します。おそらくチャンネルが少し大きくなるまで、YouTubeはあなたにそれを表示しないでしょう。
また、これは長い技術的な動画を初めて作るので、このフォーマットについてどう思うか、好きか、それとも他に何か好きなものがあるかをコメントで教えてください。
これはおそらく歴史上最も刺激的な時代だと思います。そして、私たちが皆知っている問題を超えた魔法を見つけ、それを他の人に思い出させることを皆さんに思い出させたいと思います。次の動画でお会いしましょう。さようなら。

コメント

タイトルとURLをコピーしました