---
title: 【ゼロから作るDeap Learning】4.4~4.6
tags: 
author: [京都大学人工知能研究会KaiRA](https://docswell.com/user/kyoto-kaira)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/YE9PL634J3.jpg?width=480
description: 【ゼロから作るDeap Learning】4.4~4.6 by 京都大学人工知能研究会KaiRA
published: May 21, 26
canonical: https://docswell.com/s/kyoto-kaira/K6NJV8-2026-05-21-212519
---
# Page. 1

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

2026年度前期輪読会
ゼロから作るDeep Learning
第4章 ニューラルネットワークの学習
(4.4～4.6)
京都大学大学院 工学研究科 M2
河田 賢斗
0


# Page. 2

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

アジェンダ
 4.4 勾配
• 4.4.1 勾配法
• 4.4.2 ニューラルネットワークに対する勾配
 4.5 学習アルゴリズムの実装
• 4.5.1 2層ニューラルネットワークのクラス
• 4.5.2 ミニバッチ学習の実装
• 4.5.3 テストデータで評価
 4.6 まとめ
1


# Page. 3

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

アジェンダ
 4.4 勾配
• 4.4.1 勾配法
• 4.4.2 ニューラルネットワークに対する勾配
 4.5 学習アルゴリズムの実装
• 4.5.1 2層ニューラルネットワークのクラス
• 4.5.2 ミニバッチ学習の実装
• 4.5.3 テストデータで評価
 4.6 まとめ
2


# Page. 4

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

4.4 勾配
の関数の偏微分について
計算)
の両方の偏微分をまとめて
右にコードを記載
𝝏𝒇 𝝏𝒇
𝝏𝒙𝟎 𝝏𝒙𝟏
として計算する(勾配(gradient)の
使用
•
• 最後の 文で
におけ
る勾配の計算を実装
計算結果は正しく得られた
3


# Page. 5

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

4.4 勾配
の関数の勾配について(以下にコードを記載)
 勾配は、関数 (
)の「一
番低い場所」をさしている
 「一番低い場所」から遠く離
れれば離れるほど、矢印の大
きさも大きくなる
 また、勾配が示す方法は各場
所において関数の値を最も減
らす方向である
コードの出典：
https://github.com/oreilly-japan/deep-learning-fromscratch/blob/master/ch04/gradient_2d.py
4


# Page. 6

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

アジェンダ
 4.4 勾配
• 4.4.1 勾配法
• 4.4.2 ニューラルネットワークに対する勾配
 4.5 学習アルゴリズムの実装
• 4.5.1 2層ニューラルネットワークのクラス
• 4.5.2 ミニバッチ学習の実装
• 4.5.3 テストデータで評価
 4.6 まとめ
5


# Page. 7

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

4.4.1 勾配法
ニューラルネットワークの学習では、最適なパラメータ(重みとバイア
ス)を見つける必要がある
最適なパラメータにおいて、損失関数は最小値をとる
損失関数の最小値(または、できるだけ小さな値)を探査する際に、勾配
を利用することが勾配法
(注意点)
勾配は各地点において損失関数の値を最も減らす方向であり、
勾配が目指す先が、損失関数の最小値となるわけではない
鞍点や極小値においても勾配は0となるが、必ずしも関数の最小値と
なるわけではない
→勾配の情報を参考に、進む方向を決めるのが良い
勾配方向へ進むことを繰り返して、関数の値を徐々に減少するのが勾配
法(gradient method)
6


# Page. 8

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

4.4.1 勾配法
関数の最小値を探索する場合:
勾配降下法(gradient descent method)
式
関数の最大値を探索する場合:
勾配上昇法(gradient ascent method)
学習率(learning rate))
勾配法を表した数式を式(1)に記載する
• 変数の値が増えても式(1)に従い、更新していく
• 式(1)のステップを繰り返すことで、関数の値を減らす
• 学習率の値は、大きすぎても小さすぎても、適切ではない
値を変更しながら正しく学習出来ているか、確認作業を行う
7


# Page. 9

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

4.4.1 勾配法
の最小値を勾配法を用いて解くコードを作成
• 学習率を
は
にすると、最終的な結果
となった
• 学習率を
にすると,最終的な結
果は上記の通りとなった
←初期値を
とし、学習率は
勾配法における繰り返しの数は
最終的な結果は
ほぼ正確な結果を得た
,
となり、
8


# Page. 10

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

4.4.1 勾配法
勾配法による変数の更新を図示するコードも作成
学習率はハイパーパラメータと
呼ばれ、手動で設定される
→様々な学習率の値を試し、う
まく学習出来るケースを探す
コードの出典：
https://github.com/oreilly-japan/deep-learningfrom-scratch/blob/master/ch04/gradient_method.py
9


# Page. 11

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

アジェンダ
 4.4 勾配
• 4.4.1 勾配法
• 4.4.2 ニューラルネットワークに対する勾配
 4.5 学習アルゴリズムの実装
• 4.5.1 2層ニューラルネットワークのクラス
• 4.5.2 ミニバッチ学習の実装
• 4.5.3 テストデータで評価
 4.6 まとめ
10


# Page. 12

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

4.4.2 ニューラルネットワークに対する勾配
ニューラルネットワークの学習における勾配(
現出来る
)は以下の式(3)で表
式
式(3)
以下ではニューラルネットワークを基にして、実際に勾配を求める実
装を行う(はじめに、simpleNetというクラスを実装する)
11


# Page. 13

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

4.4.2ニューラルネットワークに対する勾配
• ここでは、ランダムな
数値を重み に格納
•
に1×2次元配列を組
み込み、重み との
行列積を計算すること
で1×3次元行列を得る
• argmax()関数により、
最大値のインデックス
を出力する(0)
• 正解ラベル を与え、
cross entropy 誤差を
算出→下の結果より
2.27と求まる
12


# Page. 14

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

4.4.2ニューラルネットワークに対する勾配
最終の行列の出力では、勾配が表現されている
前ページの例では、
と算出されている
損失関数を減らすという観点では、
をマイナス方向へ、
を
プラス方向へ更新させることが良い
更新では、
のほうが
よりも大きく貢献することが分かる
13


# Page. 15

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

アジェンダ
 4.4 勾配
• 4.4.1 勾配法
• 4.4.2 ニューラルネットワークに対する勾配
 4.5 学習アルゴリズムの実装
• 4.5.1 2層ニューラルネットワークのクラス
• 4.5.2 ミニバッチ学習の実装
• 4.5.3 テストデータで評価
 4.6 まとめ
14


# Page. 16

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

4.5 学習アルゴリズムの実装
ニューラルネットワークの学習に関する基本について
【前提】
ニューラルネットワーク:重みとバイアスを有する
重みとバイアスを訓練データに適応するように調整すること＝「学習」
【ステップ1(ミニバッチ)】
訓練データの中から一部のデータを抽出(ミニバッチ)し、この損失関数の値を減らすことを目的
【ステップ2(勾配の算出)】
ミニバッチの損失関数を減らすため、各重みパラメータの勾配を算出
【ステップ3(パラメータの更新)】
重みパラメータを勾配方向に微小量だけ更新
【ステップ4(繰り返す)】
ステップ1～ステップ3を繰り返す
ニューラルネットワークの学習は、これら4つの手順で実施
使用データは無作為に抽出したものを使用するため、確率的勾配降下法
(stochastic gradient descent; SGD)と呼ばれる
15


# Page. 17

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

アジェンダ
 4.4 勾配
• 4.4.1 勾配法
• 4.4.2 ニューラルネットワークに対する勾配
 4.5 学習アルゴリズムの実装
• 4.5.1 2層ニューラルネットワークのクラス
• 4.5.2 ミニバッチ学習の実装
• 4.5.3 テストデータで評価
 4.6 まとめ
16


# Page. 18

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

4.5.1 2層ニューラルネットワークのクラス
2層ニューラルネットワークをTwoLayerNetという名前のクラスとし
て、以下のコードの通り実装
17


# Page. 19

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

4.5.1 2層ニューラルネットワークのクラス
• 重みパラメータの初期化を実施
重みはガウス分布に従う乱数で初期
化・バイアスは0で初期化
•
は損失関数の値を計算
predict()の結果と正解ラベルを元に、
交差エントロピーを算出
•
は各重み
に対する損失関数の勾配を計算
数値微分による勾配の算出法
• 実装の結果より、コードが正しく処理
されたことが分かる
↓実装の結果
18


# Page. 20

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

アジェンダ
 4.4 勾配
• 4.4.1 勾配法
• 4.4.2 ニューラルネットワークに対する勾配
 4.5 学習アルゴリズムの実装
• 4.5.1 2層ニューラルネットワークのクラス
• 4.5.2 ミニバッチ学習の実装
• 4.5.3 テストデータで評価
 4.6 まとめ
19


# Page. 21

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

4.5.2 ミニバッチ学習の実装
実装コード例(1・2/6)
20


# Page. 22

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

4.5.2 ミニバッチ学習の実装
実装コード例(3・4/6)
21


# Page. 23

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

4.5.2 ミニバッチ学習の実装
実装コード例(5・6/6)
22


# Page. 24

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

4.5.2 ミニバッチ学習の実装
【コードの基本情報】
 訓練データからミニバッチを取得 勾配法によりパラメータを更新
 TwoLayerNetクラスにより、MNISTデータセットを用いて学習
 (ミニバッチサイズ)=100, (訓練データの個数)=60,000
 確率勾配降下による繰り返しの回数は、10,000回
 損失関数の結果は右図の通りである
学習の回数が進むにつれて損失関数
の値が減少する
(学習がうまくいっている)
23


# Page. 25

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

アジェンダ
 4.4 勾配
• 4.4.1 勾配法
• 4.4.2 ニューラルネットワークに対する勾配
 4.5 学習アルゴリズムの実装
• 4.5.1 2層ニューラルネットワークのクラス
• 4.5.2 ミニバッチ学習の実装
• 4.5.3 テストデータで評価
 4.6 まとめ
24


# Page. 26

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

4.5.3 テストデータで評価
学習の回数が進むと損失関数の値が減少することが確認できた
これは訓練データのミニバッチに対してであり、他のデータセット
に同じことが言えるのかは不明瞭
訓練データ以外のデータを正しく認識できるのかを確認する必要が
ある(「過学習」を防ぐ)
ニューラルネットワークの学習では、「汎化能力」を身に付けること
が目標
1エポック毎に、訓練データとテストデータの認識精度を記録する
25


# Page. 27

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

4.5.3 テストデータで評価
• 上記赤枠の部分のコードにより、認識精度を得る
• for 文の繰り返しでは時間がかかるため、
1エポック毎に計算
26


# Page. 28

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

4.5.3 テストデータで評価
• 前ページで得られたコードの結果を以下に示す
• 各エポック毎の、訓練データ及びテストデータの認識精度の値を出力(左図)
• 値をグラフにプロット(右図)
27


# Page. 29

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

アジェンダ
 4.4 勾配
• 4.4.1 勾配法
• 4.4.2 ニューラルネットワークに対する勾配
 4.5 学習アルゴリズムの実装
• 4.5.1 2層ニューラルネットワークのクラス
• 4.5.2 ミニバッチ学習の実装
• 4.5.3 テストデータで評価
 4.6 まとめ
28


# Page. 30

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

4.6 まとめ
ニューラルネットワークの学習について
損失関数という指標を導入
この値が最も小さくなる重みパラメータを探索
探索には、関数の傾きを用いた勾配法を使用
(本章のまとめ)
 データセットは訓練データとテストデータに分けて、汎化能力をテ
ストデータで評価
 損失関数を指標とし、重みパラメータの勾配をもとに勾配方向に主
にの値を更新
 重みパラメータの勾配は数値微分により算出可能
 次章で実装する誤差逆伝播法では、高速に勾配を算出可能
29


