---
title: パターン認識論 #12
tags:  #機械学習 #深層学習 #パターン認識  
author: [Akinori Ito](https://image.docswell.com/user/akinori-ito)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/2JVVX1KXJQ.jpg?width=480
description: 東北大学で2023年に開講していた「パターン認識論」のスライドです 本スライドでは、MNIST手書き数字データセットを対象に、データを学習用・検証用・評価用に分割するclosed実験とopen実験、さらに交差検証の手順を説明しています。ミニバッチを用いた確率的勾配降下法（SGD）の概要と、バッチサイズが学習速度と収束に与える影響を示し、バッチ正則化やレイヤー正則化による勾配消失対策を紹介します。また、学習率調整が難しい問題に対してAdaGrad、RMSProp、AdaDelta、Adamといった適応的最適化手法の数式と特徴を比較し、実験結果のグラフで性能差を示しています。過学習防止のためのDropout手法と、微分計算を自動化するautomatic differentiation（双数）についても説明しています。
published: April 16, 26
canonical: https://image.docswell.com/s/akinori-ito/KJW4DM-2026-04-16-090340
---
# Page. 1

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

パターン認識論
第12回
伊藤 彰則
1


# Page. 2

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

MNIST手書き数字データセット
◦ NIST（米国標準技術研究所）の手書き数字データを
もとに整備されたデータベース
◦ 28×28ピクセルのグレースケール画像
◦ 画像認識技術のテスト用タスクとして広く使われて
いる
Wikipediaより引用
2


# Page. 3

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

前回のデータ
◦ 28×28ピクセルを一列に並べて784次元ベ
クトルとして扱う
識別器へ
3


# Page. 4

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

認識実験について
◦ データDを使った認識実験を行う場合
◦ DでモデルMを学習し、MでDを評価する (closed
実験)
◦ Mが複雑である（パラメータが多い）ほど高性能になりう
る
◦ 全サンプルを使ったNearest Neighborモデルなら常に認識率100%
◦ 汎化能力が測れない
◦ Dを学習用データD1と評価用データD2に分ける
(open実験)
◦ D1でMを学習してD2に対する性能を測る
◦ D1とD2のデータの分布に注意が必要
◦ 汎化能力を測ることができる
◦ D2に対する性能でハイパーパラメータを決めると、ハイ
パーパラメータ選択に関してclosed実験と同じ問題が起き
る
4


# Page. 5

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

認識実験について
◦ Dを学習用データD1、検証用データD2、評価用
データD3に分ける (open実験)
◦ D1でMを学習し、D2に対する性能でハイパーパラメータを
決める
◦ 最終的な性能をD3に対して測る
◦ ハイパーパラメータに対してopenな実験になる
◦ Dが小さいときには学習データが少なくなりがち
◦ 交差検証 (cross validation)
◦ 学習・検証・評価データへの分割方法を変えて複
数回実験を行い、その平均を最終結果とする
5


# Page. 6

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

例 (MNIST)
• 784-n-n-10のDNN
• 活性化関数ReLU、softmax出力、クロスエントロピーロス
1.0
accuracy
0.9
type
train_acc
0.8
valid_acc
0.7
0.6
30
100
300
size
6


# Page. 7

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

交差検証
(cross validation)
データ1
データ2
データ3
データ4
データ5
学習
学習
学習
検証
評価
学習
学習
検証
評価
学習
学習
検証
評価
学習
学習
検証
評価
学習
学習
学習
評価
学習
学習
学習
検証
7


# Page. 8

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

ミニバッチ学習
◦いつ重みを更新するか？
◦1サンプルごと
◦ 元のBPの式に従って係数を更新
◦全サンプルの平均
◦ 係数更新量を全サンプルで平均して
すべての学習サンプルに対して1回だけ
係数を更新
8


# Page. 9

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

Stochastic Gradient
Descent (SGD)
◦ まず最急降下法（バッチ学習）
◦ パラメータ𝒘を調整して、全サンプル𝒙 =
𝑥1 , … , 𝑥𝑁 に対する損失𝐿(𝒙, 𝒘)を最小化する
𝜌
◦ 𝒘 ← 𝒘 − 𝜌∇𝐿 𝒙, 𝒘 = 𝒘 − σ𝑖 ∇𝐿(𝑥𝑖 , 𝒘)
◦ ミニバッチによるSGD
𝑁
𝜌
◦ 𝒘 ← 𝒘 − 𝜌∇𝐿 𝒙, 𝒘 = 𝒘 − σ𝑖∈𝐼 ∇𝐿 𝑥𝑖 , 𝒘
𝑛
◦ Iはミニバッチのサンプル（サイズn)
◦ ランダムに選ぶのが望ましい
◦ これを繰り返して学習データ全体で学習
◦ これを必要回数（エポック数）だけ繰り返す
9


# Page. 10

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

ミニバッチ学習
◦ミニバッチ
◦ 少ないサンプルごとに更新量を平均して
係数を更新
1サンプルごと
ミニバッチ
バッチ（全サンプル）
10


# Page. 11

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

ミニバッチ学習
学習手順
◦ 全データがNbatchサンプルずつK個のミニバッチに分かれてい
るとする（Nbatch×K=全サンプル数)
For epoch=1 to Nepoch do
For k=1 to K do
k番目のミニバッチを使ってロス(誤差)を計算
誤差逆伝播によってネットワークの係数を更新
End for
End for
全ミニバッチでのロスの値の平均値を各エポッ
クでの平均ロスとして表示することが多い
11


# Page. 12

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

ミニバッチ学習の利点
◦数十サンプル程度をまとめて更新
◦1サンプルごと更新よりも高速
◦全サンプル更新よりも局所最適解
に陥りにくい
12


# Page. 13

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

例 (MNIST)
Minibatch=1
損失（上）の収束は遅い
精度（下）は頭打ち
93.2%
13


# Page. 14

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

例 (MNIST)
Minibatch=5
93.8%
14


# Page. 15

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

例 (MNIST)
Minibatch=20
良い収束、速度も速い
93.6%
15


# Page. 16

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

バッチ正則化
(Batch normalization)
◦ 活性化関数の項で説明したとおり、sigmoid
など微分すると平らになる活性化関数を使う
と、勾配消失が発生する
◦ 対処法
◦ 勾配消失が起きにくい活性化関数を使う(ReLUな
ど）
◦ 入力値が-1～1付近からずれていかないように正規
化する
ミニバッチごとに入力の各次元を
平均0分散1に正規化する→バッチ正則化
16


# Page. 17

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

バッチ正則化
(Batch normalization)
BN layer
𝐾
1
(𝑑)
𝜇 ← ෍
𝑥𝑘
𝐾
𝑘=1
𝐾
1
2
𝑑
𝑑
𝜎
← ෍
𝑥𝑘 − 𝜇 𝑑
𝐾
𝑘=1
(𝑑)
ミニバッチ
𝒙1 , … , 𝒙𝐾
𝒙𝒌 =
1
𝐷
(𝑥𝑘 , … , 𝑥𝑘 )
෢𝑑
𝑥𝑘 ←
2
(𝑑)
𝑥𝑘 − 𝜇 (𝑑)
𝜎 (𝑑)
𝒚1 , … , 𝒚𝐾
෢
(𝑑)
𝑦𝑘 ← 𝛾 (𝑑) 𝑥𝑘 + 𝛽 (𝑑)
𝛾, 𝛽は学習によって決まるパラメータ
17


# Page. 18

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

レイヤー正規化
(Layer Normalization)
◦バッチ正則化は、RNN（次回説
明）など時間依存性のあるモデル
に使えない
◦１つのレイヤー内で、ユニットの
出力を平均0分散1に正規化する
→レイヤー正規化
18


# Page. 19

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

レイヤー正規化
(Layer normalization)
LN layer
入力
𝒙𝒌 =
1
𝐷
(𝑥𝑘 , … , 𝑥𝑘 )
𝐷
1
(𝑑)
𝜇← ෍
𝑥𝑘
𝐷
𝑑=1
𝜎2 ←
𝐷
2
1
𝑑
෍
𝑥𝑘 − 𝜇
𝐷
𝑑=1
𝒚1 , … , 𝒚𝐾
(𝑑)
(𝑑)
𝑦𝑘
←
𝑥𝑘 − 𝜇
𝜎
19


# Page. 20

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

学習係数の問題
◦重みの学習
(𝑙)
(𝑙)
(𝑙) (𝑙−1)
𝑤𝑖𝑗 ← 𝑤𝑖𝑗 − 𝜌𝜀𝑗 𝑔𝑖
◦更新は学習係数の影響
を強く受ける
第𝑙層
第𝑙 − 1層
(𝑙)
𝑤𝑖𝑗
i
(𝑙−1)
出力𝑔𝑖
j
(𝑙)
誤差𝜖𝑗
MNISTの学習曲線例
20


# Page. 21

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

学習アルゴリズムの改良
◦通常
◦ 𝒘(𝑡) ← 𝒘(𝑡 − 1) − 𝜌𝜖 𝑡 𝒈(𝑡)
◦問題点
◦ 学習係数ρを決めるのが難しい
◦ 学習の進み具合によって学習係数を変えたい
◦ 最初は大きく動かし、収束してきたら微調整
◦ 学習回数によってρを変化させることも可能だが、できれ
ば学習の状況によって自動的にρが変わるようにしたい
21


# Page. 22

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

学習アルゴリズムの改良
◦AdaGrad
◦𝑟 𝑡 ← 𝑟 𝑡 − 1 + 𝜖 𝑡 𝒈 𝑡 2
𝜌
◦ 𝒘(𝑡) ← 𝒘(𝑡 − 1) −
𝜖 𝑡 𝒈(𝑡)
𝑟+𝑒
◦ 学習が進むと r が増加→学習係数が減少
◦RMSProp
◦ 𝑟 𝑡 ← 𝛾𝑟 𝑡 − 1 + (1 − 𝛾) 𝜖 𝑡 𝒈 𝑡 2
𝜌
◦ 𝒘(𝑡) ← 𝒘(𝑡 − 1) −
𝜖 𝑡 𝒈(𝑡)
𝑟+𝑒
◦ AdaGradより減少が緩やか(rの更新をγで按分して
いるため）
22


# Page. 23

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

学習アルゴリズムの改良
◦AdaDelta
◦ 𝑟 𝑡 ← 𝛾𝑟 𝑡 − 1 + (1 − 𝛾) 𝜖 𝑡 𝒈 𝑡
◦𝒗 ←
2
𝑠(𝑡)+𝑒
𝜖 𝑡 𝒈(𝑡)
𝑟(𝑡)+𝑒
◦ 𝒘 𝑡 ← 𝒘 𝑡 − 1 − 𝜌𝒗
◦ 𝑠 𝑡 ← 𝛾𝑠 𝑡 − 1 + 1 − 𝛾 𝒗 2
◦ RMSPropに対して、学習係数を減らさないための
要素 s を加えた
23


# Page. 24

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

学習アルゴリズムの改良
◦Adam
◦ 𝒗 𝑡 ← 𝛽𝒗 𝑡 − 1 + (1 − 𝛽)𝜖 𝑡 𝒈(𝑡)
◦ 𝑟 𝑡 ← 𝛾𝑟 𝑡 − 1 + (1 − 𝛾) 𝜖 𝑡 𝒈 𝑡 2
◦𝒘 𝑡 ← 𝒘 𝑡 − 1 −
𝜌
𝑟(𝑡)
+𝑒
1−𝛾𝑡
𝒗(𝑡)
1−𝛽 𝑡
◦ 学習係数を減らしていく要素 r と、学習係数を保
存する要素vを独立に制御する
24


# Page. 25

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

学習アルゴリズム比較
0.20
タスク：MNIST
手書き数字認識
0.15
Error
0.10
◦学習係数0.01
100
sgd
adagrad
adadelta
adam
rmsprop
accuracy
0.05
90
0.00
80
0
10
20
30
40
50
70
adadelta
adagrad
adam
rmsprop
sgd
Epoch
method
25


# Page. 26

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

Dropout学習
◦過学習を防ぐテクニック
◦学習を行う係数をランダムに決める
◦アンサンブル学習に似ている
26


# Page. 27

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

Dropoutの例
◦ MNIST手書き数字認識
◦ 784→128→128→64→10
◦ 活性化関数ReLU、出力層softmax
◦ 各層にdropout
2.2
valid_loss
train_loss
2.2
2.0
1.8
1.6
factor(dropout)
2.0
1.8
factor(dropout)
0
0
0.25
0.25
0.5
0.5
0.75
0.75
1.6
2.5
5.0
epoch
7.5
10.0
2.5
5.0
7.5
10.0
epoch
27


# Page. 28

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

複雑なネットワークの微分
係数を求める
複雑なネットワークだと微係数を求めるのが
難しくなる
＋
(2)
𝜀𝑗
gi(2) = f (hi(2) )
hi(2)
＋
(2)
×
(2)
= (𝑔𝑗 − 𝑏𝑗 )𝑓’(ℎ𝑗 )
𝐾−1
(1)
𝐾
𝑓
hi(2)
(1)
1
𝑔1 , … , 𝑔𝐾
=𝜎
(1)
෍ 𝑔𝑖
𝑖=1
1
𝑓 𝑔1 , … , 𝑔𝐾
(1)
= 𝜎 ෍ 𝑔𝑖
(1)
𝑔𝐾
𝑖=1
28


# Page. 29

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

自動微分
関数を計算する際に微分係数も一緒に計算す
る→自動微分(automatic differentiation)
◦ 微分のチェーンルール
◦ 𝑦 = 𝑓 𝑔 𝑥 = 𝑓(𝑤)
𝜕𝑦
𝜕𝑦 𝜕𝑤
◦ =
𝜕𝑥
𝜕𝑤 𝜕𝑥
◦ 二重数(dual number)を使う方法
◦ 実数ではない数𝜖を仮定：𝜖 ≠ 0, 𝜖 2 = 0
◦ 二重数 𝑧 = 𝑎 + 𝑏𝜖 ただし𝑎, 𝑏は実数（または複素
数）
29


# Page. 30

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

二重数による自動微分
二重数の性質
◦ 𝑎 + 𝑏𝜖 + 𝑐 + 𝑑𝜖 = 𝑎 + 𝑐 + 𝑏 + 𝑑 𝜖
◦ 𝑎 + 𝑏𝜖 𝑐 + 𝑑𝜖 = 𝑎𝑐 + 𝑏𝑐 + 𝑎𝑑 𝜖
𝑎+𝑏𝜖
𝑎
𝑏𝑐−𝑎𝑑
◦
= + 2 𝜖
𝑐+𝑑𝜖
𝑐
𝑐
関数𝑓(𝑎 + 𝜖)を𝑎の周りでテイラー展開する
◦𝑓 𝑎+𝜖 =𝑓 𝑎
+ 𝜖𝑓 ′ 𝑎
𝜖 2 ′′
+ 𝑓 𝑎
2
+⋯
= 𝑓 𝑎 + 𝜖𝑓′(𝑎)
◦ 𝑓 𝑔 𝑎+𝜖
= 𝑓 𝑔 𝑎 + 𝜖𝑔′(𝑎) = 𝑓 𝑔 𝑎
+ 𝜖𝑔′ 𝑎 𝑓′(𝑔 𝑎 )
二重数で関数計算をするとεの係数が微分係数になる
30


# Page. 31

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

二重数で計算する
すべての四則演算と関数計算を（実数の代わ
りに複素数を使うように）二重数で行えば、
どんな計算をしても常に微係数が計算される
sin(𝑎 + 𝑏𝜖) = sin 𝑎 + 𝑏𝜖 cos 𝑎
cos 𝑎 + 𝑏𝜖 = cos 𝑎 − 𝑏𝜖 sin 𝑎
𝑏𝜖
tan 𝑎 + 𝑏𝜖 = tan 𝑎 +
cos 2 𝑎
𝑎 + 𝑏𝜖 𝑘 = 𝑎𝑘 + 𝜖𝑘𝑎𝑘−1 𝑏
exp 𝑎 + 𝑏𝜖 = exp 𝑎 + 𝜖𝑏 exp 𝑎
𝑏𝜖
log 𝑎 + 𝑏𝜖 = log 𝑎 +
𝑎
31


# Page. 32

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

二重数による自動微分
𝑎, 𝑎′ + 𝑏, 𝑏′ = 𝑎 + 𝑏, 𝑎′ + 𝑏′
a
b
F(a,b,c)
F(a,b,c)
𝑎, 𝑎′ × 𝑏, 𝑏′ = 𝑎𝑏, 𝑎′ 𝑏 + 𝑎𝑏′
𝑎, 𝑎′
𝑎 𝑎′ 𝑏 − 𝑎𝑏′
= ,
𝑏, 𝑏′
𝑏
𝑏2
c
𝑎, 𝑎′ 𝑘 = 𝑎𝑘 , 𝑘𝑎 𝑘−1 𝑎′
&lt;a,a’&gt;
&lt;b,b’&gt;
&lt;c,c’&gt;
F(a,b,c)
&lt;F,F’&gt;
sin 𝑎, 𝑎′ = sin 𝑎, 𝑎′ cos 𝑎
exp 𝑎, 𝑎′ = exp 𝑎, 𝑎′ exp 𝑎
𝑎′
log 𝑎, 𝑎′ = log 𝑎,
𝑎
32


# Page. 33

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

演習
◦ MNISTの認識を行い、BatchNormの有無、
学習アルゴリズムの違いなどで性能がどう変
化するかを調べよ。
◦ 学習アルゴリズムは2種類以上を試すこと
◦ 学習・検証セットに分けるか、交差検証をおこな
うこと
◦ Wekaを使う人は、スクリーンショットを貼るだけ
でなく、結果を集計して示すこと
33


