SlideShare a Scribd company logo
1 of 13
ゼロから作るDeep Learning
4章 ニューラルネットワークの学習
2016. 12. 15 Ikuo Kataoka
目次
• 4.1 データから学習する
• 4.2 損失関数
• 4.3 数値微分
• 4.4 勾配
• 4.5 学習アルゴリズムの実装
• 4.6 まとめ
4.1 データから学習する
ニューラルネットワークの学習とは?
→ 訓練データから最適な重みパラメータを自動で獲得すること
1
x1
x2
a y
h( )
b
w1
w2
y = h(b + w1x1 + w2x2)
(※3章まではこれらは予め決めていた。つまり学習済)
w1, w2, bを自動で探し出す
データ駆動
例えば、手書き数字を認識する場合
5
人の考えたアルゴリズム
人の考えた特徴量
(SIFT、HOGなど)
機械学習
(SVM、KNNなど)
ニューラルネットワーク
(ディープラーニング)
5
5
5
問題に応じて人が設計
特徴量も含めすべて機械が学習
※参考:人工知能アルゴリズムあれこれ
教師データあり 分類器 決定木
判別分析
サポート・ベクタ・マシン(SVM)
ニューラル・ネットワーク
ディープラーニング
最近傍分類器(k近傍法)
アンサンブル分類器
回帰分析 ベイズ線形回帰分析
ロジスティック回帰
回帰木
教師データなし クラスタ分析 最短距離法
最長距離法
群平均法
ウォード法
混合分析モデル
次元圧縮
ファジーC平均法
k平均法
スペクトラル・クラスタリング
主成分分析 PCA
因子分析
非負値行列因子分解
逐次特徴選択
共起分析 協調フィルタリング
Aprioriアルゴリズム
(インターフェース2017年1月号より)
訓練データとテストデータ
NN訓練データ
(教師データ)
NNテストデータ
学習 評価
汎化能力の獲得 まだ見ぬデータに対する能力
過学習の防止 あるデータセットにだけ過度に対応した状態
NN実際のデータ
実践
ハイパーパラメータの変更、関数の変更、
ネットワーク構成の変更、などなど
4.2 損失関数
損失関数(Loss function)
→ ニューラルネットワークの学習のための指標
1
x1
x2
a y
h( )
b
w1
w2
tE
これを最小にするように
パラメータを調整する
𝐸 =
1
2
𝑘
( 𝑦 𝑘 − 𝑡 𝑘)2
2乗和誤差
交差エントロピー誤差 𝐸 = −
𝑘
𝑡 𝑘 𝑙𝑜𝑔𝑦 𝑘
2乗和誤差と交差エントロピー誤差
k 0 1 2 3 4 5 6 7 8 9
𝒚 𝒌 0.1 0.05 0.6 0.0 0.05 0.1 0.0 0.1 0.0 0.0
𝒕 𝒌 0 0 1 0 0 0 0 0 0 0
𝐸 =
1
2
𝑘
( 𝑦 𝑘 − 𝑡 𝑘)2
2乗和誤差
交差エントロピー誤差 𝐸 = −
𝑘
𝑡 𝑘 𝑙𝑜𝑔𝑦 𝑘
(4.1)
(4.2)
⇐ソフトマックス関数の出力
(合計=1)
⇐one-hot表現の教師データ
(1が正解)
(𝑦 𝑘 −
𝑡 𝑘)2 0.01 0.0025 0.16 0 0.0025 0.01 0 0.01 0.0 0.0
𝑡 𝑘 𝑙𝑜𝑔𝑦 𝑘 0 0 -0.511 0 0 0 0 0 0 0
⇒2乗和誤差 E=0.0975
⇒交差エントロピー誤差
E=0.511
k 0 1 2 3 4 5 6 7 8 9
𝒚 𝒌 0.1 0.05 0.1 0.0 0.05 0.1 0.0 0.6 0.0 0.0
𝒕 𝒌 0 0 1 0 0 0 0 0 0 0
(𝑦 𝑘 −
𝑡 𝑘)2 0.01 0.0025 0.81 0 0.0025 0.01 0 0.36 0.0 0.0
𝑡 𝑘 𝑙𝑜𝑔𝑦 𝑘 0 0 -2.303 0 0 0 0 0 0 0
⇒2乗和誤差 E=0.5975
⇒交差エントロピー誤差
E=2.303
いい感じの状態
良くない状態
⇑交差エントロピー誤差はtが1のところのみ評価
def mean_squared_eror(y, t):
return 0.5 * np.sum((y-t)**2)
def cross_entropy_eror(y, t):
delta = 1e-7
return -np.sum(t * np.log(y + delta))
ミニバッチ学習
ミニバッチ学習とは
訓練データ全体の中から一部のデータを無作為に選び出して、
それを使って学習すること
(例: MNISTの場合、60,000枚の訓練データから100枚ランダムに選んで学習)
→
【疑問】
なぜ全部使わずこんなことするの?
import sys, os
sys.path.append(os.pardir)
import numpy as np
from dataset.mnist import load_mnist
(x_train, t_train), (x_test, t_test) = load_mnist(normalize=True, one_hot_label=True)
print(x_train.shape) # (60000, 784)
print(t_train.shape) # (60000, 10)
train_size = x_train.shape[0]
batch_size = 10
batch_mask = np.random.choice(train_size, batch_size) # ランダムに抽出された要素のインデックスの配列となる
x_batch = x_train[batch_mask]
t_batch = t_train[batch_mask]
4.3 数値微分
• ニューラルネットワークの学習は、損失関数の値が小さくなるようにパラメータ
を調整すること。
• そのために損失関数のパラメータによる微分(勾配)を計算し、それを頼りにパラ
メータを増減させる。
• 微分値がマイナスなら、パラメータを増加させれば損失関数の値は減少し、微分
値がプラスなら、パラメータを減少させれば損失関数の値は減少する
微分値プラス
微分値マイナス
パラメータを減少させ
れば関数値は減少する
パラメータを増加させ
れば関数値は減少する
損失関数
微分
微分の式 𝑑𝑓(𝑥)
𝑑𝑥
= lim
ℎ→0
𝑓 𝑥 + ℎ − 𝑓(𝑥)
ℎ
前方差分
x x+h
真の接線
近似による接線
x x+hx-h
真の接線
近似による接線
def numerical_diff(f, x):
h = 10e-50
return (f(x+h) – f(x)) / h
def numerical_diff(f, x):
h = 1e-4
return (f(x+h) – f(x-h)) / (2+h)
中心差分
hの値は 10e-50とすると精度の問題で0と扱われるため不都合。
10−4が適当とされている
偏微分
• 変数が2つ以上ある場合の関数の微分のこと。
• 一つの変数に着目してそれ以外の変数を固定化した微分
• 関数を𝑓 𝑥0, 𝑥1・・・ とすると、各変数の偏微分は、
𝜕𝑓
𝜕𝑥0
、
𝜕𝑓
𝜕𝑥1
、・・・と書く
𝑓 𝑥0, 𝑥1 = 𝑥0
2
+ 𝑥1
2
例
𝑓 𝑥0, 𝑥1 を曲面と考えると曲面上の点(a,b)における𝑓 𝑥0, 𝑥1 の𝑥0の偏微分は、
𝜕𝑓
𝜕𝑥0
=
𝑑𝑓(𝑥0,𝑏)
𝑑𝑥0
= lim
Δ𝑥0→0
𝑓 𝑥0+Δ𝑥0,𝑏 −𝑓(𝑥0,𝑏)
Δ𝑥0
(bは定数値)
で、これは点(a,b)における𝑥0方向の傾きを表す。また、𝑥1の偏微分は、
𝜕𝑓
𝜕𝑥1
=
𝑑𝑓(𝑎,𝑥1)
𝑑𝑥1
= lim
Δ𝑥1→0
𝑓 𝑎,𝑥1+Δ𝑥1 −𝑓(𝑎,𝑥1)
Δ𝑥1
(aは定数値)
で、これは点(a,b)における𝑥1方向の傾きを表す。
なぜ損失関数を設定するのか?
認識精度を指標にして、これを高くするようにパラメータ
調整するのではダメなのか?
• ほとんどの場所で微分が0となりパラメータの調整ができない
• パラメータを更新しても認識精度はあまり変化しないし、認識精度は離散的(不
連続)な値なので変化するときにいきなり変化してしまう
※活性化関数にステップ関数ではなくシグモイド関数を使う方がよいのも同様の理由
(ステップ関数はほとんどの場所で微分値0となるため)
【疑問】
認識精度ってテストデータで出てくる
ものでは?

More Related Content

Viewers also liked

機械学習概論 講義テキスト
機械学習概論 講義テキスト機械学習概論 講義テキスト
機械学習概論 講義テキストEtsuji Nakai
 
Deep Learningと画像認識   ~歴史・理論・実践~
Deep Learningと画像認識 ~歴史・理論・実践~Deep Learningと画像認識 ~歴史・理論・実践~
Deep Learningと画像認識   ~歴史・理論・実践~nlab_utokyo
 
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tatsuya Tojima
 
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Ken Morishita
 
機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話Ryota Kamoshida
 
機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual TalksYuya Unno
 

Viewers also liked (7)

機械学習概論 講義テキスト
機械学習概論 講義テキスト機械学習概論 講義テキスト
機械学習概論 講義テキスト
 
Deep Learningと画像認識   ~歴史・理論・実践~
Deep Learningと画像認識 ~歴史・理論・実践~Deep Learningと画像認識 ~歴史・理論・実践~
Deep Learningと画像認識   ~歴史・理論・実践~
 
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
 
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識
 
機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話
 
機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks
 
SlideShare 101
SlideShare 101SlideShare 101
SlideShare 101
 

ゼロから作るDeep learning 4章前半