by Sony
Pythonを用いて、より少ないコード量で直観的に計算グラフ(ニューラルネットワーク)を定義することができます。
実行時に柔軟にニューラルネットワークを構築することができます。ニューラルネットワークの構築方法としては、静的計算グラフと動的計算グラフの両方が利用可能です。
移植性を考慮した設計を採用しており、LinuxとWindowsの両方で動作します。
コードのほとんどがC++14で実装されているため、組み込み機器にもほぼそのままの形で導入することができます。
適度に抽象化された関数とコードテンプレート生成機能を備えており、開発者はわずかなコードの追加で新しい機能を追加することができます。
新しいデバイスのためのコードは、既存のコードを変更することなくプラグインとして追加できます。CUDAも1つのプラグインとして実装されています。
ソニー不動産の「不動産価格推定エンジン」に、Neural Network Librariesが使用されています。この技術を核として、ソニー不動産が持つ査定ノウハウやナレッジをベースとした独自のアルゴリズムに基づいて膨大な量のデータを解析し、不動産売買における成約価格を統計的に推定する本ソリューションが実現されました。本ソリューションは、「おうちダイレクト」や、「物件探索マップ」「自動査定」など、ソニー不動産の様々なビジネスに活用されています。
ソニーモバイルコミュニケーションズの「Xperia Ear」のヘッドジェスチャー認識機能にNeural Network Librariesが使用されています。「Xperia Ear」に搭載されているセンサーからのデータを元に、ヘッドジェスチャー認識機能により、首を縦や横に振るだけで、「Xperia Ear」に搭載されているアシスタントに対して「はい/いいえ」の応答や、着信の応答/拒否、通知の読み上げキャンセル、次/前のトラックのスキップを行えます。
ソニーのエンタテインメントロボット“aibo”(アイボ)『ERS-1000』の画像認識にNeural Network Librariesが使用されています。aiboの鼻先の魚眼レンズによる画像認識においての人物判定から顔トラッキング、充電台認識、一般物体認識などで積極的に活用され、多彩なセンサーを搭載することで状況に応じたふるまいの表出を可能にしています。
少ない計算量で直感的に計算グラフ(ニューラルネットワーク)を定義することができます。
Softmax lossの2層ニューラルネットワークは、以下のシンプルな5行のコードで記述できます。
x = nn.Variable(input_shape)
t = nn.Variable(target_shape)
h = F.tanh(PF.affine(x, hidden_size, name='affine1'))
y = PF.affine(h, target_size, name='affine2')
loss = F.mean(F.softmax_cross_entropy(y, t))
forward/backwardを呼び出して計算グラフを実行します。
x.d = some_data
t.d = some_target
loss.forward()
loss.backward()
parameter_scopeというパラメータ管理システムは、柔軟なパラメータ共有を可能にします。
次のコードブロックは、シンプルなElman recurrent neural networkの記述方法を示しています。
h = h0 = nn.Variable(hidden_shape)
x_list = [nn.Variable(input_shape) for i in range(input_length)]
for x in x_list:
# parameter scopes are reused over loop,
# which means parameters are shared for all iteration.
with nn.parameter_scope('rnn_cell'):
h = F.tanh(PF.affine(F.concatenate(x, h, axis=1), hidden_size))
y = PF.affine(h, target_size, name='affine')
ニューラルネットワークの学習に一般的に用いられている静的グラフ方式は、実行前にあらかじめ計算グラフを作成する方式です。これに対し動的計算グラフは、実行時に柔軟に計算グラフを構築する方式です。本ライブラリは静的計算グラフと動的計算グラフの両方をサポートしています。以下は動的計算グラフの記述例です。
x = nn.Variable(input_shape)
x.d = some_data
t = nn.Variable(target_shape)
t.d = some_target
with nn.auto_forward():
h = F.relu(PF.convolution(x, hidden_size, (3, 3), pad=(1, 1), name='conv0'))
for i in range(num_stochatic_layers):
if np.random.rand() < layer_drop_ratio:
continue # Stochastically drop a layer.
h2 = F.relu(PF.convolution(x, hidden_size, (3, 3), pad=(1, 1),
name='conv%d' % (i + 1)))
h = F.add2(h, h2)
y = PF.affine(h, target_size, name='classification')
loss = F.mean(F.softmax_cross_entropy(y, t))
# Backward computation can also be done in dynamically executed graph.
loss.backward()
Neural Network Librariesに実装されたメモリキャッシングシステムは、メモリ割り当てオーバーヘッドなしで高速実行を可能にします。
Neural Network Librariesの基本的な機能をご紹介しました。Docsでは、より詳細な内容を含む、その他の機能について説明しています。