SlideShare a Scribd company logo
1 of 32
深層学習
1.入力層~中間層
2.活性化関数
3.出力層
4.勾配降下法
5.誤差逆伝播法
6.勾配消失問題
7.学習率最適化手法
8.過学習
9.畳み込みニューラルネットワークの概念
10.最新のCNN
深層学習(ディープラーニング)の手法について、基礎を説明する。
0.深層学習所感
• 深層学習は理論も必要だが、テクニック勝負。工学的要素が強い。
- scikit-learn/keras/pytorchなどを使えば、何かモデルを作れて何らかの結果が得られる。
- 良いモデルを作れるかは、良いとされている手法を知っているか?という要素が強いと感じる。
- 理論よりも結果論。
• アルゴリズムを理解するだけなら、機械学習より数段楽。
- 各処理それぞれに細かいテクニックがあり、その範囲は広い
深層学習でできること
回帰・分類なんでもござれ。
回帰:連続する実数をとる関数の近似
・線形回帰
・回帰木
・ランダムフォレスト
・ニューラルネットワーク
分類:離散的な結果を要するための分析
・ベイズ推定
・ロジスティック回帰
・決定木
・ランダムフォレスト
・ニューラルネットワーク
・結果予想
- 売り上げ予想
- 株価予想
・ランキング
- 競馬順位予想
- 人気順位予想
・写真の判定
・手書き文字認識
・花の種類分類
その他、深層学習の実用例
・自動売買
・チャットボット
・翻訳
・音声解釈
・囲碁、将棋AI など
AI
機械学習 教師あり学習
教師なし学習 強化学習
ニューラルネットワーク
ディープラーニング
深層学習(ディープラーニング)とは?
ティープラーニングまたは深層学習とは、対象の全体像から細部までの各々の粒度の概念を階層構造として
関連させて学習する手法のことである。深層学習として最も普及した手法は、多層の人工のニューラルネット
ワークによる機械学習手法である。多層ニューラルネットワークについては、スタックドオートエンコーダーが直接の
起源となった。(Wikipediaより抜粋)
ニューラルネットワークはシナプスの結合によりネットワークを形成した人工ニューロンが、学習によってシナプスの
結合強度を変化させ、問題解決能力を持つようなモデル全般を指す。狭義には誤差逆伝播法を用いた多層
パーセプトロンを指す場合もある。一般的なニューラルネットワークでの人工ニューロンは生体のニューロンの動作
を極めて簡易化したものを利用する。(Wikipediaより抜粋)
単純パーセプトロン
複数のシグナルを受け取り、1つのシグナルを出力する。パーセプトロンは、以下の
ように入力データを受け取り、重みを掛けて、合計を計算する。その合計に定数
項を加えて、活性化関数に代入する。
ニューラルネットワーク
パーセプトロンの数を増やすことによって、線形分離できないデータも分離できるよ
うになる。パーセプトロンを複数つなげたモデルをニューラルネットワークという。
この中間層を増やしたものをディープニューラルネットワークという。
∑
1
x1
w0
w1
w2
wm
y
z = w0 ∑ wi xi
x2
xm
入力
活性化関数 出力
y = g(z)
1
x1
x2
1
y1
y2
y
線形結合
w01
(1) w01
(2)
w02
(1)
w11
(1)
w12
(1)
w21
(1)
w22
(1)
w11
(2)
w21
(2)
入力層 中間層 出力層
多数の中間層をもつニューラルネットワークを用いることで、入力値から期待する出力値に変換
することのできるモデルを作成する。そのために、重み w と バイアス b を最適化する。
取り扱う内容
ニューラルネットワーク全体像概略(このページ)を正しく理解し、実装できるようにする。
x1
x2
u1
(1)
u2
(1)
u3
(1)
u1
(2)
u2
(2)
u3
(2)
y1
入力層 中間層 出力層
入力層:2ノード1層
中間層:3ノード2層
出力層:1ノード1層
<ネットワーク図例>
1.入力層~中間層
入力層と中間層
#単層単ユニットの場合
W = np.array([[0.1], [0.2]]) #重み
b = np.array(0.5) #バイアス
x = np.array([2, 3]) #入力
u = np.dot(x, W) + b #総入力
xの入力信号を受け取り、重みとバイアスを掛けて総和としたuを出力する。こ
れを活性化関数f(u) によって変換し、その変換された値が出力zとなる。
b
x1
w1
w2
wm
z
z = f(u)
x2
xm
入力層 中間層
z
u
実装参考)
Numpy.dot(a, b, out=None)
a:第一引数
b:第二引数
out:これを指定した場合、指定した配列をドット積を行った
新しい配列で上書きする。
・a,b が共にベクトルであればドット積となる。
・aがN次元配列、bが1次元配列(ベクトル)の場合は、aの1次元軸と
bの2次元軸の要素の内積の和
# 中間層出力
z = functions.relu(u)
# ReLU関数, 0より多ければそのまま、それ以外は0を返す
def relu(x):
return np.maximum(0, x)
2.活性化関数
活性化関数
ニューラルネットワークにおいて、次の層への出力の大きさを決める非線形の関数。
入力の値によって、次の層への信号のON/OFFや強弱を定める働きを持つ。
中間層でよく使われる活性化関数
・ReLU関数
・シグモイド関数
・ステップ関数
出力層でよく使われる活性化関数
・ソフトマックス関数
・恒等関数
・シグモイド関数
ReLU関数 シグモイド関数 ステップ関数
閾値を超えたら発火、出力は0,1。
パーセプトロンで利用された。
線形分離可能なものしか表現でき
ない。(微分できない)
0-1の間を変化する関数。信号の強弱
を伝えられる。
大きな値では出力の変化が微小なため、
勾配消失問題を引き起こす。(微分
値が小さい。Max:0.25)
勾配消失問題の回避とスパース化に
貢献する。今もっとも使われている関
数。
# 中間層出力
z = functions.relu(u)
# ReLU関数
def relu(x):
return np.maximum(0, x)
# 中間層出力
z = step_function(u)
# ステップ関数(閾値0)
def step_function(x):
return np.where( x > 0, 1, 0)
# 中間層出力
z = functions.sigmoid(u)
# シグモイド関数
def sigmoid(x):
return 1/(1 + np.exp(-x))
※詳細は後述
線形関数 非線形関数
加法性:f(x+y)=f(x)+f(y)
斉次性:f(kx) = kf(x)
(kはスカラー)
の2つを満たすものが線形関数
3.出力層
出力層の活性化関数
分類問題か回帰問題によって出力層の活性化関数を変更する必要がある。
一般に、回帰問題では恒等関数を、分類問題ではソフトマックス関数を使う。(2クラス問題はシグモイド関数)
ソフトマックス関数(シグモイド関数)の出力は0~1の実数となり、その総和は1となる。
→ 結果を確率として解釈できるため便利。かつ大小関係は変わらない。
b
x1 y1
z (1) = f(u)
x2
xm
入力層 中間層
z1
(1)
u1
(1)
z2
(1)
u2
(1)
z3
(1)
u3
(1)
z1
(2)
u1
(2)
z2
(2)
u2
(2)
w11
(1)
y2
出力層
y1
y2
w12
(1)
w13
(1)
wm1
(1)
wm2
(1)
wm3
(1)
w11
(2)
w12
(2)
w31
(2)
w32
(2)
z (2) = f(u)
シグモイド関数
・前頁で説明済み
恒等関数
・入力をそのまま出力
# ソフトマックス関数
def softmax(x):
if x.ndim == 2:
x = x.T
x = x - np.max(x, axis=0)
y = np.exp(x) / np.sum(np.exp(x), axis=0)
return y.T
x = x - np.max(x) # オーバーフロー対策
return np.exp(x) / np.sum(np.exp(x))
ソフトマックス関数
・前頁で説明済み
① return で返しているのがyk
② np.exp(x) が exp(uk)
③ np.sum(np.exp(x)) でnp.exp(x)の総和をとっている(∑exp(ui))
予測値 真値
誤差関数
E(w)
【中間層】閾値の前後で信号の強弱を調整
【出力層】信号の大きさ(比率)はそのままに変換
3.出力層
誤差関数
出力層から得られた結果と、訓練データの真値とのズレ具合を定量的に表す。
回帰 二値分類 多クラス分類
活性化関数 恒等関数 シグモイド関数 ソフトマックス関数
誤差関数 二乗誤差 交差エントロピー
解きたい問題毎によしとされる関数はだいたい決まっている。
二乗誤差
・回帰の場合は恒等関数によって得たい数値がそのまま予測値として
得られるため二乗誤差を用いて誤差を計算する。
・二乗することで誤差が正の値となり、絶対値等の複雑な計算が不
要となる。係数1/2は今後の計算(微分)での計算をしやすくするた
めである。
交差エントロピー
・分類の場合はソフトマックス/シグモイド関数を通して得られた、確率
として扱える値として予測値が得られる。
・このため、負の尤度が最大(尤度最小)となるように交差エントロ
ピーを採用することが多い。
# 平均二乗誤差
loss = functions.mean_squared_error(d,y)
def mean_squared_error(d, y):
return np.mean(np.square(d - y)) / 2
# クロスエントロピー
def cross_entropy_error(d, y):
if y.ndim == 1:
d = d.reshape(1, d.size)
y = y.reshape(1, y.size)
# 教師データがone-hot-vectorの場合、正解ラベルのインデックスに変換
if d.size == y.size:
d = d.argmax(axis=1)
batch_size = y.shape[0]
return -np.sum(np.log(y[np.arange(batch_size), d] + 1e-7)) / batch_size
① return で返しているのがE(w)
② -np.sum(np.log(y[np.arrange(batch_size),d]+1e-7))/batch_size
4.勾配降下法
深層学習の目的
学習を通して誤差を最小にするネットワークを作成すること
➡ 勾配降下法を利用してパラメータを最小化
勾配降下法
(ε:学習率)
学習率 ε を大きくしすぎると、最小値に収束せず発散する。
逆に学習率を小さくしすぎると、収束までの時間がかかる。また、真の最
小値ではない、極値で収束してしまう可能性がある。
収束化手法として Momentum / AdaGrad / Adadelta / Adamなどがある。
grad = backward(x, d, z1, y)
learning_rate = 0.01
for key in ('W1', 'W2', 'b1', 'b2'):
network[key] -= learning_rate * grad[key]
backward(x, d, z1, y) で勾配(grad) ∇Eを求めて、
学習率 ε=0.01 として、パラメータ(network[key])の値を更新
している。
パラメータの更新
# 数値微分
def numerical_gradient(f, x):
h = 1e-4
grad = np.zeros_like(x)
for idx in range(x.size):
tmp_val = x[idx]
# f(x + h)の計算
x[idx] = tmp_val + h
fxh1 = f(x)
# f(x - h)の計算
x[idx] = tmp_val - h
fxh2 = f(x)
grad[idx] = (fxh1 - fxh2) / (2 * h)
# 値を元に戻す
x[idx] = tmp_val
return grad
勾配の求め方
プログラムで微小な数値を生成し疑似
的に微分を計算する一般的な手法
各パラメータでE(wm+h)等の計算を
するため、順伝播の計算を繰り返し行
う必要があり負荷が大きい
➡ 誤差逆伝播法を利用(後述)
4.勾配降下法
勾配降下法の各手法
勾配降下法 確率的勾配降下法 ミニバッチ勾配降下法
用いるデータ 全サンプルの平均誤差 ランダムに抽出したサンプルの誤差 ランダムに分割したデータの集合(ミニバッチ)Dtに属
するサンプルの平均誤差
メリット 計算コスト軽減、局所極小解に収束するリスクの低減
オンライン学習ができる。オンライン学習:新たなデータが入
力するたびにパラメータを更新する方法であり、インターネット
上で得た情報を用い、即モデルの更新を行うことができる。
確率的勾配降下法のメリットを損なわず、計算機の計
算資源を有効利用できる。→ GPUによる並列計算
コード # データのランダム抽出
random_datasets = np.random.choice(data_sets, epoch)
# 勾配降下の繰り返し
for dataset in random_datasets:
x, d = dataset['x'], dataset['d']
z1, y = forward(network, x)
grad = backward(x, d, z1, y)
# パラメータに勾配適用
for key in ('W1', 'W2', 'b1', 'b2'):
network[key] -= learning_rate * grad[key]
# 誤差
loss = functions.mean_squared_error(d, y)
losses.append(loss)
更新イメージ図
5.誤差逆伝播法
誤差逆伝播法
算出された誤差を、出力層側から順に微分し、前の層へと伝播。
最小限の計算で各パラメータで微分値を解析的に計算する手法。
順伝播 逆伝播
計算結果(=誤差)から微分を逆算することで、
不要な再帰的計算を避けて微分を導出できる。
+
dot
+
dot
入力層 中間層 出力層
単純に考えると、∂E/∂w、∂E/∂bを求めるためには連鎖率を用いて、赤枠
のように各項の微分の結果を掛け合わせたもので表せる。
連鎖率 例)
5.誤差逆伝播法
E(y)を二乗誤差で求める場合の誤差逆伝播法の計算を考える。
出力層の活性化関数を恒等関数とする。
例として以下の微分を求める。
まず、∂E/∂y、∂y/∂u、∂u/∂w を数値的に計算すると、各項目の値は以下のようになる。
このため∂E/∂wは以下のように求められる。
5.誤差逆伝播法
# 誤差逆伝播
def backward(x, d, z1, y):
# print("n##### 誤差逆伝播開始 #####")
grad = {}
W1, W2 = network['W1'], network['W2']
b1, b2 = network['b1'], network['b2']
# 出力層でのデルタ
delta2 = functions.d_mean_squared_error(d, y)
# b2の勾配
grad['b2'] = np.sum(delta2, axis=0)
# W2の勾配
grad['W2'] = np.dot(z1.T, delta2)
# 中間層でのデルタ
#delta1 = np.dot(delta2, W2.T) * functions.d_relu(z1)
## 試してみよう
delta1 = np.dot(delta2, W2.T) * functions.d_sigmoid(z1)
delta1 = delta1[np.newaxis, :]
# b1の勾配
grad['b1'] = np.sum(delta1, axis=0)
x = x[np.newaxis, :]
# W1の勾配
grad['W1'] = np.dot(x.T, delta1)
return grad
# 平均二乗誤差の導関数
def d_mean_squared_error(d, y):
if type(d) == np.ndarray:
batch_size = d.shape[0]
dx = (y - d)/batch_size
else:
dx = y - d
return dx
yとdを入植すれば、∂E/∂y=y-dを返す
# シグモイド関数(ロジスティック関数)の導関数
def d_sigmoid(x):
dx = (1.0 - sigmoid(x)) * sigmoid(x)
return dx
# ReLU関数の導関数
def d_relu(x):
return np.where( x > 0, 1, 0)
(∂y/∂u=1)
# 順伝播
def forward(network, x):
# print("##### 順伝播開始 #####")
W1, W2 = network['W1'], network['W2']
b1, b2 = network['b1'], network['b2']
u1 = np.dot(x, W1) + b1
z1 = functions.relu(u1)
## 試してみよう
#z1 = functions.sigmoid(u1)
u2 = np.dot(z1, W2) + b2
y = u2
return z1, y
x1, y は forward(network, x)によって求められる
(計算結果を保持)
(計算結果を保持)
6.勾配消失問題
勾配消失問題
誤差逆伝播法が下位層に進んでいくにつ入れて、勾配がどんどん緩やかになっていくこと。
このため、勾配降下法による更新では下位層のパラーメータはほとんど変わらず、最適値に収束しなくなる。
イメージ
誤差逆伝播法では、微分が下位層に伝播していくため、微分値が小さい(≦1)場合、
どんどん掛け合わされることで、勾配が0に近づき、勾配消失となる。
例)シグモイド関数
中間層にシグモイド関数を使用する場合、シグモイド関数の微分値は最大0.25と
なる。また、シグモイド関数f(x)の微分はf’(x)=(1-f(x))f(x) となり、小さい微分値
が積み重なり、勾配消失問題を引き起こすことがある。
# シグモイド関数(ロジスティック関数)の導関数
def d_sigmoid(x):
dx = (1.0 - sigmoid(x)) * sigmoid(x)
return dx
シグモイド関数
6.勾配消失問題解決法
①活性化関数:ReLU関数
最も使われている活性化関数。勾配消
失化問題の回避とスパース化に貢献す
る。
ReLU関数
微分値は0 or 1 となり、1であれば勾
配を減少さない。0の場合はスパース化
に貢献する。
②重みの初期値設定
活性化関数に応じた最適な初期値の設
定方法が提案されている。
Xavierの初期値
<初期値>
・重みの要素を前の層のノードの数の平方根
で除算した値
<対応活性化関数>
・ReLU/シグモイド/双曲線正接
Heの初期値
<初期値>
・重みの要素を前の層のノードの数の平方根
で除算した値に対し√2を掛け合わせた値
<対応活性化関数>
・ReLU関数
③バッチ正規化
ミニバッチ単位で、入力値のデータの偏りを
抑制する手法。
➡活性化関数に値を渡す前後に、バッチ
正規化の処理を含んだ層を加える
これにより勾配消失問題のリスク低減、過学
習の抑制ができる。
6.勾配消失問題(補足)
Xavierの初期値コード
Heの初期値コード
# Heの初期値
network['W1'] = np.random.randn(input_layer_size, hidden_layer_size) / np.sqrt(input_layer_size) * np.sqrt(2)
network['W2'] = np.random.randn(hidden_layer_1_size, hidden_layer_size) / np.sqrt(hidden_layer_size) * np.sqrt(2)
# Xavierの初期値
network['W1'] = np.random.randn(input_layer_size, hidden_layer_size) / (np.sqrt(input_layer_size))
network['W2'] = np.random.randn(hidden_layer_size, hidden_layer_2_size) / (np.sqrt(hidden_layer_size))
重みの初期値が全て0(均一)の場合:
すべての重みの値がおなじように更新されてしまい、同じ値をもつ重みとなってしまうという問題が発生する。
バッチ正規化
E資格例題
N全データサイズ
NのデータのインデックスをランダムにしてShufle_idx に入る
バッチサイズずつインデックスを指定(i~i_end)
batch_x, batch_t として、i~i_endのインデックスのデータを抜き取る。
i_end~iまでのデータとなっている
i 以降のデータ
i_endまでのデータ
7.学習率最適化手法
復習
誤差を最小化するために、勾配降下法によってパラメータを最適化する。
このとき学習率εの取り方によって、収束の仕方が大きく変わる。
学習率 ε を大きくしすぎると、最小値に収束せず発散する。
逆に学習率を小さくしすぎると、収束までの時間がかかる。また、真の最
小値ではない、極値で収束してしまう可能性がある。
(ε:学習率)
多くの学習率最適化手法が提案されている。
主要な学習率最適化手法
・Momentum
・Adagrad
・RMSProp
・Adam
7.学習率最適化手法
勾配降下法 モメンタム AdaGrad RmsProp Adam
アルゴリズム
誤差をパラメータで微分
したものと学習率の積を
計算する
誤差をパラメータで微分したもの
と学習率の積を減算した後、現
在の重みに前回の重みを減算し
た値と慣性の積を加算する
誤差をパラメータで微分したもの
と、再定義した学習率の積を減
算する。
誤差をパラメータで微分したもの
と再定義した学習の積を減算す
る。
モメンタムの、過去の勾配の指
数関数的減衰平均。
RMSPropの、過去の勾配の2
乗の指数関数的減衰平均。
この2つを含んだ最適化アルゴリ
ズム。
メリット
局所最適解にはならず、大域
的最適解となる。
谷間についてから最も低い位置
に行くまでの時間が早い
勾配の緩やかな斜面に対して、
最適解に近づける。
局所最適解にはならず、大域
的最適解となる。
廃ーパーパラメータの調整が必
要な場合が少ない。
モメンタムとRMSPropのメリット
を含んでいる。
デメリット
学習率が徐々に小さくなるので、
鞍点問題を引き起こすことがあ
る。
数式
コメント
前回の勾配を用いることで、少し
くらいの谷であれば乗り越えてく
れる。ボールがお椀の中を転がる
イメージ。
学習率は初めは大きくし、大域
的最適解を探し、その後は学習
率を小さくし、収束させたい。うま
くいかないこともある。
原理は難しそう。
(ε:学習率)
(μ:慣性)
7.学習率最適化手法
class SGD:
def __init__(self, learning_rate=0.01):
self.learning_rate = learning_rate
def update(self, params, grad):
for key in params.keys():
params[key] -= self.learning_rate * grad[key]
class Momentum:
def __init__(self, learning_rate=0.01, momentum=0.9):
self.learning_rate = learning_rate
self.momentum = momentum
self.v = None
def update(self, params, grad):
if self.v is None:
self.v = {}
for key, val in params.items():
self.v[key] = np.zeros_like(val)
for key in params.keys():
self.v[key] = self.momentum * self.v[key] - self.learning_rate * grad[key]
params[key] += self.v[key]
class AdaGrad:
def __init__(self, learning_rate=0.01):
self.learning_rate = learning_rate
self.h = None
def update(self, params, grad):
if self.h is None:
self.h = {}
for key, val in params.items():
self.h[key] = np.zeros_like(val)
for key in params.keys():
self.h[key] += grad[key] * grad[key]
params[key] -= self.learning_rate * grad[key] / (np.sqrt(self.h[key]) + 1e-7)
class RMSprop:
def __init__(self, learning_rate=0.01, decay_rate = 0.99):
self.learning_rate = learning_rate
self.decay_rate = decay_rate
self.h = None
def update(self, params, grad):
if self.h is None:
self.h = {}
for key, val in params.items():
self.h[key] = np.zeros_like(val)
for key in params.keys():
self.h[key] *= self.decay_rate
self.h[key] += (1 - self.decay_rate) * grad[key] * grad[key]
params[key] -= self.learning_rate * grad[key] / (np.sqrt(self.h[key]) + 1e-7)
class Adam:
def __init__(self, learning_rate=0.001, beta1=0.9, beta2=0.999):
self.learning_rate = learning_rate
self.beta1 = beta1
self.beta2 = beta2
self.iter = 0
self.m = None
self.v = None
def update(self, params, grad):
if self.m is None:
self.m, self.v = {}, {}
for key, val in params.items():
self.m[key] = np.zeros_like(val)
self.v[key] = np.zeros_like(val)
self.iter += 1
lr_t = self.learning_rate * np.sqrt(1.0 - self.beta2 ** self.iter) / (1.0 - self.beta1 ** self.iter)
for key in params.keys():
self.m[key] += (1 - self.beta1) * (grad[key] - self.m[key])
self.v[key] += (1 - self.beta2) * (grad[key] ** 2 - self.v[key])
params[key] -= lr_t * self.m[key] / (np.sqrt(self.v[key]) + 1e-7)
8.過学習
復習
特定の訓練サンプルに対して、特化して学習すること。
適切な学習 過学習
パラメータの数が多い
パラメータの値が適切でない
ノードが多い etc…
過学習になりやすいのは
= ネットワークの自由度が高い
過学習の原因
・重みが大きい値をとることで、過学習が発生することがある。
(重みが大きすぎる=無理矢理誤差を減らそうとしているというイメージ)
過学習の解決策
・誤差に対して、正則化項を加算することで、重みを抑制する。
・ドロップアウトを用い、ランダムにノードを削除して学習させる。
過学習への対応(再掲)
リッジ ラッソ ドロップアウト
ドロップアウトにより、データ量を変
化させずに、異なるモデルを学習
させていると解釈できる。
E資格例題
Gradが勾配、rateがリッジ係数(λ)なので、paramはL2ノルム自体となるため、
L2ノルムの勾配(微分値)が答えとなるため、paramとなる。係数は定数なので1として
いる。
E資格例題
Gradが勾配、rateがラッソ係数(λ)なので、paramはL1ノルムの勾配(微分値)と
なり、絶対値を考慮して、偏差が正なら+、負なら-となるよう符号関数を付けたものが値
となる。(pramsが正なら +params, pramasが負なら-pramasとなる)
E資格例題
既にtop/bottom, left/right がランダムに設定されているので
順番通りに切ればよい。
チャンネルは変えない。
画像処理時の話、この後出てくる
9.畳み込みニューラルネットワークの概念
畳み込みニューラルネットワーク(CNN)とは、画像認識や音声認識などでよく使われる手法である。これまでの
ニューラルネットワークとCNNとの違いは、CNNでは新たに「畳み込み層(Convolution layer)」と「プーリング層
(Pooling Layer)」が登場する。
1998年にYann LeCunによって考案された初の畳み込みネットワーク LeNetを用いてCNNの基本概念を説明し
ていく。LaNetは層が浅く単純ではあるが、MNISTで99%以上の精度を出せる。(論文:lecun-98.pdf)
入力層
(32×32)
畳み込み
5×5 フィルタ
2パディング
(28×28×6)
Pooling
2×2 フィルタ
2ストライド
(14×14×6)
畳み込み
5×5 フィルタ
パディングなし
(10×10×16)
Pooling
2×2 フィルタ
2ストライド
(5×5×16)
全結合
(120)
出力層
(10)
全結合
(84)
0~9の手書きの数字画像から、書かれ
ている数字を予測するようなイメージ
LeNetの構造
9.畳み込みニューラルネットワークの概念
畳み込み層
畳み込み層では、画像の場合、縦、横、チャンネルの3次元のデータをそのまま学習し、次に伝えることが出来る。
➡ 3次元の空間情報も学習できるような層が畳み込み層である。
畳み込み演算
入力データに対して、フィルタのウインドウを一定の間隔でスライドさせながら適用させる。フィルタの要素と入力の対応
する要素を乗算し、その和を求める。
計算方法
左上=3×3+4×1+4×2+0×8+8×7+9×5+0×5+4×4+3×1 = 141
右上=4×3+4×1+2×2+8×8+9×7+2×5+4×5+3×4+1×1 = 190
左下=0×3+8×1+9×2+0×8+4×7+3×5+3×5+3×4+5×1 = 101
右下=8×3+9×1+2×2+4×8+3×7+1×5+3×5+5×4+7×1 = 137
バイアス
バイアスの加算はフィルタの適用後のデータに対して行われる。バイアスはひとつ(1×1)だけ存在する。
9.畳み込みニューラルネットワークの概念
パディング
畳み込み層の処理を行う前に、入力データの周囲に固定のデータを埋めることがある。これをパディングという。
幅1のパディングとは、周囲を幅1ピクセルの0で埋めることをいう。(下図参照)
ストライド
フィルタを適用する位置の間隔をストライドという。
パディングを行うことで、出力サイズを調整できる。例えば、(4,4)のサイズ
の入力データに(3,3)のフィルタを適用する場合、出力サイズは(2,2)と
なり、入力サイズから2サイズ分縮小されることになる。
➡何度も畳み込みを繰り返す場合、どんどん小さくなってしまうため、出力サ
イズの縮小を回避する必要がある。
9.畳み込みニューラルネットワークの概念
チャンネル
プーリング層
画像の場合、縦・横方向に加えて、チャンネル方向も合わせた3次元データを扱う必要がある。出てくる結果は2次
元となる。(RGBの各チャンネル間の関連性を学習に反映できる)
プーリングは縦・横方向の空間を小さくする演算。下図は(3,3)のMax/Averageプーリングをストライド1で行った場
合の図である。
<プーリング層の特徴>
・学習するパラメータがない
・チャンネル数は変化しない
・微小な位置変化に対してロバスト
10.AlexNet
2012年のILSVRC(International Large Scale Visual Recognition Challenge)で優勝した「AlexNet」
の紹介をする。5層の畳み込み層及びプーリング層など、それに続く3層の全結合層から構成される。
過学習を防ぐために全結合層の出力にドロップアウトを用いている。また、LeRU関数も用いている。
(論文:imagenet_classification_with_deep_convolutional.pdf (toronto.edu))
入力層
(224×224×1)
畳み込み
11×11 フィルタ
4ストライド
(55×55×96)
Max Pooling
3×3 フィルタ
2ストライド
畳み込み
3×3 フィルタ
1パディング
(13×13×384)
畳み込み
3×3 フィルタ
1パディング
(13×13×384)
全結合
(2048)
出力層
(1000)
全結合
(4096)
AlexNetの構造
Max Pooling
3×3 フィルタ
2ストライド
畳み込み
5×5 フィルタ
2パディング
(27×27×256)
畳み込み
3×3 フィルタ
1パディング
(13×13×256)
Pooling
3×3 フィルタ
2ストライド
上下に分かれているのは、使
用するGPUの1号/2号の違い
実装
順伝播
値を表示する関数
u = 0.1*2 + 0.2*3 + 0.5
= 1.3
参考文献
• ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
:オライリージャパン
• はじめてのパターン認識(平井有三):森北出版株式会社
• LeNet(lecun-98.pdf)
• AlexNet( imagenet_classification_with_deep_convolutional.pdf (toronto.edu) )
• 他wikipedia、youtubeなど

More Related Content

What's hot

Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Ohsawa Goodfellow
 
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tatsuya Tojima
 

What's hot (20)

【基調講演】『深層学習の原理の理解に向けた理論の試み』 今泉 允聡(東大)
【基調講演】『深層学習の原理の理解に向けた理論の試み』 今泉 允聡(東大)【基調講演】『深層学習の原理の理解に向けた理論の試み』 今泉 允聡(東大)
【基調講演】『深層学習の原理の理解に向けた理論の試み』 今泉 允聡(東大)
 
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
 
FOBOS
FOBOSFOBOS
FOBOS
 
mxnetで頑張る深層学習
mxnetで頑張る深層学習mxnetで頑張る深層学習
mxnetで頑張る深層学習
 
bigdata2012ml okanohara
bigdata2012ml okanoharabigdata2012ml okanohara
bigdata2012ml okanohara
 
深層学習の数理
深層学習の数理深層学習の数理
深層学習の数理
 
Building High-level Features Using Large Scale Unsupervised Learning
Building High-level Features Using Large Scale Unsupervised LearningBuilding High-level Features Using Large Scale Unsupervised Learning
Building High-level Features Using Large Scale Unsupervised Learning
 
深層学習による非滑らかな関数の推定
深層学習による非滑らかな関数の推定深層学習による非滑らかな関数の推定
深層学習による非滑らかな関数の推定
 
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
 
Priorに基づく画像/テンソルの復元
Priorに基づく画像/テンソルの復元Priorに基づく画像/テンソルの復元
Priorに基づく画像/テンソルの復元
 
Deep Learning基本理論とTensorFlow
Deep Learning基本理論とTensorFlowDeep Learning基本理論とTensorFlow
Deep Learning基本理論とTensorFlow
 
現在のDNNにおける未解決問題
現在のDNNにおける未解決問題現在のDNNにおける未解決問題
現在のDNNにおける未解決問題
 
PRML5
PRML5PRML5
PRML5
 
Pythonで体験する深層学習 5章
Pythonで体験する深層学習 5章Pythonで体験する深層学習 5章
Pythonで体験する深層学習 5章
 
LSTM (Long short-term memory) 概要
LSTM (Long short-term memory) 概要LSTM (Long short-term memory) 概要
LSTM (Long short-term memory) 概要
 
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015
 
深層生成モデルを用いたマルチモーダル学習
深層生成モデルを用いたマルチモーダル学習深層生成モデルを用いたマルチモーダル学習
深層生成モデルを用いたマルチモーダル学習
 
論文紹介 Semi-supervised Learning with Deep Generative Models
論文紹介 Semi-supervised Learning with Deep Generative Models論文紹介 Semi-supervised Learning with Deep Generative Models
論文紹介 Semi-supervised Learning with Deep Generative Models
 
DL Hacks輪読 Semi-supervised Learning with Deep Generative Models
DL Hacks輪読 Semi-supervised Learning with Deep Generative ModelsDL Hacks輪読 Semi-supervised Learning with Deep Generative Models
DL Hacks輪読 Semi-supervised Learning with Deep Generative Models
 
RBM、Deep Learningと学習(全脳アーキテクチャ若手の会 第3回DL勉強会発表資料)
RBM、Deep Learningと学習(全脳アーキテクチャ若手の会 第3回DL勉強会発表資料)RBM、Deep Learningと学習(全脳アーキテクチャ若手の会 第3回DL勉強会発表資料)
RBM、Deep Learningと学習(全脳アーキテクチャ若手の会 第3回DL勉強会発表資料)
 

Similar to 深層学習①

DEEP LEARNING、トレーニング・インファレンスのGPUによる高速化
DEEP LEARNING、トレーニング・インファレンスのGPUによる高速化DEEP LEARNING、トレーニング・インファレンスのGPUによる高速化
DEEP LEARNING、トレーニング・インファレンスのGPUによる高速化
RCCSRENKEI
 
確率的深層学習における中間層の改良と高性能学習法の提案
確率的深層学習における中間層の改良と高性能学習法の提案確率的深層学習における中間層の改良と高性能学習法の提案
確率的深層学習における中間層の改良と高性能学習法の提案
__106__
 

Similar to 深層学習① (20)

PRML 1.5-1.5.5 決定理論
PRML 1.5-1.5.5 決定理論PRML 1.5-1.5.5 決定理論
PRML 1.5-1.5.5 決定理論
 
DLLab 異常検知ナイト 資料 20180214
DLLab 異常検知ナイト 資料 20180214DLLab 異常検知ナイト 資料 20180214
DLLab 異常検知ナイト 資料 20180214
 
LCCC2010:Learning on Cores, Clusters and Cloudsの解説
LCCC2010:Learning on Cores,  Clusters and Cloudsの解説LCCC2010:Learning on Cores,  Clusters and Cloudsの解説
LCCC2010:Learning on Cores, Clusters and Cloudsの解説
 
"Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz...
"Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz..."Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz...
"Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz...
 
Python for Data Anaysis第2回勉強会4,5章
Python for Data Anaysis第2回勉強会4,5章Python for Data Anaysis第2回勉強会4,5章
Python for Data Anaysis第2回勉強会4,5章
 
深層学習の基礎と導入
深層学習の基礎と導入深層学習の基礎と導入
深層学習の基礎と導入
 
PRML s1
PRML s1PRML s1
PRML s1
 
論文紹介:Dueling network architectures for deep reinforcement learning
論文紹介:Dueling network architectures for deep reinforcement learning論文紹介:Dueling network architectures for deep reinforcement learning
論文紹介:Dueling network architectures for deep reinforcement learning
 
Deep learning実装の基礎と実践
Deep learning実装の基礎と実践Deep learning実装の基礎と実践
Deep learning実装の基礎と実践
 
ji-5. 繰り返し計算
ji-5. 繰り返し計算ji-5. 繰り返し計算
ji-5. 繰り返し計算
 
GANの基本
GANの基本GANの基本
GANの基本
 
深層学習 - 画像認識のための深層学習 ①
深層学習 - 画像認識のための深層学習 ①深層学習 - 画像認識のための深層学習 ①
深層学習 - 画像認識のための深層学習 ①
 
DEEP LEARNING、トレーニング・インファレンスのGPUによる高速化
DEEP LEARNING、トレーニング・インファレンスのGPUによる高速化DEEP LEARNING、トレーニング・インファレンスのGPUによる高速化
DEEP LEARNING、トレーニング・インファレンスのGPUによる高速化
 
Tutorial-DeepLearning-PCSJ-IMPS2016
Tutorial-DeepLearning-PCSJ-IMPS2016Tutorial-DeepLearning-PCSJ-IMPS2016
Tutorial-DeepLearning-PCSJ-IMPS2016
 
6 Info Theory
6 Info Theory6 Info Theory
6 Info Theory
 
確率的深層学習における中間層の改良と高性能学習法の提案
確率的深層学習における中間層の改良と高性能学習法の提案確率的深層学習における中間層の改良と高性能学習法の提案
確率的深層学習における中間層の改良と高性能学習法の提案
 
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
 
Prml5 6
Prml5 6Prml5 6
Prml5 6
 
ラビットチャレンジレポート 深層学習Day1
ラビットチャレンジレポート 深層学習Day1ラビットチャレンジレポート 深層学習Day1
ラビットチャレンジレポート 深層学習Day1
 
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介
 

Recently uploaded

Recently uploaded (11)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 

深層学習①