English

Neural Network Libraries

by Sony

ニューラルネットワークの研究・開発・実装を
効率化するオープンソースソフトウェア

NEWS

NEWS

特長

  • 必要最小限の労力

    Pythonを用いて、より少ないコード量で直観的に計算グラフ(ニューラルネットワーク)を定義することができます。

  • 動的計算グラフのサポート

    実行時に柔軟にニューラルネットワークを構築することができます。ニューラルネットワークの構築方法としては、静的計算グラフと動的計算グラフの両方が利用可能です。

  • どこでも実行

    移植性を考慮した設計を採用しており、LinuxとWindowsの両方で動作します。

  • デバイスを選ばない

    コードのほとんどがC++11で実装されているため、組み込み機器にもほぼそのままの形で導入することができます。

  • 機能の追加が簡単

    適度に抽象化された関数とコードテンプレート生成機能を備えており、開発者はわずかなコードの追加で新しい機能を追加することができます。

  • マルチターゲット

    新しいデバイスのためのコードは、既存のコードを変更することなくプラグインとして追加できます。CUDAも1つのプラグインとして実装されています。

導入事例

  • 価格推定

    ソニー不動産の「不動産価格推定エンジン」に、Neural Network Librariesが使用されています。この技術を核として、ソニー不動産が持つ査定ノウハウやナレッジをベースとした独自のアルゴリズムに基づいて膨大な量のデータを解析し、不動産売買における成約価格を統計的に推定する本ソリューションが実現されました。本ソリューションは、「おうちダイレクト」や、「物件探索マップ」「自動査定」など、ソニー不動産の様々なビジネスに活用されています。

  • ジェスチャー認識

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

  • 画像認識(手書き記号認識)

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

必要最小限の労力

少ない計算量で直感的に計算グラフ(ニューラルネットワーク)を定義することができます。
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 recirrent 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では、より詳細な内容を含む、その他の機能について説明しています。