oneAPI 1.3 暫定仕様書 Rev. 1 の解説 (26)

その他

この記事は、https://www.oneapi.io/spec/ で 2023年9月14日に公開された『oneAPI 1.3 Provisional Specification Rev. 1』 (HTMLPDF) をベースにしています。原文は2000 ページ近くあり、翻訳の時間とリソースも限られるため、全文翻訳ではなく、記事形式で区切った仕様とその解説を提供することにしました。


この回では、『oneAPI 1.3 Provisional Specification Rev. 1』の「oneDNN」の「Softmax」と「Sum」の節を取り上げています。

ソフトマックス

ソフトマックス・プリミティブは、任意の次元のデータに対し特定の軸に沿ってソフトマックスを実行します。他のすべての軸は独立している (バッチ) として扱われます。

一般に、操作は次の式で定義されます。変数名は標準の規則 (英語) に従います。

順方向 (前方)

アルゴリズムがソフトマックスに指定される場合:

指定されたアルゴリズムが logsoftmax である場合、次の数値的に安定した式が使用されます。

説明:

  • c 軸に対しソフトマックス計算が行われます。

  • は最外のインデックス (ソフトマックス軸の左側) です。

  • は最内のインデックス (ソフトマックス軸の右側) です。

  • v は、正確な結果を得るため使用され、次のように定義されます。

順方向トレーニングと順方向推論の違い

forward_trainingforward_inference 伝播の種類に違いはありません。

逆方向 (後方)

逆方向伝播は、diff_dst(ou,c,in)dst(ou,c,in) に基づいて diff_src(ou,c,in) を計算します。

実行引数

実行時に入力と出力は、次の表で示す実行引数インデックスにマップする必要があります。

操作の詳細

  1. 順方向と逆方向の両方でインプレース操作がサポートされ、src は順方向伝播の入力および出力として使用でき、diff_dst は逆伝播の入力および出力として使用できます。インプレースの場合、元のデータは上書きされます。

post-ops と属性

ソフトマックス・プリミティブは post-ops や属性をサポートする必要がありません。

サポートされるデータタイプ

ソフトマックス・プリミティブは、次のデータタイプの組み合わせをサポートします。

注: この節では、可読性のためデータタイプの名称を短縮しています。例えば、dnnl::memory::data_type::f32f32 に短縮されます。

データ表現

ソース、デスティネーション、およびそれらの勾配

ソフトマックス・プリミティブは任意のデータテンソルで機能します。論理的な次元については特別な意味はありません。ただし、ソフトマックス軸は、通常、チャネルと呼ばれます (したがって、式では c を使用します)。

API

API については、こちら (英語) をご覧ください。

累積

累積プリミティブは N テンソルを合計します。変数名は標準の規則 (英語) に従います。

累積プリミティブには、順方向と逆方向の伝播の概念がありません。累積操作の逆伝播は、単純な単位元操作です。

実行引数

実行時に入力と出力は、次の表で示す実行引数インデックスにマップする必要があります。

操作の詳細

  • dst メモリー形式は、ユーザーが指定することも、プリミティブによって取得することもできます。推奨される方法は、プリミティブが適切な形式を選択できるようにすることです。

  • 累積プリミティブでは、すべてのソースとデスティネーション・テンソルは同一形状である必要があります。暗黙のブロードキャストはサポートされません。

post-ops と属性

累積プリミティブは post-ops や属性をサポートしません。

サポートされるデータタイプ

累積プリミティブは、ソースとデスティネーション・テンソルの任意のデータタイプをサポートします。

データ表現

ソース、デスティネーション

累積プリミティブは任意のデータテンソルで機能します。論理的な次元については特別な意味はありません。

API

API については、こちら (英語) をご覧ください。


法務上の注意書き

The content of this oneAPI Specification is licensed under the Creative Commons Attribution 4.0 International License (英語). Unless stated otherwise, the sample code examples in this document are released to you under the MIT license (英語).

This specification is a continuation of Intel’s decades-long history of working with standards groups and industry/academia initiatives such as The Khronos Group*, to create and define specifications in an open and fair process to achieve interoperability and interchangeability. oneAPI is intended to be an open specification and we encourage you to help us make it better. Your feedback is optional, but to enable Intel to incorporate any feedback you may provide to this specification, and to further upstream your feedback to other standards bodies, including The Khronos Group SYCL* specification, please submit your feedback under the terms and conditions below. Any contribution of your feedback to the oneAPI Specification does not prohibit you from also contributing your feedback directly to other standard bodies, including The Khronos Group under their respective submission policies.

By opening an issue, providing feedback, or otherwise contributing to the specification, you agree that Intel will be free to use, disclose, reproduce, modify, license, or otherwise distribute your feedback at its sole discretion without any obligations or restrictions of any kind, including without limitation, intellectual property rights or licensing obligations.

This document contains information on products, services and/or processes in development. All information provided here is subject to change without notice.

© Intel Corporation. Intel、インテル、Intel ロゴ、その他のインテルの名称やロゴは、Intel Corporation またはその子会社の商標です。

* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

« パート 25        目次        パート 27 »
タイトルとURLをコピーしました