Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
第2回 メドレー読書会
データサイエンティスト養成読本
機械学習入門編
第1部 特集4 深層学習最前線
Toshifumi
物理出身
普段はUSBデバイスのドライバーソフトウェアを作ってます
画像処理も少しやっています
使用言語はC++
RとPythonを勉強したいと思いつつ、未だ手つかず…(この機会に!)
自己紹介
第1章
準備
http://rodrigob.github.io/are_we_there_yet/build/classification_datasets_results.html#43494641522d313030
深層学習とは多層構造のニューラルネ...
応用が広がっています
https://www.projectoxford.ai/demo/emotion#detection
多くのユニットが連結したもの
ユニット間の結合パラメーターを学習し、インプットデータから適切なアウト
プットデータを生成できるようにする。
ニューラルネットワーク
「ニューラルネットワークが学習する」ということがイメージし辛かった。
構成要素であるユニットの学習が分かると、イメージしやすいと思いました。
とはいえ。。。
𝑥1
𝑥3
𝑦
𝑤1
𝑤3
𝑦 = 𝑓 Σ𝑤𝑖 𝑥𝑖 + ℎ
𝑥2
𝑤2
ℎ fは活性化関数
脳細胞(ニューロン)を模したもの。
入力に重み(wi)とバイアス(h)を加え、活性化関数にかけたものが出力になる。
重みとバイアスは、学習によって最適...
𝑥1
𝑥2
𝑦
𝑤1
𝑤2 ℎ
𝑥1
𝑥2
𝑦
x1 x2 y
0 0 0
1 0 0
0 1 0
1 1 1
ユニットの学習
2入力ユニットを学習させ、AND回路にしてみる
𝑓 𝑥 =
0 for 𝑥 < 0
1 for 𝑥 ≥ 0
ここでは、活性化関数として階段関数を使います(0/1出力にしたい)。
※後のニューラルネットワークの学習では別の関数を使います
ユニットの学習
教師あり学習をします(教師データは右表)
以下の式でパラメーターを更新(rは教師データ、αは学習率)
ユニットの学習
x1 x2 y
0 0 0
1 0 0
0 1 0
1 1 1
ℎ ← ℎ + 𝛼 𝑟 − 𝑦
𝑤𝑖 ← 𝑤𝑖 + 𝛼 𝑟 −...
αを0.5に設定する。
適当な初期値、w1=1、w2=-1、h=0でスタート。
表を全問正解できる値を探す。
ユニットの学習
x1 x2 y
0 0 0
1 0 0
0 1 0
1 1 1
現在値:
ユニットの学習
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...
現在値:
ユニットの学習
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 =...
現在値:
ユニットの学習
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なので、値はそのまま
現在値:
ユニットの学習
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 =...
ユニットの学習
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,...
ユニットの学習
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...
ユニットの学習
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, ℎ ...
ユニットの学習
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, ...
ユニットの学習
テーブルを教え込むだけで、AND回路が作れた。
𝑥1
𝑥2
𝑦
𝑤1
𝑤2 ℎ
𝑥1
𝑥2
𝑦
x1 x2 y
0 0 0
1 0 0
0 1 0
1 1 1
+ =
ユニットの学習
テーブルを変えれば、OR回路も作れる。
𝑥1
𝑥2
𝑦
𝑤1
𝑤2 ℎ
𝑥1
𝑥2
𝑦
x1 x2 y
0 0 0
1 0 1
0 1 1
1 1 1
+ =
ユニットの学習
1入力だけど、NOT回路も作れる。
𝑥1
𝑦
𝑤1
ℎ
𝑥1 𝑦
x1 y
0 1
1 0
+ =
1ユニットの限界
XOR回路は作れない。
𝑥1
𝑥2
𝑦
𝑤1
𝑤2 ℎ
𝑥1
𝑥2
𝑦
x1 x2 y
0 0 0
1 0 1
0 1 1
1 1 0
+ =
1ユニットの学習
1つのユニットでは線形識別しかできない
x1
x2
x1
x2可能 不可能
AND回路 XOR回路
複数ユニット
𝑥1
𝑥2
𝑦 =
𝑥2
𝑥1
𝑦
XORは、AND・OR・NOTの組み合わせで表現可能。
複数のユニットを組み合わせることで、非線形の識別が可能になる。
多層パーセプトロン
ユニットを多層に配置(1層の定義は、文脈によって異なるそうです)
各ユニットは次層の全ユニットと連結。
深層学習のフレームワーク
フレーム
ワーク名
言語 ユーザー言語 速度 柔軟さ 開発
コミュニティ
ドキュメ
ント
サンプル 日本語での
サポート
Caffe C++,
Python
Protocol
Buffer(text),
Python
...
第2章
多層パーセプトロンの書き方
構成要素
① 重み行列をかけてバイアスベクトルを足す(全結合層)
② 非線形関数を適用する(活性化関数)
③ ネットワークの出力を評価する(損失関数)
① 全結合層
重み行列をかけてバイアスベクトルを足す
𝑥1
𝑥2
𝑥 𝑚
𝑥′1
𝑥′2
𝑥′ 𝑚
𝑤11
ℎ1𝑤21
𝑤 𝑚1
𝑥′1への入力
= 𝑥1 𝑤11 + 𝑥2 𝑤21 + ⋯ + 𝑥 𝑚 𝑤 𝑚1 + ℎ1
𝑥′𝑖への入力 =
𝑗...
② 活性化関数
非線形関数を適用する
𝑥1
𝑥2
𝑥 𝑚
𝑥′1
𝑥′2
𝑥′ 𝑚
𝑤11
ℎ1𝑤21
𝑤 𝑚1
𝑥′1からの出力 = 𝑓(𝑥′
1への入力)
非線形関数
• 双曲線正接関数
• ReLU
• Leaky ReLU
双曲線正接関数
1から-1に収まるので扱いやすいが、入力→大で微分→小になるのが欠点
𝑓 𝑥 = tanh 𝑥 =
exp 𝑥 − exp(−𝑥)
exp 𝑥 + exp(−𝑥)
𝑑
𝑑𝑥
𝑓 𝑥 = 1 −
exp 𝑥 − exp(−𝑥)
e...
ReLU (Rectified Linear Unit)
入力→大でも微分は1。処理が高速。ただし負の入力では微分が0になる。
𝑓 𝑥 = max 𝑥, 0
𝑑
𝑑𝑥
𝑓 𝑥 =
1 for 𝑥 > 0
0 for 𝑥 < 0
𝑓 𝑥
𝑑
𝑑𝑥
...
Leaky ReLU
負の入力でも微分が0にならない。ReLUより高性能という論文もあり。
𝑓 𝑥 = max 𝑥, 𝑥/𝑎
𝑑
𝑑𝑥
𝑓 𝑥 =
1 for 𝑥 > 0
1/𝑎 for 𝑥 < 0
𝑓 𝑥
𝑑
𝑑𝑥
𝑓 𝑥
http://ar...
③ 損失関数
ネットワークの出力を評価する。
ソフトマックス+交差エントロピーが良く使われる
似てる?
ソフトマックス
出力を「確率」とみなせる形に変換する
𝑦1
𝑦 𝐾
𝑦2
𝑦′1
𝑦′2
𝑦′ 𝐾
𝑦′𝑖 =
exp 𝑦𝑖
𝑗
𝐾
exp(𝑦𝑗)
出力が必ず+になる
出力の合計が1になる
交差エントロピー
2つの確率分布の相違度を表す尺度
出力値が教師データと一致した時に0で最小になる。
教師データから外れるほど大きな値になる。
𝐸 𝑛 = −
𝑖
𝑟𝑛𝑖log(𝑦 𝑛𝑖)
出力層のユニット
についての和
rni:n番目の教師デ...
多層パーセプトロンの書き方
デモしたかったのですが、間に合いませんでした。
ごめんなさい…
多層パーセプトロンの書き方
Caffeの記述の解説
幾つかのレイヤーで構成されている。
name type Bottom Top
data Data(入力) data, label
fc1 InnerProduct(全結合層) top fc1
...
第3章
ニューラルネットの学習方法
勾配法
目的関数(全データに対する損失の和)が小さくなるように、重み行列などのパ
ラメーターを最適化する。
勾配法(目的関数の勾配の逆方向にパラメーターを動かす方法)が一般的
𝐸 =
𝑛
𝐸 𝑛目的関数:
全教師データにつ
いての和 勾配法のイ...
確率的勾配法
先の勾配法では「全データに対する損失の和」が必要で、コスト高。
ランダム(確率的)に選んだ一部のデータ(ミニバッチ)で代用する。
1つのデータはベクトルなので、一部データは行列で表現可能。
#1 #2 #3 #4
3 6 4 7
...
誤差逆伝播法
出力層の補正は、教師データとの比較で行える。
中間層の補正を行うのに、誤差逆伝播法を用いる。
順伝播(予測を行うとき)
逆伝播(学習を行うとき)
出力層:
勾配は、教師データから算出。
中間層:
勾配は、1つ上の層の勾配と重み(修...
勾配法の拡張
モーメンタム法:勾配の移動平均を使って、方向を安定させる。
過去の勾配の方向
現在の勾配
の方向
過去と現在の間の方向に進む
Adam:パラメーターごとに学習率を調整するアルゴリズム
ごめんなさい。
調べられていません。
http...
最適化のためのテクニック
① 加重減衰
② Max norm
③ 勾配クリッピング
④ パラメーターの賢い初期化
⑤ バッチ正規化
⑥ Dropout
荷重減衰
パラメーター更新時に、パラメーターに1より少しだけ小さな値をかける。
パラメーターが大きくなりすぎるのを防ぐ。
𝐸 = 𝐸 +
𝜌
2
𝑖
𝑤𝑖
2
ρは係数
𝑤𝑖 ← 𝑤𝑖 − 𝛼
𝑑 𝐸
𝑑𝑤𝑖
= (1 − 𝛼𝜌)𝑤𝑖 − 𝛼
...
Max norm
重みに上限を設け、正則化や最適化の安定を図る
𝑥1
𝑥2
𝑥 𝑚
𝑤1
𝑤2
𝑤 𝑚 𝑤𝑖 = 𝑤𝑖 × min
上限値
𝑖 𝑤𝑖
2
, 1
勾配クリッピング
勾配に上限を設け、正則化や最適化の安定を図る
𝜀𝑖 = 𝜀𝑖 × min
上限値
𝑖 𝜀𝑖
2
, 1
𝜀𝑖
𝜀𝑖:勾配ベクトル
パラメーターの賢い初期化
重みの初期値
• 平均0の一様分布や正規分布に基づいてランダムに生成。
• 分布の標準偏差が不適切だと、安定しなくなる。
• 適切な値は活性化関数によっても異なる。
バイアスの初期値
• 0で初期化するのが一般的。
•...
バッチ正規化
学習中にユニットの値を正規化する。
大規模なネットワークでは、学習がかなり高速化する
http://arxiv.org/abs/1502.03167
ある認識率に到達す
るまでのステップ数
が、14分の1になっ
ている
Dropout
ミニバッチごとに、ランダムに一部のユニットを無効化する
パラメーター間の依存関係を取り除ける。
非常に強力な正則化手法だが、最適化が遅くなる。
第4章
画像認識のための
アーキテクチャ
画像の構造
幅W
=
チャンネルC
高
さ
H
画像の特徴抽出
人間には「同じ」画像でも実際には差があるので、「特徴」を用いる。
特徴の抽出は、従来は人手で行っていたが、これが大変だった。
深層学習では特徴抽出も学習できる。
?
=
畳込みネット
多層パーセプトロン+畳込み層+プーリング層 http://papers.nips.cc/paper/
4824-imagenet-classification-w
入力層 出力層全結合層畳込み層+プーリング層
フィルター処理
画像の変換や、特徴の抽出に使われる。
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...
フィルター処理
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
畳込み層
フィルター処理は小領域に対する全結合層になっている(畳込み層)。
学習によってフィルターのパラメーターを自動的に選択できる。
𝑥𝑖𝑗
′
= 𝑎11 𝑥𝑖−1,𝑗−1 + 𝑎12 𝑥𝑖,𝑗−1 + 𝑎13 𝑥𝑖+1,𝑗−1
+𝑎21 ...
畳込み層
チャンネルを横断してもよい。
チャンネルは数が多いほうが情報量が落ちなくてよい。
http://papers.nips.cc/paper/4824-imagenet-classification-w
192チャンネル
プーリング層
出力層の数は、画像の画素数より少ない。
画像の解像度を下げる処理を行う(サブサンプリング)。
最大値プーリングが一般的。
1 -2 2 -1
0 2 0 0
-2 -3 2 3
-1 -3 1 3
2 2
-1 3
最大値
プーリ...
設計の勘所
各層のパラメーターは自動決定してくれるが、何個の層をどの順に並べるかは事
前に決めないといけない。ここはまだ経験がものをいう世界。
経験的によく使われる工夫
• 最初の2層くらいは、畳込み層とプーリング層を交互に入れる
• 入力画像...
設計の勘所
http://papers.nips.cc/paper/
4824-imagenet-classification-w
入力層 出力層全結合層畳込み層+プーリング層
たしかに、そんな作りになってます。
Upcoming SlideShare
Loading in …5
×

第2回 メドレー読書会

640 views

Published on

第2回 メドレー読書会での発表資料です

Published in: Technology
  • Be the first to comment

  • Be the first to like this

第2回 メドレー読書会

  1. 1. 第2回 メドレー読書会 データサイエンティスト養成読本 機械学習入門編 第1部 特集4 深層学習最前線
  2. 2. Toshifumi 物理出身 普段はUSBデバイスのドライバーソフトウェアを作ってます 画像処理も少しやっています 使用言語はC++ RとPythonを勉強したいと思いつつ、未だ手つかず…(この機会に!) 自己紹介
  3. 3. 第1章 準備
  4. 4. http://rodrigob.github.io/are_we_there_yet/build/classification_datasets_results.html#43494641522d313030 深層学習とは多層構造のニューラルネットワークの機械学習の事 認識率ベンチマークの上位を独占。第三次ブームの立役者。 深層学習
  5. 5. 応用が広がっています https://www.projectoxford.ai/demo/emotion#detection
  6. 6. 多くのユニットが連結したもの ユニット間の結合パラメーターを学習し、インプットデータから適切なアウト プットデータを生成できるようにする。 ニューラルネットワーク
  7. 7. 「ニューラルネットワークが学習する」ということがイメージし辛かった。 構成要素であるユニットの学習が分かると、イメージしやすいと思いました。 とはいえ。。。
  8. 8. 𝑥1 𝑥3 𝑦 𝑤1 𝑤3 𝑦 = 𝑓 Σ𝑤𝑖 𝑥𝑖 + ℎ 𝑥2 𝑤2 ℎ fは活性化関数 脳細胞(ニューロン)を模したもの。 入力に重み(wi)とバイアス(h)を加え、活性化関数にかけたものが出力になる。 重みとバイアスは、学習によって最適化される。 ユニット
  9. 9. 𝑥1 𝑥2 𝑦 𝑤1 𝑤2 ℎ 𝑥1 𝑥2 𝑦 x1 x2 y 0 0 0 1 0 0 0 1 0 1 1 1 ユニットの学習 2入力ユニットを学習させ、AND回路にしてみる
  10. 10. 𝑓 𝑥 = 0 for 𝑥 < 0 1 for 𝑥 ≥ 0 ここでは、活性化関数として階段関数を使います(0/1出力にしたい)。 ※後のニューラルネットワークの学習では別の関数を使います ユニットの学習
  11. 11. 教師あり学習をします(教師データは右表) 以下の式でパラメーターを更新(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
  12. 12. αを0.5に設定する。 適当な初期値、w1=1、w2=-1、h=0でスタート。 表を全問正解できる値を探す。 ユニットの学習 x1 x2 y 0 0 0 1 0 0 0 1 0 1 1 1
  13. 13. 現在値: ユニットの学習 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 値を更新
  14. 14. 現在値: ユニットの学習 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 値を更新
  15. 15. 現在値: ユニットの学習 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なので、値はそのまま
  16. 16. 現在値: ユニットの学習 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 値を更新
  17. 17. ユニットの学習 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周目
  18. 18. ユニットの学習 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周目
  19. 19. ユニットの学習 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周目
  20. 20. ユニットの学習 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周目
  21. 21. ユニットの学習 テーブルを教え込むだけで、AND回路が作れた。 𝑥1 𝑥2 𝑦 𝑤1 𝑤2 ℎ 𝑥1 𝑥2 𝑦 x1 x2 y 0 0 0 1 0 0 0 1 0 1 1 1 + =
  22. 22. ユニットの学習 テーブルを変えれば、OR回路も作れる。 𝑥1 𝑥2 𝑦 𝑤1 𝑤2 ℎ 𝑥1 𝑥2 𝑦 x1 x2 y 0 0 0 1 0 1 0 1 1 1 1 1 + =
  23. 23. ユニットの学習 1入力だけど、NOT回路も作れる。 𝑥1 𝑦 𝑤1 ℎ 𝑥1 𝑦 x1 y 0 1 1 0 + =
  24. 24. 1ユニットの限界 XOR回路は作れない。 𝑥1 𝑥2 𝑦 𝑤1 𝑤2 ℎ 𝑥1 𝑥2 𝑦 x1 x2 y 0 0 0 1 0 1 0 1 1 1 1 0 + =
  25. 25. 1ユニットの学習 1つのユニットでは線形識別しかできない x1 x2 x1 x2可能 不可能 AND回路 XOR回路
  26. 26. 複数ユニット 𝑥1 𝑥2 𝑦 = 𝑥2 𝑥1 𝑦 XORは、AND・OR・NOTの組み合わせで表現可能。 複数のユニットを組み合わせることで、非線形の識別が可能になる。
  27. 27. 多層パーセプトロン ユニットを多層に配置(1層の定義は、文脈によって異なるそうです) 各ユニットは次層の全ユニットと連結。
  28. 28. 深層学習のフレームワーク フレーム ワーク名 言語 ユーザー言語 速度 柔軟さ 開発 コミュニティ ドキュメ ント サンプル 日本語での サポート Caffe C++, Python Protocol Buffer(text), Python ◎ △ ◎ △ ◎ × Torch7 Lua, C Lua ○ ○ ○ ○ △ × Theano/ Pylearn2 Python, C++ YAML(Pylearn2), Python ○ ○ ○ ○ ◎ × Chainer Python Python ○ ◎ △ ○ ○ ○ 一長一短があるようです。
  29. 29. 第2章 多層パーセプトロンの書き方
  30. 30. 構成要素 ① 重み行列をかけてバイアスベクトルを足す(全結合層) ② 非線形関数を適用する(活性化関数) ③ ネットワークの出力を評価する(損失関数)
  31. 31. ① 全結合層 重み行列をかけてバイアスベクトルを足す 𝑥1 𝑥2 𝑥 𝑚 𝑥′1 𝑥′2 𝑥′ 𝑚 𝑤11 ℎ1𝑤21 𝑤 𝑚1 𝑥′1への入力 = 𝑥1 𝑤11 + 𝑥2 𝑤21 + ⋯ + 𝑥 𝑚 𝑤 𝑚1 + ℎ1 𝑥′𝑖への入力 = 𝑗 𝑥𝑗 𝑤𝑗𝑖 + ℎ𝑖 重み行列 バイアスベクトル
  32. 32. ② 活性化関数 非線形関数を適用する 𝑥1 𝑥2 𝑥 𝑚 𝑥′1 𝑥′2 𝑥′ 𝑚 𝑤11 ℎ1𝑤21 𝑤 𝑚1 𝑥′1からの出力 = 𝑓(𝑥′ 1への入力) 非線形関数 • 双曲線正接関数 • ReLU • Leaky ReLU
  33. 33. 双曲線正接関数 1から-1に収まるので扱いやすいが、入力→大で微分→小になるのが欠点 𝑓 𝑥 = tanh 𝑥 = exp 𝑥 − exp(−𝑥) exp 𝑥 + exp(−𝑥) 𝑑 𝑑𝑥 𝑓 𝑥 = 1 − exp 𝑥 − exp(−𝑥) exp 𝑥 + exp(−𝑥) 2 𝑓 𝑥 𝑑 𝑑𝑥 𝑓 𝑥
  34. 34. ReLU (Rectified Linear Unit) 入力→大でも微分は1。処理が高速。ただし負の入力では微分が0になる。 𝑓 𝑥 = max 𝑥, 0 𝑑 𝑑𝑥 𝑓 𝑥 = 1 for 𝑥 > 0 0 for 𝑥 < 0 𝑓 𝑥 𝑑 𝑑𝑥 𝑓 𝑥
  35. 35. Leaky ReLU 負の入力でも微分が0にならない。ReLUより高性能という論文もあり。 𝑓 𝑥 = max 𝑥, 𝑥/𝑎 𝑑 𝑑𝑥 𝑓 𝑥 = 1 for 𝑥 > 0 1/𝑎 for 𝑥 < 0 𝑓 𝑥 𝑑 𝑑𝑥 𝑓 𝑥 http://arxiv.org/abs/1505.00853
  36. 36. ③ 損失関数 ネットワークの出力を評価する。 ソフトマックス+交差エントロピーが良く使われる 似てる?
  37. 37. ソフトマックス 出力を「確率」とみなせる形に変換する 𝑦1 𝑦 𝐾 𝑦2 𝑦′1 𝑦′2 𝑦′ 𝐾 𝑦′𝑖 = exp 𝑦𝑖 𝑗 𝐾 exp(𝑦𝑗) 出力が必ず+になる 出力の合計が1になる
  38. 38. 交差エントロピー 2つの確率分布の相違度を表す尺度 出力値が教師データと一致した時に0で最小になる。 教師データから外れるほど大きな値になる。 𝐸 𝑛 = − 𝑖 𝑟𝑛𝑖log(𝑦 𝑛𝑖) 出力層のユニット についての和 rni:n番目の教師データを入力した時に、 i番目のユニットが出力すべき値 yni: n番目の教師データを入力した時に、 i番目のユニットが実際に出力する値
  39. 39. 多層パーセプトロンの書き方 デモしたかったのですが、間に合いませんでした。 ごめんなさい…
  40. 40. 多層パーセプトロンの書き方 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
  41. 41. 第3章 ニューラルネットの学習方法
  42. 42. 勾配法 目的関数(全データに対する損失の和)が小さくなるように、重み行列などのパ ラメーターを最適化する。 勾配法(目的関数の勾配の逆方向にパラメーターを動かす方法)が一般的 𝐸 = 𝑛 𝐸 𝑛目的関数: 全教師データにつ いての和 勾配法のイメージ
  43. 43. 確率的勾配法 先の勾配法では「全データに対する損失の和」が必要で、コスト高。 ランダム(確率的)に選んだ一部のデータ(ミニバッチ)で代用する。 1つのデータはベクトルなので、一部データは行列で表現可能。 #1 #2 #3 #4 3 6 4 7 1 3 1 9 5 4 8 2 4 2 2 4 この数字は適当で、意味なしです。
  44. 44. 誤差逆伝播法 出力層の補正は、教師データとの比較で行える。 中間層の補正を行うのに、誤差逆伝播法を用いる。 順伝播(予測を行うとき) 逆伝播(学習を行うとき) 出力層: 勾配は、教師データから算出。 中間層: 勾配は、1つ上の層の勾配と重み(修正 後)から算出。
  45. 45. 勾配法の拡張 モーメンタム法:勾配の移動平均を使って、方向を安定させる。 過去の勾配の方向 現在の勾配 の方向 過去と現在の間の方向に進む Adam:パラメーターごとに学習率を調整するアルゴリズム ごめんなさい。 調べられていません。 http://arxiv.org/abs/1412.6980
  46. 46. 最適化のためのテクニック ① 加重減衰 ② Max norm ③ 勾配クリッピング ④ パラメーターの賢い初期化 ⑤ バッチ正規化 ⑥ Dropout
  47. 47. 荷重減衰 パラメーター更新時に、パラメーターに1より少しだけ小さな値をかける。 パラメーターが大きくなりすぎるのを防ぐ。 𝐸 = 𝐸 + 𝜌 2 𝑖 𝑤𝑖 2 ρは係数 𝑤𝑖 ← 𝑤𝑖 − 𝛼 𝑑 𝐸 𝑑𝑤𝑖 = (1 − 𝛼𝜌)𝑤𝑖 − 𝛼 𝑑𝐸 𝑑𝑤𝑖
  48. 48. Max norm 重みに上限を設け、正則化や最適化の安定を図る 𝑥1 𝑥2 𝑥 𝑚 𝑤1 𝑤2 𝑤 𝑚 𝑤𝑖 = 𝑤𝑖 × min 上限値 𝑖 𝑤𝑖 2 , 1
  49. 49. 勾配クリッピング 勾配に上限を設け、正則化や最適化の安定を図る 𝜀𝑖 = 𝜀𝑖 × min 上限値 𝑖 𝜀𝑖 2 , 1 𝜀𝑖 𝜀𝑖:勾配ベクトル
  50. 50. パラメーターの賢い初期化 重みの初期値 • 平均0の一様分布や正規分布に基づいてランダムに生成。 • 分布の標準偏差が不適切だと、安定しなくなる。 • 適切な値は活性化関数によっても異なる。 バイアスの初期値 • 0で初期化するのが一般的。 • ReLUでは0.1など小さい値が良いという報告もある。
  51. 51. バッチ正規化 学習中にユニットの値を正規化する。 大規模なネットワークでは、学習がかなり高速化する http://arxiv.org/abs/1502.03167 ある認識率に到達す るまでのステップ数 が、14分の1になっ ている
  52. 52. Dropout ミニバッチごとに、ランダムに一部のユニットを無効化する パラメーター間の依存関係を取り除ける。 非常に強力な正則化手法だが、最適化が遅くなる。
  53. 53. 第4章 画像認識のための アーキテクチャ
  54. 54. 画像の構造 幅W = チャンネルC 高 さ H
  55. 55. 画像の特徴抽出 人間には「同じ」画像でも実際には差があるので、「特徴」を用いる。 特徴の抽出は、従来は人手で行っていたが、これが大変だった。 深層学習では特徴抽出も学習できる。 ? =
  56. 56. 畳込みネット 多層パーセプトロン+畳込み層+プーリング層 http://papers.nips.cc/paper/ 4824-imagenet-classification-w 入力層 出力層全結合層畳込み層+プーリング層
  57. 57. フィルター処理 画像の変換や、特徴の抽出に使われる。 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
  58. 58. フィルター処理 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
  59. 59. 畳込み層 フィルター処理は小領域に対する全結合層になっている(畳込み層)。 学習によってフィルターのパラメーターを自動的に選択できる。 𝑥𝑖𝑗 ′ = 𝑎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 𝑥𝑖𝑗 ′
  60. 60. 畳込み層 チャンネルを横断してもよい。 チャンネルは数が多いほうが情報量が落ちなくてよい。 http://papers.nips.cc/paper/4824-imagenet-classification-w 192チャンネル
  61. 61. プーリング層 出力層の数は、画像の画素数より少ない。 画像の解像度を下げる処理を行う(サブサンプリング)。 最大値プーリングが一般的。 1 -2 2 -1 0 2 0 0 -2 -3 2 3 -1 -3 1 3 2 2 -1 3 最大値 プーリング 赤枠中の最大値を出力
  62. 62. 設計の勘所 各層のパラメーターは自動決定してくれるが、何個の層をどの順に並べるかは事 前に決めないといけない。ここはまだ経験がものをいう世界。 経験的によく使われる工夫 • 最初の2層くらいは、畳込み層とプーリング層を交互に入れる • 入力画像が大きい場合、最初の畳込み層は間隔を広めにとる。 • 画像がある程度小さくなったら、畳込み層をいくつも並べ、たまにプーリン グ層を挟む。 • 画像が十分小さくなったら、そこから全結合層を1~3つ並べる。
  63. 63. 設計の勘所 http://papers.nips.cc/paper/ 4824-imagenet-classification-w 入力層 出力層全結合層畳込み層+プーリング層 たしかに、そんな作りになってます。

×