線形回帰で学ぶ勾配降下法|AIの学習を手計算で理解する第3章
こんにちは。ゆうせいです。
今回は、第3章として「線形回帰を使って、勾配降下法を手計算で理解する」ことを目指します。
前回までに、損失関数と勾配降下法を学びました。
ただ、数式だけを見ていると、少しふわっとしますよね。
「結局、AIはどうやってパラメータを更新しているの?」
そんな疑問が残ると思います。
そこで今回は、小さなデータを使って、線形回帰の学習を実際に手で追いかけます。
線形回帰とは、データの関係を直線で表す方法です。
難しそうに聞こえますが、要するに「入力xに対して、出力yを直線で予測する方法」です。
高校数学で出てくる直線の式を、AIの学習に使うイメージですね。
今回使う学習データ
まず、次の4つのデータを使います。
| データ番号 i | 入力 x_i | 正解 y_i |
|---|---|---|
| 1 | 1 | 2 |
| 2 | 2 | 3 |
| 3 | 3 | 4 |
| 4 | 4 | 5 |
見れば分かる通り、正解はとても単純です。
y = x + 1
日本語で言えば、入力xに1を足すと正解yになります。
つまり、本当は次の直線が正解です。
w = 1
日本語で言えば、理想的な重みは1です。
b = 1
日本語で言えば、理想的なバイアスは1です。
でも、AIは最初から正解を知りません。
最初は、重みwとバイアスbを適当な値から始めます。
そして、損失を見ながら少しずつwとbを正解に近づけます。
線形回帰モデルを定義する
今回の予測式は、次のようにします。
ŷ_i = w * x_i + b
日本語で言えば、i番目の予測値は、入力x_iに重みwを掛け、バイアスbを足したものです。
ŷ_iは「ワイハット」と読みます。
y_iが正解、ŷ_iがAIの予測です。
| 記号 | 意味 | 初心者向けの説明 |
|---|---|---|
| x_i | 入力値 | AIに渡す情報 |
| y_i | 正解値 | 本当の答え |
| ŷ_i | 予測値 | AIが出した答え |
| w | 重み | 入力をどれくらい強く使うか |
| b | バイアス | 予測値を全体的にずらす値 |
wは直線の傾きです。
bは直線の切片です。
たとえるなら、wは坂の急さ、bは坂全体の高さです。
損失関数を定義する
今回使う損失関数は、MSEです。
MSEは、平均二乗誤差です。
予測値と正解値の差を二乗し、それを平均します。
J(w, b) = (1 / n) * Σ_{i=1}^{n} (ŷ_i - y_i)^2
日本語で言えば、全体の損失Jは、予測値と正解値の差を二乗し、データ数nで割ったものです。
今回の予測式を代入します。
ŷ_i = w * x_i + b
日本語で言えば、予測値は、w * x_i + bです。
したがって、損失関数は次のようになります。
J(w, b) = (1 / n) * Σ_{i=1}^{n} (w * x_i + b - y_i)^2
日本語で言えば、w * x_i + bで予測した値と正解y_iの差を二乗し、全データで平均します。
今回のデータ数は4です。
n = 4
日本語で言えば、データは4個あります。
そのため、今回の損失関数は次のように書けます。
J(w, b) = (1 / 4) * Σ_{i=1}^{4} (w * x_i + b - y_i)^2
日本語で言えば、4個のデータについて誤差の二乗を足し、4で割ります。
損失関数をデータに合わせて具体化する
ここから、数式を省略せずに書きます。
まず、各データの誤差を書き出します。
1番目のデータは、x_1 = 1、y_1 = 2です。
e_1 = w * 1 + b - 2
日本語で言えば、1番目の誤差は、wに1を掛けてbを足し、正解2を引いたものです。
e_1 = w + b - 2
日本語で言えば、1番目の誤差は、w + b - 2です。
2番目のデータは、x_2 = 2、y_2 = 3です。
e_2 = w * 2 + b - 3
日本語で言えば、2番目の誤差は、wに2を掛けてbを足し、正解3を引いたものです。
e_2 = 2w + b - 3
日本語で言えば、2番目の誤差は、2w + b - 3です。
3番目のデータは、x_3 = 3、y_3 = 4です。
e_3 = w * 3 + b - 4
日本語で言えば、3番目の誤差は、wに3を掛けてbを足し、正解4を引いたものです。
e_3 = 3w + b - 4
日本語で言えば、3番目の誤差は、3w + b - 4です。
4番目のデータは、x_4 = 4、y_4 = 5です。
e_4 = w * 4 + b - 5
日本語で言えば、4番目の誤差は、wに4を掛けてbを足し、正解5を引いたものです。
e_4 = 4w + b - 5
日本語で言えば、4番目の誤差は、4w + b - 5です。
この4つを損失関数に入れます。
J(w, b) = (1 / 4) * ((w + b - 2)^2 + (2w + b - 3)^2 + (3w + b - 4)^2 + (4w + b - 5)^2)
日本語で言えば、4つのデータそれぞれの誤差を二乗し、すべて足して4で割ります。
損失関数を省略せずに展開する
次に、それぞれの二乗を展開します。
1番目の二乗誤差です。
(w + b - 2)^2 = w^2 + 2wb - 4w + b^2 - 4b + 4
日本語で言えば、w + b - 2を二乗すると、wの二乗、wとbの積、wの項、bの二乗、bの項、定数項に分かれます。
2番目の二乗誤差です。
(2w + b - 3)^2 = 4w^2 + 4wb - 12w + b^2 - 6b + 9
日本語で言えば、2w + b - 3を二乗すると、4w^2、4wb、-12w、b^2、-6b、9になります。
3番目の二乗誤差です。
(3w + b - 4)^2 = 9w^2 + 6wb - 24w + b^2 - 8b + 16
日本語で言えば、3w + b - 4を二乗すると、9w^2、6wb、-24w、b^2、-8b、16になります。
4番目の二乗誤差です。
(4w + b - 5)^2 = 16w^2 + 8wb - 40w + b^2 - 10b + 25
日本語で言えば、4w + b - 5を二乗すると、16w^2、8wb、-40w、b^2、-10b、25になります。
次に、4つの式をすべて足します。
(w^2 + 2wb - 4w + b^2 - 4b + 4) + (4w^2 + 4wb - 12w + b^2 - 6b + 9) + (9w^2 + 6wb - 24w + b^2 - 8b + 16) + (16w^2 + 8wb - 40w + b^2 - 10b + 25)
日本語で言えば、4つの二乗誤差をすべて足します。
w^2の項を足します。
w^2 + 4w^2 + 9w^2 + 16w^2 = 30w^2
日本語で言えば、w^2の係数を足すと30になります。
wbの項を足します。
2wb + 4wb + 6wb + 8wb = 20wb
日本語で言えば、wbの係数を足すと20になります。
wの項を足します。
-4w - 12w - 24w - 40w = -80w
日本語で言えば、wの係数を足すと-80になります。
b^2の項を足します。
b^2 + b^2 + b^2 + b^2 = 4b^2
日本語で言えば、b^2の係数を足すと4になります。
bの項を足します。
-4b - 6b - 8b - 10b = -28b
日本語で言えば、bの係数を足すと-28になります。
定数項を足します。
4 + 9 + 16 + 25 = 54
日本語で言えば、定数項を足すと54になります。
したがって、二乗誤差の合計は次のようになります。
30w^2 + 20wb - 80w + 4b^2 - 28b + 54
日本語で言えば、4つの二乗誤差を足した結果です。
最後に4で割ります。
J(w, b) = (1 / 4) * (30w^2 + 20wb - 80w + 4b^2 - 28b + 54)
日本語で言えば、二乗誤差の合計をデータ数4で割ります。
各項を4で割ります。
J(w, b) = 7.5w^2 + 5wb - 20w + b^2 - 7b + 13.5
日本語で言えば、今回のデータに対する損失関数は、wとbだけで表せる式になりました。
損失関数の最小地点を確認する
今回のデータは、本当は y = x + 1 なので、最適解はw = 1、b = 1です。
ただし、勾配降下法の理解のために、数式でも確認しておきましょう。
損失関数は次の通りです。
J(w, b) = 7.5w^2 + 5wb - 20w + b^2 - 7b + 13.5
日本語で言えば、損失はwとbによって決まります。
wについて偏微分します。
∂J / ∂w = ∂(7.5w^2 + 5wb - 20w + b^2 - 7b + 13.5) / ∂w
日本語で言えば、損失関数をwについて微分します。
各項を微分します。
∂(7.5w^2) / ∂w = 15w
日本語で言えば、7.5w^2をwで微分すると15wです。
∂(5wb) / ∂w = 5b
日本語で言えば、5wbをwで微分すると5bです。
∂(-20w) / ∂w = -20
日本語で言えば、-20wをwで微分すると-20です。
∂(b^2) / ∂w = 0
日本語で言えば、b^2はwを含まないので、wで微分すると0です。
∂(-7b) / ∂w = 0
日本語で言えば、-7bはwを含まないので、wで微分すると0です。
∂(13.5) / ∂w = 0
日本語で言えば、定数13.5をwで微分すると0です。
したがって、w方向の勾配は次の通りです。
∂J / ∂w = 15w + 5b - 20
日本語で言えば、wを少し動かしたときの損失の変化は、15w + 5b - 20で表せます。
次に、bについて偏微分します。
∂J / ∂b = ∂(7.5w^2 + 5wb - 20w + b^2 - 7b + 13.5) / ∂b
日本語で言えば、損失関数をbについて微分します。
各項を微分します。
∂(7.5w^2) / ∂b = 0
日本語で言えば、7.5w^2はbを含まないので、bで微分すると0です。
∂(5wb) / ∂b = 5w
日本語で言えば、5wbをbで微分すると5wです。
∂(-20w) / ∂b = 0
日本語で言えば、-20wはbを含まないので、bで微分すると0です。
∂(b^2) / ∂b = 2b
日本語で言えば、b^2をbで微分すると2bです。
∂(-7b) / ∂b = -7
日本語で言えば、-7bをbで微分すると-7です。
∂(13.5) / ∂b = 0
日本語で言えば、定数13.5をbで微分すると0です。
したがって、b方向の勾配は次の通りです。
∂J / ∂b = 5w + 2b - 7
日本語で言えば、bを少し動かしたときの損失の変化は、5w + 2b - 7で表せます。
損失が最小になる地点では、w方向にもb方向にも、これ以上下がる傾きがなくなります。
つまり、次の2つを同時に満たします。
15w + 5b - 20 = 0
日本語で言えば、w方向の勾配が0になる条件です。
5w + 2b - 7 = 0
日本語で言えば、b方向の勾配が0になる条件です。
1つ目の式を5で割ります。
3w + b - 4 = 0
日本語で言えば、1つ目の条件を簡単にすると、3w + b - 4 = 0です。
bについて解きます。
b = 4 - 3w
日本語で言えば、bは4 - 3wで表せます。
この式を2つ目の条件に代入します。
5w + 2(4 - 3w) - 7 = 0
日本語で言えば、bの代わりに4 - 3wを入れます。
括弧を展開します。
5w + 8 - 6w - 7 = 0
日本語で言えば、2(4 - 3w)は8 - 6wになります。
同類項をまとめます。
-w + 1 = 0
日本語で言えば、wの項と定数項を整理すると、-w + 1 = 0です。
wを求めます。
w = 1
日本語で言えば、最適な重みは1です。
bも求めます。
b = 4 - 3 * 1 = 1
日本語で言えば、最適なバイアスは1です。
数式でも、目指すべき地点はw = 1、b = 1だと確認できました。
勾配降下法で少しずつ近づける
ここからが本題です。
勾配降下法では、最初からw = 1、b = 1を知っているわけではありません。
適当な初期値から始めて、勾配を見ながら少しずつ更新します。
更新式は次の通りです。
w_{t+1} = w_t - η * (∂J / ∂w)
日本語で言えば、次のwは、今のwから、学習率とw方向の勾配を掛けたものを引いて求めます。
b_{t+1} = b_t - η * (∂J / ∂b)
日本語で言えば、次のbは、今のbから、学習率とb方向の勾配を掛けたものを引いて求めます。
今回の勾配を代入します。
∂J / ∂w = 15w + 5b - 20
日本語で言えば、w方向の勾配は15w + 5b - 20です。
∂J / ∂b = 5w + 2b - 7
日本語で言えば、b方向の勾配は5w + 2b - 7です。
したがって、今回の更新式は次のようになります。
w_{t+1} = w_t - η * (15w_t + 5b_t - 20)
日本語で言えば、wは、現在のwとbから計算したw方向の勾配を使って更新します。
b_{t+1} = b_t - η * (5w_t + 2b_t - 7)
日本語で言えば、bは、現在のwとbから計算したb方向の勾配を使って更新します。
初期値と学習率を決める
今回は、初期値を次のようにします。
w_0 = 0
日本語で言えば、最初の重みは0です。
b_0 = 0
日本語で言えば、最初のバイアスは0です。
学習率は次のようにします。
η = 0.01
日本語で言えば、1回の更新で、勾配の1%だけ動く設定です。
学習率は、一歩の大きさです。
山下りで考えるなら、0.01はかなり慎重な一歩です。
0回目の状態を計算する
0回目の状態は、w_0 = 0、b_0 = 0です。
損失を計算します。
J(w, b) = 7.5w^2 + 5wb - 20w + b^2 - 7b + 13.5
日本語で言えば、今回の損失関数です。
w = 0、b = 0を代入します。
J(0, 0) = 7.5 * 0^2 + 5 * 0 * 0 - 20 * 0 + 0^2 - 7 * 0 + 13.5
日本語で言えば、wとbの場所に0を入れます。
J(0, 0) = 13.5
日本語で言えば、初期状態の損失は13.5です。
次に、勾配を計算します。
∂J / ∂w = 15w + 5b - 20
日本語で言えば、w方向の勾配の式です。
∂J / ∂w = 15 * 0 + 5 * 0 - 20 = -20
日本語で言えば、0回目のw方向の勾配は-20です。
∂J / ∂b = 5w + 2b - 7
日本語で言えば、b方向の勾配の式です。
∂J / ∂b = 5 * 0 + 2 * 0 - 7 = -7
日本語で言えば、0回目のb方向の勾配は-7です。
更新します。
w_1 = w_0 - η * (∂J / ∂w)
日本語で言えば、次のwは、現在のwから学習率と勾配を掛けたものを引きます。
w_1 = 0 - 0.01 * (-20)
日本語で言えば、0から-0.2を引きます。
w_1 = 0.2
日本語で言えば、更新後のwは0.2です。
bも更新します。
b_1 = b_0 - η * (∂J / ∂b)
日本語で言えば、次のbは、現在のbから学習率と勾配を掛けたものを引きます。
b_1 = 0 - 0.01 * (-7)
日本語で言えば、0から-0.07を引きます。
b_1 = 0.07
日本語で言えば、更新後のbは0.07です。
1回目の状態を計算する
1回更新したので、現在の値は次の通りです。
w_1 = 0.2
日本語で言えば、1回目の重みは0.2です。
b_1 = 0.07
日本語で言えば、1回目のバイアスは0.07です。
損失を計算します。
J(0.2, 0.07) = 7.5 * 0.2^2 + 5 * 0.2 * 0.07 - 20 * 0.2 + 0.07^2 - 7 * 0.07 + 13.5
日本語で言えば、wに0.2、bに0.07を代入します。
各項を計算します。
7.5 * 0.2^2 = 7.5 * 0.04 = 0.3
日本語で言えば、最初の項は0.3です。
5 * 0.2 * 0.07 = 0.07
日本語で言えば、wとbの積の項は0.07です。
-20 * 0.2 = -4
日本語で言えば、wの項は-4です。
0.07^2 = 0.0049
日本語で言えば、bの二乗は0.0049です。
-7 * 0.07 = -0.49
日本語で言えば、bの項は-0.49です。
すべて足します。
J(0.2, 0.07) = 0.3 + 0.07 - 4 + 0.0049 - 0.49 + 13.5
日本語で言えば、各項を合計します。
J(0.2, 0.07) = 9.3849
日本語で言えば、1回更新後の損失は9.3849です。
初期状態では13.5でした。
13.5 -> 9.3849
日本語で言えば、損失が下がっています。
良い方向に進みました!
次に、勾配を計算します。
∂J / ∂w = 15w + 5b - 20
日本語で言えば、w方向の勾配の式です。
∂J / ∂w = 15 * 0.2 + 5 * 0.07 - 20
日本語で言えば、wに0.2、bに0.07を入れます。
∂J / ∂w = 3 + 0.35 - 20 = -16.65
日本語で言えば、1回目のw方向の勾配は-16.65です。
b方向の勾配も計算します。
∂J / ∂b = 5w + 2b - 7
日本語で言えば、b方向の勾配の式です。
∂J / ∂b = 5 * 0.2 + 2 * 0.07 - 7
日本語で言えば、wに0.2、bに0.07を入れます。
∂J / ∂b = 1 + 0.14 - 7 = -5.86
日本語で言えば、1回目のb方向の勾配は-5.86です。
更新します。
w_2 = 0.2 - 0.01 * (-16.65)
日本語で言えば、今のwから、学習率と勾配を掛けたものを引きます。
w_2 = 0.3665
日本語で言えば、2回目のwは0.3665です。
b_2 = 0.07 - 0.01 * (-5.86)
日本語で言えば、今のbから、学習率と勾配を掛けたものを引きます。
b_2 = 0.1286
日本語で言えば、2回目のbは0.1286です。
2回目以降も同じ計算を繰り返す
2回目以降も、やることは同じです。
損失を計算する。
勾配を計算する。
wとbを更新する。
この繰り返しです。
J(w, b) = 7.5w^2 + 5wb - 20w + b^2 - 7b + 13.5
日本語で言えば、現在のwとbから損失を計算します。
∂J / ∂w = 15w + 5b - 20
日本語で言えば、現在のwとbからw方向の勾配を計算します。
∂J / ∂b = 5w + 2b - 7
日本語で言えば、現在のwとbからb方向の勾配を計算します。
w_{t+1} = w_t - 0.01 * (15w_t + 5b_t - 20)
日本語で言えば、wを少し更新します。
b_{t+1} = b_t - 0.01 * (5w_t + 2b_t - 7)
日本語で言えば、bを少し更新します。
計算結果を表にまとめると、次のようになります。
| 更新回数 t | w_t | b_t | ∂J / ∂w | ∂J / ∂b | J(w_t, b_t) |
|---|---|---|---|---|---|
| 0 | 0.000000 | 0.000000 | -20.000000 | -7.000000 | 13.500000 |
| 1 | 0.200000 | 0.070000 | -16.650000 | -5.860000 | 9.384900 |
| 2 | 0.366500 | 0.128600 | -13.859500 | -4.910300 | 6.529414 |
| 3 | 0.505095 | 0.177703 | -11.535060 | -4.119119 | 4.547949 |
| 4 | 0.620446 | 0.218894 | -9.598845 | -3.459984 | 3.172949 |
| 5 | 0.716434 | 0.253494 | -7.986019 | -2.910842 | 2.218762 |
| 6 | 0.796294 | 0.282602 | -6.642574 | -2.453324 | 1.556570 |
| 7 | 0.862720 | 0.307136 | -5.523522 | -2.072129 | 1.096987 |
| 8 | 0.917955 | 0.327857 | -4.591387 | -1.754510 | 0.777991 |
| 9 | 0.963869 | 0.345402 | -3.814954 | -1.489850 | 0.556545 |
| 10 | 1.002019 | 0.360301 | -3.168218 | -1.269306 | 0.402789 |
表を見ると、損失が少しずつ下がっていることが分かります。
13.500000 -> 9.384900 -> 6.529414 -> 4.547949 -> 3.172949
日本語で言えば、更新を繰り返すたびに、損失が小さくなっています。
wは0から始まり、1に近づいています。
bも0から始まり、少しずつ1へ向かっています。
これが、AIが「学習している」という状態です。
なぜwが一度1を超えているのか
表を見ると、10回目でwが1.002019になっています。
理想のwは1なのに、少しだけ超えていますね。
ここで慌てなくて大丈夫です。
勾配降下法は、一歩ずつ坂を下る方法です。
谷底に近づく途中で、片方の値が少し行き過ぎることがあります。
ただし、bはまだ0.360301で、理想の1には届いていません。
wとbは別々に動いているように見えますが、損失関数の中では互いに影響し合っています。
J(w, b) = 7.5w^2 + 5wb - 20w + b^2 - 7b + 13.5
日本語で言えば、損失関数には5wbという項があり、wとbが一緒に関係しています。
そのため、wだけを見て「もう正解」と判断してはいけません。
wとbの組み合わせ全体で損失を見る必要があります。
損失が下がるとは、直線がデータに近づくこと
勾配降下法の表だけを見ると、数字の更新に見えます。
でも、実際には直線が少しずつデータに近づいています。
初期状態は次の直線です。
ŷ = 0 * x + 0
日本語で言えば、どんな入力に対しても予測値は0です。
つまり、かなり外れた予測です。
1回更新後は次の直線です。
ŷ = 0.2 * x + 0.07
日本語で言えば、入力xが増えると予測値も少し増えるようになりました。
5回更新後は次の直線です。
ŷ = 0.716434 * x + 0.253494
日本語で言えば、だいぶ右上がりの直線になり、正解データに近づいています。
10回更新後は次の直線です。
ŷ = 1.002019 * x + 0.360301
日本語で言えば、傾きはかなり正解に近づきましたが、切片はまだ少し低い状態です。
理想の直線は次の通りです。
ŷ = 1 * x + 1
日本語で言えば、入力xに1を足す直線です。
学習をさらに続ければ、wとbはこの直線に近づいていきます。
手計算で理解すべきポイント
今回の計算で、新人エンジニアに押さえてほしいポイントは3つです。
| ポイント | 説明 |
|---|---|
| 損失関数はwとbの関数になる | 学習データが決まると、損失はwとbだけで表せる |
| 勾配は更新方向を決める | ∂J / ∂w と ∂J / ∂b を使って、wとbをどちらへ動かすか決める |
| 更新を繰り返すと損失が下がる | 一度で正解に行くのではなく、少しずつ近づく |
AIの学習は、魔法ではありません。
予測して、間違いを測って、傾きを見て、少し動かす。
この地味な作業の繰り返しです。
でも、この地味な繰り返しが、大きなAIモデルでも基本になっています。
Excelで確認すると理解が深まる
今回のような線形回帰の勾配降下法は、Excelやスプレッドシートでも確認できます。
列を次のように用意します。
| 列 | 内容 | 式のイメージ |
|---|---|---|
| A列 | x_i | 入力値 |
| B列 | y_i | 正解値 |
| C列 | ŷ_i | w * x_i + b |
| D列 | e_i | ŷ_i - y_i |
| E列 | e_i^2 | 誤差の二乗 |
| F列 | e_i * x_i | w方向の勾配計算に使う |
そして、次の式を順番に計算します。
J = (1 / n) * Σ e_i^2
日本語で言えば、損失は二乗誤差の平均です。
∂J / ∂w = (2 / n) * Σ e_i * x_i
日本語で言えば、w方向の勾配は、誤差と入力値の積の平均に2を掛けたものです。
∂J / ∂b = (2 / n) * Σ e_i
日本語で言えば、b方向の勾配は、誤差の平均に2を掛けたものです。
w_next = w - η * (∂J / ∂w)
日本語で言えば、次のwは、現在のwから、学習率とw方向の勾配を掛けたものを引きます。
b_next = b - η * (∂J / ∂b)
日本語で言えば、次のbは、現在のbから、学習率とb方向の勾配を掛けたものを引きます。
スプレッドシートで1行ずつ更新すると、「あ、本当に損失が下がっている」と実感できます。
数式を眺めるだけで終わるな。
一度、自分の手で計算してみましょう!
勾配降下法と実務のAI学習の関係
今回扱った線形回帰は、とても小さな例です。
データは4個だけ。
パラメータもwとbの2つだけ。
でも、考え方は大規模なAIでも同じです。
| 今回の例 | 大規模AI |
|---|---|
| パラメータはwとb | パラメータは何百万、何億、何千億 |
| データは4個 | データは大量の文章、画像、音声など |
| 損失はMSE | 損失は交差エントロピーなど |
| 手計算できる | GPUで大量に計算する |
| 直線を近づける | 複雑な関係を学習する |
大規模AIになると、数式も計算量も一気に増えます。
でも、基本は同じです。
prediction
↓
loss
↓
gradient
↓
update
日本語で言えば、予測し、損失を計算し、勾配を求め、パラメータを更新する流れです。
この流れを理解しておくと、ニューラルネットワークやバックプロパゲーションも理解しやすくなります。
第3章のまとめ
今回は、線形回帰を使って、勾配降下法を手計算で確認しました。
今回の学習データでは、理想の直線は次の通りです。
y = x + 1
日本語で言えば、入力xに1を足すと正解yになります。
AIモデルは次の形で予測しました。
ŷ_i = w * x_i + b
日本語で言えば、重みwとバイアスbを使って予測します。
損失関数は次のように展開できました。
J(w, b) = 7.5w^2 + 5wb - 20w + b^2 - 7b + 13.5
日本語で言えば、今回のデータに対する損失は、wとbだけで決まる関数になりました。
勾配は次の通りです。
∂J / ∂w = 15w + 5b - 20
日本語で言えば、w方向の傾きです。
∂J / ∂b = 5w + 2b - 7
日本語で言えば、b方向の傾きです。
更新式は次の通りです。
w_{t+1} = w_t - 0.01 * (15w_t + 5b_t - 20)
日本語で言えば、wを損失が下がる方向へ少し更新します。
b_{t+1} = b_t - 0.01 * (5w_t + 2b_t - 7)
日本語で言えば、bを損失が下がる方向へ少し更新します。
| 学んだこと | 内容 |
|---|---|
| 損失関数の展開 | データを代入すると、wとbの式として表せる |
| 偏微分 | w方向、b方向の傾きをそれぞれ求める |
| 更新 | 勾配の逆方向へ少しずつ進む |
| 学習 | 更新を繰り返して損失を小さくする |
線形回帰は、AI学習の入口としてとても良い題材です。
なぜなら、予測、損失、勾配、更新という機械学習の基本が、すべて見える形で確認できるからです。
今後の学習では、今回の計算をExcelやスプレッドシートで再現し、学習率を0.001、0.01、0.1に変えて損失の下がり方を比べてみましょう。次章では、学習率が大きすぎる場合や小さすぎる場合に何が起きるのかを、さらに詳しく解説します!
投稿者プロフィール

- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
海外放浪の末、2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。
最新の投稿
山崎講師2026年7月27日線形回帰で学ぶ勾配降下法|AIの学習を手計算で理解する第3章
山崎講師2026年7月27日勾配降下法とは?AIが損失関数を小さくする仕組みを新人エンジニア向けに数式つきで解説
山崎講師2026年7月27日AIの損失関数とは?MSE・RMSE・交差エントロピーを新人エンジニア向けに数式つきで解説
山崎講師2026年7月26日ChatGPTの仕組みから学ぶG検定対策講座⑥
