AIセミナー（Deep Learning入門）

AIのもたらす産業の変革とソニーの取り組み事例

ソニーネットワークコミュニケーションズ株式会社 / ソニー株式会社
シニアマシンラーニングリサーチャー
小林 由幸

自己紹介
こばやし よしゆき

小林 由幸
1999年にソニーに入社、2003年より機械学
習技術の研究開発を始め、音楽解析技術「12音解析」のコアアルゴリズム、認識技術の自動生成技術「ELFE」などを開発。近年は「Neural Network Console」を中心に
ディープラーニング関連の技術・ソフトウェ
ア開発を進める一方、機械学習普及促進や新しいアプリケーションの発掘にも注力。

2

目次• Deep Learning概要• Deep Learning基礎：Neural Networkの構成と学習• ソニーのDeep Learningへの取り組みと活用事例• ソニーのDeep Learningソフトウェア
Neural Network Console / Neural Network Libraries• Neural Network Consoleチュートリアル
• まとめ

3

Deep Learning概要

4圧倒的な認識性能を示すDeep Learning
画像認識における精度向上

Top-5 Error Rate [%]

28.2

25.8

従来型
機械学習

10

26.1
11.7
16.4

Deep Learning

年率50%に迫る
誤差の改善

6.7

人の認識誤差

3.57

？

2.25
2.99

1
2010

2011

2012

2013

2014

2015
Year

2016

2017

2018

2019

従来の性能限界を打ち破り、数々の課題で人を超える性能を達成しつつある
5

2020

圧倒的な認識性能を示すDeep Learning
音声認識• 2011年• 2016年10月
囲碁• 2015年10月• 2016年3月• 2017年5月

音声認識にDeep Learningを適用し、音声認識誤差を30%前後改善
スマートフォン等で音声認識が一般化する契機にMicrosoftは音声認識技術において人間並みの性能を実現したと発表
https://arxiv.org/pdf/1610.05256v1.pdf
Google傘下のDeep Mindが開発したDeep Learningによる囲碁プログラム
Alpha Goがプロ棋士に勝利
世界最強棋士の一人である李セドル九段に勝利
世界棋士レート一位の柯潔に三局全勝
https://ja.wikipedia.org/wiki/AlphaGo

従来の性能限界を打ち破り、数々の課題で人を超える性能を達成しつつある
6

人の認識性能を超えたことで、機械学習の実用化が急加速
認識
性能

実用化

相転移
Deep Learningを用いるほうが人が作業するよりも高品質、さらに速くて安い。
人の認識性能
機械学習を使えば自動化できるが、人の品質にはかなわない。
適用できるシーンは限定的。

2012
7

2015

2018

AI市場予想
市場規模

普及拡大
×
応用対象の拡大

2017年

2020年

GDPの
10%～20%へ

2025年

急速な成長が予想されるAI市場
8

2030年

Deep Learningとは脳の学習機能をコンピュータでシミュレーションするニューラルネットワークを用いた技術

神経細胞

ニューラルネットワーク

Deep Learning（1960～1990頃）(2006～)
中間層

入力層
出力層

入力層

出力層

0
…

人工ニューロン

…

…

…

…
…

9

…

𝑦𝑦 = 𝑓𝑓 � 𝑤𝑤𝑖𝑖x𝑖𝑖 + b

…

…

x3

y

…

x2

…

x1

1

1～2層の中間層

3層～1000以上の中間層
数十Ｍ規模のニューロン数

大規模なニューラルネットワークの学習が可能になり、大幅に性能向上

Deep Learningを用い、認識機を作成するために必要な作業
1. データセットを用意する
入力と、期待する出力のペアを多数用意（教材の準備に相当）
…
…
…
…
…
…
…
…
…
…

「0」
「1」
「2」
「3」
「4」
「5」
「6」
「7」
「8」
「9」

「2」

…

…

…
…
…

3. 用意したデータセットで、設計したニューラルネットワークを学習する

Output：画像認識結果…

…

2. ニューラルネットワークの構造を設計する（脳の構造設計に相当）

画像認識機（Neural Network）

Input：画像

従来の機械学習手法と比較して、高い性能を実現できると同時に扱いやすい技術でもある
10

Deep Learningにより大きく変わる機能開発の概念
従来機能をモジュールに分解して開発

Deep Learning時代
End-to-end学習

手書き数字認識

前処理

画像特徴抽出画像勾配計算判別分析

ヒストグラム• 必要な機能をモジュールに分解（設計）• プログラムにより各モジュールを実装• 入力から出力を得る機能をデータからの学習で直接獲得実現できる機能の複雑さ∝プログラム量実現できる機能の複雑さ∝データ量

高機能、高性能を実現するために求められるものは、設計ノウハウからデータに
11

入出力次第で無限に広がるDeep Learningの応用実現する機能入力

出力…

実現する機能

入力

出力

画像認識

画像

カテゴリ

文章の自動仕分け

文章

文章カテゴリ

音声認識

音声

文字列

機械翻訳

英単語列

日単語列

人工無能（チャット）

入力発話の単語列

期待応答の単語列

センサ異常検知

センサ信号

異常度

ロボット制御ロボットのセンサ

ロボットのアクチュエーター

…

Deep Learning応用開発人材の育成と、活用の促進が求められる
12

事例：Visual Question Answering
画像と、画像に対する質問の2つの入力を元に、質問に対する答えを推定する問題
入力1
画像

ニューラルネットワーク

…

入力2
質問文

What is theweather like?

出力
質問に対する答え

Cloudy

論文：「Multimodal Compact Bilinear Pooling for Visual
Question Answering and Visual Grounding」
Akira Fukui, Dong Huk Park, Daylen Yang, Anna Rohrbach,
Trevor Darrell, Marcus Rohrbach
https://arxiv.org/abs/1606.01847

DEMO

入力と出力のペアからなる教示のみを元にニューラルネットワークを学習することで、（ルールも知識表現もなく）相当複雑な機能を獲得できる13

Deep Learningのもたらす革命• 人の認識性能を超える知的技術の実現により、AIは一気に普及フェーズへ• 知的処理の開発は、一般の技術者でも十分可能に• 知的処理の性能を決定づけるのは、ノウハウからデータへ• 「何を実現するか」を見出す力の重要性が増す• 技術開発のために求められるスキルセットが変化• 企業によっては技術戦略の見直しが必要に

14

Deep Learning基礎：Neural Networkの構成と学習

15

Feed Forward Neural Networkの構成例
Convolutional Neural Network

Maxpooling(sub sampling)+ tanhMaxPooling+ tanh 2↓

Affine+tanhAffine+softmax

2↓

出力

120

12×12×6

入力

maxpoolingconvolution

1 x 28 x 28

Convolution
6種の5x5フィルタを
畳み込み

28×28

6 x 24 x 24

16 x 12 x 12

tanh

convolution

16 x 12 x 12

4×4×16

Convolution
16種の6x5x5フィルタを畳み込み

24×24×6

maxpooling

16 x 8 x 816 x 4 x 4affinetanh

16 x 4 x 4

8×8×16tanh

120

softmaxaffine120

10ニューラルネットワークは乗加算計算を主とする関数の組み合わせで表現できる
16

10

10

Affine（全結合層）
Input

Convolution（畳み込み層）Output100…

…

10,000Connection

Input
Output

同じ重みw

100

出力ニューロンは全ての入力ニューロンの信号を受け取る

17

局所的なニューロンの入力を元に出力ニューロンの値を求める

MaxPooling（プーリング層）

Tanh（活性化関数）

Input

1.5
1

OutputOutput

0.5
-6

-4

-2

0
-0.5

0

2

4

-1

4x4
8x8

隣接ピクセルで最大値を取り、ダウンサンプリング
18

-1.5
Input

入力値を-1～1の範囲に収める

6

認識問題におけるNeural Networkの学習
MNISTデータセット（手書き数字認識）※画像認識問題の論文においてよくベンチマークに利用される最もポピュラーなデータセットの一つ

28

学習前

http://yann.lecun.com/exdb/mnist/

学習用データ28784

出力ニューロン
y=各数字である確率(10)

X:0,Y:0
X:1,Y:0
X:2,Y:0
X:3,Y:0
X:4,Y:0
X:5,Y:0

結合重みW（乱数で初期化）

…

…

…

…

60000 枚の28x28モノクロ画像と、それぞれの数字種類（所望の認識結果）からなるデータ

入力ニューロンx=画像(28x28)の輝度値

X:26,Y:27
X:27,Y:27

0
1
2
3
4
5
6
7
8
9

0.1
0.1
0.0
0.1
0.0
0.2
0.3
0.0
0.1
0.0

誤
10

出力が正解に近づくようにWを少しずつ更新
28

学習後
28

784

X:0,Y:0
X:1,Y:0
X:2,Y:0
X:3,Y:0
X:4,Y:0
X:5,Y:0

結合重みW（最適化済み）…

…

…

…
X:26,Y:27
X:27,Y:27

学習は、入力データに対し所望の出力データが得られるWを求めることに相当
19

0
1
2
3
4
5
6
7
8
9

0.0
0.0
1.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0

正
10

学習データを用いたWの更新方法
ニューラルネットワークでは、乱数で初期化したパラメータWをミニバッチ勾配降下法（Mini-Batch Gradient Descent）で最適化するのが一般的

2. Forward

1. 学習データからミニバッチ（256個程度のデータ）を取得
2. 用意したデータを用いてForward計算を行い、現在のパラメータWによる出力yとロス（最小化したい値）Eを求める
3. Backward計算を（ロスEの逆伝播）行い、パラメータWの勾配ΔWを求める
4. Updateを行う（求めた勾配ΔWを元にWを更新）（入力から出力を計算）
パラメータW

…

入力 x

E

…

w

…

…

δE
δW

𝑊𝑊𝑡𝑡+1 ← 𝑊𝑊𝑡𝑡 -𝜂𝜂Δ𝑊𝑊𝑡𝑡

出力 y
0
1
2
3
4
5
6
7
8
9

パラメータの勾配ΔW

3. Backward（パラメータの勾配を計算）

Forward→Backward→Updateを繰り返し、パラメータWを最適化していく
20

正解

0
1
2
ロス E 345678
9

Back propagation
x

x：入力値

Affineyy = wx + b

t：正解ラベル
y：出力値

w

E:ロス
w：重み

b

b：バイアスE

Squared ErrorE

E = (y - t)2

δE
=
δw

δE
δy

δy
δE
=
x
δw
δy

δE
=
δb

δE
δy

δy
δE
=
δb
δy

δE
δy

= 2(y - t)

Backward（パラメータの勾配を計算）
δE
δWw

𝑊𝑊𝑡𝑡+1 ← 𝑊𝑊𝑡𝑡 -𝜂𝜂Δ𝑊𝑊𝑡𝑡

ロスから順に勾配を計算することで、ネットワーク全体の重みに対する微分を求めることができる
21

学習されたニューラルネットワークの分析
中間層

入力データ

出力

入力層

出力層

…

丸、三角、
四角…
エッジ、
点、色…

テクスチャ、
線、円弧…

プリミティブ

寿司

米
魚の切り身
竹の葉
木目のテーブル…

抽象概念

学習の結果、人間の脳に似た機能が獲得されることが実験的に確認されている
22

ソニーのDeep Learningへの取り組みと活用事例

23

ソニーのDeep Learningに対する取り組み
2000年以前～

機械学習の研究開発
2010年～

Deep Learningの研究開発

2010年～

Deep Learning開発者向けソフトウェアの開発

2011年～
初代コアライブラリ2013年～
第二世代コアライブラリ2016年～

第3世代コアライブラリ

Neural Network Libraries

17/6/27 オープンソースとして公開

Deep Learningを用いた認識技術等の開発者が用いるソフトウェア群

技術開発効率を圧倒的に向上

2015年～

GUIツールNeural Network
Console17/8/17 Windows版無償公開
18/5/9 クラウド版正式サービス開始

Neural Network Libraries/Consoleにより、効率的なAI技術の開発を実現
24

Deep Learning 応用技術開発の流れ
各種製品、サービスへのDeep Learning応用技術の搭載
商品技術開発各事業会社

応用技術開発

…

R&D
および
各事業会社

○○認識機等、各種Deep Learning応用技術の開発…
コア技術開発コアアルゴリズム開発

R&D

開発環境

既にソニーグループ内で多数の活用/商品化実績
25

NeuralNetwork
Libraries/
Console応用事例 1：ソニー不動産
価格推定
ソニー不動産の「不動産価格推定エンジン」に、Neural Network Librariesが使用されています。この技術を核として、ソニー不動産が持つ査定ノウハウやナレッジをベースとした独自のアルゴリズムに基づいて膨大な量のデータを解析し、不動産売買における成約価格を統計的に推定する本ソリューションが実現されました。本ソリューションは、「おうちダイレクト」や、「物件探索マップ」「自動査定」など、ソニー不動産の様々なビジネスに活用されています。
入力
各種不動産情報
延べ床面積
間取り
駅からの距離
…

26

出力

…

不動産価格

応用事例 2：Xperia Ear
ジェスチャー認識
ソニーモバイルコミュニケーションズの「Xperia Ear」のヘッドジェスチャー認識機能にNeural Network
Librariesが使用されています。「Xperia Ear」に搭載されているセンサーからのデータを元に、ヘッドジェス
チャー認識機能により、首を縦や横に振るだけで、「Xperia Ear」に搭載されているアシスタントに対して「はい／いいえ」の応答や、着信の応答／拒否、通知の読み上げキャンセル、次／前のトラックのスキップを行えます。
入力
Xperia Ear搭載
センサ情報

出力

…

27

Yes/No等のヘッドジェスチャ

応用事例 3：デジタルペーパー
画像認識（手書き記号認識）
ソニーのデジタルペーパー「DPT-RP1」の手書きマーク検索のうち、＊の認識にNeural Network Librariesが使用されています。文書を読んでいて「ここが大切」「ここを後で読みたい」と思ったら、 ＊や☆のマーク
をさっと手書きします。手書きマークを認識する機能により、ページ数の多い文書でも、マークを付けた箇所を素早く検索し、開くことができます。

入力
画像（手書き記号）

出力

…

28

手書き記号認識結果

応用事例 4：aibo
画像認識
ソニーのエンタテインメントロボット“aibo”（アイボ）『ERS-1000』の画像認識にNeural Network Librariesが使用されています。aiboの鼻先の魚眼レンズによる画像認識においての人物判定から顔トラッキング、充電台認識、一般物体認識などで積極的に活用され、多彩なセンサーを搭載することで状況に応じたふるまいの表出を可能にしています。

入力
魚眼レンズ画像出力…

29

顔、物体、充電台…

ソニーのDeep Learningソフトウェア
Neural Network Libraries / Neural Network Console

30

Neural Network Libraries / ConsoleとはNeural Network Libraries

Neural Network Console

・Deep Learning研究開発者向けオープンソースフレーム・研究や、商用レベルの技術開発に対応したDeep

ワーク（他社製既存Deep Learning FWに相当）
・コーディングを通じて利用→高い自由度
・最先端の研究や製品への実装にも柔軟に対応

Learningツール
・様々なサポート機能→高い開発効率・GUIによるビジュアルな操作→敷居が低い

import nnabla as nn
import nnabla.functions as F
import nnabla.parametric_functions as PF
x = nn.Variable(100)t = nn.Variable(10)h = F.tanh(PF.affine(x, 300, name='affine1'))y = PF.affine(h, 10, name='affine2')
loss = F.mean(F.softmax_cross_entropy(y, t))

学習エンジンとしてNeural Network Librariesを利用

主なターゲット

主なターゲット・じっくりと研究・開発に取り組まれる方・プログラミング可能な研究、開発者

・特に開発効率を重視される方・はじめてDeep Learningに触れる方

研究開発における課題を解決し、Deep Learningの研究開発を効率化するソフトウェア
31Neural Network Console

dl.sony.com

商用クオリティのDeep Learning応用技術（画像認識機等）開発のための統合開発環境
コーディングレスで効率の良いDeep Learningの研究開発を実現

Windows版（無償）クラウド版（CPU 10時間まで無償）

インストールするだけ、もしくはサインアップするだけで本格的なDeep Learning開発が可能
成果物はオープンソースのNeural Network Librariesを用いて製品、サービス等への組み込みが可能
32

33

特長1. ドラッグ＆ドロップによるニューラルネットワーク構造の編集• 関数ブロックを用いたVisual
Programmingでニューラルネッ
トワークを設計• 後段のニューロン数など、ネットワークの設計により変更する
パラメータは自動計算• ネットワーク設計にエラーがある場合はその場で提示• 画像認識だけでなく、
AutoEncoder、RNN、GAN、半教師学習などの設計にも対応
コーディングレスでのニューラルネットワーク設計を実現（コーディングスキル不要）
複雑なニューラルネットワークもすばやく構築可能（作業時間の短縮）
ニューラルネットワークの構造を視覚的に確認しながら、 短期間でDeep Learningを習得可能
34

特長2. 試行錯誤結果の管理機能↑学習履歴↑精度評価結果

ネットワーク構造のプレビュー↑• すべての学習の試行を自動的に記録• 記録した学習結果は、一覧して過去の結果と比較可能• ネットワーク構造に変更がある
場合、差分となる箇所をビジュ
アルに提示• 分類問題の場合、Confusion
Matrixを表示• 過去学習したネットワーク構造に遡ることも可能

手動で複数のネットワーク構造を管理する必要がなく、試行錯誤に集中できる
どのようなネットワークで、どの程度の精度が得られたのかの分析が容易35

特長3. 構造自動探索機能• ネットワーク構造の変更→評価を自動で繰り返すことにより、優れたネットワーク構造を自動探索する機能• 精度とフットプリントの同時最適化が可能• ユーザは、最適化の結果の得られる複数の解の中から、所望の演算量と精度を持つネットワー
ク構造を選択できる※ グラフの縦軸は誤差、横軸は演算量（log）、各点はそれぞれ異なるニューラルネットワークの構造を示す※ 動画は最適化済み結果を早送りしたもの

ネットワーク構造のチューニングにおける最後の追い込み作業を大幅に効率化
フットプリントも同時最適化するため、HWリソースの限られた組み込み用途にも有効36

特長4. 豊富なGPUリソースを利用可能（クラウド版）• ニューラルネットワークの学習には膨大な演算が必要•

必要な演算量は主に扱うデータの量とニューラルネットワークの構造に依存• マルチGPUを用いると、学習完了までの時間を大幅に短縮できる•

同じ開発期間でより多くの試行錯誤を行うことが可能に• 環境のセットアップ、メンテナンス作業不要で豊富なGPUリソースを利用可能•

開発者はDeep Learningの開発作業に集中できる

最先端研究者と同等の環境をGUI環境から利用可能
37

Neural Network Console その他の特長設計したニューラルネットワークの要求する演算量等を自動計算
識別、検出、信号処理、回帰、異常検知など、様々なタスクに対応
ResNet-152、DenseNet-161など大型のネットワークの設計や学習に対応
LSTM、GRUなどのRecurrent neural networks (RNN) に対応
Generative Adversarial Networks (GAN)、半教師学習など、複数のネット
ワークを用いた複雑な構成に対応• Transfer learning対応• 係数や、データパスの可視化に対応
• …
•
•
•
•
•

機能の適度な抽象化により、柔軟性と簡単さを両立
38

Neural Network Libraries

nnabla.org

研究者・開発者向けオープンソース（Apache2.0 License）プログラミングライブラリ# 自動微分用の変数コンテナ
from nnabla import Variable# ニューラルネットワークの関数ブロック
import nnabla.functions as F
# パラメタ付きの関数ブロック
import nnabla.parametric_functions as PF

設計・学習・推論（実行）ロジックをプログラミング（Python/C++）で柔軟記述
C++で実装されたコンパクト、高速かつ移植性の高いコアと、利便性に優れたPython APIからなるライブラリ39

Neural Network Librariesの特長1：洗練された文法構造例）手書き数字認識で典型的なモデル（LeNet）
Convol
ution

MaxPo
oling

ReLU

Convol
ution

MaxPo
oling

ReLU

AffineReLU

Affinedef lenet(x):'''Construct LeNet prediction model.'''h = PF.convolution(x, 16, (5, 5), name='c1')
h = F.relu(F.max_pooling(h, (2, 2), inplace=True))h = PF.convolution(h, 16, (5, 5), name='c2')h = F.relu(F.max_pooling(h, (2, 2), inplace=True))h = F.relu(PF.affine(h, 50, name='f3'))
h = PF.affine(h, 50, name='f4')
わずか6行
return h

パラメタ付き関数を簡単に記述
h = PF.convolution(x, outmap, filter_size, name='conv1')
このような事前の定義はいらない（Linear code!）

conv1/W
conv1/b

x

conv

h

# パラメタ付き関数の定義
self.conv1 = Convolution(inmap, outmap, filter_size)...
# パラメタ付き関数の利用
h = self.conv1(x)書きやすく読みやすい、デバッグ、メンテナンス性に優れた文法
40

Neural Network Librariesの特長1：洗練された文法構造• CPU→GPUへの切り替え

以下のコードをネットワーク定義前に追加するのみでCUDA/cuDNNが利用できるfrom nnabla.ext_utils import get_extension_context
nn.set_default_context(get_extension_context('cudnn'))※CPU/GPU間の転送は必要な時に自動で行われる（意図的に行わせることも可能）• Static Network (Define and run)→Dynamic Network (Define by run)の切り替え# 動的NNモードに変更
nn.set_auto_forward(True)• Multi GPUを用いた学習
for i in range(max_iter):…
loss.backward(clear_buffer=True)# デバイス間でパラメタを交換
grads = [x.grad for x in nn.get_parameters().values()]comm.allreduce(grads, division=False, inplace=False)
solver.update()

学習コード中の変更は2行

わずかなコードの追加（ネットワークのコードは修正不要）で各種機能を利用可能
41

Neural Network Librariesの特長2：プラグインでデバイス追加
nnablaHigh-level API•Python API•C++ API
•CLI•Utilsfrom nnabla.ext_utils import get_extension_context
nn.set_default_context(get_extension_context('cudnn'))
nnabla-ext-cuda

nnabla-ext-○○

CPU Implements

CUDA Implements○○ Implements•Array•Function•Solver•Communicator•Array•Function•Solver•Communicator•Array•Function•Solver•CommunicatorCore•Variable•CoputationGraph•…

宣言一つで、
APIやコア部分はそのままに、
特定デバイス用のコードを利用
nnabla-ext-cudaをフォークし
社内独自チップ等、
特定デバイス用実装を開発可
プラグインに実装がない関数は自動的にCPUにフォールバック

宣言一つで、APIやコア部分はそのままに、特定デバイス用のコードを利用
42

Neural Network Librariesの特長3：学習結果はC++で組み込み可推論エンジンへの組み込みでよくある躓きポイント
サーバー学習組み込み推論学習済
モデル

Framework
A

Exchangeformat

NNLのC++ APIはコアが同じなので大丈夫！

Python API

Runtimesoftware B“レイヤー zzz がありません”

C++ APIC++ core
学習時に使ったコアをそのままデバイス上で利用するため、実装がスムーズ
43

Neural Network Libraries/Consoleまとめ
Neural Network Libraries

Neural Network Console

https://nnabla.org/

https://dl.sony.com/

様々な特長を兼ね備えた最新世代のDeep Learningフレームワーク

商用クオリティのDeep Learning応用技術開発を実現する統合開発環境

import nnabla as nn
import nnabla.functions as F
import nnabla.parametric_functions as PF
x = nn.Variable(100)t = nn.Variable(10)h = F.tanh(PF.affine(x, 300, name='affine1'))y = PF.affine(h, 10, name='affine2')
loss = F.mean(F.softmax_cross_entropy(y, t))実現• Deep Learning応用技術者の迅速な育成• 効率的なDeep Learning応用技術の研究開発～実用化
優れたDeep Learningの開発環境を提供し、需要の急拡大するAI技術の普及・発展に貢献
44

Neural Network Console チュートリアル
セットアップ45

セットアップ：Windows版
1. zipファイルをダウンロード
2. 適当なフォルダに解凍

日本語マニュアルNeural Network Consoleアプリ※Neural Network Consoleは2バイト文字に対応していないため、漢字等の含まれないフォルダへの解凍が必要※Visual Studio 2015の再頒布パッケージがインストールされていない場合はインストール※NVIDIAのGPUを用いる場合、GPUドライバを最新のものにアップデート

ダウンロードしたzipファイルを解凍するだけで基本的なセットアップは完了
46セットアップ：Cloud版
1. アカウントを作成

2. 作成したアカウントでログイン

新規アカウントを作成し、ログインするだけで利用の準備が完了
47

Neural Network Console チュートリアル
分類問題（画像入力）

48

データセットの準備（画像分類問題）
今回はNeural Network Consoleサンプルデータの、MNISTデータセットを利用
MNISTデータセット（手書き数字認識）

学習用データsamples¥sample_dataset¥mnist¥training
28x28のモノクロ画像と、その数字が何であるかのデータからなる60000個のデータ

評価用データsamples¥sample_dataset¥mnist¥validation
学習データと同様のデータからなる10000個のデータ（学習には用いず、精度評価に利用）

データセットの収集はそれなりの労力を要するが、データの量と質が性能を決定する
49

データセットの準備（画像分類問題）
Neural Network Console所定のCSVファイルフォーマットでデータセットを準備
＝ヘッダ
＝データ

1行目
2行目以降

変数名[__次元Index][:ラベル名]
値 or ファイル名

画像認識機学習用データセットの例

入力
x
画像

Neural Network

出力
y
カテゴリ

xとy、2つの変数
ヘッダ

データ(2行目以降)入力xには画像ファイル名を指定※Neural Network Consoleは2バイト文字に対応していないため、
CSVファイル内やファイル名に漢字等を含まないようにする

出力yには正解のカテゴリのIndexを記述

Neural Network Consoleに対応したデータセットファイルは簡単なスクリプトで作成可能
50

データセットの準備（画像分類問題）

画像認識問題の場合、フォルダ分けされた画像からデータセットを作成することもできる
51

データセットのアップロード（Cloud版の場合）
1. ダッシュボードからUpload Datasetを選択
2. アップローダをダウンロード（Windows / MacOS）

3. アップローダを用いてデータセット
CSVファイルとデータをアップロード
Upload Datasetで表示されるトークンをアップローダに
Pasteし、アップロードするデータセットCSVを指定してStartボタンを押すことでアップロードを開始

52

Consoleを起動、新規プロジェクトを作成する
Cloud版

Windows版

53学習、評価に用いるCSVデータセットをそれぞれ読み込む
DATASETタブにて、作成したデータセットCSVファイルを読み込み（学習用・評価用それぞれ）
Cloud版

Windows版※本チュートリアルでは「4」と「9」の手書き数字のみを見分ける簡単なデータセットを利用
54画像認識用ネットワーク（1層 Logistic Regression）を設計する
EDITタブにて関数ブロックを組み合わせ、1層ニューラルネットワークを設計←1（モノクロ）×28（Height）×28（Width）の画像入力←全結合層入力（1,28,28）→出力（1）←Sigmoid関数によるアクティベーション←ロス関数(1)Input

1x28x28

28

28

○
○
○
○
○
○
○
○
○
○
○
…
○

Affine全結合

Sigmoid○

Output○1層のネットワークで4と9の数字を見分ける課題

ドラッグ＆ドロップ操作で、視覚的にニューラルネットワークを設計
55

4(=0) or9(=1)

学習パラメータの設定

学習世代数（全学習データを使った時点で1世代と数える）
Mini Batchサイズ（1回の重み更新に使うデータ数）56

学習の実行
Cloud版

Windows版

学習曲線（縦軸誤差、横軸学習世代）

学習進捗状況
学習進捗（コアエンジンのログ出力）57

評価の実行
Cloud版

Windows版

Accuracy=分類精度58

画像認識用ネットワーク（2層 Multi Layer Perceptron）を設計

IOカテゴリより、Input
Basicカテゴリより、Affine
Activationカテゴリより、Tanh
Basicカテゴリより、 Affine
Activationカテゴリより、 Sigmoid
Lossカテゴリより、BinaryCrossEntropyを追加

59

Convolutional Neural Networksへ

BasicカテゴリからConvolution、PoolingカテゴリからMaxPooling、
ActivationカテゴリからReLUを2回繰り返し挿入

下5つのレイヤーを矩形選択して下にドラッグし、新しいレイヤーを挿入するスペースを作る

60

1層のLogistic Regression～4層のCNNまで1層（Logistic Regression）

2層（Multilayer perceptron）

61

Convolutional Neural Networks(CNN)

Input：データ入力→ Convolution→ ReLU→ MaxPooling→ Affine→ ReLU→ Affine→ Softmax→ Categorical
Crossentropy

繰り返し
配置

最後の
仕上げ

(分類問題時)Neural Network Console チュートリアル
ニューラルネットワーク設計の基礎まとめ

62

ニューラルネットワーク設計の基礎• 入力ニューロンの数を入力データの次元数、出力ニューロンの数を出力デー
入力ニューロン数
出力ニューロン数
タの次元数に設定＝入力データの次元数

28

28
784

X:0,Y:0
X:1,Y:0
X:2,Y:0
X:3,Y:0
X:4,Y:0
X:5,Y:0＝出力データの次元数…

• 画像分類問題の場合の例•

入力ニューロン数：色数×高さ×幅••

28x28ピクセルのモノクロ画像を入力する場合、(1, 28, 28)の配列となる

出力ニューロン数：画像カテゴリ数•63

画像を10カテゴリに分類する場合、10とする…

…

…
X:26,Y:27
X:27,Y:27

0
1
2
3
4
5
6
7
8
9

10

ニューラルネットワーク設計の基礎
1層を構成する基本構造• Convolution層• Affine（全結合）層

畳み込み

全結合

出力を平均0、分散1に正規化

平均0、分散1に正規化

活性化関数

活性化関数

ダウンサンプリング（必要に応じて）••これらの構造を複数つなぎ合わせることで、多層ネットワークを構成するのが基本
活性化関数は他のものを使ってもよい

64Batch Normalization
学習を加速させるテクニック
Convolution、Affineの直後、中間出力が平均0、分散1となるようにバッチ内で正規化を行う

層の深いネットワークの学習を飛躍的に簡単にした

65

使い方（最終層を除く）ConvolutionやAffineレイヤーの直後に
OtherカテゴリのBatchNormalizationレイヤーを挿入するだけニューラルネットワーク設計の基礎
解きたい課題に合わせ、最後のActivationとロス関数を設定

最後のActivation

2値分類問題

分類問題

回帰問題（数値予測等）

Sigmoid

Softmax（なし）

BinaryCrossentropy

CategoricalCrossEntropy

SquaredError

入力値を0.0～1.0（確率）に
する

ロス関数

出力と正解の要素毎の相互情報量を計算ネットワーク66（カテゴリ認識等）
入力値を合計が1.0となる0.0～1.0（確率）にする
出力と正解カテゴリIndexとの相互情報量を計算

出力と正解の要素毎の二乗誤差を算出

ニューラルネットワーク設計の基礎※ResNeXt-101サンプルプロジェクトより大型のニューラルネットワークになってもこの基本は変わらない67

Neural Network Console チュートリアル
作成した認識機の製品・サービス等への組み込み68作成したモデルを利用する方法は5通り
利用方法

実行環境

言語

GPUの利用

メリット

デメリット

1. NNabla Python Neural Network
CLI
Libraries

Python
(CLI)

Yes

最も簡単

低速

2. NNabla
Python API

PythonYes

比較的容易

3. NNabla C++
RuntimeC++

Yes

推論時にPython不要

4. NNabla C
RuntimeC

No

非常にコンパクトに組み込み可能環境に合わせた最適化が必要

5. ONNX 対応ソフ 各社の提供する
トウェア、ハード ONNX対応
ウェア
Runtime

環境によ 環境によりり様々様々

環境により様々

現状は互換性の問題が生じることも※ NNabla C++ Runtimeからの実行方法 https://github.com/sony/nnabla/tree/master/examples/cpp/mnist_runtime※ NNabla C Runtimeからの実行方法 https://github.com/sony/nnabla-c-runtime※ ONNXへのコンバート方法 https://nnabla.readthedocs.io/en/latest/python/file_format_converter/file_format_converter.html

目的に合わせて最適な利用方法を選択
69

Neural Network Libraries – Python CLIからの推論実行
1. 推論実行環境にNeural Network Librariesをインストール
https://nnabla.readthedocs.io/en/latest/python/installation.html
Windows版Neural Network Consoleを使っている場合は、コマンドプロンプトから以下のコマンドを実行することで同梱のPython環境およびNNLが利用可能に
SET PATH=%PATH%;C:¥neural_network_console¥libs¥Miniconda3;C:¥neural_network_console¥libs¥Miniconda3¥Scripts
SET PYTHONPATH=C:¥neural_network_console¥libs¥nnabla¥python¥src

2. Neural Network LibrariesのインストールされたPython環境で、コマンドラインから以下を実行
python "(path of Neural Network Libraries)/utils/cli/cli.py" forward-c Network definition file included in the training result folder (net.nntxt or *.nnp)-p Parameter file included in the training result folder (parameters.h5)-d Dataset CSV file of input data-o Inference result output folder

実行例として、Neural Network Consoleでの推論実行時のログ（TRAININGタブ下に表示されるログ）を参考にできる（Neural Network ConsoleもPython CLIを用いて学習や評価を実行している）
70

Neural Network Libraries – Python APIからの推論実行
1. 推論実行環境にNeural Network Librariesをインストール
2. Neural Network Consoleから推論実行に用いるネットワークのPythonコードをExport
EDITタブで右クリックして表示されるポップアップメニューから、Export→Python Code(NNabla)を選択→自動生成されたニューラルネットワークの定義コードがクリップボードにコピーされる
3. 例えばMNIST手書き数字の場合、クリップボードにコピーされたコードに以下を追記して推論を実行
x = nn.Variable((1,1,28,28))
y = network(x, test=True)nn.load_parameters("./parameters.h5")
from scipy.misc import imread# img = imread("C:/neural_network_console/samples/sample_dataset/MNIST/validation/4/4.png")
img = imread("C:/neural_network_console/samples/sample_dataset/MNIST/validation/9/7.png")
x.d = img.reshape(1,1,28,28) * 1.0/255
y.forward()
print(y.d)

詳しいPython APIの使い方についてはNeural Network Librariesのドキュメントを参照
http://nnabla.readthedocs.io/en/latest/python/tutorial/by_examples.html
71Neural Network Console チュートリアル
分類問題（画像以外）

72

データセットの準備（ベクトルデータ）例） Fisher Iris Flower Dataset
あやめのがく、花びらの長さ、幅からあやめの種類(3種類)を認識
入力ベクトルx

以下のようなフォーマットのデータセットCSVを用意
がく、花びらの長さ、幅

あやめの種類0: Iris setosa

目的変数y1: Iris versicolor
2: Iris virginica
73

neural_network_console¥samples¥sample_dataset¥iris_flower_dataset

データセットの準備（音声、センサデータなど）
入力センサデータのcsvファイル
例）2次元×13時刻のセンサ情報

74

ネットワークの設計
データセットCSVファイル

Inputレイヤーのサイズに(行,列)のサイズを指定

データセットの準備（テキストデータ）
事前にテキストを、単語Index系列もしくはベクトル系列に変換
まずはテキストを単語に分割し、Index化する
・例えば3千個の頻出単語を選択し、その他は1つの単語にまとめるなどする
・上記3001単語に0～3000のIndexを振る

ベクトル系列形式のテキスト
・各単語が固定長次元のベクトルで表現される・各単語の固定長ベクトルはWord2vec等で学習

単語Index系列
・0から始まる単語のIndexを文頭から順に並べるのみ
↑
文頭

↑
文頭

文末
↓

文末
↓
75

←1単語分のベクトル

Webにてチュートリアルを随時公開中

https://support.dl.sony.com/docs-ja/#Tutorial

質問・ご要望等はフォーラムへhttps://groups.google.com/forum/#!forum/neural_network_console_users_jp

76

まとめ

77

まとめ
Deep Learningは従来手法と比較して圧倒的に高い性能を実現する機械学習技術
今後急速な活用・普及拡大が予想される
Deep Learningは簡単。Neural Network Libraries/Consoleを使うとさらに簡単
概ね1か月で基本を習得、3か月も経てば実用レベルの技術開発が可能に
ソニーではNeural Network Libraries/Consoleを社内に展開することで、効率的なDeep Learning人材の育成と応用技術の開発、実用化を実現してきた早期の使いこなし、データの蓄積が高い効果につながる
将来を見据え積極的な活用促進を
78

SONYはソニー株式会社の登録商標または商標です。
各ソニー製品の商品名・サービス名はソニー株式会社またはグループ各社の登録商標または商標です。その他の製品および会社名は、各社の商号、登録商標または商標です。