---
title: 【ゼロから作るDeap Learning】4.3~4.4
tags:  #勾配法  
author: [京都大学人工知能研究会KaiRA](https://convert.docswell.com/user/kyoto-kaira)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/L73KNV4975.jpg?width=480
description: 【ゼロから作るDeap Learning】4.3~4.4 by 京都大学人工知能研究会KaiRA
published: May 19, 25
canonical: https://convert.docswell.com/s/kyoto-kaira/5J4MGN-2025-05-19-204546
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/L73KNV4975.jpg)

2025年度前期輪読会 # (2025/5/19)
ニューラルネットワークの学習 4.3~4.4
東京理科大学創域理工学部社会基盤工学科 B2
岩田 冨雅
0


# Page. 2

![Page Image](https://bcdn.docswell.com/page/87D3W8Q8JG.jpg)

アジェンダ
◼ 数値微分
4.3.1 微分
4.3.2 数値微分の例
4.3.3 偏微分
◼ 勾配
4.4.1 勾配法
4.4.2 ニューラルネットワークに対する勾配
1


# Page. 3

![Page Image](https://bcdn.docswell.com/page/VJP498LW78.jpg)

4.3 数値微分
2


# Page. 4

![Page Image](https://bcdn.docswell.com/page/2EVXMNQ9JQ.jpg)

4.3.1 微分
数値微分を理解し、実装する
・微分の定義
𝑑𝑓
𝑓 𝑥+ℎ −𝑓 𝑥
= lim
ℎ→0
𝑑𝑥
ℎ
・数値微分の実装例（問題点あり）
幅hをなるべく小さく設定してみる（今回はh = 10^-50)
解析的な微分結果は4であるが、
数値微分すると0.0になってしまう
3


# Page. 5

![Page Image](https://bcdn.docswell.com/page/57GVGKW47L.jpg)

4.3.1 微分
実装上の2つの問題点
① h の値が小さすぎるため、丸め誤差が発生
→ h を 10^-4 程度にすると良い結果が得られる
解析的な微分結果に近づいた！
4


# Page. 6

![Page Image](https://bcdn.docswell.com/page/4EQ6XN3REP.jpg)

4.3.1 微分
実装上の2つの問題点
②前方差分では誤差が大きい
→ 中心差分を使用することで精度向上
𝑑𝑓
𝑓 𝑥+ℎ −𝑓 𝑥−ℎ
中心差分による数値微分：
= lim
ℎ→0
𝑑𝑥
2ℎ
中心差分による数値微分のほうが精度が高い！
5


# Page. 7

![Page Image](https://bcdn.docswell.com/page/KJ446G1QJ1.jpg)

4.3.2 数値微分の例
数値微分と解析的な微分を比較する
𝑦 = 0.01𝑥 2 + 0.1𝑥
上の2次関数を、
x = 5 と x = 10 で数値微分し、
解析的な解と比較する。
6


# Page. 8

![Page Image](https://bcdn.docswell.com/page/LE14VDGLEG.jpg)

4.3.2 数値微分の例
数値微分と解析的な微分を比較する
厳密には一致していないが、
ほとんど同じ値とみなすことができる程度の
小さな誤差である。
x = 5 と x = 10 における接線
7


# Page. 9

![Page Image](https://bcdn.docswell.com/page/GEWXLYKQ72.jpg)

4.3.3 偏微分
偏微分の計算を理解する
偏微分：複数の変数を持つ関数において、
特定の1つの変数に注目し、
他の変数を定数とみなして微分すること
例： 𝑓 𝑥0 , 𝑥1 = 𝑥0 2 + 𝑥1 2
𝑥0 = 3, 𝑥1 = 4 のときの、 𝑥0 に対する偏微分
１.解析的な偏微分
2.数値微分
𝜕𝑓
= 2𝑥0
𝜕𝑥0
𝑥0 = 3 を代入して、6
8


# Page. 10

![Page Image](https://bcdn.docswell.com/page/47Z6MXZ373.jpg)

4.4 勾配
9


# Page. 11

![Page Image](https://bcdn.docswell.com/page/YJ62N4ZZ7V.jpg)

4.4 勾配
−∇𝑓 は、関数の値を最も減らす方向を指す
勾配：全ての変数(NNでは重み・バイアス）の偏微分をベクトルとしてまとめたもの
その点で関数が最も増加する方向を示す
𝜕𝑓 𝜕𝑓
∇𝑓 = 𝑔𝑟𝑎𝑑𝑓 =
,
𝜕𝑥 𝜕𝑦
−∇𝑓 はその点で目的関数が最も減少する方向を指す
𝜕𝑓 𝜕𝑓
−∇𝑓 = −𝑔𝑟𝑎𝑑𝑓 = −
,
𝜕𝑥 𝜕𝑦
10


# Page. 12

![Page Image](https://bcdn.docswell.com/page/GJ525QW9J4.jpg)

4.4 勾配
−∇𝑓 は、各点において関数が最も減少する方向を示す
𝑓 𝑥0 , 𝑥1 = 𝑥0 2 + 𝑥1 2
𝜕𝑓 𝜕𝑓
, )
𝜕𝑥0 𝜕𝑥1
−∇𝑓 = −(
= −(2𝑥0 , 2𝑥1 )
−∇𝑓 をベクトル場として可視化
関数fの最小値(0, 0)を指している
11


# Page. 13

![Page Image](https://bcdn.docswell.com/page/LE3KNV42E5.jpg)

4.4.1 勾配法
勾配法で、目的関数の極小値を探索する
勾配法：勾配を利用して関数の極小値を探す手法。
現在地から勾配が示す方向に一定距離だけ進むステップを繰り返す
𝒙𝒏𝒆𝒘 = 𝒙𝒄𝒖𝒓𝒓𝒆𝒏𝒕 − η𝜵𝒇(𝒙𝒄𝒖𝒓𝒓𝒆𝒏𝒕 )
η：学習率
1回の更新でどれだけ進むかを決めるパラメータ
𝒙𝒏𝒆𝒘 : 勾配方向に一定距離進んだ後の位置
𝒙𝒄𝒖𝒓𝒓𝒆𝒏𝒕 : 現在の位置
𝜵𝒇 𝒙𝒄𝒖𝒓𝒓𝒆𝒏𝒕 : 現在位置における勾配
12


# Page. 14

![Page Image](https://bcdn.docswell.com/page/8ED3W8Q67G.jpg)

4.4.1 勾配法
勾配法の実装
目的関数： 𝑓 𝑥0 , 𝑥1 = 𝑥0 2 + 𝑥1 2
学習率：𝑙𝑟 = 0.1
ステップ数：𝑠𝑡𝑒𝑝𝑠 = 100
最終的なxが目的関数の最小値とほぼ一致している
13


# Page. 15

![Page Image](https://bcdn.docswell.com/page/V7P498GZE8.jpg)

4.4.1 勾配法
勾配法の途中経過
関数の最小値である原点に向かって、
徐々に近づいていることがわかる
14


# Page. 16

![Page Image](https://bcdn.docswell.com/page/2JVXMN6M7Q.jpg)

4.4.1 勾配法
学習率の設定
①学習率が大きすぎる場合
・パラメータの更新が大きすぎるため、最小値を通り過ぎてしまう
・更新を繰り返すうちに発散してしまう可能性あり
②学習率が小さすぎる場合
・パラメータの更新が小さいため、最小値への到達に多くのステップ（時間）が必要
15


# Page. 17

![Page Image](https://bcdn.docswell.com/page/5EGVGKNXEL.jpg)

4.4.2 ニューラルネットワークに対する勾配
簡単なNN(simpleNet)の実装
NNの学習目的：損失関数 𝐿 を最小にするような重みパラメータ 𝑊 をみつける
勾配：損失関数が各重みパラメータの変化に対してどれだけ変化するかを示す
例：2×3 の重み行列をもつNN
重み行列 ：
𝑤11
𝑊= 𝑤
21
𝑊 に対する損失関数 𝐿 の勾配 ：
𝜕𝐿
𝜕𝑤11
𝜕𝐿
𝜕𝑤21
𝜕𝐿
=
𝜕𝑊
𝑤12
𝑤22
𝑤13
𝑤23
𝜕𝐿
𝜕𝑤12
𝜕𝐿
𝜕𝑤22
𝜕𝐿
𝜕𝑤13
𝜕𝐿
𝜕𝑤23
16


# Page. 18

![Page Image](https://bcdn.docswell.com/page/4JQ6XNQ5JP.jpg)

4.4.2 ニューラルネットワークに対する勾配
簡単なNN(simpleNet)の実装
17


# Page. 19

![Page Image](https://bcdn.docswell.com/page/K7446GNV71.jpg)

まとめ
・勾配は「関数の変化が最も大きい方向」を示す道標
・勾配法は「勾配の逆向きに少しずつ進む」最適化手法
・学習率の調整が効率的な学習の重要なポイント
→コ
ードで実装してみよう
→コードで実装してみよう
18


