---
title: パターン認識論 #11
tags:  #機械学習 #深層学習 #パターン認識  
author: [Akinori Ito](https://image.docswell.com/user/akinori-ito)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/GJ5M2N48J4.jpg?width=480
description: 東北大学で2023年に開講していた「パターン認識論」のスライドです 本資料では、深層学習が多数の中間層を持つニューラルネットワーク（DNN）として注目される背景を説明し、3層から7層までの構造や非線形関数の重ね合わせによる表現力向上を示しています。誤差逆伝搬法による重み更新の仕組みを復習し、勾配消失問題とその原因を具体例で示したうえで、シグモイド・tanh・ReLU・Leaky ReLU・Swish などの活性化関数の特性と改善効果を比較しています。出力層ではシグモイドと Softmax の違い、微分式、クロスエントロピーと二乗誤差のコスト関数の比較を解説し、確率的解釈や学習の安定性を論じています。最後に、MNIST 手書き数字認識を題材に、MLP の層数・ユニット数・活性化関数を変えて実験する演習手順とデータ分割の注意点を提示し、Python・R・Weka での実装方法を紹介しています。
published: April 16, 26
canonical: https://image.docswell.com/s/akinori-ito/57NR28-2026-04-16-090256
---
# Page. 1

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

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


# Page. 2

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

深層学習(Deep Learning)
◦多くの中間層を持つニューラル
ネットワーク
◦高い識別性能・近似性能を持つこ
とから近年注目されている
2


# Page. 3

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

復習：３層NN
1
1
x1
x2
x3
x4
入力層
(1)
11
w
h1(1) g1(1) ( 2 ) h1( 2) g ( 2)
1
w11
中間層
出力層
3


# Page. 4

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

復習：３層NN
◦第k層の第ｉユニットの入力と出力
(0)
i
= xi
(k )
i
= w g
g
h
(k )
ji
( k −1)
j
j
g
(k )
i
= f (h )
(k )
i
1
（など）
f ( x) =
−x
1+ e
1
x1
x2
x3
x4
(1)
11
w
(1)
1
h
(1)
1
g
4


# Page. 5

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

復習：誤差逆伝搬学習
(Back Propagation)
◦重みの学習
(𝑙)
(𝑙)
(𝑙) (𝑙−1)
𝑤𝑖𝑗 ← 𝑤𝑖𝑗 − 𝜌𝜀𝑗 𝑔𝑖
◦出力層の誤差
(2)
(2)
(2)
𝜀𝑗 = (𝑔𝑗 − 𝑏𝑗 )𝑓’(ℎ𝑗 )
◦中間層の誤差
(1)
𝜀𝑗
(2)
(2)
(2)
= ෍ 𝜀𝑘 𝑤𝑗𝑘 𝑓’(ℎ𝑗 )
𝑘
5


# Page. 6

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

復習：誤差逆伝搬学習
(Back Propagation)
教師信号
＋
(2)
𝜀𝑗
g i( 2) = f (hi( 2 ) )
hi( 2 )
(2)
(2)
= (𝑔𝑗 − 𝑏𝑗 )𝑓’(ℎ𝑗 )
＋
(1)
i
h
𝑏𝑖
(2)
𝑔𝑗 − 𝑏𝑗
1( 2 )
 2( 2 )
 3( 2 )
 4( 2 )
(1)
(2) (2)
(2)
𝜀𝑗 = ෍ 𝜀𝑘 𝑤𝑗𝑘 𝑓’(ℎ𝑗 )
𝑘
6


# Page. 7

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

Deep Neural Network
◦中間層がたくさんあるNN
３層
７層
7


# Page. 8

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

DNNはなぜよい（と思わ
れる）のか
◦任意の関数を近似する能力は3層
NNで十分
◦ただし中間層のユニット数がいくらで
も多くてもよく、しかも学習ができれ
ば
◦実際には難しい
8


# Page. 9

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

DNNはなぜよい（と思わ
れる）のか
◦多層NNの場合
◦非線形関数を重ねて使うことで、少な
いユニット数で高い表現力が得られる
（うまく学習できれば）
9


# Page. 10

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

例
1
◦次のようなデー
タの識別
-1
-2
-3
data$y
0
◦これは難しそう
-2
-1
0
1
2
data$x
10
3


# Page. 11

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

例
-2
-1
0
1
data$x
N=3
2
3
1
-3
-2
-1
data$y
0
1
0
-3
-2
-1
data$y
-1
-2
-3
data$y
0
1
◦3層NNによる識別
-2
-1
0
1
data$x
N=5
2
3
-2
-1
0
1
2
3
data$x
N=10
11


# Page. 12

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

多層にしたら
0
-1
-3
-2
data$y
◦中心からの距離と、
距離からの識別を直
列のNNでやったら？
1
◦ちょっと卑怯に
-2
-1
0
1
2
data$x
この辺で特徴抽出をしている
12
3


# Page. 13

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

結果
-1
-2
-3
◦この例はデータの構
造を人手で与えたが、
実際は特徴が自動的
に発見されることが
期待される
data$y
0
1
◦中間層が実質5ユ
ニットでこんな結果
が得られる
-2
-1
0
1
2
data$x
13
3


# Page. 14

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

DNNの問題点
◦勾配消失(vanishing gradient)
◦NNの学習法（BP法）は最急降下法
(Gradient descent)の一種
◦ 各レイヤーの各ユニットで、誤差を最小に
する方向に重みを変化させる
◦ 変化量を非線形関数の微係数と入力の誤差
の総和に比例させる
◦活性化関数にsigmoidなどを使う場合、
ネットワークの層が深くなると、重み
の学習が困難になる
14


# Page. 15

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

Vanishing Gradient例
◦例：6層NNの中間4層のアクティ
ベーションの変化 [X. Glorot&amp;Y. Bengio,
2010]
15


# Page. 16

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

Vanishing Gradient
＋
(1)
𝜖𝑖
1( 2 )
 2( 2 )
 3( 2 )
 4( 2 )
hi(1)
2
2
= ෍ 𝜖𝑘 𝑤𝑖𝑘
𝑘
𝑓 ′ ℎ𝑖
1
特定の部分以外で
は0に近い
レイヤーが深くなるとだんだ
ん小さくなる
(𝑙)
(𝑙)
𝑙 (𝑙−1)
𝑤𝑖𝑗 ← 𝑤𝑖𝑗 − 𝜌𝜖𝑗 𝑔𝑖
重みのアップデートが起きにくい
16


# Page. 17

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

0.0000
0.0
0.0005
0.2
-10
-5
0
x
元の関数
5
10
0.6
0.0015
sigmoid&#039;(x)
0.0010
0.4
sigmoid(x)
0.0020
0.8
0.0025
1.0
活性化関数の工夫
1
シグモイド関数
1+exp(−𝑥)
-10
-5
0
x
5
10
微分
17


# Page. 18

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

活性化関数の工夫
0.06
0.02
0.04
tanh&#039;(x)
0.0
-0.5
0.00
-1.0
tanh(x)
0.5
0.08
1.0
0.10
𝑒 𝑥 −𝑒 −𝑥
tanh関数 tanh 𝑥 = 𝑥 −𝑥
𝑒 +𝑒
-10
-5
0
5
10
-10
-5
0
x
x
元の関数
微分
5
10
18


# Page. 19

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

0.000
0
0.002
2
-10
-5
0
5
x
元の関数
10
6
0.006
ReLU&#039;(x)
ReLU(x)
0.004
4
0.008
8
0.010
10
活性化関数の工夫
ランプ関数 max(0, 𝑥)
-10
-5
0
5
10
x
微分
19


# Page. 20

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

活性化関数の工夫
10
ランプ関数 min(0, 𝑥)
0
2
4
ReLU(x)
6
8
Rectified-Linear
Unit (ReLU)
-10
-5
0
5
10
x
元の関数
20


# Page. 21

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

使用例
MNIST手書き数字DB認識
◦中間2層(128-64), シグモイド出力
74%
94%
21


# Page. 22

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

その他の活性化関数
Leaky ReLU
SoftPlus
Swish
𝑥
0.001𝑥
log(1 + 𝑒 𝑥 )
𝑥
1+exp(−𝑥)
10
8
2
0
2
0
-10
-5
0
x
5
10
4
Swish
6
6
4
SoftPlus
6
4
2
0
Leaky ReLU
8
8
10
10
𝑥≥0
𝑥&lt;0
-10
-5
0
5
10
-10
-5
0
5
x
x
22
10


# Page. 23

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

出力層の活性化関数
オリジナル：sigmoid
◦0/1の出力を近似（識別向き）
0/1
各出力ユニットの
出力は独立
0/1
0/1
23


# Page. 24

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

出力層の活性化関数
Softmax出力
exp ℎ𝑖
◦𝑔𝑖 = σ
𝑗 exp ℎ𝑗
hi
gi =
exp hi
 j exp hj
どれかの出力だ
けが1に近くなる
それ以外は0に近
い
総和は1
（確率近似）
24


# Page. 25

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

出力の微分
exp ℎ𝑖
◦𝑔𝑖 = σ
𝑗 exp ℎ𝑗
exp ℎ𝑖 exp ℎ𝑗
𝜕𝑔𝑖
◦
𝜕ℎ𝑗
=−
σ𝑗 exp ℎ𝑗
2
= −𝑔𝑖 𝑔𝑗 (𝑖 ≠ 𝑗)
exp ℎ𝑖 σ𝑗 exp ℎ𝑗 − exp ℎ𝑖
𝜕𝑔𝑖
◦
=
2
𝜕ℎ𝑖
σ exp ℎ
𝑗
2
= 𝑔𝑖 (1 − 𝑔𝑖 )
𝑗
𝜕𝑔𝑖
◦まとめて
= 𝑔𝑖 (𝛿𝑖𝑗 − 𝑔𝑗 )
𝜕ℎ𝑖
25


# Page. 26

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

Softmaxと誤差逆伝播
𝜕𝑔𝑖
◦
= 𝑔𝑖 (𝛿𝑖𝑗 − 𝑔𝑗 )
𝜕ℎ𝑗
𝜕𝑔𝑖
◦ヤコビ行列 J =
𝜕ℎ𝑗
◦誤差ベクトル 𝒆
◦入力側での誤差 𝝐 = J𝒆
26


# Page. 27

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

Softmaxと誤差逆伝播
◦ シグモイド出力
◦ 𝜖𝑖 = 𝑔𝑖 − 𝑏𝑖 𝑓′(ℎ𝑖 )
= 𝑔𝑖 − 𝑏𝑖 𝑔𝑖 1 − 𝑔𝑖
＋
hi
gi = f (hi )
 i = ( gi − bi ) f &#039; (hi )
◦ Softmax出力
◦ 𝜖𝑖 = 𝑔𝑖 σ𝑗 𝑔𝑗 − 𝑏𝑗 (𝛿𝑖𝑗 − 𝑔𝑗 )
◦ ある出力ユニットの逆伝播誤差に他の出力ユ
ニットが影響
27
bi


# Page. 28

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

コスト関数
出力側で小さくしたいもの
◦これまでは二乗誤差を考えた
◦ 𝐿 = σ𝑖 𝐿𝑖
1
◦ 𝐿𝑖 = σ𝑘
𝑛
𝑔𝑖
𝑘
− 𝑏𝑖
𝑘
2
◦出力が(0,1)の場合にはこれ以外のコ
スト関数もありうる
28


# Page. 29

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

クロスエントロピー
出力のエントロピーを最小化
◦𝐿 = σ𝑖 𝐿𝑖
1
◦ 𝐿𝑖 = − σ𝑘
𝑛
(𝑘)
(𝑘)
𝑏𝑖 log 𝑔𝑖 +
(𝑘)
1 − 𝑏𝑖
log
(𝑘)
1 − 𝑔𝑖
(𝑘)
◦𝑏𝑖 = 1のときは前半のみ
(𝑘)
◦𝑏𝑖 = 0のときは後半のみ
29


# Page. 30

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

コストの比較
クロスエントロピー
b=1
b=0
2
1
0.2
0.4
Cost
0.6
3
b=0
0
0.0
Cost
0.8
b=1
4
1.0
二乗誤差
0.0
0.2
0.4
0.6
x
0.8
1.0
0.0
0.2
0.4
0.6
0.8
1.0
x
30


# Page. 31

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

コストと誤差
◦二乗誤差の場合
＋
◦出力側 𝑔𝑖 − 𝑏𝑖
1
◦ 二乗コスト𝐿 =
2
𝜕𝐿
◦
= 𝑔𝑖 − 𝑏𝑖
𝜕𝑔𝑖
𝑔𝑖 − 𝑏𝑖
2
hi
gi = f (hi )
 i = ( gi − bi ) f &#039; (hi )
◦クロスエントロピーの場合
◦コスト L = 𝑏𝑖 log 𝑔𝑖 + 1 − 𝑏𝑖 log(1 − 𝑔𝑖 )
𝜕𝐿
𝑏𝑖
1−𝑏𝑖
𝑏𝑖 −𝑏𝑖 𝑔𝑖 −𝑔𝑖 +𝑏𝑖 𝑔𝑖
𝑏𝑖 −𝑔𝑖
◦
= −
=
=
𝜕𝑔𝑖
𝑔𝑖
1−𝑔𝑖
𝑔𝑖 1−𝑔𝑖
𝑔𝑖 (1−𝑔𝑖 )
31
bi


# Page. 32

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

コストと誤差
◦二乗誤差の場合
𝜕𝐿 ′
◦𝜖𝑖 =
𝑓 ℎ𝑖
𝜕𝑔𝑖
= 𝑏𝑖 − 𝑔𝑖 𝑔𝑖 (1 − 𝑔𝑖 )
◦クロスエントロピーの場合
𝜕𝐿 ′
◦𝜖𝑖 =
𝑓 ℎ𝑖
𝜕𝑔𝑖
𝑏𝑖 −𝑔𝑖
=
𝑔𝑖 1 − 𝑔𝑖
𝑔𝑖 1−𝑔𝑖
= 𝑏𝑖 − 𝑔𝑖
＋
hi
gi = f (hi )
 i = gi − bi
32
bi


# Page. 33

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

演習
◦MNIST手書き数字を多層ニューラ
ルネットワークで認識してみよう
◦mnist.csvかmnist.arff
◦ Wekaを使う場合はarffのほうが使いやす
い
◦ PythonやRではCSVのほうが楽
◦ラベルは1列目(label)
◦入力は2~785列目（28×28を１列に
並べている）
33


# Page. 34

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

演習
◦中間層が１層以上あるニューラル
ネット(Multi-Layer Perceptron,
MLP)を使って文字を認識する
◦中間層の層数、各層のユニット数、活
性化関数などを変えて実験してみる
◦どの設定が最も高性能か？
34


# Page. 35

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

演習
◦注意点
◦ データを学習と評価（できれば学習と検
証と評価）に分ける
◦ 元データは数字順に並んでいるので、例えば
「上から8割が学習」としてはいけない
◦ ランダムに分割する
◦ 学習データで学習、検証データでハイ
パーパラメータ選択（層数、隠れユニッ
ト数、活性化関数）、評価データで最終
評価
35


# Page. 36

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

演習
◦実行手段について
◦PythonやRで書いてもよい
◦ PythonだとPyTorchやKerasなど
◦ RではTorch for RかKeras
◦Wekaでも実行可能
◦ 手順は別紙参照
36


