renom user group #1 part2

Post on 23-Jan-2018

234 Views

Category:

Data & Analytics

1 Downloads

Preview:

Click to see full reader

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

top related