SlideShare une entreprise Scribd logo
1  sur  40
Télécharger pour lire hors ligne
⽇日本神経回路路学会セミナー 
Deep Learningが拓拓く世界 
Deep Learning 
実装の基礎と実践 
2014/08/26 京都⼤大学東京オフィス 
 
株式会社Preferred Networks 
得居 誠也
⾃自⼰己紹介 
l 得居 誠也 (Seiya Tokui) 
l Preferred Networks リサーチャー 
l Jubatus のアルゴリズム開発 
– Jubatus: NTTとPFIで共同開発しているオープンソースの分散 
リアルタイム機械学習基盤 http://jubat.us/  
l 現在は映像解析とディープラーニングの研究開発に従事 
2
ニューラルネットの基礎、実装、実験について話し 
ます 
l ニューラルネットの道具 
– 全体の構成、⾏行行列列による表現、損失関数、誤差逆伝播、SGD 
l 主要な実装 
– Pylearn2, Torch7, Caffe, Cuda-‐‑‒convnet2 
l フレームワークの基本的な設計 
– テンソルデータ、レイヤー、ネット、最適化ルーチン 
– アーキテクチャの記述⽅方法(宣⾔言的、スクリプティング) 
l 実験の進め⽅方 
– データの前処理理、アーキテクチャの設計、パラメータの初期値、 
正則化、学習率率率の初期値と調節、モーメンタム 
– 評価の⽅方法、プロット、パラメータの可視化 
– 中断・レジューム、パラメータの差し替え 
3
ニューラルネットの道具
Deep Learningいろいろ 
Neural Network: 右図のような 
計算グラフで表される⾮非線形関数 
Convolutional NN: 画像や⾳音声 
などの構造を反映したNNの⼀一種 
Deep Belief Network(左), 
Deep Boltzmann Machine(右): 
多層のグラフィカルモデル(確率率率モデル) 
※今⽇日は触れません 
“Deep” の定義は⽂文脈により様々。普通は3層以上で深いと⾔言われる 
5
Feed-‐‑‒Forward Neural Network 
(結合)重み 
x ⼊入⼒力力層隠れ層隠れ層出⼒力力層1 
wj1 
x2 
wj2 
x3 
wj3 
x4 
wj4 
ユニット 
活性 
hj = f(wj1x1 + · · · + wj4x4 + bj) 
活性化関数  
バイアス項 
= f(wj x + bj) 
重みとバイアス項を調節 
して、望みの予測を得ら 
れるようにするのが学習 
の⽬目標
Feed-‐‑‒Forward Neural Network(⾏行行列列で書く) 
各層をベクトルで表して以下のように書くことが多い 
 
h = f(Wx+ b) 
下図のように3層の場合だと 
y = f3(W3f2(W2f1(W1x + b1) + b2) + b3) 
W1 W2 W3 
x h1 h2 y
最適化としての学習 
l モデルの出⼒力力(予測)と正解とがよく⼀一致するほど⼩小さくなるよう 
な値(損失 loss)を考える 
l 各教師データごとの損失の平均を⽬目的関数とするのが⼀一般的 
L(W) = 
1 
N 
XN 
i=1 
`(y(xi;W), yi) 
 
l 学習=⽬目的関数の最⼩小化 
` 
y(x;W) 
(xi, yi)i=1,...,N 
W 
l 損失関数:エントロピー誤差(分類)や⼆二乗誤差(回帰) 
8 
損失関数 
モデルの予測 
各教師データ 
予測器の重み 
minimize (パラメータ) 
W 
L(W) 
`(y, yi) = ky − y1k2 (⼆二乗誤差)
最適化⼿手法:勾配降降下法 
⽬目的関数の勾配 gradient の⽅方向に向かって重みを動かしていく 
(次式の更更新を繰り返す) 
W W − ⌘rL(W) 
学習率率率勾配ベクトル 
9 
L の等⾼高線 
極⼩小点
確率率率的勾配降降下法 
Stochastic Gradient Descent (SGD) 
l 教師データ全部を⾒見見ず、⼀一部(ミニバッチ)だけを⾒見見て勾配を計算 
する( :ミニバッチ) 
l 最初にデータセットをランダムシャッフルして、前から 個ず 
つミニバッチとして取り出して更更新するのが⼀一般的 
– データの順序に偏りがある場合、シャッフルしないと性能が⼤大 
きく落落ちる 
– 理理論論的には毎回ランダムにミニバッチを選ぶのが収束の速さと 
いう意味で良良いが、ランダムアクセスが増えるので実際には遅 
くなることが多い 
10 
B 
|B| 
W W − 
⌘ 
|B| 
X 
i2B 
r`(y(xi;W), yi)
モーメンタム法 
l SGD は勾配のブレが⼤大きいとなかなか収束しない 
l ブレを低減するために、勾配の移動平均(モーメンタム)を使う 
11 
h h + μ 
1 
|B| 
Xn 
i2B 
r`(y(xi;W), yi), 
モーメンタムモーメンタム係数 
W W − ⌘h. 
W(t) 
r` 
W(t1) 
W(t+1) 
上付きの添字は 
更更新回数を表すとする 
W(t+2)
勾配の計算⽅方法 
誤差逆伝播法 (backpropagation) 
l Feed Forward Neural Network はたくさんの関数の合成 
l 勾配を求めるには合成関数の微分(連鎖律律 chain rule)を使う 
l すると勾配の計算は、出⼒力力側から⼊入⼒力力側に向かって各ユニットの勾 
配を伝播させるような処理理としてかける 
誤差関数 
(error) 
⼊入⼒力力層隠れ層隠れ層出⼒力力層正解 
12 
(groundtruth) 
重みの勾配重みの勾配重みの勾配
主要な実装 
名前主要な開発者⾔言語特徴 
Pylearn2Univ. Montrealの 
LISA Lab 
Python (C++)NumPyとの親和性、 
強⼒力力な⾃自動微分 
Torch7NewYork Univ.など?Lua/C++Luaによるスクリプ 
ティング、拡張性の 
⾼高さ 
CaffeBerkeley Vision and 
Learning Center 
(UCB) 
C++ (Python)単⼀一GPUで最⾼高速度度 
(2014/08現在) 
Cuda-convnet2Alex KrizhevskyC++ (Python)マルチGPU環境での 
並列列実⾏行行(Tesla 
K20x8) 
13
フレームワークの基本的な設計 
14
主要なフレームワークはいずれも似たような構成要素からなる 
 
l テンソルデータ構造 
l レイヤー(ビルディングブロックとして) 
l ネット 
l 最適化ルーチン 
フレームワークによってこれらの設計指針や抽象化の粒粒度度、インター 
フェイスが異異なる
典型的なDeep Learningフレームワークの概略略 
16 
最適化ルーチン 
出⼒力力データ 
レイヤー 
中間データ 
レイヤー 
⼊入⼒力力データ 
正解データ 
バイアス 
重み 
中間エラー 
バイアス 
重み 
ネットワーク実装
テンソルデータ構造 
17 
最適化ルーチン 
出⼒力力データ 
レイヤー 
中間データ 
レイヤー 
正解データ 
バイアス 
中間エラー 
ネットワーク実装 
⼊入⼒力力データ 
重み 
バイアス 
重み
テンソルデータ構造 
18 
⼊入⼒力力・中間・出⼒力力データ 
ミニバッチ 
データの次元 
⾼高さ 
横幅 
ミニバッチ 
重みテンソル 
⼊入⼒力力次元 
出⼒力力次元 
⾼高さ 
横幅 
フィルター数
テンソルデータ構造 
l 浮動⼩小数点の配列列に、次元の情報が加わったもの 
l データの構造を使わない、全連結なニューラルネットワークを作る 
場合、⾏行行列列とベクトルだけで実装できる 
l 画像に対する畳込みニューラルネットを作る場合、4階のテンソル 
が必要 
l 動画に対して時間軸も区別する⼿手法を作る場合、5階のテンソルが 
必要 
l 実装例例:NumPy の ndarray 
– Pylearn2 は ndarray を使う 
– Caffe のデータ構造もゼロコピーで ndarray との相互変換がで 
きる 
19
レイヤー 
20 
最適化ルーチン 
出⼒力力データ 
中間データ 
⼊入⼒力力データ 
正解データ 
バイアス 
重み 
中間エラー 
バイアス 
重み 
ネットワーク実装 
レイヤーレイヤー
レイヤー 
l データを受け取って変換したデータを出⼒力力する 
l 関数または⼿手続きと思えば良良い 
l ⼀一部のレイヤーはパラメータを持つ 
– ニューラルネットのうち学習可能な部分 
l ただの関数との違いはbackpropagationが必要なこと 
21
レイヤーのbackpropagationは 
連鎖律律による微分計算 
l z = g(y), y = f(x,w) 
のとき、 の に関 
する勾配は 
22 
L(z) w 
x f y g z 
@L 
@z 
@L 
@y 
w 
@L 
@w 
= 
@L 
@z 
@z 
@w 
, 
@z 
@w 
= 
@z 
@y 
@y 
@w 
g の逆伝播はこの値の計算
レイヤーのbackpropagationは 
連鎖律律による微分計算 
l 実際の計算の流流れ: 
 
これが の backprop(出⼒力力のエラーから⼊入⼒力力のエラーを計算) 
l 実際には⼊入出⼒力力は多変数なので、多変数の微分が必要 
23 
@L 
@y 
= 
@L 
@z 
@z 
@y 
g 
x f y g z 
@L 
@z 
@L 
@y 
w
ネットワーク実装 
24 
最適化ルーチン 
出⼒力力データ 
レイヤー 
中間データ 
レイヤー 
⼊入⼒力力データ 
正解データ 
バイアス 
重み 
中間エラー 
バイアス 
重み 
ネットワーク実装
ネットワークは順伝播と逆伝播を実装する 
l ネットワークの仕事は、ニューラルネット全体=計算グラフを保持 
して、その上で順伝播や逆伝播を実⾏行行すること 
l ネットワーク上の誤差逆伝播は⾃自動微分 
– 指定された⼊入⼒力力変数・出⼒力力変数に対して、どういう順番で 
backpropを呼び出せば⽬目的の勾配を計算することができるのか 
を⾃自動で判断する 
– ネットワークが⼀一本のチェーン状の場合は簡単 
– ネットワークが複数の⼊入⼒力力、合流流、分岐、複数の出⼒力力を持つ場 
合には少しややこしくなる 
l 正しくDAGになっていれば計算可能 
25
最適化ルーチン 
26 
最適化ルーチン 
出⼒力力データ 
レイヤー 
中間データ 
レイヤー 
⼊入⼒力力データ 
正解データ 
バイアス 
重み 
中間エラー 
バイアス 
重み 
ネットワーク実装
最適化ルーチンは重み・バイアスの配列列に対して勾 
配を⽤用いてオンライン最適化を実⾏行行する 
l ここは⽐比較的単純な実装になることが多く、現在のパラメータと勾 
配を受け取って更更新するルーチンとして書かれる場合が多い 
l ほぼすべてのフレームワークではモーメンタムSGDをサポートして 
いる 
– State of the art なニューラルネット学習で⽤用いられる 
– 学習率率率のチューニングが精度度に重要 
– Pylearn2 などは、現在のパラメータの性能を監視して⾃自動的に 
学習率率率を下げる機能などもサポートしている 
l 学習率率率を⾃自動調節する⼿手法を実装していることも(AdaGrad, 
AdaDelta, RMSpropなど) 
27
アーキテクチャの記述⽅方法 
l アーキテクチャ:ネットワークの構成 
– ⼊入⼒力力データの情報(パスや前処理理⽅方法)も⼀一緒に記述することが多い 
– 最適化ルーチンの設定を⼀一緒に記述するフレームワークもある 
l 試⾏行行錯誤を簡単にするために、宣⾔言的に書けるような仕組みを持っ 
ていることが多い 
l Pylearn2: PyYAML 
l Caffe: Protocol Buffer(テキスト形式) 
l Cuda-‐‑‒convnet: iniファイル 
 
28
例例:Pylearn2 
l 多層パーセプトロンの 
チュートリアルから 
アーキテクチャ部分の 
みを抜粋 
l Layersにレイヤー定義 
を並べていく 
l 指定の仕⽅方は model に 
よって異異なる 
l スクリプトで構築する 
こともできる(複雑な 
グラフを作りたい場合 
など) 
29
例例:Caffe 
l Caffe の MNIST サンプルのアーキテク 
チャ設定から⼀一部を抜粋 
l Protocol Buffer の layers メッセージと 
してレイヤーの設定を並べる 
l bottom, top が⼊入⼒力力、出⼒力力レイヤーに対 
応していて、複雑なグラフも書ける 
30
実験の進め⽅方 
31
実験の流流れ 
l 計算機環境の準備 
l データの前処理理(重要!!!) 
l チューニング:以下の繰り返し 
– アーキテクチャの設計 
– パラメータ初期値の設定 
– 学習率率率の初期値を探す 
– 評価しながら学習率率率調節
計算機環境の準備 
l ⼩小さなデータセット(10万件)なら CPU のみでOK 
l ⼤大きなデータセットでは GPGPU が必須 
– ⼀一回の実験が数⼗十分〜~数時間になってくると欲しくなる 
l 多くのフレームワークは CUDA 対応なので NVIDIA GPU が良良い 
l 価格と性能のトレードオフ 
– 性能は CUDA コア数、メモリサイズ、クロック数で⾒見見る 
– メモリサイズは巨⼤大な NN を⼤大きなミニバッチで学習する際に 
必要 
– トレードオフの意味で最もリーズナブルなのは 
NVIDIA GeForce GTX770(2014年年8⽉月現在、4万円弱) 
l 電源と冷冷却にも気をつける 
33
データの前処理理(重要!!!) 
l よく⾏行行われるのは⽩白⾊色化 whitening 
– データの平均が 0 ベクトルになるように平⾏行行移動させる 
– データの各次元の分散が 1 になるようにスケールさせる 
l 主成分分析に基づく⽩白⾊色化もよく⾏行行われる 
– 主成分に変換する:主成分軸⽅方向の分散を 1 に揃える効果 
– 画像などデータの⾒見見た⽬目が解釈しやすい、あるいはデータの構 
造を学習に活⽤用したい場合、変換後に主成分表⽰示からもとの 
RGB空間に戻すことがある(ZCA whitening) 
l 画像では他にもコントラスト正規化を⾏行行うことがある 
l 前処理理は最適化の収束速度度に強く影響する 
34
アーキテクチャの設計 
l まずは各フレームワークの examples を⾒見見ていろいろ学ぶ 
l はじめは狭くて浅いネットワークから始める 
l チューニングしながら、精度度が上がらなくなったら広くする(各層 
のユニット数を増やす) 
l 精度度が上がらなかったり過学習の兆候が⾒見見えたら、少し狭くして 
ネットワークを深くする 
– 過学習:訓練データでは精度度が上がるが評価データでは精度度が 
落落ちる 
l どの活性化関数を使うかや、ドメイン依存のレイヤー(画像に対す 
る正規化レイヤーなど)は最適な組合せがタスクによって違うので、 
いろいろ変えて⽐比較して選ぶ 
35
パラメータの初期値 
l 活性化関数によって設定の仕⽅方が変わる 
l 最善の⽅方法がわかっているわけではない 
l シグモイド型関数の場合(ロジスティック関数、tanh関数) 
– 重み⾏行行列列は各ユニットの 1/sqrt(⼊入⼒力力辺数) 以下の乱数にする 
l ⼀一様分布か、ガウシアンからサンプリングすることが多い 
– バイアス項は 0 で初期化 
l Rectified Linear Unit (ReLU) の場合 
– 重み⾏行行列列の初期値に知られた経験則はないが 1/(⼊入⼒力力辺数) 以下 
の乱数が良良い(⼊入⼒力力と出⼒力力の値の範囲が⼤大体⼀一緒になる) 
– バイアス項は 0 以上の定数値で初期化(正の値にすると学習が 
速くなるが、⼤大きすぎると学習が不不安定になる) 
36
最適化パラメータの調節 
l 学習率率率の初期値 
– はじめは⼤大きい値を試す 
– ⼤大きすぎるとパラメータが爆発する(infやNaNなど) 
– 爆発しないぎりぎりを探し、それより少し⼩小さい値を使う 
– 爆発しないぎりぎりの値は結局学習が不不安定になるので避ける 
l 学習率率率の調節 
– 評価データでスコアの値を監視する 
– だいたいスコアが変わらなくなったあたりで学習率率率が下がるよ 
うにスケジューリングする 
– この作業を⾃自動でやってくれるフレームワークもある 
(Pylearn2など) 
37
評価はプロットで 
l 多くのフレームワークは標準出⼒力力などにスコアを吐く 
l が、それを眺めてると⽇日が暮れるので注意!!!(眺めるの楽しい 
ですが) 
l グラフにプロットする 
l 例例:右図で崖になってい 
る部分で学習率率率を下げて 
いる 
38
重みのプロットも使える 
l ユニットが意味のある 
パターンを学習してい 
るかどうか 
l 画像の場合は画像とし 
てプロットするとわか 
りやすい 
l ⼀一般のデータに対して 
も重みを棒グラフなど 
でプロットすると良良い 
39
まとめ 
l ニューラルネット実装は主にテンソルデータ構造、レイヤー、レイ 
ヤーをつなげ合わせたネットワーク、最適化ルーチンからなる 
l レイヤーは勾配計算つきの関数 
l ネットワークは⾃自動微分ができる計算グラフ 
l ニューラルネットはチューニングが必要 
– 設定、実験、評価の繰り返し 
– 設定にはいろんな経験則があるが、タスクによって変わる部分 
もある 
– 評価はプロットで! 重みのプロットも重要 
40

Contenu connexe

Tendances

Tendances (20)

基礎からのベイズ統計学第5章
基礎からのベイズ統計学第5章基礎からのベイズ統計学第5章
基礎からのベイズ統計学第5章
 
Kaggleのテクニック
KaggleのテクニックKaggleのテクニック
Kaggleのテクニック
 
【DL輪読会】GPT-4Technical Report
【DL輪読会】GPT-4Technical Report【DL輪読会】GPT-4Technical Report
【DL輪読会】GPT-4Technical Report
 
[DL輪読会]Set Transformer: A Framework for Attention-based Permutation-Invariant...
[DL輪読会]Set Transformer: A Framework for Attention-based Permutation-Invariant...[DL輪読会]Set Transformer: A Framework for Attention-based Permutation-Invariant...
[DL輪読会]Set Transformer: A Framework for Attention-based Permutation-Invariant...
 
時系列予測にTransformerを使うのは有効か?
時系列予測にTransformerを使うのは有効か?時系列予測にTransformerを使うのは有効か?
時系列予測にTransformerを使うのは有効か?
 
SSII2020SS: 微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
SSII2020SS:  微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​SSII2020SS:  微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
SSII2020SS: 微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
 
backbone としての timm 入門
backbone としての timm 入門backbone としての timm 入門
backbone としての timm 入門
 
PyTorchLightning ベース Hydra+MLFlow+Optuna による機械学習開発環境の構築
PyTorchLightning ベース Hydra+MLFlow+Optuna による機械学習開発環境の構築PyTorchLightning ベース Hydra+MLFlow+Optuna による機械学習開発環境の構築
PyTorchLightning ベース Hydra+MLFlow+Optuna による機械学習開発環境の構築
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features
【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features
【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features
 
畳み込みニューラルネットワークの高精度化と高速化
畳み込みニューラルネットワークの高精度化と高速化畳み込みニューラルネットワークの高精度化と高速化
畳み込みニューラルネットワークの高精度化と高速化
 
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
 
不老におけるOptunaを利用した分散ハイパーパラメータ最適化 - 今村秀明(名古屋大学 Optuna講習会)
不老におけるOptunaを利用した分散ハイパーパラメータ最適化 - 今村秀明(名古屋大学 Optuna講習会)不老におけるOptunaを利用した分散ハイパーパラメータ最適化 - 今村秀明(名古屋大学 Optuna講習会)
不老におけるOptunaを利用した分散ハイパーパラメータ最適化 - 今村秀明(名古屋大学 Optuna講習会)
 
『バックドア基準の入門』@統数研研究集会
『バックドア基準の入門』@統数研研究集会『バックドア基準の入門』@統数研研究集会
『バックドア基準の入門』@統数研研究集会
 
TensorFlow計算グラフ最適化処理
TensorFlow計算グラフ最適化処理TensorFlow計算グラフ最適化処理
TensorFlow計算グラフ最適化処理
 
【DL輪読会】Reward Design with Language Models
【DL輪読会】Reward Design with Language Models【DL輪読会】Reward Design with Language Models
【DL輪読会】Reward Design with Language Models
 
【DL輪読会】Hopfield network 関連研究について
【DL輪読会】Hopfield network 関連研究について【DL輪読会】Hopfield network 関連研究について
【DL輪読会】Hopfield network 関連研究について
 
【DL輪読会】Perceiver io a general architecture for structured inputs & outputs
【DL輪読会】Perceiver io  a general architecture for structured inputs & outputs 【DL輪読会】Perceiver io  a general architecture for structured inputs & outputs
【DL輪読会】Perceiver io a general architecture for structured inputs & outputs
 
AlphaGoのしくみ
AlphaGoのしくみAlphaGoのしくみ
AlphaGoのしくみ
 
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
 

En vedette

強化学習入門
強化学習入門強化学習入門
強化学習入門
Shunta Saito
 
今さら聞けないカーネル法とサポートベクターマシン
今さら聞けないカーネル法とサポートベクターマシン今さら聞けないカーネル法とサポートベクターマシン
今さら聞けないカーネル法とサポートベクターマシン
Shinya Shimizu
 

En vedette (15)

Deep Learning技術の今
Deep Learning技術の今Deep Learning技術の今
Deep Learning技術の今
 
Deep Learningと画像認識   ~歴史・理論・実践~
Deep Learningと画像認識 ~歴史・理論・実践~Deep Learningと画像認識 ~歴史・理論・実践~
Deep Learningと画像認識   ~歴史・理論・実践~
 
Py datameetup1
Py datameetup1Py datameetup1
Py datameetup1
 
DIGITSによるディープラーニング画像分類
DIGITSによるディープラーニング画像分類DIGITSによるディープラーニング画像分類
DIGITSによるディープラーニング画像分類
 
DIGITS による物体検出入門
DIGITS による物体検出入門DIGITS による物体検出入門
DIGITS による物体検出入門
 
Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014
Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014
Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014
 
「深層学習」第6章 畳込みニューラルネット
「深層学習」第6章 畳込みニューラルネット「深層学習」第6章 畳込みニューラルネット
「深層学習」第6章 畳込みニューラルネット
 
勾配降下法の 最適化アルゴリズム
勾配降下法の最適化アルゴリズム勾配降下法の最適化アルゴリズム
勾配降下法の 最適化アルゴリズム
 
強化学習入門
強化学習入門強化学習入門
強化学習入門
 
Icml2015 論文紹介 sparse_subspace_clustering_with_missing_entries
Icml2015 論文紹介 sparse_subspace_clustering_with_missing_entriesIcml2015 論文紹介 sparse_subspace_clustering_with_missing_entries
Icml2015 論文紹介 sparse_subspace_clustering_with_missing_entries
 
機械学習プロフェッショナルシリーズ 深層学習 chapter3 確率的勾配降下法
機械学習プロフェッショナルシリーズ 深層学習 chapter3 確率的勾配降下法機械学習プロフェッショナルシリーズ 深層学習 chapter3 確率的勾配降下法
機械学習プロフェッショナルシリーズ 深層学習 chapter3 確率的勾配降下法
 
RBM、Deep Learningと学習(全脳アーキテクチャ若手の会 第3回DL勉強会発表資料)
RBM、Deep Learningと学習(全脳アーキテクチャ若手の会 第3回DL勉強会発表資料)RBM、Deep Learningと学習(全脳アーキテクチャ若手の会 第3回DL勉強会発表資料)
RBM、Deep Learningと学習(全脳アーキテクチャ若手の会 第3回DL勉強会発表資料)
 
今さら聞けないカーネル法とサポートベクターマシン
今さら聞けないカーネル法とサポートベクターマシン今さら聞けないカーネル法とサポートベクターマシン
今さら聞けないカーネル法とサポートベクターマシン
 
NIPS2015読み会: Ladder Networks
NIPS2015読み会: Ladder NetworksNIPS2015読み会: Ladder Networks
NIPS2015読み会: Ladder Networks
 
機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話
 

Similaire à Deep learning実装の基礎と実践

Similaire à Deep learning実装の基礎と実践 (20)

2012-03-08 MSS研究会
2012-03-08 MSS研究会2012-03-08 MSS研究会
2012-03-08 MSS研究会
 
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
 
第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)
 
Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)
 
Introduction to Chainer and CuPy
Introduction to Chainer and CuPyIntroduction to Chainer and CuPy
Introduction to Chainer and CuPy
 
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の解説
 
Recurrent Neural Networks
Recurrent Neural NetworksRecurrent Neural Networks
Recurrent Neural Networks
 
CUDA1日(?)体験会
CUDA1日(?)体験会CUDA1日(?)体験会
CUDA1日(?)体験会
 
Overview and Roadmap
Overview and RoadmapOverview and Roadmap
Overview and Roadmap
 
CUDA1日(?)体験会 (再アップロード)
CUDA1日(?)体験会 (再アップロード)CUDA1日(?)体験会 (再アップロード)
CUDA1日(?)体験会 (再アップロード)
 
More modern gpu
More modern gpuMore modern gpu
More modern gpu
 
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learninglispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
 
Hpc148
Hpc148Hpc148
Hpc148
 
汎用グラフ処理モデルGIM-Vの複数GPUによる大規模計算とデータ転送の最適化
汎用グラフ処理モデルGIM-Vの複数GPUによる大規模計算とデータ転送の最適化汎用グラフ処理モデルGIM-Vの複数GPUによる大規模計算とデータ転送の最適化
汎用グラフ処理モデルGIM-Vの複数GPUによる大規模計算とデータ転送の最適化
 
StreamGraph
StreamGraphStreamGraph
StreamGraph
 
Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages.
Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages. Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages.
Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages.
 
Paper Introduction "RankCompete: Simultaneous ranking and clustering of info...
Paper Introduction "RankCompete:Simultaneous ranking and clustering of info...Paper Introduction "RankCompete:Simultaneous ranking and clustering of info...
Paper Introduction "RankCompete: Simultaneous ranking and clustering of info...
 
[DL輪読会]GQNと関連研究,世界モデルとの関係について
[DL輪読会]GQNと関連研究,世界モデルとの関係について[DL輪読会]GQNと関連研究,世界モデルとの関係について
[DL輪読会]GQNと関連研究,世界モデルとの関係について
 
検索評価ツールキットNTCIREVALを用いた様々な情報アクセス技術の評価方法
検索評価ツールキットNTCIREVALを用いた様々な情報アクセス技術の評価方法検索評価ツールキットNTCIREVALを用いた様々な情報アクセス技術の評価方法
検索評価ツールキットNTCIREVALを用いた様々な情報アクセス技術の評価方法
 
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介
 

Plus de Seiya Tokui

Plus de Seiya Tokui (20)

Chainer/CuPy v5 and Future (Japanese)
Chainer/CuPy v5 and Future (Japanese)Chainer/CuPy v5 and Future (Japanese)
Chainer/CuPy v5 and Future (Japanese)
 
Chainer v3
Chainer v3Chainer v3
Chainer v3
 
Chainer v2 and future dev plan
Chainer v2 and future dev planChainer v2 and future dev plan
Chainer v2 and future dev plan
 
Chainer v2 alpha
Chainer v2 alphaChainer v2 alpha
Chainer v2 alpha
 
Learning stochastic neural networks with Chainer
Learning stochastic neural networks with ChainerLearning stochastic neural networks with Chainer
Learning stochastic neural networks with Chainer
 
深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開
 
論文紹介 Pixel Recurrent Neural Networks
論文紹介 Pixel Recurrent Neural Networks論文紹介 Pixel Recurrent Neural Networks
論文紹介 Pixel Recurrent Neural Networks
 
Introduction to Chainer
Introduction to ChainerIntroduction to Chainer
Introduction to Chainer
 
Chainer Update v1.8.0 -> v1.10.0+
Chainer Update v1.8.0 -> v1.10.0+Chainer Update v1.8.0 -> v1.10.0+
Chainer Update v1.8.0 -> v1.10.0+
 
Differences of Deep Learning Frameworks
Differences of Deep Learning FrameworksDifferences of Deep Learning Frameworks
Differences of Deep Learning Frameworks
 
Overview of Chainer and Its Features
Overview of Chainer and Its FeaturesOverview of Chainer and Its Features
Overview of Chainer and Its Features
 
生成モデルの Deep Learning
生成モデルの Deep Learning生成モデルの Deep Learning
生成モデルの Deep Learning
 
Chainer Development Plan 2015/12
Chainer Development Plan 2015/12Chainer Development Plan 2015/12
Chainer Development Plan 2015/12
 
Towards Chainer v1.5
Towards Chainer v1.5Towards Chainer v1.5
Towards Chainer v1.5
 
Deep Learningの基礎と応用
Deep Learningの基礎と応用Deep Learningの基礎と応用
Deep Learningの基礎と応用
 
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
 
論文紹介 Compressing Neural Networks with the Hashing Trick
論文紹介 Compressing Neural Networks with the Hashing Trick論文紹介 Compressing Neural Networks with the Hashing Trick
論文紹介 Compressing Neural Networks with the Hashing Trick
 
深層学習フレームワークChainerの紹介とFPGAへの期待
深層学習フレームワークChainerの紹介とFPGAへの期待深層学習フレームワークChainerの紹介とFPGAへの期待
深層学習フレームワークChainerの紹介とFPGAへの期待
 
Introduction to Chainer: A Flexible Framework for Deep Learning
Introduction to Chainer: A Flexible Framework for Deep LearningIntroduction to Chainer: A Flexible Framework for Deep Learning
Introduction to Chainer: A Flexible Framework for Deep Learning
 
論文紹介 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
 

Deep learning実装の基礎と実践

  • 1. ⽇日本神経回路路学会セミナー Deep Learningが拓拓く世界 Deep Learning 実装の基礎と実践 2014/08/26 京都⼤大学東京オフィス 株式会社Preferred Networks 得居 誠也
  • 2. ⾃自⼰己紹介 l 得居 誠也 (Seiya Tokui) l Preferred Networks リサーチャー l Jubatus のアルゴリズム開発 – Jubatus: NTTとPFIで共同開発しているオープンソースの分散 リアルタイム機械学習基盤 http://jubat.us/ l 現在は映像解析とディープラーニングの研究開発に従事 2
  • 3. ニューラルネットの基礎、実装、実験について話し ます l ニューラルネットの道具 – 全体の構成、⾏行行列列による表現、損失関数、誤差逆伝播、SGD l 主要な実装 – Pylearn2, Torch7, Caffe, Cuda-‐‑‒convnet2 l フレームワークの基本的な設計 – テンソルデータ、レイヤー、ネット、最適化ルーチン – アーキテクチャの記述⽅方法(宣⾔言的、スクリプティング) l 実験の進め⽅方 – データの前処理理、アーキテクチャの設計、パラメータの初期値、 正則化、学習率率率の初期値と調節、モーメンタム – 評価の⽅方法、プロット、パラメータの可視化 – 中断・レジューム、パラメータの差し替え 3
  • 5. Deep Learningいろいろ Neural Network: 右図のような 計算グラフで表される⾮非線形関数 Convolutional NN: 画像や⾳音声 などの構造を反映したNNの⼀一種 Deep Belief Network(左), Deep Boltzmann Machine(右): 多層のグラフィカルモデル(確率率率モデル) ※今⽇日は触れません “Deep” の定義は⽂文脈により様々。普通は3層以上で深いと⾔言われる 5
  • 6. Feed-‐‑‒Forward Neural Network (結合)重み x ⼊入⼒力力層隠れ層隠れ層出⼒力力層1 wj1 x2 wj2 x3 wj3 x4 wj4 ユニット 活性 hj = f(wj1x1 + · · · + wj4x4 + bj) 活性化関数 バイアス項 = f(wj x + bj) 重みとバイアス項を調節 して、望みの予測を得ら れるようにするのが学習 の⽬目標
  • 7. Feed-‐‑‒Forward Neural Network(⾏行行列列で書く) 各層をベクトルで表して以下のように書くことが多い h = f(Wx+ b) 下図のように3層の場合だと y = f3(W3f2(W2f1(W1x + b1) + b2) + b3) W1 W2 W3 x h1 h2 y
  • 8. 最適化としての学習 l モデルの出⼒力力(予測)と正解とがよく⼀一致するほど⼩小さくなるよう な値(損失 loss)を考える l 各教師データごとの損失の平均を⽬目的関数とするのが⼀一般的 L(W) = 1 N XN i=1 `(y(xi;W), yi) l 学習=⽬目的関数の最⼩小化 ` y(x;W) (xi, yi)i=1,...,N W l 損失関数:エントロピー誤差(分類)や⼆二乗誤差(回帰) 8 損失関数 モデルの予測 各教師データ 予測器の重み minimize (パラメータ) W L(W) `(y, yi) = ky − y1k2 (⼆二乗誤差)
  • 9. 最適化⼿手法:勾配降降下法 ⽬目的関数の勾配 gradient の⽅方向に向かって重みを動かしていく (次式の更更新を繰り返す) W W − ⌘rL(W) 学習率率率勾配ベクトル 9 L の等⾼高線 極⼩小点
  • 10. 確率率率的勾配降降下法 Stochastic Gradient Descent (SGD) l 教師データ全部を⾒見見ず、⼀一部(ミニバッチ)だけを⾒見見て勾配を計算 する( :ミニバッチ) l 最初にデータセットをランダムシャッフルして、前から 個ず つミニバッチとして取り出して更更新するのが⼀一般的 – データの順序に偏りがある場合、シャッフルしないと性能が⼤大 きく落落ちる – 理理論論的には毎回ランダムにミニバッチを選ぶのが収束の速さと いう意味で良良いが、ランダムアクセスが増えるので実際には遅 くなることが多い 10 B |B| W W − ⌘ |B| X i2B r`(y(xi;W), yi)
  • 11. モーメンタム法 l SGD は勾配のブレが⼤大きいとなかなか収束しない l ブレを低減するために、勾配の移動平均(モーメンタム)を使う 11 h h + μ 1 |B| Xn i2B r`(y(xi;W), yi), モーメンタムモーメンタム係数 W W − ⌘h. W(t) r` W(t1) W(t+1) 上付きの添字は 更更新回数を表すとする W(t+2)
  • 12. 勾配の計算⽅方法 誤差逆伝播法 (backpropagation) l Feed Forward Neural Network はたくさんの関数の合成 l 勾配を求めるには合成関数の微分(連鎖律律 chain rule)を使う l すると勾配の計算は、出⼒力力側から⼊入⼒力力側に向かって各ユニットの勾 配を伝播させるような処理理としてかける 誤差関数 (error) ⼊入⼒力力層隠れ層隠れ層出⼒力力層正解 12 (groundtruth) 重みの勾配重みの勾配重みの勾配
  • 13. 主要な実装 名前主要な開発者⾔言語特徴 Pylearn2Univ. Montrealの LISA Lab Python (C++)NumPyとの親和性、 強⼒力力な⾃自動微分 Torch7NewYork Univ.など?Lua/C++Luaによるスクリプ ティング、拡張性の ⾼高さ CaffeBerkeley Vision and Learning Center (UCB) C++ (Python)単⼀一GPUで最⾼高速度度 (2014/08現在) Cuda-convnet2Alex KrizhevskyC++ (Python)マルチGPU環境での 並列列実⾏行行(Tesla K20x8) 13
  • 15. 主要なフレームワークはいずれも似たような構成要素からなる l テンソルデータ構造 l レイヤー(ビルディングブロックとして) l ネット l 最適化ルーチン フレームワークによってこれらの設計指針や抽象化の粒粒度度、インター フェイスが異異なる
  • 16. 典型的なDeep Learningフレームワークの概略略 16 最適化ルーチン 出⼒力力データ レイヤー 中間データ レイヤー ⼊入⼒力力データ 正解データ バイアス 重み 中間エラー バイアス 重み ネットワーク実装
  • 17. テンソルデータ構造 17 最適化ルーチン 出⼒力力データ レイヤー 中間データ レイヤー 正解データ バイアス 中間エラー ネットワーク実装 ⼊入⼒力力データ 重み バイアス 重み
  • 18. テンソルデータ構造 18 ⼊入⼒力力・中間・出⼒力力データ ミニバッチ データの次元 ⾼高さ 横幅 ミニバッチ 重みテンソル ⼊入⼒力力次元 出⼒力力次元 ⾼高さ 横幅 フィルター数
  • 19. テンソルデータ構造 l 浮動⼩小数点の配列列に、次元の情報が加わったもの l データの構造を使わない、全連結なニューラルネットワークを作る 場合、⾏行行列列とベクトルだけで実装できる l 画像に対する畳込みニューラルネットを作る場合、4階のテンソル が必要 l 動画に対して時間軸も区別する⼿手法を作る場合、5階のテンソルが 必要 l 実装例例:NumPy の ndarray – Pylearn2 は ndarray を使う – Caffe のデータ構造もゼロコピーで ndarray との相互変換がで きる 19
  • 20. レイヤー 20 最適化ルーチン 出⼒力力データ 中間データ ⼊入⼒力力データ 正解データ バイアス 重み 中間エラー バイアス 重み ネットワーク実装 レイヤーレイヤー
  • 21. レイヤー l データを受け取って変換したデータを出⼒力力する l 関数または⼿手続きと思えば良良い l ⼀一部のレイヤーはパラメータを持つ – ニューラルネットのうち学習可能な部分 l ただの関数との違いはbackpropagationが必要なこと 21
  • 22. レイヤーのbackpropagationは 連鎖律律による微分計算 l z = g(y), y = f(x,w) のとき、 の に関 する勾配は 22 L(z) w x f y g z @L @z @L @y w @L @w = @L @z @z @w , @z @w = @z @y @y @w g の逆伝播はこの値の計算
  • 23. レイヤーのbackpropagationは 連鎖律律による微分計算 l 実際の計算の流流れ: これが の backprop(出⼒力力のエラーから⼊入⼒力力のエラーを計算) l 実際には⼊入出⼒力力は多変数なので、多変数の微分が必要 23 @L @y = @L @z @z @y g x f y g z @L @z @L @y w
  • 24. ネットワーク実装 24 最適化ルーチン 出⼒力力データ レイヤー 中間データ レイヤー ⼊入⼒力力データ 正解データ バイアス 重み 中間エラー バイアス 重み ネットワーク実装
  • 25. ネットワークは順伝播と逆伝播を実装する l ネットワークの仕事は、ニューラルネット全体=計算グラフを保持 して、その上で順伝播や逆伝播を実⾏行行すること l ネットワーク上の誤差逆伝播は⾃自動微分 – 指定された⼊入⼒力力変数・出⼒力力変数に対して、どういう順番で backpropを呼び出せば⽬目的の勾配を計算することができるのか を⾃自動で判断する – ネットワークが⼀一本のチェーン状の場合は簡単 – ネットワークが複数の⼊入⼒力力、合流流、分岐、複数の出⼒力力を持つ場 合には少しややこしくなる l 正しくDAGになっていれば計算可能 25
  • 26. 最適化ルーチン 26 最適化ルーチン 出⼒力力データ レイヤー 中間データ レイヤー ⼊入⼒力力データ 正解データ バイアス 重み 中間エラー バイアス 重み ネットワーク実装
  • 27. 最適化ルーチンは重み・バイアスの配列列に対して勾 配を⽤用いてオンライン最適化を実⾏行行する l ここは⽐比較的単純な実装になることが多く、現在のパラメータと勾 配を受け取って更更新するルーチンとして書かれる場合が多い l ほぼすべてのフレームワークではモーメンタムSGDをサポートして いる – State of the art なニューラルネット学習で⽤用いられる – 学習率率率のチューニングが精度度に重要 – Pylearn2 などは、現在のパラメータの性能を監視して⾃自動的に 学習率率率を下げる機能などもサポートしている l 学習率率率を⾃自動調節する⼿手法を実装していることも(AdaGrad, AdaDelta, RMSpropなど) 27
  • 28. アーキテクチャの記述⽅方法 l アーキテクチャ:ネットワークの構成 – ⼊入⼒力力データの情報(パスや前処理理⽅方法)も⼀一緒に記述することが多い – 最適化ルーチンの設定を⼀一緒に記述するフレームワークもある l 試⾏行行錯誤を簡単にするために、宣⾔言的に書けるような仕組みを持っ ていることが多い l Pylearn2: PyYAML l Caffe: Protocol Buffer(テキスト形式) l Cuda-‐‑‒convnet: iniファイル 28
  • 29. 例例:Pylearn2 l 多層パーセプトロンの チュートリアルから アーキテクチャ部分の みを抜粋 l Layersにレイヤー定義 を並べていく l 指定の仕⽅方は model に よって異異なる l スクリプトで構築する こともできる(複雑な グラフを作りたい場合 など) 29
  • 30. 例例:Caffe l Caffe の MNIST サンプルのアーキテク チャ設定から⼀一部を抜粋 l Protocol Buffer の layers メッセージと してレイヤーの設定を並べる l bottom, top が⼊入⼒力力、出⼒力力レイヤーに対 応していて、複雑なグラフも書ける 30
  • 32. 実験の流流れ l 計算機環境の準備 l データの前処理理(重要!!!) l チューニング:以下の繰り返し – アーキテクチャの設計 – パラメータ初期値の設定 – 学習率率率の初期値を探す – 評価しながら学習率率率調節
  • 33. 計算機環境の準備 l ⼩小さなデータセット(10万件)なら CPU のみでOK l ⼤大きなデータセットでは GPGPU が必須 – ⼀一回の実験が数⼗十分〜~数時間になってくると欲しくなる l 多くのフレームワークは CUDA 対応なので NVIDIA GPU が良良い l 価格と性能のトレードオフ – 性能は CUDA コア数、メモリサイズ、クロック数で⾒見見る – メモリサイズは巨⼤大な NN を⼤大きなミニバッチで学習する際に 必要 – トレードオフの意味で最もリーズナブルなのは NVIDIA GeForce GTX770(2014年年8⽉月現在、4万円弱) l 電源と冷冷却にも気をつける 33
  • 34. データの前処理理(重要!!!) l よく⾏行行われるのは⽩白⾊色化 whitening – データの平均が 0 ベクトルになるように平⾏行行移動させる – データの各次元の分散が 1 になるようにスケールさせる l 主成分分析に基づく⽩白⾊色化もよく⾏行行われる – 主成分に変換する:主成分軸⽅方向の分散を 1 に揃える効果 – 画像などデータの⾒見見た⽬目が解釈しやすい、あるいはデータの構 造を学習に活⽤用したい場合、変換後に主成分表⽰示からもとの RGB空間に戻すことがある(ZCA whitening) l 画像では他にもコントラスト正規化を⾏行行うことがある l 前処理理は最適化の収束速度度に強く影響する 34
  • 35. アーキテクチャの設計 l まずは各フレームワークの examples を⾒見見ていろいろ学ぶ l はじめは狭くて浅いネットワークから始める l チューニングしながら、精度度が上がらなくなったら広くする(各層 のユニット数を増やす) l 精度度が上がらなかったり過学習の兆候が⾒見見えたら、少し狭くして ネットワークを深くする – 過学習:訓練データでは精度度が上がるが評価データでは精度度が 落落ちる l どの活性化関数を使うかや、ドメイン依存のレイヤー(画像に対す る正規化レイヤーなど)は最適な組合せがタスクによって違うので、 いろいろ変えて⽐比較して選ぶ 35
  • 36. パラメータの初期値 l 活性化関数によって設定の仕⽅方が変わる l 最善の⽅方法がわかっているわけではない l シグモイド型関数の場合(ロジスティック関数、tanh関数) – 重み⾏行行列列は各ユニットの 1/sqrt(⼊入⼒力力辺数) 以下の乱数にする l ⼀一様分布か、ガウシアンからサンプリングすることが多い – バイアス項は 0 で初期化 l Rectified Linear Unit (ReLU) の場合 – 重み⾏行行列列の初期値に知られた経験則はないが 1/(⼊入⼒力力辺数) 以下 の乱数が良良い(⼊入⼒力力と出⼒力力の値の範囲が⼤大体⼀一緒になる) – バイアス項は 0 以上の定数値で初期化(正の値にすると学習が 速くなるが、⼤大きすぎると学習が不不安定になる) 36
  • 37. 最適化パラメータの調節 l 学習率率率の初期値 – はじめは⼤大きい値を試す – ⼤大きすぎるとパラメータが爆発する(infやNaNなど) – 爆発しないぎりぎりを探し、それより少し⼩小さい値を使う – 爆発しないぎりぎりの値は結局学習が不不安定になるので避ける l 学習率率率の調節 – 評価データでスコアの値を監視する – だいたいスコアが変わらなくなったあたりで学習率率率が下がるよ うにスケジューリングする – この作業を⾃自動でやってくれるフレームワークもある (Pylearn2など) 37
  • 38. 評価はプロットで l 多くのフレームワークは標準出⼒力力などにスコアを吐く l が、それを眺めてると⽇日が暮れるので注意!!!(眺めるの楽しい ですが) l グラフにプロットする l 例例:右図で崖になってい る部分で学習率率率を下げて いる 38
  • 39. 重みのプロットも使える l ユニットが意味のある パターンを学習してい るかどうか l 画像の場合は画像とし てプロットするとわか りやすい l ⼀一般のデータに対して も重みを棒グラフなど でプロットすると良良い 39
  • 40. まとめ l ニューラルネット実装は主にテンソルデータ構造、レイヤー、レイ ヤーをつなげ合わせたネットワーク、最適化ルーチンからなる l レイヤーは勾配計算つきの関数 l ネットワークは⾃自動微分ができる計算グラフ l ニューラルネットはチューニングが必要 – 設定、実験、評価の繰り返し – 設定にはいろんな経験則があるが、タスクによって変わる部分 もある – 評価はプロットで! 重みのプロットも重要 40