![見出し画像](https://assets.st-note.com/production/uploads/images/171895253/rectangle_large_type_2_1a0a25c32706bde8f36257fd25533a5e.jpeg?width=1200)
相対エントロピー
32,839 文字
YouTubeでテストしています。YouTubeでテストしています。なんてことだ。YouTubeでテストしています。よし、うまく動いているね。調子はどうだいヤン・レナー、サム。ヤン・レナーが質問していますね、R1についての質問をお願いしますと。まだR1の論文についての質問はできますよ、完全に答えられます。調子はどうサラ。じゃあXが動いているか確認して、それから始められますね。うーん、Xが動いていないな。Xはどうなっているんだろう。もう一度試してみましょう。
よし、Xも動いています。完璧。みなさん、マークB、調子はどうですか。それでは配信を始めましょう。調子はどうNLPプロンプター、エド。みなさんようこそ、今日も配信へお越しいただきありがとうございます。今日は数学の世界に深く潜り込んで、相対エントロピーについて話していきます。でもその前に、私の新しい奇妙な髪型について触れておきたいと思います。
どのモデルが一番優れているか見極めるには、それぞれのモデルに私の髪型を批評させてみるのがいいと思いました。grock 2は最も面白いAIだと言われていますが、私はこの俳句はそれほど良くないと思いました。
「輝く禿頭 眉毛は海に沈む 髪よどこへ」 10点満点で5点くらいですね。
では、Gemini Advance 2.0の実験的なAdvanceはどうでしょう。最も高度なGeminiモデルです。「頭が輝き 光を反射する カブの如く」 正直なところ、Grockの方が良かったかもしれません。
そしてこちらがchat GPTo1 Proです。2分8秒も考えました。人類が現在持つ最も高度な知性ですよ。そしてこちらが俳句です。「剥き卵の 如く輝く 頭かな」 私はこれが一番良いと思います。驚いたのは、この山羊ひげについて何も言及していないことです。私にとってはこの髪型で最も酷い部分だと思うのですが、彼らは全員、髪がないということだけに着目したようです。
さて、本題に入りましょう。相対エントロピーとは、KLダイバージェンスの別名で、KLダイバージェンスは機械学習の論文、特に強化学習の論文で繰り返し登場します。全ての機械学習論文というわけではありませんが、多くの論文で見かけるものです。
こちらがDeep seekのR1論文です。これが実際の最適化目的関数で、彼らがGRPOと呼ぶ新しい手法です。このベータというハイパーパラメータが付いているdklという項を見てください。このdklには2つの要素があります。πθとπリファレンスです。これらはポリシーとリファレンスポリシーを表しています。
こちらはKim K 1.5です。これは別の中国のスタートアップで、基本的にDeep seekと非常によく似たことをしています。強化学習を使って反復的にモデルを改善するものです。ここでも同じものが出てきます。彼らはDKLではなくKLを使用していますが、同じものです。πθとπθiの間のKLダイバージェンス、つまり相対エントロピーを使用しています。
この場合、πはポリシーを表します。πθが出てきたら、それは常にニューラルネットです。θはそのニューラルネットのパラメータです。これらを損失関数に入れています。なぜなら、これが元のものから大きく離れすぎないようにしたいからです。
こちらはkimmaの自己符号化変分ベイズです。機械学習界のいわば重鎮ですね。ここでもDKLが出てきます。同じものです。
では、DKLとは一体何でしょうか。機械学習の世界にいる人なら、これについて知っていることはこんな感じかもしれません。2つの確率分布間の距離を測る指標で、対称ではなく順序が重要で、ポリシーが大きく変化しすぎないようにする正則化として有用だ、と。これは氷山の一角で、正直なところ私もそのレベルでした。
しかし、何かを本当に理解するには教える必要があると気づきました。このYouTubeチャンネルもある意味でその一環です。そこで今日は、このKLダイバージェンスまたは相対エントロピーが何なのか、どこから来たのか、なぜ至る所で使われているのかについて深く掘り下げていきたいと思います。ご興味があれば、この旅にお付き合いください。
調子はどうですか、プラティーク。もう一度説明してほしいですか。相対エントロピーについてでしょうか。あまり確信が持てませんが...。
さて、GPTo1 ProとGemini Advanceについてです。これらは現在我々が持つ最も高度なAIと言えるでしょう。KLダイバージェンスについて聞いてみました。ほとんど全てのAIが、この基本的な公式を示してきます。KLダイバージェンスは2つの分布Q分布とP分布の間にあります。
一般的な使い方では、Pがデータの真の分布、Qがモデル、つまりニューラルネットになります。これが1つの考え方です。多くの場合、2つのニューラルネット、2つのポリシー間で使用されます。例えば、πθとπθiの場合、一方は反復的な学習をもう少し進めたニューラルネット、もう一方は数ステップ前のポリシーかもしれません。移動平均のような状況ですね。
基本的に2つの確率分布間の距離を測る指標です。QがPの代わりに使われる場合の非効率性を測ります。Geminiによれば、PからQのKLダイバージェンスの単純な解釈は、実際の分布がPの時にQをモデルとして使用することによる期待される過剰な驚きだそうです。
期待される過剰な驚き、非効率性、距離の指標...それぞれが異なる角度からアプローチしているようですね。ここで1つ理解しておくべき点は、この公式で見られるX上の総和についてです。これは離散的なバージョンで、分布からの離散的なサンプルXがある場合に使用されます。
連続バージョンもあります。連続的またはより一般的な測度論的な設定では、総和は積分に置き換えられます。こちらが連続バージョンです。PとQのDKL、またはPからQへのDKLです。対称的ではありません。ここでQとPを入れ替えると同じ値にはなりません。
これが連続バージョンで、マイナス無限大からプラス無限大まで積分します。ここで2つのガウス分布PとQがあります。完全には一致していないことがわかります。全く同じ分布ではありません。そのためDKLは正の数になることが予想されます。
この積分は文字通り、この面積です。マイナス無限大からプラス無限大までのx軸に関するこの面積を計算すると、ある数値が得られます。その数値がKLダイバージェンスです。KLダイバージェンスは大きな数値にも小さな数値にもなり得ます。また、完全に同じ分布の場合は0になります。
例えば、この分布PDとこの分布PGがあるとします。この場合、PGはPDの分布の約半分しか正確にモデル化していません。そのため、PDからPGへのKLダイバージェンスは非常に高くなります。
これを逆にすると、つまりPGからPDへのKLダイバージェンスは中程度になります。どちらをPとして、どちらをQとして使用するかによって値が変わってきます。PGとPDは同じものですが、KLダイバージェンスの値は順序によって異なります。
プラティークは明らかにこの数学をよく知っていますね。「ポリシーが大きく変化しすぎない」とは何を意味するのでしょうか。私が言いたいのは、強化学習でこのKLダイバージェンスを見かける場合、多くは損失関数に追加の項として加えられるということです。
実際に使用したい損失関数や、強化学習で増やそうとしているものがあります。強化学習では報酬関数があり、それを最大化しようとします。通常、KLは最後に追加する小さな項です。
そのためにこのハイパーパラメータがあります。このベータは0.001のような小さな数値になります。なぜなら、ニューラルネットに入る勾配の大部分がこのGRPOから来てほしいからです。このdklには小さな数値を掛けて、ポリシーに勾配を与えても大きく変化しないようにしています。
新しいポリシー、つまりθiとθi-1とθiの間で、分布が大きく異なり始めた場合、それにペナルティを与えたいのです。ポリシーを毎回劇的に変更したくはありません。それが「ポリシーが大きく変化しすぎない」という意味です。
新しい髪型を見逃しましたね。最初にAIに髪型を批評させる冗談から始めました。でも彼らは私がハゲていることだけを批評して、この変な山羊ひげについては触れませんでした。
さて、これは実際どこから来たのでしょうか。なぜKLダイバージェンスと呼ぶのでしょうか。KullbackとLeiblerという2人から来ています。これが1951年の原論文です。今となってはかなり古い論文ですね。
ここでf1xとf2xの比の対数を積分するのが分かります。これは実質的に連続バージョンです。基本的にこれと同じです。彼らはこれを「H1とH2を区別するためのXの情報量」と呼びました。H1とH2は基本的にPとQに対応します。これがオリジナルのKLダイバージェンスの定義です。
では、KullbackとLeiblerとは誰だったのでしょうか。この2人はすでに他界しています。Kullbackは1907年生まれで1994年に死去、Leiblerは1914年生まれで2003年に死去しました。彼らは基本的に暗号解読者でした。第二次世界大戦後、NSAで働いていました。
Kullbackはイギリスでエニグマ暗号解読を助けました。おそらく当時の著名な人々、フォン・ノイマンやチューリング、シャノンなどと知り合いだったでしょう。彼らは皆、軍事情報機関や暗号解読グループにいて、第二次世界大戦後に奇妙な研究機関へと変貌を遂げました。
Kullbackは約60人のチームを監督し、磁気テープなどのメモリを開発しました。Richard Leiblerはベノナ暗号解読プロジェクトで有名で、国家安全保障局で働き、防衛分析研究所の通信研究部門のディレクターを務めました。
基本的に彼らは、情報理論の始まりの時期に、暗号解読にそれをどう使うかを研究していました。この分野全体が始まった元々の理由は、ほぼ暗号解読だったのです。
プラティーク、「最小化負のKLダイバージェンス」について。全体的に距離を最小化したいのですが、損失関数の形では全体的にKLを最大化していないでしょうか。最小化と最大化...実際にはどちらでも構いません。
これが損失関数なら損失関数を最小化したい、これが報酬なら報酬を最大化したいわけです。しかし、あるものの負の値を最大化することは、そのものを最小化することと同じです。プラスかマイナスを適当に付けて、2つの分布を近づけたいのか離したいのか決めることができます。
強化学習では多くの場合、これは報酬関数として書かれ、できるだけ大きくしたいと考えます。一方、機械学習の論文では通常、これは損失関数として定式化され、できるだけ小さくしたいと考えます。
機械学習の人々は損失を最小化したいと言い、強化学習の人々は報酬を最大化したいと言います。しかし報酬を最大化することは、負の報酬を最小化することと同じです。最小化最大化は、マイナス符号を付けて反転させれば同じことです。
さて、この2人についてもう少しメタな視点で見てみましょう。これは私の個人的な不満の1つです。ここに赤いボタンを2つ押そうとしている人がいます。2つの選択肢があります。アイデアを説明し理解を助ける名前を付けるか、姓を基にした名前を付けて人々に自分のことを覚えさせるかです。残念ながら、多くの数学や物理学の博士は、アイデアを人々が理解できるようにすることよりも、自分のキャリアや自尊心を気にしています。
これらの人々がアイデアを思いついた時、本当に気にしているのは、そのアイデアに自分の名前を付けることです。人々に自分のことを覚えてもらいたいのです。数学と物理学は特にこの傾向が強いです。
こちらはウィキペディアのスクリーンショットで、見てください。ホワイトヘッドの理論、ブランディッカの理論、アインシュタイン・カルタン理論(アインシュタイン・カルタン・カマ・キブル理論とも呼ばれます)など。これらの名前は実際のアイデアの理解には役立ちません。単なる虚栄心による名前で、そのコンセプトを最初に思いついた人の名前を覚えることを強要しているだけです。
KLダイバージェンスもそのような虚栄心による名前の1つです。もはや死んで重要でもない人の名前を、限られた脳の処理能力を使って記憶させられているのです。
代わりに、このストリームのタイトルにしたように「相対エントロピー」と呼ぶべきです。なぜならこの名前は、このコンセプトがどこから来たのかを理解する助けになるからです。情報理論とエントロピーというアイデアから来ているのです。
既に述べたように、KLダイバージェンスまたは相対エントロピーは、エントロピーとクロスエントロピーというアイデアから来ています。機械学習に親しんでいれば、クロスエントロピーという言葉を聞いたことがあるでしょう。KLダイバージェンスは文字通り、クロスエントロピーからPのエントロピーを引いたものです。
2つの分布PとQがあり、クロスエントロピーはH(P,Q)、そしてH(P)がPのエントロピー、これがPからQへの相対エントロピーです。これらは全てエントロピーから来ています。
エントロピーには5種類あります。それが混乱の原因です。熱力学的エントロピー、古典統計力学におけるエントロピー、量子統計力学におけるエントロピー、情報理論におけるエントロピー、そしてアルゴリズム的エントロピーです。
エントロピーはかなり重複した用語です。KLダイバージェンスに関する相対エントロピーで参照されているのは、特に4番目の情報理論におけるエントロピーです。
H = -Σ Pi * log(Pi)という形で、ここでPは集合X上のある確率分布からのものです。
もう少し掘り下げてみましょう。情報理論におけるエントロピーは実際にはシャノンから来ています。おそらく聞いたことがあるでしょう。シャノンは情報理論として知られるようになった科学の分野を発展させました。これは、コンピュータなどの基礎となる分野です。
情報理論の核心には、エントロピーと呼ばれる情報の尺度があります。ある話によると、この名前はジョン・フォン・ノイマンとの会話から生まれたそうです。フォン・ノイマンは2つの理由でエントロピーという言葉を使うようアドバイスしました。
1つ目は、物理学に似たような概念が存在したからです。フォン・ノイマンは多才な人物で、様々な分野で卓越した能力を持っていました。フォン・ノイマンはシャノンに、情報の尺度についてのアイデアは、熱力学や古典統計力学で言うエントロピーに似ているから、そう呼ぶべきだと言いました。
また、ボルツマンがH定理でエントロピーを表すのにHを使用していました。なぜシャノンは情報理論でエントロピーにHを選んだのでしょうか。おそらくフォン・ノイマンがボルツマンの本(または論文かもしれません)を読むように勧めたからでしょう。そこでHが使われていたため、これがHを使う理由になったのでしょう。
エントロピーと情報理論のアイデアを理解する最良の方法は、公平なコイン投げと偏ったコイン投げを比較することです。公平なコイン投げ、つまり表と裏が50/50の確率のコインがあるとします。このコインのエントロピーは何でしょうか。
このコインの可能な状態全てについて合計すると、コインには表と裏という2つの可能な状態しかなく、それぞれが完璧な50/50の確率で出現します。つまり、表の確率は50%で1/2、裏の確率も50%で1/2です。これが1/2の由来です。
この対数は必ずしも2を底にする必要はありませんが、ここでは2を底にするのが便利です。1/2の2を底とする対数は簡単に計算でき、-1になります。しかし重要なのは、頭と裏の2つの可能性について、Xiの確率を入れ、対数を取り、両方について合計すると1になるということです。
一様な確率、つまり表と裏の間に等しい確率があることは、最大の不確実性をもたらし、したがって最大のエントロピーをもたらします。これを偏ったコイン投げのエントロピーと比較してみましょう。
コインを曲げて、表が出る確率が70%、裏が出る確率が30%になったとします。70%と30%を足すと100%になり、50%と50%を足して100%になるのと同じです。しかしこれを代入すると、2つの可能な結果、表と裂について、0.7×log₂(0.7)-0.3×log₂(0.3)を計算すると、0.88が得られます。
これは何を意味するのでしょうか。なぜ偏ったコインのエントロピーは、公平なコインのエントロピーより低いのでしょうか。一様でない確率は、より低い不確実性をもたらし、したがってより低いエントロピーをもたらします。
ここで述べられているように、エントロピーは期待される過剰な驚きの尺度のようなものです。エントロピーを考える別の方法は、この確率的なシステムを見たときにどれだけ驚くかということです。
システムがほとんど常に表を出すなら、エントロピーは低くなりますが、実際の公平なコインのように本当にランダムな場合は、エントロピーが高くなります。これが、少なくとも私にとって、情報理論の観点からエントロピーが正確に何であるかについての最も直感的で満足のいく説明です。
完全を期すために、他の種類のエントロピーも見てみましょう。アルゴリズム的エントロピーでは、記号列のエントロピーは、それを出力する最短のコンピュータプログラムの長さとされます。これはコルモゴロフ複雑性によく似ています。
これについて掘り下げてみましょう。私たちはアルゴリズム的エントロピーを見ています。メッセージを伝えるのに必要な最小限の情報量は何かということです。
例えば、あなたがここにいて、あちらの人にメッセージを送ろうとしているとします。これは文字通り、これらの人々がこれを思いついた状況です。これらの人々は暗号解読者で、基本的にNSAで働き、第二次世界大戦後の冷戦環境で、西ドイツにいる誰かに秘密のメッセージを送ろうとしていました。
どうやってそれらのメッセージが読まれるのを防ぐのでしょうか。暗号化する必要があります。秘密の言語に暗号化し、それを解読する必要があります。では、その秘密のメッセージにどのような暗号化方式を使用しますか。
よく考えてみると、最良の暗号化方式は、この文字列内の各個別トークンの確率を考慮に入れたものです。各文字に等しい確率がある場合、各文字に同じビット数を使用するのが最良の方法です。
しかし、ほとんどの場合に文字aを送ることがわかっている場合、つまり文字列内のトークンaの確率が文字dの確率よりもはるかに高い場合、実際により効率的にするには、aを1ビットで、dを3ビットで符号化したいでしょう。
全体として、これはより少ないビットを送ることになります。このように符号化すると、このように符号化するよりも少ないビットでメッセージを符号化できます。
これが情報理論全体のアイデア、情報理論的エントロピー、そして最終的に相対エントロピーとKLダイバージェンスにつながった種類のアイデアです。
より頻繁なものはより少ないビットということですね。OK、次は古典統計力学におけるエントロピーです。路上の一般の人にエントロピーについて聞いた場合、通常これが彼らが考えているものです。
物理学におけるエントロピーです。物理学の中でも異なる種類のエントロピーがありますが、ここでボルツマンは、実際に彼の墓石にこれを刻んでいます。かなりかっこいいと思いました。墓石に方程式と彼の定数が刻まれているのです。
ここでも多くの同じアイデアが見られます。ボルツマンは、任意のランダムな過程において、物質の最終的な配置は初期の配置よりも可能性が高いことに気づきました。
これが熱力学第二法則の由来で、熱が散逸し、気体中の分子が常により無秘序になるという考え方です。このような考えにより、ボルツマンは既知のエントロピーの概念を確率に結びつけることができました。
これは科学における大きな転換点でした。位置、速度、重さなどの特性を定義して現実を理解するという通常のアプローチが、不確実性、つまり情報の観点から再構築できることを意味しました。
実際にエントロピーのアイデアは、カルノーサイクルにまで遡ることができます。熱とその気体中での散逸の仕方、なぜ気体は容器を満たすのか、なぜこの特定の状態で気体中の分子を見つける可能性の方が、全ての分子がピストンを押している特定の状態で見つける可能性よりも高いのかを理解しようとした初期の頃からです。
これは1800年代のことだったと思います。これらの熱に関するアイデアは、最終的にジョン・フォン・ノイマンを経て、シャノンにそれを調べるように助言し、シャノンがそれを発展させました。エントロピーのアイデアは1800年代にまで遡ることができ、人々が熱を研究していた時期に始まったのです。
少し深く掘り下げましたので、これは良いスライドだと思ったので見せたいと思います。これはDeep seekのGRPOを示す図です。GRPOには2つの部分があることがわかります。1つ目はGRPOの実際の核心部分で、2つ目がKLダイバージェンスです。
これはそれをよく示している図だと思います。Deep seek R1では、自己回帰型の大規模言語モデルを扱っています。大規模言語モデルはここでトークン列を消費し、トークン列を出力します。
GRPOとR1の仕組みは基本的に、異なる補完をサンプリングし、それぞれの補完の報酬を見て、それぞれの補完の利点を見ます。これが、これらを出力する実際のLLMに勾配を与えるために使用する信号の大部分になります。
KLダイバージェンスはこれらの出力間にあります。これがPで、これがQ、またはこの場合はポリシーとリファレンスポリシーです。KLは文字通り、これからこれを引いたものにその対数を掛け、これからこれを引いたものにその対数を掛け、これからこれを引いたものにその対数を掛けたものです。
これがR1論文におけるKLダイバージェンスの使用のより視覚的な理解です。
少し休憩してイェルバマテを飲みましょう。
Daniel Hunter、ストップビットが必要ではないかと聞いていましたね。ええ、これらの1つになるでしょう。考え方の1つとして、ストップビットがどのくらいの頻度で出現するかです。
ストップビットが毎文で出現する場合、おそらく少ないビット数のストップビットが欲しいでしょう。しかし、本全体を送信していて、本の最後までストップビットを見ないのであれば、非常に複雑なものにしてもかまいません。
文の開始や終了など、これらの特殊なトークンについても、これらの特殊な記号の符号化を選ぶ最も効率的な方法は、このような情報理論的なアイデアを使うことになります。
図をもう一度説明できますか?少し難しいですね。正確な公式を見ながら行う必要があります。上にスライドさせて、すぐに切り替えられるようにしましょう。
ここでAiは有利度です。そしてこれらのGRPOサンプル、ポリシーからの出力O1からOGまでの合計を見ることができます。i=1から始まるこれらのOiがあります。これらは全てポリシーから来ています。ポリシーはニューラルネットで、入力を消費して出力を生成します。
つまり、ニューラルネットが入力を消費して、これらの出力を生成しているということです。クリッピングがありますが、クリッピングはここには表示されていません。報酬から平均を引いて標準偏差で割っているのが見えます。これが有利度のクリッピングです。
そして-βKLがこれです。ここにマイナスが入っているのが分かります。KLはポリシーとリファレンスポリシーの間にあります。πθ、つまりこのポリシーモデルと、πリファレンス、リファレンスポリシーの間のKLです。これらの間です。
そして全てを合計します。i=1からGまでの合計です。これらがIAL 0、IAL 1、IAL 2、IAL 3、というようにGまで続きます。理解できましたか?
さて、相対エントロピーを調査していて、深く掘り下げたいと思います。相対エントロピー、つまりKullback-Leiblerダイバージェンス、KLダイバージェンスが様々な機械学習フレームワークでどのように実装されているかを見てみましょう。
最初に見るのはJaxです。Jaxは基本的にTensorFlowの後継で、特に変わったことをする場合にかなり人気があります。しかしJaxはnumpyやscipyのようなふりをすることも好みます。
より多くの開発者にJaxを使ってもらうために、より親しみやすくする戦略の1つとして、データサイエンスコミュニティで非常に人気のあるnumpyやscipyに似た構文を使用しています。
TensorFlowの問題の1つはCに似ていたことでしたが、多くのデータサイエンティストや機械学習の人々に使ってもらうために、numpyのような見た目にしています。
ここにklordivがあり、これはP arraylikeとQ arraylikeという2つのものを取ります。これがオリジナルのPとQです。2つの分布です。
では、分布がarray likeとはどういう意味でしょうか?分布がどうしてarray likeなのでしょうか?これがWikipediaの例です。2つの分布、分布Pと分布Qがあります。分布Pは二項分布で、0、1、2という3つの可能な値があり、それぞれの可能な値には異なる確率があります。
1の確率は0.5、いや正確には0.5ではありませんが、それに近い値です。0の確率、2の確率があります。分布Qは一様分布で、3つの可能な結果全てが等しい確率を持っています。
これら2つの分布をどのように配列として表現するのでしょうか?これが正確にその方法です。これらの結果それぞれの確率を含む配列、テンソルを作成します。これは大きさ3の配列です。これがこれらの関数、この特別なKdivが期待しているものです。
コイン投げでは2つありましたね。コイン投げには2つの可能な結果があるからです。これらの分布には3つの可能な結果があります。そのため、その合計は3つの可能な結果について行われます。
実際にKdivの中を見てみると、これが実際のPython関数です。Kdivにはここに良いdocstringがあり、promote_args_inexactがあり、それからrelative_entropyを呼び出します。
実際にJaxの中を深く見ていくと、KLダイバージェンスと呼ぶのをやめて、relative entropy(相対エントロピー)と呼んでいます。これがより良い名前だと思います。
このpromote_args_inexactは実際に何をしているのでしょうか?array likeな出力を保証し、特定のデータタイプを除外し、PRNGキーを除外しています。
Jaxの特徴の1つは、ランダム性に関して非常に厳密だということです。Jaxでランダム性を持つことができる場所では、このランダムキーを供給する必要があります。
Jaxを使用する際は、完全に再現可能なランダムな振る舞いを可能にするこれらのキーを常に渡しています。なぜなら、微分可能な計算問題では、そこにランダム性が含まれている可能性があり、そのランダム性は再現可能である必要があるからです。
実際のランダム性は欲しくありません。実験を再現できるようにしたいのです。このchosdivは最初に、これらが同じサイズであることを確認し、正しいデータタイプであることを確認し、個々の要素が正しいことを確認し、ランダムキーが適切に設定されていることを確認します。
これは単なる一連のチェックです。一般的なチェック処理の集まりです。
さらに深く見ていきましょう。このreal_entropyとは何でしょうか?Kdivからreal_entropyに来ましたが、今度は実際のreal_entropyを見てみましょう。
これが実際のJaxコードです。ここに同じpromote_args_inexactがありますが、その後に奇妙なものがあります。何が起こっているのでしょうか?
このビット演算AND、ビット演算ANDがあり、PとQがあります。both_gt0_maskで、Pを1に置き換えているところがありますが、これは一体何をしているのでしょうか?なぜsafe_pとsafe_qがあるのでしょうか?
その理由は、KLダイバージェンスは脆弱だからです。この定式化の方法のため、単純な問題として、ここで何かで割り算をしています。このQ(x)が0なら、0による除算になってしまいます。
実際にこれを計算するコードを書く際には、Qが0以上であることを確認する必要があります。これがこれらのj.andp_whereがしていることです。そのためにsafe_q、safe_pを作る必要があります。
0や無限大、奇妙なものがないことを確認する必要があります。実際のKLダイバージェンスまたは相対エントロピーはここにあります。x_log_x_safe_pとx_log_y_safe_p_safe_qです。
これが文字通りの公式ですが、他の全ての部分は基本的に、QやPが0の状況がないことを確認し、PとQが0の場所を全て置き換えているだけです。
例えば、分布Qで、これら2つが2/3、2/3で、この列が0だった場合、これがそれをチェックしているものです。
みなさん調子はどうですか?julanさん、調子はどうですか?
こちらの記事を見てみましょう。これはJohn Schulmanのホームページにある2020年のブログ記事です。John Schulmanは元々OpenAIのメンバーで、現在はAnthropicで働いています。
「KLダイバージェンスの近似」という記事です。とても良い記事です。KLまたは相対エントロピーを計算するためのオプションは、PとQ、2つの確率分布へのアクセスの種類に依存します。
任意のQに対してP(x)とQ(x)の確率または確率密度を計算できると仮定します。つまり、これらの数値、25分の9、25分の12、25分の4を得ることができます。
しかし、X上の和を解析的に計算することはできません。なぜ解析的に計算できないのでしょうか?計算に時間やメモリが多すぎる、閉形式の表現がない、コードを単純化するために対数確率だけを保存している、KLが単なる診断として使用されている、などの理由です。
和や積分を推定する最も一般的な戦略は、モンテカルロ推定を使用することです。ここにモンテカルロ推定の仕組みを示す2つの図があります。
この場合、円周率πを近似しようとしています。円周率をどうやって近似するのでしょうか?円を描く、またはこの場合は円の4分の1を描き、その中にランダムに点をサンプリングし、内側の点と外側の点の比率を見ます。
サンプル数nを5,000から30,000に増やすと、このような数値サンプリングのモンテカルロベースの手法による円周率の近似が、実際の円周率の値にどんどん近づいていくのが分かります。
彼が言っているのは、この種の分布では比較的簡単だということです。3つの可能な値しかなく、これらの3つの可能な値それぞれの正確な確率を得ることができ、この和を計算できます。この場合は1から3までの和を計算できます。
しかし、多くの実際の問題では、その確率分布はそれほど簡単ではないでしょう。そのため、モンテカルロ技法を使用してKLダイバージェンスまたは相対エントロピーを近似する必要があります。
彼はブログ記事でこの導出全体を説明していますが、最も重要なのはこれです。これが彼が最終的に使用する実際の近似です。RlogRとRus1、そしてR-1-RlogRです。ここでRはPとQの比率、つまりP/Qです。
実際にここで計算されているものがそれだと分かります。real_entropy_p_q - p + qです。Jaxでの実際の実装は、基本的にこれらの近似の1つです。
数値的安定性の問題について、ランダムな質問ですが、私は猫を飼っていますか?nodsさんから。ええ、猫を飼っています。このような白いベンガル猫を飼っています。これが私のYouTubeチャネルに猫が至る所にいる理由です。実際に猫を飼っているからです。
猫の名前はブオです。何度かストリームに出演していますが、少し臆病です。
さて、数値的安定性の話に戻りましょう。Qが0の時の0による除算、ここでの0による除算は爆発します。そのため、それは扱えません。意味が未定義になります。
Pが0の時の0の対数を取ると、マイナス無限大になります。そのため、いくつかのケースでPが0の場合、単にPの対数を取ることはできません。
これが数値的安定性です。KLダイバージェンスは非常に大きくなり、オーバーフローの問題を引き起こす可能性があります。これはP(x)とQ(x)の差が大きい時に起こりえます。これは対数確率と適切なスケーリング技法を使用することで緩和できます。
ここから始めましょう。彼らが話している問題とは何でしょうか?Torchでテンソルがあるとします。ここに5、50,000、-50,000という数値があり、これをfloat16データ型に入れ、log_softmaxを行い、そしてここでKevを行います。
float16の精度でこのKdivを行うと、損失値が無限大になります。これが数値的安定性の問題と呼ばれるものです。これらの数値が大きすぎたり小さすぎたりすると問題が発生し始め、大きすぎる小さすぎるはデータ型自体に依存します。
なぜなら、結局のところコンピュータの中では、これらの数値はこれらのデータ型を使って表現されているからです。float32やfloat16のようなデータ型は、異なる数の指数を持っています。
この指数を見てください。これが使用している数値がどれだけ大きく、どれだけ小さく表現できるかを決定します。8ビットの指数では、1×10の8乗または1×10のマイナス8乗を表現できます。
つまり、0.1または1の後に8個の0が続く数を表現できます。符号のために1ビットあります。正か負かです。符号なしfloat32の場合、この符号ビットはなく、正の数のみを表現できます。
この小数部は、数値の精度のようなものです。0.001234567のように、ずっと続きます。しかし問題は、特に言語モデルのようなものでは、非常に小さな数値と非常に大きな数値が出てくることです。
これを簡単に示してみましょう。以前にも示したことがありますが、これはトランスフォーマーベースの言語モデルの可視化です。これらのトークンを消費し、全ての可能なトークンに対する確率分布を出力しているのが分かります。
全ての可能なトークンに対する確率分布とは、次のトークンがこれなのか、これなのか、これなのか、という確率を表す派手な言い方です。その長さ、つまり可能な値やトークンの数は、言語モデルの語彙です。言語モデルの語彙は10万程度になることがあります。
つまり、モデルは10万の可能な値に対する確率分布を出力しているのです。ここで制御不能になる理由が分かります。ここでの合計はコイン投げの2つの可能な値についてだけです。この分布では3つの可能な値があります。
言語モデルで3万の可能な値がある場合を想像してください。それらの値の多くは極めて低い確率を持つことになります。次の単語が「火山」である確率は0.1のようなものです。
そして、ここで必要な合計や乗算を行うと、非常に小さな数値になり、最終的に数値的安定性の問題が発生します。コンピュータ内でこれらの数値を表現する方法が小さすぎるからです。
そこで対数を使用します。統計モデリングと機械学習では、多くの場合対数スケールで作業します。これには多くの良い理由があります。xとyが共に小さな数値の場合、x×yはアンダーフローする可能性がありますが、対数スケールで作業することで、乗算を加算に変換できます。
対数には、log(x×y) = log(x) + log(y)というマジカルな特性があります。導関数を取る場合も同様の状況があります。f(x)×g(x)の対数のxに関する偏微分は、それぞれを個別に偏微分して足し合わせることと同じです。
各関数を個別に微分する方が、積の法則を適用するよりも簡単です。対数のこれらの特性により、対数で作業する方が簡単になります。乗算を加算に変換できます。
これはx/yについても同様です。x×(1/y)またはx/yは、log(x)-log(y)と同じです。これが我々の相対エントロピー方程式の中にあるものです。f1/f2があり、f1の対数からf2の対数を引いています。それを置き換えることで、この状況全体を単純化できます。
対数スケールでの作業は、多くの標準ライブラリよりも数値的に安定しています。なぜそうなのか、これらの図で示します。
ここにlog_e(x)のプロットがあります。繰り返しになりますが、対数の底は重要ではありません。log_2やlog_10やlog_eでも、基本的に同じように機能します。
重要なのは、xの値が1の場合、このy=xという直線があり、1が得られるということです。xの値が1000万の場合、1000万が得られます。この関係では非常に急速に大きくなります。非常に大きな数値や非常に小さな数値にすぐになってしまいます。
なぜlog(x)なのでしょうか?対数は平滑化します。これが平滑化しているのが分かります。基本的な直感として、このxをどれだけ大きくしても、ここに10兆を入れても、これほど大きくはならないということです。
対数は自然に平滑化します。xを指数関数的に増やし続けたり、xをどんどん小さくし続けても、素晴らしい値になります。これが人々が対数を使用する理由で、これらの特性とこのような数値的な特性のためです。
おそらくこれを見たことがあるでしょう。線形スケールと対数スケールです。線形スケールはすぐに制御不能になりますが、対数スケールではそれを平坦化できます。
みなさん理解できていますか?質問が見えないので分かりませんが。
さて、ここにいました。JaxでのKdivの実装を見ていました。Kdivの中に型チェック用のラッパーがあり、それから実際の実装がありましたが、まだここでx_log_xとx_log_yがどのように計算されているのか分かりませんでした。
もう一段階深く見てみましょう。もっと深く見ていくと、CUDAに行き着きます。このPythonコード、このJaxのPythonコードを書いている時、実際に実行されているのはそれではありません。
コンピュータで実際に実行されているのはそれよりも低レベルです。CPUで実行している場合、操作はLIBMやMKLのような標準ライブラリを使用して実装されます。GPUで実行している場合、CUDAライブラリが実行され、CUDAライブラリ自体もおそらく実行しているGPUに応じて少し異なるバージョンになります。
異なるGPUは、これらの機能の一部を実行できる異なる専用チップを持っているかもしれません。古いGPUではlogのこの特定の実装を使用し、別のGPUではlogの別の特定の実装を使用するかもしれません。
ハードウェアレベルまで下がると非常に複雑になり始めます。なぜなら、最適に何かを実行するにはハードウェアを意識する必要があるからです。何かをより効率的に実行するには、ハードウェアを知る必要があります。
ハードウェアに近づけば近づくほど、異なる種類の解決策が爆発的に増えます。多くの異なる種類のハードウェアがあるからです。
これは面白いと思ったものです。標準ライブラリのものではありません。標準ライブラリにもlog実装はありますが、これは異なるものです。これはlibquadmathで、高精度データ型用のものです。
これはクレイジーだと思いましたが、このGCCの特定の実装では、基本的にこれを使用してlogを推定しています。log(x+1)は、この無限級数を使用して近似できます。これが実際のコードの行です。
log(1+x)の級数展開を見てください。時々、奇数偶数判定関数を実装するミームのように、if文が巨大に続くものがありますが、logの実装を十分深く掘り下げると、これはCPUで実行される巨大なネストされた14行にわたる何かになります。これはCUDAコードではありません。
基本的に誰かが任意に、これらの項を14まで行けば十分近似できると判断したのです。これが実際に実行されているものです。
話題が逸れますが、CPUとCUDAのディスパッチロジックシステムについてもっと学ぶにはどうすればいいでしょうか?CUDAに興味があるなら、このウェブサイトがあります。何と呼ばれているか...CUDAとPythonのウェブサイトコンバータか何かです。
見つけられるか試してみましょう。見つからないかもしれませんが、アルゴリズムをPythonで書くと、実際に実行されているCコードや、必要ならCUDAコードも表示してくれるウェブサイトがあります。可視化ウェブサイト...学習...見つからないでしょう。特にJesの下では。
おそらく誰かがこれについて知っているかもしれません。後で見つけてDiscordに投稿します。
さて、ここに行きましょう。実際に、GPTをテストしてみましょう。「Pythonコードを一方に置くと、もう一方に実際の低レベルコードを表示してくれるウェブサイトを覚えています。このウェブサイトを知っていますか?」
おお、これだ!これを推奨したかったのです。Daniel Hunter、ここにあります。Pythonコードがあり...ズームインしましょう。これは多分皆さんには小さすぎますが、Pythonを書く時、実際にあなたのコンピュータで実行されているのはそれではありません。Pythonは実行時にJust In Timeでコンパイルされています。
これが実際に実行されているものです。CUDAのバージョンもあり、C++のバージョンもあります。
それではPyTorchの実装を見てみましょう。PyTorchのドキュメントには、KLダイバージェンス(相対エントロピー)の2つの異なるバージョンがあります。nn.functional.kldivとkldiv_lossです。KLダイバージェンスは多くの場合、損失関数の一部として使用されます。14個の項があって、その中の1つがKLダイバージェンスというような形です。そのため損失バージョンと、functional APIの中のより一般的なバージョンがあります。
GitHubのPyTorchリポジトリでKLまたは相対エントロピーを検索すると、3つの異なるバージョンが見つかります。Pythonの関数がfunctionalの中にあり、これがfunctional.pyです。そしてこれが実際に実行される本物のC++の関数です。さらにtorch.distributions.kldという少し変わったものもあります。
まずkldivの中を見てみましょう。torch.kldivを呼び出しているのが分かります。C++のバージョンに行くと、ターゲットの指数とターゲットからの入力のXlogXがあります。これがJAXで見たのと同じXlogXやXlogYです。
PyTorchでKLダイバージェンスを見つけることができましたが、なぜこのif文があるのでしょうか。「log_target else」となっています。これは、PyTorchの関数ではターゲットが対数空間にあるかどうかを指定できるからです。入力は既に対数形式になっています。PyTorchのKLダイバージェンス関数は、既に安定した対数確率を持っている場合に繰り返し対数を計算するのを避けるように設計されています。
内部的には、既に対数形式になっている場合、コードを単純化して対数確率をそのまま保存できます。どうせ確率は対数空間で使用されるので、元に戻してから再度対数を取る必要はありません。
先ほどPyTorchリポジトリでKLを検索したときに見つかった、少し変わったtorch.distributions.kldを見てみましょう。これはもはやテンソルや配列のような形式ではなく、分布オブジェクトを取ります。これはtorch.distributionsパッケージから来ており、パラメータ化可能な確率分布とサンプリング関数を含んでいます。確率的な計算グラフと確率的勾配推定器を最適化のために構築することができます。
基本的にはTensorFlowの分布をコピーしたものですが、すべてが分布オブジェクトになっている、やや厄介なオブジェクト指向の実装です。さまざまな種類の分布があり、この分布の型がこの辞書のキーになっています。分布型には多くの子型があり、それらを見て「PがガウシアンでQが一様分布の場合は、このKLダイバージェンスの特定のバージョンを使用する」といった具合です。
このKLDファイルを見ると、文字通り分布の型に応じて異なるKLダイバージェンスの実装がたくさんあります。ベータ分布同士のKL、二項分布同士のKL、デルタ分布同士のKL、カテゴリカル分布同士のKLなどです。これは見たことのない中で最も奇妙な実装で、KLダイバージェンスの実装が、分布の型に応じて異なる実装を含む辞書になっています。
階層を掘り下げていくと、常にこのようなスパゲッティコードの混乱に行き着くものです。
TensorFlowについてですが、実際のところTensorFlowは死んでいます。Papers with Codeからのこのグラフを見てください。2014年12月から2024年12月までのフレームワークのシェアを示しています。Papers with Codeは常に論文をデータベースに取り込んでおり、各論文には通常GitHubリポジトリが付いています。そのGitHubリポジトリがどの機械学習フレームワークを使用しているかを調べています。
最初は薄い青の「その他の言語とフレームワーク」が多かったのですが、オレンジのTensorFlowを見てください。2015年、2016年、2017年、2018年と、TensorFlowのピークは2018年でした。私がGoogleにいた頃です。2017年から2018年にかけて、TensorFlow 2のリリースイベントがあったことを覚えています。それが基本的にTensorFlowのピークでしたが、時間とともにTensorFlowは実際に衰退していきました。
使用する人が少なくなり、今ではGoogle内でもJAXを使用し、PyTorchを使用する人もいるというのは少し奇妙です。大きなのはPyTorchで、このより濃いオレンジがシェアを伸ばし続けています。OpenAIはPyTorchを使用し、XもPyTorchを使用し、みんなPyTorchを使用しています。
JAXでさえあまり伸びていませんが、JAXは間違いなくTensorFlowよりずっと優れていて、多くの点でPyTorchよりも優れていると思います。PyTorchの問題は、使用する人が多すぎて、何百人もの人々が常にPyTorchにいろいろなものをプッシュしていて、多くの異なる要件があることです。
こんなに多くの人が使用し、多くのインフローがあるコードベースでは、制御不能になりがちです。特別なケースが多すぎて、このゴミが蓄積し始め、非常に扱いにくくなります。実際、TensorFlowも同じアキレス腱があり、あまりにも多くのことが起こっていて、ゴミが蓄積され、使用できなくなりました。PyTorchもその境界線上にいます。
しかしJAXは比較的新しいので、クリーンです。そのクリーンさが新鮮です。微分可能な計算のアイデアを書きたい場合、JAXが最適だと思います。しかし大きな会社を作りたい場合や、他の人のものを使用したい場合は、おそらくPyTorchになるでしょう。
さて、私たちはさまざまな実装を見てきました。JAXの実装、PyTorchの実装、TensorFlowの実装を見て、今度は遊びでtinygradの実装を見てみましょう。tinygradは機械学習フレームワークの世界での新参者です。Hotzによって作られた機械学習フレームワークで、基本的にCをラップしたPythonです。
Pythonそのものが基本的にCの上に素敵なラッパーを付けただけのものです。私はtinygradのコードやドキュメントを探していましたが、見つけることができませんでした。バイナリクロスエントロピーやスパースカテゴリカルクロスエントロピーはありますが、相対エントロピーやKLダイバージェンスはどこにあるのでしょうか?
イシューやプルリクエストを調べましたが、提出されたものの取り込まれなかったのかもしれません。これは基本的なものに思えます。機械学習フレームワークでKLダイバージェンスがないのはおかしいと思いました。
しかし、実際には必要ないということに気づきました。GPT-01からの引用によると、予測確率と正解のone-hotラベルに基づいて損失を計算する場合、これはクロスエントロピーで、基本的に大規模言語モデルが損失関数として使用しているものです。
one-hotからQへのKLダイバージェンスですが、one-hotベクトルはすべてが0で1つだけ1のベクトルです。なぜ言語モデルのトレーニング時にone-hotを使用するのでしょうか?それは、勾配をモデルにプッシュするために使用しているのがカテゴリカルクロスエントロピーだからです。
これは基本的に、トレーニングに使用している実際のデータの中で、この入力単語のシーケンスの後に実際にどの単語が出現したかを示しています。インターネットのクリーンなバージョンからサンプリングしたバッチで、その特定の文で「データの可視化はユーザーに力を与える」の後に実際に来た単語が、あなたの正解のone-hotになります。
基本的には教師あり学習を行い、クロスエントロピーですべてを戻していきます。しかし重要な点は、クロスエントロピーの最小化は基本的にKLダイバージェンスの最小化と定数項の和であるということです。
これは既に知っていました。PとQのKLダイバージェンスは、PとQのクロスエントロピーからPのエントロピーを引いたものです。このDeepSeekerの場合、これは定数ではないでしょうか?
このKL項をクロスエントロピーにできないでしょうか?この項はそれほど重要でしょうか?そこで私はtinygradが相対エントロピーやクロスエントロピーの実装を持っていない理由を理解しました。同じものだからです。
tinygradはコードの行数にこだわっています。有名な「ほとんどのコードは自身の重みで崩壊する。複雑さが進歩を妨げるほど大きくなる。行数は完璧な指標ではないが、どの指標を使っても、tinygradは2桁単純である」という言葉があります。
「tinygradが5,000行を超えると鳴るサイレンをオフィスに設置した」という有名なミームがあるように、George Hotzはtinygradのコードベースの総行数を減らすことに異常なこだわりを持っています。
コードの総行数を本当に減らそうとするなら、クロスエントロピーからエントロピーを引いたものを呼び出すだけの別のKLダイバージェンスを持つのではなく、このクロスエントロピーを使用するのが簡単な方法の1つです。
これが実装されていない理由が分かりました。クロスエントロピーで済むからです。しかし、これが必ずしも優れた設計とは思えません。より冗長で煩雑で、確かに多くのコード行を追加することになりますが、これらを明示的なバージョンとして持つことには価値があると思います。
使用する人が「KLダイバージェンスのようなものが必要なので、KLダイバージェンスの代わりにクロスエントロピーを使用できる」と考えることを前提とするのではなく。
要約すると:
相対エントロピーは、多くの機械学習論文、特に強化学習の論文で登場します。これらの論文では、可能な次のアクション、この場合はトークンの集合に対する確率分布を出力するポリシー、モデル、ニューラルネットを扱っています。
相対エントロピーは、分布Pがどれだけ分布Qと異なるかを示す距離メトリックです。あるいは、トークンの集合に対してある確率分布を出力するこのニューラルネットが、同じトークンの集合に対して確率分布を出力する別のニューラルネットとどれだけ異なるかを示します。
おそらくこれはポリシーの古いバージョンで、これは少し新しいバージョンかもしれません。あるいはこれは人間で、これは人間の操作するロボットで、これは人間を模倣しようとしているニューラルネットかもしれません。
KLダイバージェンスは暗号解読者から来ています。第二次世界大戦後のシャノンとフォン・ノイマンによる情報理論のルネサンスの時代に、KulbackとLeiblerという2人がいました。残念ながら彼らはおそらく古風な考えを持っており、自分たちの名前を覚えてもらいたいという虚栄心から、相対エントロピーの代わりにKLダイバージェンスと呼ぶことにしました。
しかし私は相対エントロピーという名前を好みます。人々の理解を助けようとしているのに、KLダイバージェンスは理解の助けにはならないからです。
ポリシーは生成されたテキストと期待されるテキストではありません。ポリシーはニューラルネットを表す言葉です。ポリシーはモデルで、そのモデルはパラメータによってパラメータ化されています。LLaMAが700億のパラメータを持つと言うとき、このθが700億個の数字であることを意味します。LLaMA-7Bではθは70億個の数字です。
DeepSeeker R1のポリシーモデルは、これらの数字によってパラメータ化されたニューラルネットで、トークンのシーケンスを消費します。この赤、この赤、この赤、この赤、この赤、この赤、この赤、この赤、この赤を消費し、そして緑、緑、緑を生成します。自己回帰的なので、ここにいるとすぐに次のものを作り、次のものを作り、次のものを作り、次のものを作り、次のものを作ることができます。
これがポリシーです。単なるニューラルネットです。
なぜHP(定数)はKLを近似してクロスエントロピーを計算する際に無視されるのか、重要ではないのでしょうか?必ずしも重要ではないというわけではなく、それほど重要ではないということです。
ここで述べているように、クロスエントロピーを最小化することは、基本的にKLダイバージェンスと定数項を最小化することと同じです。このHPQを最小化することは、DKPQを最小化することとほぼ同じです。HPもありますが、Pのエントロピーがあまり変化しない数値であれば、それほど重要ではありません。
同じではありませんが、似ています。実際にPのエントロピーを計算すれば、そこにはおそらく何らかのシグナルがあります。以前述べたように、エントロピーは確率分布によって変化するからです。
コインフリップを例に取ると、すべての可能な結果が50%の確率を持つ場合、より高いエントロピーを持ちます。このHPの値は、実際のポリシーのエントロピーに依存します。
DeepSeeker R1の論文では、ポリシーは可能なすべてのトークンに対する確率分布を出力する言語モデルです。その確率分布が非常にスパイク状で、基本的に3つのトークンが高い確率を持ち、他はすべてゼロである世界を想像できます。
これは、すべてのトークンが選ばれる確率が等しい、非常に一様な確率分布とは異なるエントロピーを持つことになります。その場合、このより一様な分布と、よりスパイク状の確率分布の違いは、この値が異なることを意味します。このHPは変化します。
そのため、クロスエントロピーの最小化とKLの最小化は若干異なりますが、高いレベルでは同じようなものです。
エントロピーとは何でしょうか?実際に良い質問です。エントロピーにはさまざまな種類がありますが、今日特に話題にしたのは情報理論におけるエントロピーで、Hと表されます。
これがHと呼ばれる理由は、クロード・シャノンがジョン・フォン・ノイマンの下で働いていたからです。非常に教養があり博学な多才なフォン・ノイマンは、ボルツマンの研究を知っていました。
1800年代に生きたドイツ人のボルツマンは、カルノーサイクルや熱機関の研究を基に多くの研究を行いました。ガスやピストンについて考えていた人々、つまり蒸気機関の始まりの時代です。
「ピストン内のガスを加熱すると、分子がピストンヘッドを押し上げる...これはどうやって動いているのか?」と人々が考え始め、粒子の確率について考え始めました。
ボルツマンは彼の特定の理論でエントロピーという用語を使用しました。実際にはエントロピーという用語を作ったのは彼より前の誰かかもしれませんが、彼は文字Hを使用しました。
そのためジョン・フォン・ノイマンはシャノンにその研究を指し示し、情報理論的エントロピーの創始者として知られるクロード・シャノンは文字Hを使用することにしました。
エントロピーについて話した後、KLダイバージェンスのいくつかの異なる実装も見ました。JAXで見て、実際のCUDAコードまで追跡しました。さらに下へ、さらに下へと追跡し、最終的にXlogXに到達します。
そしてこのXlogXは最終的に、通常は展開級数に基づく標準ライブラリのlog実装に行き着きます。そして人々が最終的に使用する実際の恐ろしいコード行がここにあります。
logxと入力すると、最終的にはこのような行のコードになります。この特定のものではありませんが、これは少し異なるライブラリですが、このような展開や近似です。
PyTorchの実装を見て、この少し変わった、オブジェクト指向的なKLダイバージェンスの分布実装を見つけました。使用する分布に応じて異なる実装のKLダイバージェンスの辞書です。
TensorFlowが死んでいることを笑い、PyTorchがますます大きなシェアを獲得していることを見ました。2014年、2015年から2024年までのグラフで、このオレンジがTensorFlowです。
時間とともにTensorFlowのピークがあり、その後衰退していったのが分かります。そしてここにPyTorchがあり、シェアを増やしています。
JAXは誰も使用していないように見えますが、それでも非常にクリーンで、多くの点でPyTorchよりも使用が楽しいと感じます。より機能的でPyTorchよりも少し楽しいです。
最後にtinygradで締めくくりました。tinygradのドキュメントやプルリクエスト、イシューの中でKLダイバージェンスや相対エントロピーを探していましたが、なぜ誰もこれを使用していないのかと思いました。これは基本的なものに思えるのに。
そして、それがそこに実装されていない理由は、効果的にクロスエントロピーを使用できるからだと気づきました。彼らはコードの行数に非常にこだわっているので、基本的に1つの実装しか持たないことにしています。
クロスエントロピーになるでしょう。KLダイバージェンスを最小化したい?クロスエントロピーを最小化してください。他の種類のエントロピーを最小化したい?クロスエントロピーを最小化してください。
コードの行数の制限により、tinygradでこのKLダイバージェンスを実装することはできませんが、ここのクロスエントロピーは使用できます。
報酬はどのように計算されるのでしょうか?DeepSeeker R1のこの報酬についてお話ししています。ここにRMがあり、これは報酬モデルを表しています。基本的に強化学習における報酬は環境から来ます。
シミュレーション内にロボットがいる場合や、似たようなものとして囲碁やチェスのゲームがある場合、そのゲームの最後には誰かが勝ちます。
一つの方法は、このゲームに勝った場合、その勝利の手の直前に取った手、その前に取った手、その前に取った手、そのすべての手が高い報酬を持つことになります。
チェスに負けた人を見ると、負ける直前の手は多分悪く、その前の手も多分悪いと言えます。このような報酬シグナルを持つことができる環境であれば、これらの報酬モデルを作成したり、報酬のアイデアを持つことができます。
ここ全体が良いことで、ここ全体が悪いことだと言えます。これは通常、勝者と敗者のいるロボットやシミュレーションやゲームでのみ機能しますが、今人気なのは数学やコーディングでこれを行うことです。
数学やコーディングでは、トークンの長いシーケンスがあり、最終的に最終答えに到達し、その最終答えが正しいかどうかを検証できます。それを使って報酬のアイデアを得ることができます。
数学の問題の始まりがあり、そこから外に向かう4つの異なる道筋があり、どれが正解に到達し、どれが間違っているかを見ることができます。これが正しく、これが間違っているとわかれば、すべて遡って、これらすべてが多分間違っていると言えます。
DeepSeeker R1ではオンラインRLを使用しているのか、オフラインRLを使用しているのでしょうか?Edが話しているオンラインとオフラインについてですが、これらのポリシー、強化学習を行う際、ニューラルネットにポリシーと呼ばれる勾配をプッシュしています。
特に、異なるゲームをプレイする多くのGPUがある大規模な分散システムがある場合、収集しているデータは、今持っているニューラルネットと同じではありません。この特定のゲームを作成したニューラルネットポリシーは、今持っているニューラルネットポリシーとは異なります。
そのゲームを作成したニューラルネットではないニューラルネットに勾配をプッシュするのは奇妙ではないでしょうか?オンラインとオフラインRLは、この経験を作成した実際のニューラルネットに直接勾配をプッシュしているのか、それとも今持っているポリシーとは異なるポリシーによって作成されたデータの束を持っていて、そこに勾配をプッシュできるのかということです。
オンラインRLでは、使用しているポリシーが関連性があります。それは特定の経験を収集するために使用した実際のポリシーだからです。しかしオフラインRLでは、より多くのデータが利用可能です。
勾配をプッシュしているポリシーではなかった他のポリシーからの何千ものゲームを使用できるからです。分散RLシステムでは、この問題に常に直面します。1つの勾配をプッシュすると、実際の経験収集に使用している他のすべてのポリシーは古くなってしまうからです。
このポリシーπ_oldは、勾配をプッシュした後、以前にその経験を収集したポリシーが、今持っているポリシーとは異なることを意味します。
DeepSeeker R1はオンポリシーですか、オフポリシーですか?私はオフポリシーだと思います。そのためここにこのKLダイバージェンスがあります。通常、多くのRLでは、このKLダイバージェンスは基本的に、このポリシーが数回前のポリシーとは異なることを示そうとしています。
今持っているポリシーと、4ステップ前に持っていたポリシーが似ているようにしたいのです。今持っているポリシーが、10ステップ前に持っていたポリシーから大きく変化することは望ましくありません。
なぜなら、今持っているポリシーは、最近プッシュしたものに対して最適化されているのに対し、10ステップ前に持っていたポリシーは、その時点でプッシュされたものに対してより最適だからです。
このKLダイバージェンス、この相対エントロピーを報酬や損失関数の一部として使用することで、基本的にポリシーが離れすぎることを防ぎ、この反復で持っている正確な経験に対して過度に最適化することを防いでいます。
より良い説明があります。アルゴリズムは反復的に実行されます。i回目の反復で、現在のモデルπ_θiを参照モデルとして使用し、以下の相対エントロピー正則化されたポリシー最適化問題を最適化します。
相対エントロピー正則化、つまりKLダイバージェンスは、ポリシーが離れすぎることを防ぐために正則化しています。相対エントロピーがポリシーを正則化しているのです。
πθをこの報酬Rを最大化させたいのですが、πθがπθiと大きく異なることは望みません。この新しいデータに基づいて改善してほしいのですが、以前の状態から離れすぎることは望みません。
報酬評価器はリプレイバッファです。リプレイバッファは基本的に経験を指します。強化学習を行う際、多くの経験を収集します。多くの囲碁のゲームをプレイし、それらのゲームをリプレイバッファと呼ばれるデータベースに保存します。
実際に勾配をプッシュする際、これらの出力の一部をサンプリングします。1万のゲームがあり、その中から100のゲームを選んで勾配をプッシュするということです。リプレイバッファは、収集してそこに入れているすべてのデータを含む効果的なバケツです。
数学の推論では、分布外の一般化を扱います。数学の問題を解く次のステップに進む際、言語モデルがトレーニングデータで見ていない可能性があります。DeepSeekerやRLはこれをどのように扱うのでしょうか?
DeepSeekerはニューラルネットです。結局のところ、このニューラルネットが行っているのはトークンに対する確率分布を出力することだけです。次の単語がこれである確率、次の単語がこれである確率、次の単語がこれである確率を示しているだけです。
これらの次の単語のシーケンスのどれが正解へと導くのか、実際には分かりません。これがDeepSeekerが解決しようとしている問題です。このトークンの次のシーケンスが正解に導くのか、このトークンの次のシーケンスが正解に導くのか、ということです。
試してみる以外にありません。これらの補完は基本的に木のさまざまな道であり、先週のストリームを見ることをお勧めします。知識の木のアイデアや、これらのモデルが行っているのは木の中のさまざまな道を試していて、報酬モデルを使ってどの木が良い選択だったかを評価し、良い選択だと分かったら、それに基づいて勾配をプッシュするということを理解するのに役立ちます。
Edからの質問です。自己学習ではありません。RLチューニングの前に好みのデータを収集する必要があるからです。自己学習は非常に広い用語です。私は自己学習だと言うでしょう。自身の経験を作り出しているからです。
RHF(Human Feedback from Reinforcement Learning)では、この報酬シグナルを得る方法は、多くの人間の例からです。ほぼ教師あり学習のようなもので、基本的に質問があり、望む人間の回答があり、望まない人間の回答があり、それに基づいて勾配をプッシュするだけです。
人間のフィードバックを使用しているので、それを自己学習とは呼ばないでしょう。このRLFデータセットは人間によって作られたものだからです。しかしDeepSeeker R1とKim K 1.5の場合、報酬は環境から来ています。
DeepSeeker R1は、自分自身のトレースを作成し、それらのトレースのどれが最良かを決定するために環境の報酬シグナルを使用し、それを使ってDeepSeeker R1を訓練するという意味で学習しています。
知識の木を探索し、数学やコードのような分野では、これらの探索や推論のトレースを取り、良いか悪いかにラベル付けする能力があり、それを使って経験を収集し、勾配をプッシュし、その新しいポリシーを使ってさらに木を探索するという意味で自己学習です。
そういう意味で自己学習ですが、自己学習は何でも意味することができます。なんでも自己学習だと主張できます。
フェデレーテッドラーニングの人々やモバイルの人々はTensorFlowを使用していますね。TF Liteは携帯電話で実行するモデル用にまだ人気があります。実際にそれを行った記憶があります。PyTorchで書いて、TF Liteモデルを作成し、それを実行しました。
PyTorchで開発していますが、モバイルデバイスで実際に実行するTF Liteモデルを作成しています。その場合、TensorFlowは文字通り実際のデバイスでの推論にのみ使用されました。
しかし今ではそれにも他のより人気のあるものがあります。このONNXというものがあります。これが私が使用した正確なパイプラインかもしれません。PyTorchで書いて訓練したモデルがあり、すべてのコードがPyTorchにあります。
そしてこのONNX(Open Neural Network Exchange)を使用して、TF Liteで実行できるような形でモデルを配置します。TF Liteが携帯電話で実際に実行するものだからです。
しかし長期的には、PyTorchがTensorFlowに勝つと思います。データがそれを裏付けています。
OpenAIがなぜそんなに遅れているのでしょうか?遅れているとは思いません。R1が非常に優れていたので人々は驚きましたが、このように研究を公開することの良い点は、誰もが使用できることです。悪い点は、誰もが使用できることです。
OpenAIのNoan Brownや他の人々がこのDeepSeeker R1の論文を読んで、「ああ、そうか、それは素晴らしい。同じことをやろう。ただし10倍のお金があるので10倍のトレーニング予算でできる」と思ったことは確かです。
むしろOpenAIはDeepSeeker R1の公開から利益を得たと言えます。今や彼らは機能したアイデアをすべて取り、自分たちのものに適用できるからです。
R1とPRモードについてはどう思いますか?PRモードはまだR1を上回っていると思いますが、R1はそのサイズとオープンソースであることを考えると本当に素晴らしいです。
Project Stargateについてどう思いますか?BG2ポッドキャストがあります。これらの人々は2人のVCマネー関係者で、最近Stargateについてのポッドキャストを行いました。彼らはファイナンスの世界にずっといたので理解しています。
彼らはイーロンに同意して、実際には5,000億ドルはないと言っています。それは借入れに借入れを重ねた借入れのようなもので、5,000億ドルは作り上げられた偽の数字です。
実際にはMasayoshi Son(孫正義)という人物がいます。この人は基本的に日本のお金をすべて投資する日本の投資家です。正直に言うと、この人はちょっとピエロのような存在です。
なぜなら、これらのスタートアップがどのように機能するかというと、初期のVCが評価額を膨らませ、最後のVC、つまりシリーズDやシリーズEで最後にお金を入れる人々が基本的に騙される人となります。
最後の段階で何十億ドルという単位でしかお金を投資できない時に、この人は日本のお金をそこに投入しています。この人がまだ投資を許されているのか分かりません。何をしているのか、最後に巨額のお金を投入しているだけです。
では、Project Stargateとは何でしょうか?基本的にはSam Altmanのプロジェクトです。彼は、おそらく史上最高のベンチャーキャピタリストと言えます。
この人は誰でも説得できます。10人の犯罪者がいる部屋に入れても、彼らの王になる方法を見つけるでしょう。この人は究極の説得の神です。
Sam AltmanをこのMasayoshi Sonと同じ部屋に入れたら終わりです。Sam Altmanは彼を完全に説得し、すべてのお金を投入させるでしょう。
Project Stargateとは何か?それはSam AltmanがMasayoshi Sonを説得して、テキサスに倉庫を建設するために大金を投入させるプロジェクトです。イーロンのようなことをしようとしています。H100のスーパークラスターを作ろうとしています。
しかし問題は、Sam Altmanはイーロンではないということです。イーロンは運営が非常に得意です。工場の運営が得意で、人生をかけてそれをしてきました。SpaceX、Tesla、彼は人を雇い、実際にものを作らせることが本当に得意です。
NVIDIAのCEOであるJensen Huangとのインタビューで、イーロンは他の誰よりも速くこのクラスターを稼働させることができたと言っています。他の人々は数年かかるのに、イーロンは1年か18ヶ月で稼働させた、絶対に信じられないと。
Sam Altmanは、人々を説得することは非常に得意で、カリスマ性があり、お金を集めることができます。その5,000億ドル(実際には5,000億ドルではありませんが)を得ることはできます。
これらの人々は通常、レバレッジを使って投資します。100億ドルを取って5,000億ドルのように見せかける金融工学を行います。
しかしSam Altmanは、イーロンのように1,000万個のGPUを備えた工場を実際に建設する運営能力を持っているでしょうか?私はそうは思いません。
Sam Altmanは、次元の違う説得力の持ち主です。少し物議を醸すかもしれませんが、その一部は彼がサンフランシスコのゲイ男性だということがあると思います。
私はしばらくサンフランシスコに住んでいましたが、サンフランシスコはゲイ男性にとって非常に人気のある都市で、多くの人がそこに行き、大きなコミュニティがあります。
男女間のダイナミクスや、説得力、魅力、ロマンティックまたは性的なパートナーを引き付ける能力について考えると、ゲイコミュニティ内の男性間の説得のダイナミクスは別次元のレベルにあります。
この人は基本的に人生をかけてお金を集め、人々を説得してきました。そしてサンフランシスコのゲイコミュニティの一員として、私たちには理解できないような心理ゲームや説得ゲームをプレイしています。
そのため、この人はとても説得が上手いのです。
StargateはAGIに到達する可能性があるでしょうか?まず、私たちは既にAGIを持っていると思います。ChatGPTがAGIの瞬間だったと思います。
しかしStargateは何に使用されると思うか?Stargateの大部分は推論コンピュートになると思います。基本的に、彼らがそれを完成させる頃には2026年か2027年になっており、その時点では多くの異なるものにAIが組み込まれているでしょう。
Gmailにも、電話にも、車にもAIが組み込まれているでしょう。そのすべての推論はどこかで行われる必要があります。
私にとってStargateは、過去数年間に見てきたような事前学習のコンピュートよりも、推論に関するものになると思います。人々は基本的に、インターネット全体の学習データを実際のフロンティアモデルに学習させるための巨大なGPUクラスターを必要としていました。
むしろ、顧客にサービスを提供するための推論コンピュートになると思います。何百万人もの顧客がGPT-01 03 Proを望んでいます。それらの推論トレースはどこで行われるのでしょうか?すべてのコンピュートはこのクラスターで行われます。
このクラスターが完成する頃には、その多くは事前学習のコンピュートではなく、基本的に顧客にサービスを提供するための推論コンピュートになるでしょう。事前学習のコンピュートもまだ存在する可能性はありますが。
DeepSeekerは、巨大なクラスターは実際には必要ないことを示しました。DeepSeekerは、ほんの一握りのGPUで、GPT-01 Proとほぼ同じくらい優れたものを作ることができました。
知識の木を探索し、思考の連鎖を使って蒸留するか、強化学習を使用してモデルを訓練する、この新しい強化学習のパラダイムに入ると、このパラダイムは数年前の事前学習のパラダイムよりもコンピュートが少なくて済みます。
以前は基本的にインターネット全体の学習データを言語モデルに投入していましたが、この強化学習のパラダイムはコンピュートの負荷が少ないと思います。そのため、Stargateは次のレベルのモデルを学習させる巨大な事前学習クラスターというよりも、顧客にサービスを提供するための推論コンピュートになるでしょう。
質問してくれてありがとうございます。興味深い変わった話題について話すことができました。これがまさに私の好きな種類の質問です。
ここで終わりにしますが、視聴していただきありがとうございます。来週はTBDでお会いしましょう。
770、Ed、Sarah、Elias、NLP、julen、nuclear、ashvin、Oxo、Aries、Sagar、Sarah、ysf、heuristics、Daniel、magetti、NLP、pratique、その他のheuristics、Sarah、NLP、Sam、Mark、Yan、皆さん聞いていただきありがとうございます。素晴らしい一日をお過ごしください。
いいねと購読を忘れずに、Discordにも参加してください。そう言うと少し気恥ずかしいので、普段は言わないようにしています。
ライブストリームは固定のスケジュールがありますか?通常金曜日にストリーミングしています。GitHubに行くと、docsにあります。これが基本的にすべてのストリームです。
例えばエージェントフレームワークに行くと、行ったストリームがあり、サムネイル、さまざまなリンクがあります。スケジュールは金曜の朝です。もちろんお住まいの場所によって時間は異なります。そしてこれらは私が論文を探すさまざまな場所です。
皆さん、ご視聴ありがとうございました。また後でお会いしましょう。