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に関心のある方向けにジェンダーバイアスの検出・軽減の紹介をしています。ジェンダーバイアスの検出と軽減には様々な手法が存在しますが、このチュートリアルでは再重み付けアルゴリズムを用いた簡単な方法を紹介します。
- インタラクティブデモ
名称 | ノートブック | タスク |
---|---|---|
フェアネスワークフローチュートリアル紹介 | 再重み付けによるデータセット/モデルのバイアス検出・軽減 |
[フェアネス] 肌の色による顔画像評価
また、Individual Typology Angle (ITA)と呼ばれる指標を用いて肌の色を数値化する顔画像評価のインタラクティブデモも追加しました。
図: 異なる顔画像のIndividual Typology Angle (ITA) スコア
- インタラクティブデモ
名称 | ノートブック | タスク |
---|---|---|
肌色 (マスク画像) | 顔画像の肌色の数値評価 |
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)
BoolGather
とBoolScatter
とBoolFill
を追加しました!
BoolGather
とBoolScatter
は以下のように利用することができます:
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
レイヤー関数等の新規追加・改善
- F.dropoutがp=0をサポート (CPU / GPU)
- 交差エントロピー系関数において0以下のラベルを無視するよう変更 (CPU / GPU)
- F.dotと@演算子の追加
- ReLUCudaCudnnの使用の廃止 (CPU / GPU)
- 関数追加: F.roi_align (CPU / GPU)
- Normalization系関数の高階微分 (CPU / GPU)
- F.cumprodのbackward演算の0入力サポート (CPU / GPU)
- concatenateなどの可変長入力のサポート
- F.cumsumのdouble backward対応
ビルド関連
- Dockerfile: APT_OPTSの修正 (CPU / GPU)
- 32ビットシステムにおいていくつかのテストのスキップ
- CI: Dockerfileディレクトリの再構成
- http_proxyなしでビルド可能に
- ランダムにクラッシュを起こしうるテストを一時的に無効化
- pillow backendとの互換性のためimage_utilsのimreadの挙動を変更
- python3.8用Dockerイメージにnnablaコンバータをインストール
- CI: CUDA11のDockerイメージ用にNvidia Compatible Driverのサポート
フォーマットコンバーターの機能改善
- opsetのアップデート/opset11の利用
- onnxエクスポーター: Ceilモードのサポート
- onnxエクスポーター: weightnormalizationサポート
- onnxエクスポーター: weightstandardization/instancenormalization/layernormalizationのサポート
- onnxエクスポーター: spectralnormのサポート
ユーティリティの機能改善
Exampleの新規追加
Cランタイム
バグ修正
- Windowsでのテスト時に起きる問題の修正
- キャッシュを用いた際に起こるデータイテレータの競合問題の修正
- forward_allの重複呼び出しの修正
- 例外時のファイルハンドラを適切に閉じるよう修正
- nn.gradの修正
- グラフビューワーのパラメータエラーの修正
- 末端のVariableで起きる問題の修正
- グラフ/パラメータの単体テストの追加
- cuDNNのconvolutionのキャッシングを再有効化
- マルチスレッド利用時の問題修正