線形回帰で学ぶ勾配降下法|AIの学習を手計算で理解する第3章

こんにちは。ゆうせいです。

今回は、第3章として「線形回帰を使って、勾配降下法を手計算で理解する」ことを目指します。

前回までに、損失関数と勾配降下法を学びました。

ただ、数式だけを見ていると、少しふわっとしますよね。

「結局、AIはどうやってパラメータを更新しているの?」

そんな疑問が残ると思います。

そこで今回は、小さなデータを使って、線形回帰の学習を実際に手で追いかけます。

線形回帰とは、データの関係を直線で表す方法です。

難しそうに聞こえますが、要するに「入力xに対して、出力yを直線で予測する方法」です。

高校数学で出てくる直線の式を、AIの学習に使うイメージですね。

今回使う学習データ

まず、次の4つのデータを使います。

データ番号 i入力 x_i正解 y_i
112
223
334
445

見れば分かる通り、正解はとても単純です。

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を少し更新します。

計算結果を表にまとめると、次のようになります。

更新回数 tw_tb_t∂J / ∂w∂J / ∂bJ(w_t, b_t)
00.0000000.000000-20.000000-7.00000013.500000
10.2000000.070000-16.650000-5.8600009.384900
20.3665000.128600-13.859500-4.9103006.529414
30.5050950.177703-11.535060-4.1191194.547949
40.6204460.218894-9.598845-3.4599843.172949
50.7164340.253494-7.986019-2.9108422.218762
60.7962940.282602-6.642574-2.4533241.556570
70.8627200.307136-5.523522-2.0721291.096987
80.9179550.327857-4.591387-1.7545100.777991
90.9638690.345402-3.814954-1.4898500.556545
101.0020190.360301-3.168218-1.2693060.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列ŷ_iw * x_i + b
D列e_iŷ_i - y_i
E列e_i^2誤差の二乗
F列e_i * x_iw方向の勾配計算に使う

そして、次の式を順番に計算します。

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年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。