ニューラルネットワークの基礎
一本の直線から始め、勾配降下法と誤差逆伝播法を手書きして最初の小さなネットワークを学習させ、それから PyTorch に替えて手書き数字を認識し、過学習とその対策を自分の目で確かめます。
レッスン一覧
- 01numpy で線形回帰
最も単純な問題、面積から住宅価格を予測することから始めます。一本の直線をモデルにし、平均二乗誤差で良し悪しを測り、最も愚直な方法で 9 万本の直線を一本ずつ試して、「学習」がいったい何を探しているのかをはっきり見ます。
35 分 · 入門 - 02勾配降下法
やみくもに試すのをやめ、一歩ごとにパラメータをどちらの方向にどれだけ変えればよいかを計算します。傾きから微分を理解し、勾配を手で計算し、勾配降下法のループを書き、学習率が小さすぎるとき、大きすぎるとき、データが標準化されていないときに何が起きるかを自分の目で確かめます。
45 分 · 入門 - 03誤差逆伝播法を手書きする
どの数も自分がどう計算されたかを覚えている、数十行のクラスを書けば、損失から出発して連鎖律で勾配をすべてのパラメータまで伝え戻せます。数値微分で確かめ、それを使って小さなネットワークに XOR を学習させます。
60 分 · 中級 - 04PyTorch 入門
最初の三つの課で手書きしたものを、PyTorch でもう一度やります。テンソル、自動微分、nn.Module、オプティマイザ。どのステップも手書きの版と照らし合わせ、計算した勾配も学習したパラメータもまったく同じになります。
45 分 · 入門 - 05手書き数字を認識する
最初の本物の分類タスクです。ネットワークに 8×8 ピクセルの手書き数字を認識させます。分類と回帰の違い、softmax と交差エントロピーが何をしているのか、なぜミニバッチで学習するのかを説明し、最後に混同行列でどこを間違えているのかを見ます。
45 分 · 中級 - 06過学習とその対策
学習セットではすべて正解するのに、見たことのないデータではまったく伸びない。これを過学習と呼びます。わざと過学習を起こし、重み減衰、ドロップアウト、早期終了、データを増やすことを試して、実際の結果でどれが最も効くのかを見ます。
40 分 · 中級
第 2 部「LLM をゼロから理解する」はここから始まります。
第 1 部では、LLM はあなたにとって一つの API でした。文章を送り、文章を受け取る。このパートではそれを開いて、どうやって学習されているのかを理解します。このモジュールでまず土台を固めます。モデルがどれほど大きくても、学習の核心となるステップは同じで、損失を計算し、勾配を計算し、パラメータを更新する、です。このモジュールでは、最も小さな例でこのステップを自分の手で一通りやってみます。
GPU は要りません。すべてのコードは普通のノートパソコンの CPU で数秒で動き終わります。数学は高校の微分しか使わず、どの式もコードと数値で確かめます。
なぜこの順番なのか
まず numpy で手書きし、それから PyTorch に替えます。第 1 課から第 3 課まではディープラーニングのフレームワークを一切使いません。一本の直線で「学習は何を探しているのか」を、勾配降下法で「どうやって探すのか」を、誤差逆伝播法で「勾配はどこから来るのか」を理解します。これがあれば、第 4 課の PyTorch はブラックボックスではなくなり、どの関数も裏で何をしているのかがわかります。
後の二つの課では本物のデータを扱います。第 5 課は分類タスクで、softmax と交差エントロピーを導入します。これらは次のモジュールで GPT にそのまま使います。第 6 課は過学習を扱います。どんなモデルを学習させても出会う問題です。
修了の目安
- 「学習」が何をしているかを説明できる。損失ができるだけ小さくなるパラメータの組を探すこと。
- 勾配降下法のループを手書きでき、学習率が小さすぎるとき、大きすぎるときにそれぞれどうなるか、そしてなぜ入力を標準化すべきかを説明できる。
- 連鎖律で誤差逆伝播法を説明でき、自分で書いた勾配の計算を数値微分で確かめられる。
- PyTorch で完全な学習ループを書ける。モデル、損失関数、オプティマイザ、勾配のゼロ化、逆伝播、パラメータの更新。
- 分類タスクでなぜ softmax と交差エントロピーを使うのか、10 クラス分類のネットワークの学習開始時の損失がおよそいくつになるかを説明できる。
- 学習のログから過学習を見抜き、いくつかの対策それぞれの効果と限界を説明できる。
このモジュールのコード
コードと実行結果は実際に動かしたときのまま載せているため、コメントと出力は中国語です。