renom user group #1 part2
TRANSCRIPT
INFRASTRUCTURE + LIFE + INNOVATION
RNUG Kick Off Part 2- ReNom 2.0 -
Copyright (C) 2017 GRID All Rights Reserved.
Copyright (C) 2017 GRID All Rights Reserved.
Agenda
p ReNomとは?p設計思想pVersion 1.0 ⇒ version 2.0pプログラムインタフェースp具体例 全結合ネットワーク, GANpまとめp今後の展開、提供方法
ReNomとは?
Copyright (C) 2017 GRID All Rights Reserved.
(2017/7/20) 現在 Version 1.2まで開発が進みユーザー様にご利用いただいている
ReNomとは?
Copyright (C) 2017 GRID All Rights Reserved.
大切にしていること:NN構築しやすさ、変更しやすさ
開発理由:DLの技術向上のため、他製品のバックエンド、使いやすさの向上
設計思想
Copyright (C) 2017 GRID All Rights Reserved.
● NN構築、変更しやすさ ...
p 上からレイヤを並べてくことでNNを構築
p コメントアウトでレイヤを差し替えられる
p 正則化などの関数もレイヤ化
p ベイズサーチによるハイパーパラメータ探索
p Train関数
Version 1.0 ⇒ Version 2.0
Copyright (C) 2017 GRID All Rights Reserved.
Version 1.0 から Version 2.0へメジャーアップデートに伴いReNomをgithub上へ公開
自動微分
Copyright (C) 2017 GRID All Rights Reserved.
𝑎
𝑥
×
𝑏
+ 𝑓(𝑥)ℎ
𝑑ℎ𝑑ℎ
𝑑𝑓𝑑𝑓
𝑑𝑓𝑑𝑏
𝑑𝑓𝑑ℎ
𝑑ℎ𝑑𝑥
𝑑ℎ𝑑𝑎
𝒅𝒇𝒅𝒂
𝒅𝒇𝒅𝒙
トップダウン型自動微分を実装…関数 f(x)の導関数 12
13を自動的に生成するアルゴリズム
𝑓 𝑥 = 𝑎𝑥 + 𝑏
計算グラフを順に生成(順伝播)
𝑑𝑓𝑑𝑥 = 𝑎
計算グラフを逆にたどる(逆伝播)
自動微分
Copyright (C) 2017 GRID All Rights Reserved.
●勾配を求めたい行列をVariableオブジェクトとして定義する
プログラムインタフェース
Copyright (C) 2017 GRID All Rights Reserved.
pNumpyのndarrayと同じインターフェース
pSequentialモデルとFunctionalモデル
p勾配の初期化(zerograd, cleargrad)が必要ない
プログラムインタフェース
Copyright (C) 2017 GRID All Rights Reserved.
p Numpyのndarrayと同じインターフェース
● Numpyで書いたコード
𝑓 𝒙 =5𝑎6 ∗ 𝑥6 + 𝑏6
�
�𝒂 =
𝑎:𝑎;
, 𝒃 = 𝑏:𝑏;
, 𝒙 = 𝑥:𝑥;
ReNomのVariableは Numpyの ndarrayクラスを継承している。インターフェースがNumpyと同じ。Numpyの関数にVariableオブジェクトを入れられる。
プログラムインタフェース
Copyright (C) 2017 GRID All Rights Reserved.
p Numpyのndarrayと同じインターフェース
● ReNomで書いたコード
①勾配を計算したい変数を
Variableでラップ
② ReNomのsum演算に置き換える
プログラムインタフェース
Copyright (C) 2017 GRID All Rights Reserved.
● xに関する勾配を取得
𝑓 𝒙 =5𝑎6 ∗ 𝑥6 + 𝑏6
�
�
𝑑𝑓𝑑𝒙 = 𝒂
p Numpyのndarrayと同じインターフェース
Variableオブジェクトの勾配をすべて取得
Xに関する勾配を取得
プログラムインタフェース
Copyright (C) 2017 GRID All Rights Reserved.
p Numpyのndarrayと同じインターフェース
プログラムインタフェース
Copyright (C) 2017 GRID All Rights Reserved.
p SequentialモデルとFunctionalモデル
n ReNom Version1と同様、Sequentialモデルを提供
n 様々なフレームワークで提供されているFunctionalモデルを追加
プログラムインタフェース
● Sequentialモデル …レイヤオブジェクトを並べてニューラルネットを構築
Relu
入力層
中間層
出力層
p SequentialモデルとFunctionalモデル
Copyright (C) 2017 GRID All Rights Reserved.
プログラムインタフェース
● Functionalモデル …関数の組み合わせで自由に演算を定義可能
Relu
入力層
中間層
出力層
p SequentialモデルとFunctionalモデル
Copyright (C) 2017 GRID All Rights Reserved.
プログラムインタフェース
VariableVariable
Variable
p勾配の初期化が必要ない多くのフレームワークでは、逆伝播で計算された勾配情報を行列クラス
(Variableなど)が属性として持っている。
𝑎
𝑥
×
𝑏
+ 𝑓(𝑥)ℎ
𝑑𝑓𝑑𝑓
𝑑𝑓𝑑ℎ
𝒅𝒇𝒅𝒙
順伝播
逆伝播
Copyright (C) 2017 GRID All Rights Reserved.
プログラムインタフェース
VariableVariable
Variable
● ReNomでは、計算された全ての勾配をGradsオブジェクトとして計算グラフの外に持つ
𝑎
𝑥
×
𝑏
+ 𝑓(𝑥)ℎ
Grads𝒅𝒇𝒅𝒙
𝑑𝑓𝑑ℎ
𝑑𝑓𝑑𝑓
リファレンス
順伝播
逆伝播
p 勾配の初期化が必要ない
Copyright (C) 2017 GRID All Rights Reserved.
プログラムインタフェース
ReNom方式
利点・勾配計算後、初期化が必要ない
・モデルを複数定義せずに複数の勾配データを管理できる
p 勾配の初期化が必要ない
誤差逆伝播を実行し、各Variableの勾配を持つGradsオブジェクトを生成
Gradsオブジェクトからxに関する勾配を取得
Copyright (C) 2017 GRID All Rights Reserved.
具体例 1 全結合ネットワークモデル
全結合ニューラルネットワークの例を通してReNomの使用方法を説明します。
二層ニューラルネットワーク活性化関数:Relu
Relu
1. ナイーブな実装2. L2ノルム正則化の追加3. Sequentialモデルを使用した実装4. 勾配降下アルゴリズムの適用
Copyright (C) 2017 GRID All Rights Reserved.
具体例 1 全結合ネットワークモデル
Copyright (C) 2017 GRID All Rights Reserved.
●ナイーブな実装 -順伝播
重みパラメータの初期化
順伝播計算
具体例 1 全結合ネットワークモデル
Copyright (C) 2017 GRID All Rights Reserved.
● L2正則化を追加
・L2ノルム正則化(weight decay)を付加・Numpyで書くように重み正則化を追加することで、正則化を実装可能・L1ノルム正則化やその他正則化も同様に、数式をそのままNumpyで書くように実装することができる。
具体例 1 全結合ネットワークモデル
Copyright (C) 2017 GRID All Rights Reserved.
●勾配降下アルゴリズムの適用
順伝播
L2ノルム正則化
誤差関数
Gradsオブジェクト
誤差逆伝播
具体例 1 全結合ネットワークモデル
Copyright (C) 2017 GRID All Rights Reserved.
●勾配降下アルゴリズムの適用
n Gradsオブジェクトは勾配データとVariableオブジェクトへの参照を保持
n そのためupdate関数はGradクラスに実装した
具体例 1 全結合ネットワークモデル
Copyright (C) 2017 GRID All Rights Reserved.
●勾配降下アルゴリズムの適用
n Sgd、Adamなどの勾配降下アルゴリズムはupdate関数の引数として与える。
具体例 2 GANモデル
Copyright (C) 2017 GRID All Rights Reserved.
● GAN(Generative adversarial Network)を例にした複雑なニューラルネットワークの構築方法
Relu
Relu
Discriminator
Generator
Proper Distribution
Latent Distribution
1. GANモデル構築の簡単な説明2. 複数のモデル定義から新たなモデル作成3. ネットワークの一部分を更新する
具体例 2 GANモデル
Copyright (C) 2017 GRID All Rights Reserved.
● GeneratorとDiscriminator
Discriminator
Generator
Proper Distribution
Latent Distribution
Relu
Relu
二つのネットワークをSequentialモデルで構築
具体例 2 GANモデル
Copyright (C) 2017 GRID All Rights Reserved.
● GeneratorとDiscriminatorを統括するGANクラスを定義
Discriminator
Generator
Proper Distribution
Latent Distribution
Relu
Relu
定義済みモデルGenerator, Discriminator
具体例 2 GANモデル
Copyright (C) 2017 GRID All Rights Reserved.
二つのネットワークを別々に更新する。
Relu
Relu
Discriminator
Generator
Proper Distribution
Latent Distribution
・Discriminatorのみを更新したい場合、generatorのwith prevent_updateブロックの中で重みを更新する。
このwithブロックの中では、Generatorの重みパラメータは
更新されない。
具体例 2 GANモデル
Copyright (C) 2017 GRID All Rights Reserved.
Relu
Relu
Discriminator
Generator
Proper Distribution
Latent Distribution
このwithブロックの中では、Discriminatorの重みパラメータは
更新されない。同様にGeneratorの重みだけをのみを更新
まとめ
Copyright (C) 2017 GRID All Rights Reserved.
nReNomを公開します
nReNomは Defined by Run
nReNomのVariableは Numpy ndarrayと同じインタフェース
nReNomは他DLフレームワークと、勾配の扱い方の点で異なる
今後の展開
Copyright (C) 2017 GRID All Rights Reserved.
● 8月1日(火) Version 2.0 ドキュメント公開● 8月8日(火) ReNom 2.0 公開
機能拡張、チューニング…徐々に更新していきます(Convolution3D, Temporal Dropout…)
提供方法●公開場所 : Github
https://github.com/ReNom-dev-team/ReNom