WEBVTT 00:00.320 --> 00:07.100 こうして今、 前日にキックオフしたのと同じラボに戻ってきた。 00:07.100 --> 00:12.890 今は第7週3日目というやや誤解を招きそうな名前だが、 我々はもちろん第7週4日目にいるからだ。 00:13.190 --> 00:18.170 でも、 何かで止めてしまうことを恐れて、 触れないようにしているんだ。 00:18.170 --> 00:28.070 GPUラムは、 天井の38に迫る勢いで釘付けになっている。 40GBのうち2GB。 00:28.070 --> 00:29.600 しかし、 幸いなことにそれは変わらない。 00:29.600 --> 00:30.650 上がらない。 00:30.980 --> 00:36.440 そして、 各バッチステップのプリントアウトをご覧ください。 00:36.440 --> 00:40.430 現在、 バッチステップ4350だ。 00:40.640 --> 00:47.600 うーん、 そして、 もしズームアップしきったら、 うーん、 もう一度言うけど、 うっかりバッチを止めてしまわないように、 00:47.630 --> 00:49.580 慎重にやっているんだ。 00:49.610 --> 00:55.310 この3つのエポックを表す帯は、 まだほんの少ししか入っていないことがわかるだろう。 00:55.310 --> 01:01.580 そこでひとつ、 おそらくすべてのデータを完全に、 あー、 一通り調べてみる。 01:01.820 --> 01:05.180 ええと、 バッチステップにいるのがわかるだろう。 01:05.360 --> 01:11.360 あまりに早く過ぎてしまうので、 数字は言えませんが、 10回分です。 01:11.510 --> 01:20.690 この10万という丸い数字のうち、 なぜこんなに丸いのか不思議に思うかもしれない。 01:20.720 --> 01:24.290 それは偶然の一致なんだ。 01:24.350 --> 01:33.380 ええと、 40万点のデータがありますが、 1ステップで16点ずつです。 01:33.410 --> 01:40.430 だから、 このつまらない計算のために電卓で400,000を16で割ってみる。 01:40.730 --> 01:45.920 それにエポック数を掛けるんだ。 01:46.160 --> 01:51.950 エポックは3つだと思っていたが、 4つあるようだ。 01:51.980 --> 01:54.050 私は4エポックのままにしておいた。 01:54.200 --> 01:56.270 ああ、 そうだね。 01:56.360 --> 01:59.630 それを4倍して4エポックとする。 01:59.820 --> 02:10.530 その証拠に、 10万台のカメラがある。 02:10.530 --> 02:15.120 単なる乱数ではなく、 ランダムに丸められた数字だ。 02:15.120 --> 02:25.830 実際、 これは40万点のデータを16のバッチにまとめ、 4回繰り返して行うバッチ・ステップの数そのものである。 02:26.160 --> 02:29.550 ええと、 そうすると、 それが止まるんだ。 02:29.550 --> 02:37.770 この数字を見ただけでも、 かなり高いトレーニングロスからスタートし、 その数字がかなり下がっていることがわかるだろう。 02:37.770 --> 02:44.490 しかし、 数字が上下に動き回っているため、 ここから何が起こっているのかを正確に判断するのは難しい。 02:44.700 --> 02:46.770 うーん、 トレンドの感覚をつかむのは難しいですね。 02:46.770 --> 02:55.500 バッチの進捗状況を視覚化し、 異なる実行の比較などを可能にするツールがあればいいのだが......。 02:55.530 --> 02:59.880 もちろん、 そのようなツールはあるし、 重みもバイアスもある。 03:00.090 --> 03:03.060 ええと、 そしてこれが僕らが走った結果なんだ。 03:03.060 --> 03:04.830 これが今起きていることだ。 03:05.070 --> 03:09.750 そして、 これは何が起こっているかを示しているんだ。 03:09.750 --> 03:10.020 だから 03:10.020 --> 03:12.930 だから、 このトレーニングの損失は本物だ。 03:12.930 --> 03:14.610 これが私たちが本当に見たいことなのだ。 03:14.640 --> 03:17.550 このパネルを編集して、 もう少し見せてもらおう。 03:17.730 --> 03:26.160 このY軸はゼロまで下がっていて、 ゼロはゼロロスとなり、 完璧を意味する。 03:26.160 --> 03:37.710 これは、 モデルが常に100%の信頼度で次のトークンを予測し、 100%の信頼度で予測した次のトークンが正しい次のトークンであることを意味する。 03:37.830 --> 03:40.350 うーん、 それはあり得ない場所だね。 03:40.380 --> 03:45.450 実際、 1を大きく下回ると疑われる。 5. 03:45.480 --> 03:49.950 一般的には、 これは経験則のようなものだが、 しかし、 一般的に言えば、 それは素晴らしい、 あー、 03:49.950 --> 03:52.080 持っているべき損失のようなものだろう。 03:52.080 --> 03:57.630 そしてその下には、 オーバーフィッティングが起こっていないかどうかを考えるきっかけになるかもしれない。 03:57.840 --> 04:03.730 この軸を変えて、 Y軸の最小値を1つにしてみよう。 04:03.760 --> 04:04.540 まあ、 何とかなるさ。 04:04.570 --> 04:05.230 我々はもっとうまくやれる。 04:05.230 --> 04:12.250 1のようにすればいい。 4か何かで、 ここで何が起こっているのかがわかるようにするんだ。 04:12.430 --> 04:20.530 しかし、 この初期の段階でも、 このでこぼこした線が改善傾向にあることは明らかだ。 04:20.560 --> 04:27.580 GPTと微調整を行った時とは異なり、 上下に揺れ動き、 04:27.580 --> 04:32.530 トレンドは見られなかった。 04:32.530 --> 04:36.190 また、 スムージングを適用して、 どのように見えるか見てみよう。 04:36.310 --> 04:37.600 つまり、 それは明らかに違う。 04:37.600 --> 04:40.450 つまり、 それは向上しているラインなのだ。 04:40.450 --> 04:42.700 平滑化係数を適用すると 04:42.730 --> 04:45.820 さて、 なぜこれが上下するのか? 04:45.970 --> 04:47.530 つまり、 本当に場合によるんだ。 04:47.530 --> 04:55.270 これらのポイントはそれぞれ、 16のデータポイント、 16のプロンプト、 その最後に予測するものを1つに押し込んだもので、 04:55.270 --> 05:00.940 ランダムにごちゃ混ぜになっているんだ。 05:00.940 --> 05:03.190 つまり、 16人の中からランダムに選ばれているわけだ。 05:03.520 --> 05:06.940 それで、 どの製品が16番に押し込まれるかは誰にもわからない。 05:06.970 --> 05:12.070 もしかしたら、 本当に高価な製品かもしれない。 05:12.070 --> 05:14.410 だから雑音は多い。 05:14.500 --> 05:20.530 それぞれのバッチステップの構成が異なるので、 05:20.530 --> 05:29.620 少しノイズがあるのは良いことです。 05:29.710 --> 05:34.510 ある意味、 また非常に手探りですが、 ローカル・ミニマムから抜け出せないで、 05:34.510 --> 05:39.580 モデルが改善されて大きなグローバル・ミニマム、 大きな谷を見つけ、 05:39.580 --> 05:49.600 勾配を見つけて次のトークンを予測する能力を向上させようとする、 という考えで、 さまざまな可能性を試しているのです。 05:49.960 --> 05:51.730 うーん、 少し前進しただけだよ。 05:51.730 --> 05:57.040 そして、 ここでもまた、 目に見えて改善が進んでいることは明らかだ。 05:57.370 --> 05:58.990 他に何が見える? 05:58.990 --> 06:00.940 これが学習率だ。 06:00.940 --> 06:06.460 このハイパーパラメーターは、 どの程度のステップを踏むべきかを示す重要なパラメーターだ。 06:06.460 --> 06:11.590 コサイン学習率を選んだと言ったが、 コサインyにはまったく見えないし、 私が説明したようには見えないものを見て、 06:11.590 --> 06:15.370 少し驚くかもしれない。 06:15.370 --> 06:22.180 これはウォームアップと呼ばれるもので、 06:22.180 --> 06:30.190 0点では始動しない。 0001が最高で、 ゼロから始まり、 そこまで積み上げていく。 06:30.190 --> 06:38.110 バッチの始まりは、 大きく外れていた状態から、 より良いポジションへとかなり劇的な動きを見せているのがわかるだろう。 06:38.110 --> 06:40.750 それに、 学習率が高すぎるのもよくない。 06:40.780 --> 06:43.570 あるいは、 いろんな意味でオーバーシュートするかもしれない。 06:43.570 --> 06:45.820 これが、 このウォームアップのセオリーだ。 06:46.000 --> 06:49.180 ええと、 プロセスの一部なんだ。 06:49.210 --> 06:53.170 本当に、 本当に、 ここに来ているのがわかるだろう。 06:53.470 --> 07:00.860 なぜコサインのような形があまり出てこないのか不思議に思うかもしれない。 07:00.860 --> 07:02.900 それはトレーニングの初期だからだ。 07:02.900 --> 07:05.060 それでも、 我々はまだこのコサインの頂点にいる。 07:05.060 --> 07:09.560 これからカーブを描き始めるが、 それは非常にゆっくりとしたものだ。 07:09.920 --> 07:18.590 それと、 GPUで何が起こっているかを示す楽しいチャートもある。 07:18.740 --> 07:21.440 そのなかには、 もっと意味のあるものもある。 07:21.470 --> 07:22.430 ここにもある。 07:22.430 --> 07:24.140 その...。 07:24.170 --> 07:29.480 ええ、 電力使用量とメモリへのアクセスに費やされる時間は良好です。 07:29.540 --> 07:30.020 ええと、 それは 07:30.020 --> 07:32.150 CPU使用率を見たい。 07:32.150 --> 07:32.870 それはどこですか? 07:33.170 --> 07:35.540 つまり、 GPUやCPUの使用率さえもだ。 07:35.570 --> 07:43.640 GPUの使用率は、 GPUが懸命に働いている時間が、 メモリの出し入れに時間を取られているのではないことを確認するために、 07:43.640 --> 07:49.460 おそらく最も重要なものの1つだろう。 07:49.460 --> 07:52.580 GPUが活用されていることを知りたい。 07:52.580 --> 07:59.090 そしてそれは、 私たちが強力なA100ブロックを打ち込み、 それを最大限に活用していることの証でもある。 07:59.090 --> 08:04.550 また、 異なるボックスを使用している場合は、 異なるハイパーパラメータをいくつか持っていることになる。 08:04.550 --> 08:13.760 それからGPUの使用率をチェックし、 うまく動作していることを確認する。 08:13.790 --> 08:23.090 そうでない場合は、 ハイパーパラメータを微調整して、 トレーニングプロセスをより効率的にすることができないか試してみるといいだろう。 08:23.690 --> 08:25.550 うーん、 わかった。 08:25.550 --> 08:29.390 だから、 これからするのはちょっとしたズルだ。 08:29.450 --> 08:36.200 料理教室とか、 料理のビデオとかで、 オーブンに入れて、 こう言うんだけど、 08:36.200 --> 08:41.540 これはさっきやったやつなんだけど、 オーブンから取り出して、 08:41.540 --> 08:46.670 中に入れたものなんだ。 08:46.670 --> 08:53.180 しかし、 私はそれを実行したし、 しばらく前にこれをキックオフし、 同じハイパーパラメータで実行した。 08:53.180 --> 08:58.080 だから、 同じように、 うーん、 このピンクのやつだよ。 08:58.080 --> 09:00.240 そして、 これは私が説明すべきことだった。 09:00.240 --> 09:00.870 本当に申し訳ない。 09:00.870 --> 09:05.640 これは、 このプロジェクトで行われた4回の走行である。 09:05.640 --> 09:07.500 プライサーと呼ばれるプロジェクトだ。 09:07.500 --> 09:12.450 この一番上のナビゲーションには、 プリサープロジェクトがあります。 09:12.450 --> 09:15.240 そしてこの下にあるのが4本だ。 09:15.450 --> 09:28.650 この実行は、 同じデータセットで、 このモデルを3エポックか4エポック実行したものです。 09:28.680 --> 09:30.990 それ以外はすべて同じだ。 09:31.140 --> 09:35.910 それを見せれば、 その結果どうなったかわかるだろう。 09:38.310 --> 09:39.810 そして、 これだ。 09:39.810 --> 09:43.290 だから、 これは......これは肉厚なやつだ。 09:43.290 --> 09:48.630 では、 これを上に持ってきて、 スケールを変更する必要がありそうだ。 09:49.620 --> 09:51.390 降りなければならない。 09:51.990 --> 09:52.650 これでよし。 09:52.650 --> 09:53.640 これですべてを見ることができる。 09:53.640 --> 09:54.870 このままにしておけば 09:55.200 --> 09:57.840 さて、 いくつか指摘しておきたいことがある。 09:57.840 --> 10:02.370 だからまず、 あなたは紫を見ている。 10:02.790 --> 10:03.630 クリックさせてください。 10:03.660 --> 10:06.120 ここをこうすれば、 それが出てくると思うんだ。 10:06.120 --> 10:06.870 これでよし。 10:06.960 --> 10:10.320 青と紫の線が見えるだろう。 10:10.320 --> 10:13.920 青はちょうどここにあり、 紫はここにある。 10:13.920 --> 10:19.350 青は、 このタブで現在実行中のものだ。 10:19.650 --> 10:22.950 今走っているのはこの男だ。 10:22.950 --> 10:26.610 紫は少し前に蹴飛ばしたやつだ。 10:26.730 --> 10:29.460 もちろん、 10日ほど前のデータも入っている。 10:29.820 --> 10:38.010 青が紫に極めて近く追従しているのがわかるだろう。 10:38.010 --> 10:43.200 青は紫と同じ軌跡をたどり続けるだろう。 10:43.200 --> 10:45.960 紫はちょうどその時期が終わったところだ。 10:46.320 --> 10:54.150 今わかることは、 トレンドは確かに改善され、 改善され、 改善されるということだ。 10:54.450 --> 11:00.630 まず第一に、 改善し、 そして少し急降下し、 そして改善し、 また少し急降下し、 11:00.630 --> 11:05.670 そして改善し、 さらに大きく急降下するのがわかるだろう。 11:05.670 --> 11:08.550 このダイブとは何なのか? 11:08.550 --> 11:12.210 まあ、 これらのダイビングはそれぞれのエポックの終わりなんだ。 11:12.210 --> 11:14.130 つまり、 これは1つのエポックなのだ。 11:14.160 --> 11:18.240 これがエポック1、 これがエポック2、 これがエポック3、 そしてこれがエポック4だ。 11:18.240 --> 11:20.040 そして残念ながらクラッシュした。 11:20.040 --> 11:25.650 あるいは、 グーグルがエポック4の途中でインスタンスをリセットした。 11:25.650 --> 11:28.530 だから、 エポック4がどのように終わったかを見ることはできなかった。 11:28.800 --> 11:31.980 うーん、 でも見ての通り、 そんなことはどうでもいいことだとわかるだろう。 11:32.340 --> 11:36.720 では、 なぜ各エポックの終わりになると急に気温が下がるのか? 11:36.720 --> 11:38.220 それはいい質問だね。 11:38.220 --> 11:39.720 非常に重要なことだ。 11:39.840 --> 11:44.190 少しオーバーフィッティングが始まっているんだ。 11:44.190 --> 11:51.120 ここで起こっているのは、 モデルが最初のエポックですでに見たのと同じデータを見ているということだ。 11:51.150 --> 11:53.070 今は確かに、 違う形で混濁している。 11:53.110 --> 12:00.100 そして、 ここに来た選手とは異なる16人バッチで彼らを見ることになる。 12:00.130 --> 12:01.750 ハグをすれば、 その心配はない。 12:01.750 --> 12:06.310 SFTトレーナーは、 毎回自動的にバッチを入れ替えます。 12:06.550 --> 12:12.070 しかし、 それにもかかわらず、 モデルは以前からこのデータを見ており、 それを活用することができる。 12:12.070 --> 12:14.770 落ちこぼれにもかかわらず、 何かを学んだ。 12:14.950 --> 12:22.600 正則化を試みるために他のことをやったにもかかわらず、 このデータは以前にも同じデータを見たことがあるということで、 12:22.600 --> 12:25.330 まだ優位に立っているんだ。 12:25.810 --> 12:32.290 うーん、 でも幸いなことに、 そこからはほんのわずかな段差しかないので、 オーバーフィッティングが起きていることをあまり心配する必要はない。 12:32.290 --> 12:38.620 しかし、 その後はここにきてさらに悪化し、 著しく悪化している。 12:38.830 --> 12:41.890 これはオーバーフィッティングの大きな兆候だ。 12:41.890 --> 12:46.630 そして、 もし私がベストプラクティスであり、 やるべきことだと言った、 12:46.630 --> 12:53.710 検証ランを同時に行っていたら、 まず第一に、 彼らはこのような小さなジャンプダウンをしなかっただろう。 12:53.710 --> 12:59.560 しかし第二に、 おそらくこの時点で上がり始めていただろう。 12:59.560 --> 13:04.360 そして実際、 私はこの時点でバッチの貯金を持っている。 13:04.720 --> 13:11.650 そして案の定、 5000歩ごとにハグする顔のハブに保存されたので、 テストすることができた。 13:11.650 --> 13:20.410 そして案の定、 3回目のエポックを過ぎると結果は悪化する。 13:20.410 --> 13:28.660 だから、 グーグルがこの時点で私のインスタンスのプラグを抜いたことは問題ではなかった。 13:28.660 --> 13:30.580 このモデルはすでに不調だった。 13:30.850 --> 13:40.360 これは、 定期的にハブにアップロードし、 各チェックポイントに戻ってテストを実行できる素晴らしい例だ。 13:40.360 --> 13:43.930 そして、 最高のパフォーマンスを発揮するモデルを選ぶことができる。 13:44.170 --> 13:50.020 これは、 何エポック走らせるかを推測する必要がないようにするための非常に強力なテクニックだ。 13:50.020 --> 13:55.520 たくさん実行しすぎて、 トレーニングデータから最も良い結果が出たものを選ぶだけだ。 13:55.550 --> 13:58.220 新しいことに挑戦するときは、 見本から外れる。 13:58.610 --> 14:03.950 だから、 これがどのように機能するのか、 本当によくわかると思う。 14:04.010 --> 14:10.610 それと、 オーバーフィッティングの影響と、 エポック数の違いによる影響。 14:10.640 --> 14:16.010 そして、 しかし、 私たちが確実に知っているのは、 最初のエポックでは、 常に新しいデータを見ていたため、 14:16.010 --> 14:22.340 この下向きの傾斜はすべて良好な改善を表しているということだ。 14:22.370 --> 14:26.450 そして、 ここでの最後の結果も、 ここより明らかに良かったと言える。 14:26.450 --> 14:28.790 だから、 この点でも改善が見られた。 14:28.820 --> 14:32.330 そして、 しかし、 このあたりから少し怪しくなってきた。 14:32.330 --> 14:36.680 そして、 もしかしたら、 偶然かもしれないが、 それは1番あたりかもしれない。 5レベル。 14:36.680 --> 14:45.170 そして、 経験則として1以下というのがあると前述した。 5 もしかしたら、 眉をひそめて自分の結果を見直す時期かもしれない。 14:46.220 --> 14:52.040 ええと、 ですから、 この場は一旦中断して、 また戻ってきたら、 もう少し他のことについて話しましょう。