第2回 メドレー読書会

63
第2回 メドレー読書会 データサイエンティスト養成読本 機械学習入門編 第1部 特集4 深層学習最前線

Transcript of 第2回 メドレー読書会

Page 1: 第2回 メドレー読書会

第2回 メドレー読書会データサイエンティスト養成読本機械学習入門編

第1部 特集4 深層学習最前線

Page 2: 第2回 メドレー読書会

Toshifumi

物理出身

普段はUSBデバイスのドライバーソフトウェアを作ってます

画像処理も少しやっています

使用言語はC++

RとPythonを勉強したいと思いつつ、未だ手つかず…(この機会に!)

自己紹介

Page 3: 第2回 メドレー読書会

第1章

準備

Page 4: 第2回 メドレー読書会

http://rodrigob.github.io/are_we_there_yet/build/classification_datasets_results.html#43494641522d313030

深層学習とは多層構造のニューラルネットワークの機械学習の事

認識率ベンチマークの上位を独占。第三次ブームの立役者。

深層学習

Page 5: 第2回 メドレー読書会

応用が広がっています

https://www.projectoxford.ai/demo/emotion#detection

Page 6: 第2回 メドレー読書会

多くのユニットが連結したもの

ユニット間の結合パラメーターを学習し、インプットデータから適切なアウトプットデータを生成できるようにする。

ニューラルネットワーク

Page 7: 第2回 メドレー読書会

「ニューラルネットワークが学習する」ということがイメージし辛かった。

構成要素であるユニットの学習が分かると、イメージしやすいと思いました。

とはいえ。。。

Page 8: 第2回 メドレー読書会

𝑥1

𝑥3

𝑦

𝑤1

𝑤3

𝑦 = 𝑓 Σ𝑤𝑖𝑥𝑖 + ℎ𝑥2

𝑤2

ℎ fは活性化関数

脳細胞(ニューロン)を模したもの。

入力に重み(wi)とバイアス(h)を加え、活性化関数にかけたものが出力になる。

重みとバイアスは、学習によって最適化される。

ユニット

Page 9: 第2回 メドレー読書会

𝑥1

𝑥2

𝑦

𝑤1

𝑤2 ℎ

𝑥1

𝑥2𝑦

x1 x2 y

0 0 0

1 0 0

0 1 0

1 1 1

ユニットの学習

2入力ユニットを学習させ、AND回路にしてみる

Page 10: 第2回 メドレー読書会

𝑓 𝑥 = 0 for 𝑥 < 01 for 𝑥 ≥ 0

ここでは、活性化関数として階段関数を使います(0/1出力にしたい)。

※後のニューラルネットワークの学習では別の関数を使います

ユニットの学習

Page 11: 第2回 メドレー読書会

教師あり学習をします(教師データは右表)

以下の式でパラメーターを更新(rは教師データ、αは学習率)

ユニットの学習x1 x2 y

0 0 0

1 0 0

0 1 0

1 1 1

ℎ ← ℎ + 𝛼 𝑟 − 𝑦

𝑤𝑖 ← 𝑤𝑖 + 𝛼 𝑟 − 𝑦 𝑥𝑖

例えば、x1=1, x2=0を入力したのに1が出力された場合

ℎ ← ℎ + 𝛼 0 − 1𝑤1 ← 𝑤1 + 𝛼 0 − 1 × 1𝑤2 ← 𝑤2 + 𝛼(0 − 1) × 0

Page 12: 第2回 メドレー読書会

αを0.5に設定する。

適当な初期値、w1=1、w2=-1、h=0でスタート。

表を全問正解できる値を探す。

ユニットの学習x1 x2 y

0 0 0

1 0 0

0 1 0

1 1 1

Page 13: 第2回 メドレー読書会

現在値:

ユニットの学習

x1 x2 y

0 0 0

1 0 0

0 1 0

1 1 1

𝑤1 = 1, 𝑤2 = −1, ℎ = 0

𝑦 = 𝑓 1 × 0 − 1 × 0 + 0 = 1

ℎ ← ℎ + 0.5 × 0 − 1 = −0.5𝑤1 ← 𝑤1 + 0.5 × 0 − 1 × 0 = 1𝑤2 ← 𝑤2 + 0.5 × 0 − 1 × 0 = −1

値を更新

Page 14: 第2回 メドレー読書会

現在値:

ユニットの学習

x1 x2 y

0 0 0

1 0 0

0 1 0

1 1 1

𝑤1 = 1, 𝑤2 = −1, ℎ = −0.5

𝑦 = 𝑓 1 × 1 − 1 × 0 − 0.5 = 1

ℎ ← ℎ + 0.5 × 0 − 1 = −1𝑤1 ← 𝑤1 + 0.5 × 0 − 1 × 1 = 0.5𝑤2 ← 𝑤2 + 0.5 × 0 − 1 × 0 = −1

値を更新

Page 15: 第2回 メドレー読書会

現在値:

ユニットの学習

x1 x2 y

0 0 0

1 0 0

0 1 0

1 1 1

𝑤1 = 0.5, 𝑤2 = −1, ℎ = −1

𝑦 = 𝑓 0.5 × 0 − 1 × 1 − 1 = 0

OKなので、値はそのまま

Page 16: 第2回 メドレー読書会

現在値:

ユニットの学習

x1 x2 y

0 0 0

1 0 0

0 1 0

1 1 1

𝑤1 = 0.5, 𝑤2 = −1, ℎ = −1

𝑦 = 𝑓 0.5 × 1 − 1 × 1 − 1 = 0

ℎ ← ℎ + 0.5 × 1 − 0 = −0.5𝑤1 ← 𝑤1 + 0.5 × 1 − 0 × 1 = 1𝑤2 ← 𝑤2 + 0.5 × 1 − 0 × 1 = −0.5

値を更新

Page 17: 第2回 メドレー読書会

ユニットの学習

x1 x2 y

0 0 0 ○

1 0 0 ×

0 1 0 ○

1 1 1 ×

𝑤1 = 1, 𝑤2 = −0.5, ℎ = −0.5

𝑤1 = 0.5, 𝑤2 = −0.5, ℎ = −1

𝑤1 = 1, 𝑤2 = −0.5, ℎ = −0.5

𝑤1 = 0.5, 𝑤2 = −0.5, ℎ = −1

𝑤1 = 1, 𝑤2 = 0, ℎ = −0.5

2周目

Page 18: 第2回 メドレー読書会

ユニットの学習

x1 x2 y

0 0 0 ○

1 0 0 ×

0 1 0 ○

1 1 1 ×

𝑤1 = 1, 𝑤2 = 0, ℎ = −0.5

𝑤1 = 0.5, 𝑤2 = 0, ℎ = −1

𝑤1 = 1, 𝑤2 = 0, ℎ = −0.5

𝑤1 = 0.5, 𝑤2 = 0, ℎ = −1

𝑤1 = 1, 𝑤2 = 0.5, ℎ = −0.5

3周目

Page 19: 第2回 メドレー読書会

ユニットの学習

x1 x2 y

0 0 0 ○

1 0 0 ×

0 1 0 ○

1 1 1 ○

𝑤1 = 1, 𝑤2 = 0.5, ℎ = −0.5

𝑤1 = 0.5, 𝑤2 = 0.5, ℎ = −1

𝑤1 = 1, 𝑤2 = 0.5, ℎ = −0.5

𝑤1 = 0.5, 𝑤2 = 0.5, ℎ = −1

𝑤1 = 0.5, 𝑤2 = 0.5, ℎ = −1

4周目

Page 20: 第2回 メドレー読書会

ユニットの学習

x1 x2 y

0 0 0 ○

1 0 0 ○

0 1 0 ○

1 1 1 ○

𝑤1 = 0.5, 𝑤2 = 0.5, ℎ = −1

𝑤1 = 0.5, 𝑤2 = 0.5, ℎ = −1

𝑤1 = 0.5, 𝑤2 = 0.5, ℎ = −1

𝑤1 = 0.5, 𝑤2 = 0.5, ℎ = −1

𝑤1 = 0.5, 𝑤2 = 0.5, ℎ = −1

5周目

Page 21: 第2回 メドレー読書会

ユニットの学習

テーブルを教え込むだけで、AND回路が作れた。

𝑥1

𝑥2

𝑦

𝑤1

𝑤2 ℎ

𝑥1

𝑥2𝑦

x1 x2 y

0 0 0

1 0 0

0 1 0

1 1 1

+ =

Page 22: 第2回 メドレー読書会

ユニットの学習

テーブルを変えれば、OR回路も作れる。

𝑥1

𝑥2

𝑦

𝑤1

𝑤2 ℎ

𝑥1

𝑥2𝑦

x1 x2 y

0 0 0

1 0 1

0 1 1

1 1 1

+ =

Page 23: 第2回 メドレー読書会

ユニットの学習

1入力だけど、NOT回路も作れる。

𝑥1 𝑦𝑤1

𝑥1 𝑦

x1 y

0 1

1 0+ =

Page 24: 第2回 メドレー読書会

1ユニットの限界

XOR回路は作れない。

𝑥1

𝑥2

𝑦

𝑤1

𝑤2 ℎ

𝑥1

𝑥2𝑦

x1 x2 y

0 0 0

1 0 1

0 1 1

1 1 0

+ =

Page 25: 第2回 メドレー読書会

1ユニットの学習

1つのユニットでは線形識別しかできない

x1

x2

x1

x2可能 不可能

AND回路 XOR回路

Page 26: 第2回 メドレー読書会

複数ユニット

𝑥1

𝑥2𝑦 =

𝑥2

𝑥1

𝑦

XORは、AND・OR・NOTの組み合わせで表現可能。

複数のユニットを組み合わせることで、非線形の識別が可能になる。

Page 27: 第2回 メドレー読書会

多層パーセプトロン

ユニットを多層に配置(1層の定義は、文脈によって異なるそうです)

各ユニットは次層の全ユニットと連結。

Page 28: 第2回 メドレー読書会

深層学習のフレームワーク

フレームワーク名

言語 ユーザー言語 速度 柔軟さ 開発コミュニティ

ドキュメント

サンプル 日本語でのサポート

Caffe C++, Python

Protocol Buffer(text),Python

◎ △ ◎ △ ◎ ×

Torch7 Lua, C Lua ○ ○ ○ ○ △ ×Theano/Pylearn2

Python,C++

YAML(Pylearn2),Python ○ ○ ○ ○ ◎ ×

Chainer Python Python ○ ◎ △ ○ ○ ○

一長一短があるようです。

Page 29: 第2回 メドレー読書会

第2章

多層パーセプトロンの書き方

Page 30: 第2回 メドレー読書会

構成要素

① 重み行列をかけてバイアスベクトルを足す(全結合層)

② 非線形関数を適用する(活性化関数)

③ ネットワークの出力を評価する(損失関数)

Page 31: 第2回 メドレー読書会

① 全結合層

重み行列をかけてバイアスベクトルを足す

𝑥1

𝑥2

𝑥𝑚

𝑥′1

𝑥′2

𝑥′𝑚

𝑤11

ℎ1𝑤21

𝑤𝑚1

𝑥′1への入力

= 𝑥1𝑤11 + 𝑥2𝑤21 +⋯+ 𝑥𝑚𝑤𝑚1 + ℎ1

𝑥′𝑖への入力 =

𝑗

𝑥𝑗𝑤𝑗𝑖 + ℎ𝑖

重み行列 バイアスベクトル

Page 32: 第2回 メドレー読書会

② 活性化関数

非線形関数を適用する

𝑥1

𝑥2

𝑥𝑚

𝑥′1

𝑥′2

𝑥′𝑚

𝑤11

ℎ1𝑤21

𝑤𝑚1

𝑥′1からの出力 = 𝑓(𝑥′1への入力)

非線形関数

• 双曲線正接関数• ReLU• Leaky ReLU

Page 33: 第2回 メドレー読書会

双曲線正接関数

1から-1に収まるので扱いやすいが、入力→大で微分→小になるのが欠点

𝑓 𝑥 = tanh 𝑥 =exp 𝑥 − exp(−𝑥)

exp 𝑥 + exp(−𝑥)

𝑑

𝑑𝑥𝑓 𝑥 = 1 −

exp 𝑥 − exp(−𝑥)

exp 𝑥 + exp(−𝑥)

2

𝑓 𝑥𝑑

𝑑𝑥𝑓 𝑥

Page 34: 第2回 メドレー読書会

ReLU (Rectified Linear Unit)

入力→大でも微分は1。処理が高速。ただし負の入力では微分が0になる。

𝑓 𝑥 = max 𝑥, 0

𝑑

𝑑𝑥𝑓 𝑥 =

1 for 𝑥 > 00 for 𝑥 < 0

𝑓 𝑥

𝑑

𝑑𝑥𝑓 𝑥

Page 35: 第2回 メドレー読書会

Leaky ReLU

負の入力でも微分が0にならない。ReLUより高性能という論文もあり。

𝑓 𝑥 = max 𝑥, 𝑥/𝑎

𝑑

𝑑𝑥𝑓 𝑥 =

1 for 𝑥 > 01/𝑎 for 𝑥 < 0

𝑓 𝑥

𝑑

𝑑𝑥𝑓 𝑥

http://arxiv.org/abs/1505.00853

Page 36: 第2回 メドレー読書会

③ 損失関数

ネットワークの出力を評価する。

ソフトマックス+交差エントロピーが良く使われる

似てる?

Page 37: 第2回 メドレー読書会

ソフトマックス

出力を「確率」とみなせる形に変換する

𝑦1

𝑦𝐾

𝑦2

𝑦′1

𝑦′2

𝑦′𝐾

𝑦′𝑖 =exp 𝑦𝑖

𝑗𝐾 exp(𝑦𝑗)

出力が必ず+になる

出力の合計が1になる

Page 38: 第2回 メドレー読書会

交差エントロピー

2つの確率分布の相違度を表す尺度

出力値が教師データと一致した時に0で最小になる。

教師データから外れるほど大きな値になる。

𝐸𝑛 = −

𝑖

𝑟𝑛𝑖log(𝑦𝑛𝑖)

出力層のユニットについての和

rni:n番目の教師データを入力した時に、i番目のユニットが出力すべき値

yni: n番目の教師データを入力した時に、i番目のユニットが実際に出力する値

Page 39: 第2回 メドレー読書会

多層パーセプトロンの書き方

デモしたかったのですが、間に合いませんでした。

ごめんなさい…

Page 40: 第2回 メドレー読書会

多層パーセプトロンの書き方

Caffeの記述の解説

幾つかのレイヤーで構成されている。

name type Bottom Top

data Data(入力) data, label

fc1 InnerProduct(全結合層) top fc1

act1 ReLU(活性化関数) fc1 fc1

fc2 InnerProduct(全結合層) fc1 fc2

loss SoftmaxWithLoss(誤差関数) Fc2, label loss

loss

fc2

fc1

data

act1

Page 41: 第2回 メドレー読書会

第3章

ニューラルネットの学習方法

Page 42: 第2回 メドレー読書会

勾配法

目的関数(全データに対する損失の和)が小さくなるように、重み行列などのパラメーターを最適化する。

勾配法(目的関数の勾配の逆方向にパラメーターを動かす方法)が一般的

𝐸 =

𝑛

𝐸𝑛目的関数:

全教師データについての和 勾配法のイメージ

Page 43: 第2回 メドレー読書会

確率的勾配法

先の勾配法では「全データに対する損失の和」が必要で、コスト高。

ランダム(確率的)に選んだ一部のデータ(ミニバッチ)で代用する。

1つのデータはベクトルなので、一部データは行列で表現可能。

#1 #2 #3 #4

3 6 4 7

1 3 1 9

5 4 8 2

4 2 2 4

この数字は適当で、意味なしです。

Page 44: 第2回 メドレー読書会

誤差逆伝播法

出力層の補正は、教師データとの比較で行える。

中間層の補正を行うのに、誤差逆伝播法を用いる。

順伝播(予測を行うとき)

逆伝播(学習を行うとき)

出力層:勾配は、教師データから算出。

中間層:勾配は、1つ上の層の勾配と重み(修正後)から算出。

Page 45: 第2回 メドレー読書会

勾配法の拡張

モーメンタム法:勾配の移動平均を使って、方向を安定させる。

過去の勾配の方向

現在の勾配の方向

過去と現在の間の方向に進む

Adam:パラメーターごとに学習率を調整するアルゴリズム

ごめんなさい。調べられていません。

http://arxiv.org/abs/1412.6980

Page 46: 第2回 メドレー読書会

最適化のためのテクニック

① 加重減衰

② Max norm

③ 勾配クリッピング

④ パラメーターの賢い初期化

⑤ バッチ正規化

⑥ Dropout

Page 47: 第2回 メドレー読書会

荷重減衰

パラメーター更新時に、パラメーターに1より少しだけ小さな値をかける。

パラメーターが大きくなりすぎるのを防ぐ。

𝐸 = 𝐸 +𝜌

2

𝑖

𝑤𝑖2

ρは係数

𝑤𝑖 ← 𝑤𝑖 − 𝛼𝑑 𝐸

𝑑𝑤𝑖= (1 − 𝛼𝜌)𝑤𝑖 − 𝛼

𝑑𝐸

𝑑𝑤𝑖

Page 48: 第2回 メドレー読書会

Max norm

重みに上限を設け、正則化や最適化の安定を図る

𝑥1

𝑥2

𝑥𝑚

𝑤1

𝑤2

𝑤𝑚 𝑤𝑖 = 𝑤𝑖 ×min上限値

𝑖 𝑤𝑖2, 1

Page 49: 第2回 メドレー読書会

勾配クリッピング

勾配に上限を設け、正則化や最適化の安定を図る

𝜀𝑖 = 𝜀𝑖 ×min上限値

𝑖 𝜀𝑖2, 1

𝜀𝑖𝜀𝑖:勾配ベクトル

Page 50: 第2回 メドレー読書会

パラメーターの賢い初期化

重みの初期値

• 平均0の一様分布や正規分布に基づいてランダムに生成。

• 分布の標準偏差が不適切だと、安定しなくなる。

• 適切な値は活性化関数によっても異なる。

バイアスの初期値

• 0で初期化するのが一般的。

• ReLUでは0.1など小さい値が良いという報告もある。

Page 51: 第2回 メドレー読書会

バッチ正規化

学習中にユニットの値を正規化する。

大規模なネットワークでは、学習がかなり高速化する

http://arxiv.org/abs/1502.03167

ある認識率に到達するまでのステップ数が、14分の1になっている

Page 52: 第2回 メドレー読書会

Dropout

ミニバッチごとに、ランダムに一部のユニットを無効化する

パラメーター間の依存関係を取り除ける。

非常に強力な正則化手法だが、最適化が遅くなる。

Page 53: 第2回 メドレー読書会

第4章

画像認識のためのアーキテクチャ

Page 54: 第2回 メドレー読書会

画像の構造

幅W

チャンネルC

高さH

Page 55: 第2回 メドレー読書会

画像の特徴抽出

人間には「同じ」画像でも実際には差があるので、「特徴」を用いる。

特徴の抽出は、従来は人手で行っていたが、これが大変だった。

深層学習では特徴抽出も学習できる。

?=

Page 56: 第2回 メドレー読書会

畳込みネット

多層パーセプトロン+畳込み層+プーリング層 http://papers.nips.cc/paper/4824-imagenet-classification-w

入力層 出力層全結合層畳込み層+プーリング層

Page 57: 第2回 メドレー読書会

フィルター処理

画像の変換や、特徴の抽出に使われる。

a11 a12 a13

a21 a22 a23

a31 a32 a33

xi-1,j-1 xi,j-1 xi+1,j-1

xi-1,j xi,j xi+1,j

xi-1,j+1 xi,j+1 xi+1,j+1

x'i-1,j-1 x'i,j-1 x'i+1,j-1

x'i-1,j x'i,j x'i+1,j

x'i-1,j+1 x'i,j+1 x'i+1,j+1

𝑥𝑖𝑗′ = 𝑎11𝑥𝑖−1,𝑗−1 + 𝑎12𝑥𝑖,𝑗−1 + 𝑎13𝑥𝑖+1,𝑗−1

+𝑎21𝑥𝑖−1,𝑗 + 𝑎22𝑥𝑖,𝑗 + 𝑎23𝑥𝑖+1,𝑗+𝑎31𝑥𝑖−1,𝑗+1 + 𝑎32𝑥𝑖,𝑗+1 + 𝑎33𝑥𝑖+1,𝑗+1

Page 58: 第2回 メドレー読書会

フィルター処理

3×3でも、パラメーターによって様々な効果が得られる。

1/9 1/9 1/9

1/9 1/9 1/9

1/9 1/9 1/9

-1 -1 -1

-1 8 -1

-1 -1 -1

Page 59: 第2回 メドレー読書会

畳込み層

フィルター処理は小領域に対する全結合層になっている(畳込み層)。

学習によってフィルターのパラメーターを自動的に選択できる。

𝑥𝑖𝑗′ = 𝑎11𝑥𝑖−1,𝑗−1 + 𝑎12𝑥𝑖,𝑗−1 + 𝑎13𝑥𝑖+1,𝑗−1

+𝑎21𝑥𝑖−1,𝑗 + 𝑎22𝑥𝑖,𝑗 + 𝑎23𝑥𝑖+1,𝑗+𝑎31𝑥𝑖−1,𝑗+1 + 𝑎32𝑥𝑖,𝑗+1 + 𝑎33𝑥𝑖+1,𝑗+1

𝑎33

𝑎11

𝑥𝑖−1,𝑗−1

𝑥𝑖+1,𝑗+1

𝑥𝑖𝑗′

Page 60: 第2回 メドレー読書会

畳込み層

チャンネルを横断してもよい。

チャンネルは数が多いほうが情報量が落ちなくてよい。

http://papers.nips.cc/paper/4824-imagenet-classification-w

192チャンネル

Page 61: 第2回 メドレー読書会

プーリング層

出力層の数は、画像の画素数より少ない。

画像の解像度を下げる処理を行う(サブサンプリング)。

最大値プーリングが一般的。

1 -2 2 -1

0 2 0 0

-2 -3 2 3

-1 -3 1 3

2 2

-1 3

最大値プーリング

赤枠中の最大値を出力

Page 62: 第2回 メドレー読書会

設計の勘所

各層のパラメーターは自動決定してくれるが、何個の層をどの順に並べるかは事前に決めないといけない。ここはまだ経験がものをいう世界。

経験的によく使われる工夫

• 最初の2層くらいは、畳込み層とプーリング層を交互に入れる

• 入力画像が大きい場合、最初の畳込み層は間隔を広めにとる。

• 画像がある程度小さくなったら、畳込み層をいくつも並べ、たまにプーリング層を挟む。

• 画像が十分小さくなったら、そこから全結合層を1~3つ並べる。

Page 63: 第2回 メドレー読書会

設計の勘所http://papers.nips.cc/paper/4824-imagenet-classification-w

入力層 出力層全結合層畳込み層+プーリング層

たしかに、そんな作りになってます。