EN

Neural Network Libraries v1.21.0をリリースしました!

2021年9月9日 木曜日

リリース

Posted by Takuya Yashima

Neural Network Libraries v1.21.0をリリースしました!

XAI(説明可能なAI)フェアネスに関する様々なアップデートをはじめ、inplaceオプションの廃止や、量子化tfliteコンバーターの追加、PF.sync_batch_normalizationの最適化といった重要な変更・機能追加が含まれています!

Spotlight

XAI/フェアネスに関するアップデート

[XAI] SHAP

SHAP (SHapley Additive exPlanation)を追加しました!これは任意の機械学習モデルの出力を説明するアプローチです。
ゲーム理論で用いられるシャープレイ値を用いることで局所的な貢献を可視化することができます。

[XAI] Influence Function

ブラックボックス予測問題を理解することでデータクレンジングを行うInfluence Functionを追加しました!

[フェアネス] ジェンダーバイアス軽減

フェアネスに関するワークフローを紹介するチュートリアル用のColabデモを追加しました!
このチュートリアルでは、責任あるAIに関心のある方向けにジェンダーバイアスの検出・軽減の紹介をしています。ジェンダーバイアスの検出と軽減には様々な手法が存在しますが、このチュートリアルでは再重み付けアルゴリズムを用いた簡単な方法を紹介します。

  • インタラクティブデモ
名称 ノートブック タスク
フェアネスワークフローチュートリアル紹介 Open In Colab 再重み付けによるデータセット/モデルのバイアス検出・軽減

[フェアネス] 肌の色による顔画像評価

また、Individual Typology Angle (ITA)と呼ばれる指標を用いて肌の色を数値化する顔画像評価のインタラクティブデモも追加しました。


図: 異なる顔画像のIndividual Typology Angle (ITA) スコア

  • インタラクティブデモ
名称 ノートブック タスク
肌色 (マスク画像) Open In Colab 顔画像の肌色の数値評価

inplaceオプションの廃止 (CPU / GPU)

F.add_scalar(x, y, inplace=True)などのInplace演算が廃止され、実際にはInplaceに計算が行われないよう変更されました。これにより、inplace=Trueは単純に無視されます。

nnpからint8tfliteへの量子化tfliteコンバータの追加

tfliteコンバータを最適化しました!さらに、新たな量子化tfliteコンバータも追加し、autopep8エンコードエラーにも対処しました。

PF.sync_batch_normalizationの最適化

複数GPUでデータ分散を利用した学習を行う際に、各GPU間で計算される統計量を同期して計算に利用する、PF.sync_batch_normalizationについて最適化を行いました。最大で、forward計算において42倍、backward計算において110倍高速に動作します。

Boolean Indexing Functions (CPU / GPU)

BoolGatherBoolScatterBoolFillを追加しました!

BoolGatherBoolScatterは以下のように利用することができます:

import numpy as np
import nnabla as nn
import nnabla.functions as F

nn.set_auto_forward(True)

input0 = nn.Variable.from_numpy_array([[1, 2], [3, 4], [5, 6]])
mask = nn.Variable.from_numpy_array([1, 0, 1])
output0 = F.bool_gather(input0, mask)

input1 = output0 + 10 # do whatever for reduced array

output1 = F.bool_scatter(input1, mask)

print(output1.d)  # [[11, 12], [0, 0], [15, 16]]

BoolFill は以下のように利用できます:

import numpy as np
import nnabla as nn
import nnabla.functions as F

nn.set_auto_forward(True)

input = nn.Variable.from_numpy_array([[np.inf, 2], [3, np.nan]])
mask = nn.Variable.from_numpy_array([[1, 0], [0, 1]])
output = input.bool_fill(mask, 0)

print(output.d) # inf/nan are replaced with 0, and input.d == output.d

レイヤー関数等の新規追加・改善

ビルド関連

フォーマットコンバーターの機能改善

ユーティリティの機能改善

Exampleの新規追加

Cランタイム

バグ修正

ドキュメントの追加・修正