このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
attentionLayer
説明
ドット積注意層は、重み付き乗算演算を使用して入力の一部に焦点を当てます。
作成
説明
layer = attentionLayer(
は、1 つ以上の名前と値の引数を使用して、numHeads
,Name=Value
)Scale
、HasPaddingMaskInput
、HasScoresOutput
、AttentionMask
、DropoutProbability
、および Name
の各プロパティも設定します。
プロパティ
アテンション
ヘッドの数。正の整数として指定します。
各ヘッドは入力に対して個別の線形変換を実行し、アテンションの重みを独立して計算します。層はこれらのアテンション重みを使用して入力表現の重み付き和を計算し、コンテキスト ベクトルを生成します。ヘッドの数を増やすと、モデルはさまざまな種類の依存関係を捉え、入力のさまざまな部分に同時に注意を向けることができるようになります。ヘッドの数を減らすと、層の計算コストを削減できます。
NumHeads
の値は、入力されたクエリ、キー、および値のチャネル次元のサイズを均等に分割しなければなりません。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
クエリとキーのドット積をスケーリングするための乗法係数。次のいずれかの値として指定します。
"auto"
— ドット積を1/sqrt(D)
で乗算します。ここで、D
はキーのチャネル数をNumHeads
で割った値です。数値スカラー — ドット積を指定されたスカラーで乗算します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| char
| string
| cell
層にパディング マスクを表す入力があるかどうかを示すフラグ。0
(false
) または 1
(true
) として指定します。
HasPaddingMaskInput
プロパティが 0
(false
) の場合、層は、それぞれ入力されたクエリ、キー、および値に対応する "query"
、"key"
、および "value"
という名前の 3 つの入力をもちます。この場合、層はすべての要素をデータとして扱います。
HasPaddingMaskInput
プロパティが 1
(true
) の場合、層は、パディング マスクに対応する "mask"
という名前の追加の入力をもちます。この場合、パディング マスクは 1 と 0 から成る配列になります。層は、クエリ、キー、値の要素について、マスク内の対応する要素が 1 の場合は使用し、0 の場合は無視します。
パディング マスクの形式は入力されたキーの形式と一致していなければなりません。パディング マスクの "S"
(空間)、"T"
(時間)、および "B"
(バッチ) の次元のサイズは、キーと値の対応する次元のサイズと一致していなければなりません。
パディング マスクには任意の数のチャネルを含めることができます。ソフトウェアは、パディング値を示すために最初のチャネルの値のみを使用します。
層にスコア (アテンションの重みとも呼ばれる) を表す出力があるかどうかを示すフラグ。0
(false
) または 1
(true
) として指定します。
HasScoresOutput
プロパティが 0
(false
) の場合、層は、出力データに対応する "out"
という名前の 1 つの出力をもちます。
HasScoresOutput
プロパティが 1
(true
) の場合、層は、それぞれ出力データおよびアテンション スコアに対応する "out"
および "scores"
という名前の 2 つの入力をもちます。
attention 演算を適用するときに含める要素を示すアテンション マスク。次のいずれかの値として指定します。
"none"
— 位置に関係なく、要素に注意を払うことを抑制しません。AttentionMask
が"none"
である場合、ソフトウェアはパディング マスクのみを使用して注意を抑制します。"causal"
— 入力されたクエリの"S"
(空間) または"T"
(時間) 次元の位置 m にある要素が、入力されたキーと値の対応する次元において、位置 n (n は m より大きい) にある要素に注意を払うことを抑制します。このオプションは自己回帰モデルに使用します。論理配列または数値配列 — 指定された配列内の対応する要素が
0
である場合、入力されたキーと値の要素に注意を払うことを抑制します。指定された配列は、Nk 行 Nq 列の行列、または Nk×Nq×numObservations
の配列でなければなりません。Nk は入力されたキーの"S"
(空間) 次元または"T"
(時間) 次元のサイズ、Nq は入力されたクエリの対応する次元のサイズ、numObservations
は入力されたクエリの"B"
次元のサイズです。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| char
| string
アテンション スコアをドロップアウトする確率。範囲 [0, 1) のスカラーとして指定します。
学習中、ソフトウェアは指定された確率を使用して、アテンション スコアの値をランダムにゼロに設定します。これらのドロップアウトにより、モデルが特定の依存関係に過度に依存することを防ぎ、より堅牢で一般化可能な表現を学習できるようになります。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
層
層への入力の数。3
または 4
として返されます。
HasPaddingMaskInput
プロパティが 0
(false
) の場合、層は、それぞれ入力されたクエリ、キー、および値に対応する "query"
、"key"
、および "value"
という名前の 3 つの入力をもちます。この場合、層はすべての要素をデータとして扱います。
HasPaddingMaskInput
プロパティが 1
(true
) の場合、層は、パディング マスクに対応する "mask"
という名前の追加の入力をもちます。この場合、パディング マスクは 1 と 0 から成る配列になります。層は、クエリ、キー、値の要素について、マスク内の対応する要素が 1 の場合は使用し、0 の場合は無視します。
パディング マスクの形式は入力されたキーの形式と一致していなければなりません。パディング マスクの "S"
(空間)、"T"
(時間)、および "B"
(バッチ) の次元のサイズは、キーと値の対応する次元のサイズと一致していなければなりません。
パディング マスクには任意の数のチャネルを含めることができます。ソフトウェアは、パディング値を示すために最初のチャネルの値のみを使用します。
データ型: double
層の入力名。文字ベクトルの cell 配列として返されます。
HasPaddingMaskInput
プロパティが 0
(false
) の場合、層は、それぞれ入力されたクエリ、キー、および値に対応する "query"
、"key"
、および "value"
という名前の 3 つの入力をもちます。この場合、層はすべての要素をデータとして扱います。
HasPaddingMaskInput
プロパティが 1
(true
) の場合、層は、パディング マスクに対応する "mask"
という名前の追加の入力をもちます。この場合、パディング マスクは 1 と 0 から成る配列になります。層は、クエリ、キー、値の要素について、マスク内の対応する要素が 1 の場合は使用し、0 の場合は無視します。
パディング マスクの形式は入力されたキーの形式と一致していなければなりません。パディング マスクの "S"
(空間)、"T"
(時間)、および "B"
(バッチ) の次元のサイズは、キーと値の対応する次元のサイズと一致していなければなりません。
パディング マスクには任意の数のチャネルを含めることができます。ソフトウェアは、パディング値を示すために最初のチャネルの値のみを使用します。
AttentionLayer
オブジェクトは、このプロパティを文字ベクトルの cell 配列として格納します。
この プロパティ は読み取り専用です。
層の出力の数。
HasScoresOutput
プロパティが 0
(false
) の場合、層は、出力データに対応する "out"
という名前の 1 つの出力をもちます。
HasScoresOutput
プロパティが 1
(true
) の場合、層は、それぞれ出力データおよびアテンション スコアに対応する "out"
および "scores"
という名前の 2 つの入力をもちます。
データ型: double
この プロパティ は読み取り専用です。
層の出力名。
HasScoresOutput
プロパティが 0
(false
) の場合、層は、出力データに対応する "out"
という名前の 1 つの出力をもちます。
HasScoresOutput
プロパティが 1
(true
) の場合、層は、それぞれ出力データおよびアテンション スコアに対応する "out"
および "scores"
という名前の 2 つの入力をもちます。
AttentionLayer
オブジェクトは、このプロパティを文字ベクトルの cell 配列として格納します。
例
10 個のヘッドをもつドット積注意層を作成します。
layer = attentionLayer(10)
layer = AttentionLayer with properties: Name: '' NumInputs: 3 InputNames: {'query' 'key' 'value'} NumHeads: 10 Scale: 'auto' AttentionMask: 'none' DropoutProbability: 0 HasPaddingMaskInput: 0 HasScoresOutput: 0 Learnable Parameters No properties. State Parameters No properties. Show all properties
クロスアテンションによるシンプルなニューラル ネットワークを作成します。
numChannels = 256; numHeads = 8; net = dlnetwork; layers = [ sequenceInputLayer(1,Name="query") fullyConnectedLayer(numChannels) attentionLayer(numHeads,Name="attention") fullyConnectedLayer(numChannels,Name="fc-out")]; net = addLayers(net,layers); layers = [ sequenceInputLayer(1, Name="key-value") fullyConnectedLayer(numChannels,Name="fc-key")]; net = addLayers(net,layers); net = connectLayers(net,"fc-key","attention/key"); net = addLayers(net, fullyConnectedLayer(numChannels,Name="fc-value")); net = connectLayers(net,"key-value","fc-value"); net = connectLayers(net,"fc-value","attention/value");
ネットワークをプロットで表示します。
figure plot(net)
アルゴリズム
attention 演算は、重み付き乗算を使用して入力の一部に焦点を当てます。
シングルヘッドのドット積 attention 演算は、次によって与えられます。
ここで、
Q はクエリを表します。
K はキーを表します。
V は値を表します。
はスケーリング係数を示します。
M は 1 と 0 から成るマスク配列です。
p はドロップアウトの確率です。
マスク演算では、ゼロ値のマスク要素に対して入力の値を に設定することにより、行列乗算の値を含める、または除外します。マスクは、パディング マスクとアテンション マスクの共用体です。ソフトマックス関数は、和が 1 となるように入力データの値をチャネル次元全体で正規化します。ドロップアウト演算は、確率 p で要素をゼロに設定します。
マルチヘッドのドット積 attention 演算は、次によって与えられます。
ここで、
h はヘッドの数です。
各々の は、次で与えられるヘッド演算の出力を表します。
層配列内または層グラフ内の層は、形式を整えた dlarray
オブジェクトとして後続の層にデータを渡します。dlarray
オブジェクトの形式は文字列で、各文字はデータ内の対応する次元を表します。この形式には次の文字が 1 つ以上含まれています。
"S"
— 空間"C"
— チャネル"B"
— バッチ"T"
— 時間"U"
— 指定なし
たとえば、4 次元配列として表された 2 次元イメージ データがあり、最初の 2 つの次元がイメージの空間次元に対応し、3 番目の次元がイメージのチャネルに対応し、4 番目の次元がバッチ次元に対応している場合、このイメージ データは "SSCB"
(空間、空間、チャネル、バッチ) という形式で記述できます。
functionLayer
オブジェクトを使用するか、関数 forward
と関数 predict
を dlnetwork
オブジェクトと共に使用して、カスタム層の開発などの自動微分ワークフローで、これらの dlarray
オブジェクトを操作できます。
次の表は、AttentionLayer
オブジェクトでサポートされている入力形式、および対応する出力形式を示しています。ソフトウェアが nnet.layer.Formattable
クラスを継承していないカスタム層、または Formattable
プロパティが 0
(false
) に設定された FunctionLayer
オブジェクトに層の出力を渡す場合、その層は形式を整えていない dlarray
オブジェクトを受け取り、この表に示された形式に従って次元が並べられます。ここには一部の形式のみを示します。層では、追加の "S"
(空間) 次元または "U"
(未指定) 次元をもつ形式など、追加の形式がサポートされている場合があります。
クエリ、キー、値の形式 | 出力形式 | スコアの出力形式 ( |
---|---|---|
"CB" (channel、batch) | "CB" (channel、batch) | "UUUU" (unspecified、unspecified、unspecified、unspecified) |
"SCB" (spatial、channel、batch) | "SCB" (spatial、channel、batch) | "UUUU" (unspecified、unspecified、unspecified、unspecified) |
"CBT" (channel、batch、time) | "CBT" (channel、batch、time) | "UUUU" (unspecified、unspecified、unspecified、unspecified) |
"SC" (spatial、channel) | "SC" (spatial、channel) | "UUU" (unspecified、unspecified、unspecified) |
"CT" (channel、time) | "CT" (channel、time) | "UUU" (unspecified、unspecified、unspecified) |
"BT" (batch、time) | "CBT" (channel、batch、time) | "UUUU" (unspecified、unspecified、unspecified、unspecified) |
"SB" (spatial、batch) | "SCB" (spatial、channel、batch) | "UUUU" (unspecified、unspecified、unspecified、unspecified) |
HasMaskInput
が 1
(true
) である場合、マスクはクエリ、キー、および値と同じ形式でなければなりません。
参照
[1] Vaswani, Ashish, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, and Illia Polosukhin. "Attention is all you need." In Advances in Neural Information Processing Systems, Vol. 30. Curran Associates, Inc., 2017. https://papers.nips.cc/paper/7181-attention-is-all-you-need.
拡張機能
使用上の注意および制限:
HasScoresOutput
がtrue
に設定されている場合、コード生成はサポートされません。コード生成では、指定なし (U) の次元をもつ
dlarray
オブジェクトをこの層に渡すことはサポートされていません。
使用上の注意および制限については、「C/C++ コード生成」セクションを参照してください。GPU コード生成にも同じ制限が適用されます。
バージョン履歴
R2024a で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)