selfAttentionLayer
説明
self-attention 層は、入力の single-head または multihead の self-attention を計算します。
この層は以下を行います。
入力から query、key、および value を計算する
query、key、および value を使用して、head 全体でスケールされた dot-product attention を計算する
head からの結果をマージする
マージされた結果に対して線形変換を実行する
作成
構文
説明
は、指定された数の head と query チャネルをもつ self-attention 層を作成します。layer = selfAttentionLayer(numHeads,numQueryChannels)
は、1 つ以上の名前と値の引数を使用して、書き込み可能なプロパティを設定します。たとえば、layer = selfAttentionLayer(numHeads,numQueryChannels,Name=Value)selfAttentionLayer(3,12,DropoutProbability=0.1) は、3 つの head と 12 個の query チャネルをもつ self-attention 層を作成し、DropoutProbability プロパティを 0.1 に設定します。
入力引数
この プロパティ は読み取り専用です。
attention head 数。正の整数として指定します。
各 head は入力に対して個別の線形変換を実行し、attention の重みを独立して計算します。層はこれらの attention 重みを使用して入力表現の重み付き和を計算し、コンテキスト ベクトルを生成します。head の数を増やすと、モデルはさまざまな種類の依存関係を捉え、入力のさまざまな部分に同時に注意を向けることができるようになります。head の数を減らすと、層の計算コストを削減できます。
numHeads の値は numQueryChannels を均等に割り切る数でなければなりません。
この引数は NumHeads プロパティを設定します。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
query のチャネル数。正の整数として指定します。
numQueryChannels の値は numHeads で割り切れなければなりません。
この引数は NumQueryChannels プロパティを設定します。 (R2026a 以降)
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
プロパティ
Self-Attention
このプロパティは、オブジェクト作成後、読み取り専用になります。SelfAttentionLayer オブジェクトを作成する場合、このプロパティを設定するには、対応する位置入力の引数を使用します。
attention head 数。正の整数として指定します。
各 head は入力に対して個別の線形変換を実行し、attention の重みを独立して計算します。層はこれらの attention 重みを使用して入力表現の重み付き和を計算し、コンテキスト ベクトルを生成します。head の数を増やすと、モデルはさまざまな種類の依存関係を捉え、入力のさまざまな部分に同時に注意を向けることができるようになります。head の数を減らすと、層の計算コストを削減できます。
データ型: double
R2026a 以降
このプロパティは、オブジェクト作成後、読み取り専用になります。SelfAttentionLayer オブジェクトを作成する場合、このプロパティを設定するには、対応する位置入力の引数を使用します。
query のチャネル数。正の整数として指定します。
データ型: double
R2026a 以降
このプロパティは、オブジェクト作成後、読み取り専用になります。SelfAttentionLayer オブジェクトを作成する場合、このプロパティを設定するには、対応する名前と値の引数を使用します。
query グループの数 (key-value head の数と同じ)。正の整数として指定します。NumQueryGroups の値は NumQueryChannels を割り切る数でなければなりません。
NumQueryGroups の値によって、attention 演算のタイプを次のように指定します。
multihead attention の場合は、
NumQueryGroupsをnumHeadsに設定する。multiquery attention (MQA) の場合は、
NumQueryGroupsを1に設定する。grouped-query attention (GQA) の場合は、
NumQueryGroupsを1~numHeadsの正の整数に設定する。
query グループの数が 1 より大きい場合、この演算によって、head ごとに query チャネルのグループが作成され、各グループ内で attention 演算が適用されます。
たとえば、3 つの query グループをもつ 6 つの head の場合、この演算によって query チャネルは head (h1、…、h6) に分割され、head グループ g1=(h1,h2)、g2=(h3,h4)、および g3=(h5,h6) が作成されます。この演算によって、key と value のチャネルも head g1、g2、および g3 に分割されます。
query グループの数が head の数と一致する場合、各グループは head を 1 つずつもち、multihead attention と同等になります。query グループの数が 1 である場合、すべての head が同じグループに属し、multiquery attention と同等になります。
既定値は NumHeads プロパティ値です。プログラムで query グループの数を head の数に設定するには、層の作成時に名前と値の引数 NumQueryGroups を "num-heads" に設定します。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string
この プロパティ は読み取り専用です。
key のチャネル数。正の整数として指定します。
層は、key のチャネル数として NumQueryChannels*NumQueryGroups/NumHeads を使用します。 (R2026a 以降)
R2026a より前: 層は、key のチャネル数として numQueryChannels を使用します。これは、query グループの数が head の数と一致する場合と等価です。
データ型: double
このプロパティは、オブジェクト作成後、読み取り専用になります。SelfAttentionLayer オブジェクトを作成する場合、このプロパティを設定するには、対応する名前と値の引数を使用します。
value のチャネル数。次のいずれかの値として指定します。
"auto"—NumKeyChannelsを使用します。正の整数 — 指定された数のチャネルを使用します。この値は
NumHeadsで割り切れなければなりません。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string
このプロパティは、オブジェクト作成後、読み取り専用になります。SelfAttentionLayer オブジェクトを作成する場合、このプロパティを設定するには、対応する名前と値の引数を使用します。
層出力のチャネル数。次のいずれかの値として指定します。
"auto"— 層入力のチャネル数を使用します。正の整数 — 指定された数のチャネルを使用します。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string
このプロパティは、オブジェクト作成後、読み取り専用になります。SelfAttentionLayer オブジェクトを作成する場合、このプロパティを設定するには、対応する名前と値の引数を使用します。
層にパディング マスクを表す入力があるかどうかを示すフラグ。0 (false) または 1 (true) として指定します。
HasPaddingMaskInput プロパティが 0 (false) の場合、層は、入力データに対応する "in" という名前の 1 つの入力をもちます。この場合、層はすべての要素をデータとして扱います。
HasPaddingMaskInput プロパティが 1 (true) の場合、層は、それぞれ入力データおよびマスクに対応する "in" および "mask" という名前の 2 つの入力をもちます。この場合、パディング マスクは 1 と 0 から成る配列になります。層は、入力の要素について、マスク内の対応する要素が 1 の場合は使用し、0 の場合は無視します。
パディング マスクの次元ラベルは、入力データの次元ラベルと一致していなければなりません ("C" (チャネル) 次元および "U" (未指定) 次元は無視されます)。 (R2026a 以降)
R2026a より前: パディング マスクの形式は入力データの形式と一致していなければなりません。
パディング マスクの "S" (空間) 次元または "T" (時間) 次元のサイズは、入力内の対応する次元のサイズ、および KeyState プロパティと ValueState プロパティにおける 2 番目の次元のサイズの合計と一致していなければなりません。パディング マスクの "B" (バッチ) 次元のサイズは、入力内の対応する次元のサイズと一致していなければなりません。
パディング マスクには任意の数のチャネルを含めることができます。ソフトウェアは、最初のチャネルの value をパディング値の表示にのみ使用します。
このプロパティは、オブジェクト作成後、読み取り専用になります。SelfAttentionLayer オブジェクトを作成する場合、このプロパティを設定するには、対応する名前と値の引数を使用します。
key と value のペアの要素に注意を払うことを抑制するマスク。次のいずれかの値として指定します。
"none"— 位置に基づいて要素に注意を払うことを抑制しません。HasPaddingMaskInputが1(true) だった場合、層はパディング要素のみに注意を払うことを抑制します。"causal"— 位置Mの要素が位置Nの要素に対して注意を払うことを抑制します (ここで、NはMより大きい)。このオプションは自己回帰モデルに使用します。
attention スコアをドロップアウトする確率。範囲 [0, 1) のスカラーとして指定します。
学習中、ソフトウェアは指定された確率を使用して、attention スコアの値をランダムにゼロに設定します。これらのドロップアウトにより、モデルが特定の依存関係に過度に依存することを防ぎ、より堅牢で一般化可能な表現を学習できるようになります。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
このプロパティは、オブジェクト作成後、読み取り専用になります。SelfAttentionLayer オブジェクトを作成する場合、このプロパティを設定するには、対応する名前と値の引数を使用します。
層にスコア (attention の重みとも呼ばれる) を表す出力があるかどうかを示すフラグ。0 (false) または 1 (true) として指定します。
HasScoresOutput プロパティが 0 (false) の場合、層は、出力データに対応する "out" という名前の 1 つの出力をもちます。
HasScoresOutput プロパティが 1 (true) の場合、層は、それぞれ出力データおよび attention スコアに対応する "out" および "scores" という名前の 2 つの入力をもちます。
この プロパティ は読み取り専用です。
入力チャネル数。次のいずれかの値として指定します。
"auto"— ネットワークの初期化時に入力チャネルの数を自動的に決定します。正の整数 — 指定された数の入力チャネルの層を構成します。
InputSizeと層入力データのチャネル数は一致しなければなりません。
データ型: double | char
パラメーターと初期化
query、key、value、および出力の重みを初期化する関数。次のいずれかの値として指定します。
"glorot"— Glorot 初期化子[2] (Xavier 初期化子とも呼ばれる) を使用して重みを初期化します。Glorot 初期化子は、平均 0、分散2/(numIn + numOut)の一様分布から個別にサンプリングを行います。numInとnumOutの value は重み行列によって決まります。重み numInnumOutQuery InputSizeNumQueryChannelsKey InputSizeNumKeyChannelsValue InputSizeNumValueChannels出力 NumValueChannelsOutputSize"he"— He 初期化子[3]を使用して重みを初期化します。He 初期化子は、平均 0、分散2/numInの正規分布からサンプリングを行います。numInとnumOutの value は重み行列によって決まります。重み numInnumOutQuery InputSizeNumQueryChannelsKey InputSizeNumKeyChannelsValue InputSizeNumValueChannels出力 NumValueChannelsOutputSize"narrow-normal"— 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、重みを初期化します。"zeros"— 0 で重みを初期化します。"ones"— 1 で重みを初期化します。関数ハンドル — カスタム関数で重みを初期化します。関数ハンドルを指定する場合、関数の構文は
weights = func(sz)という形式でなければなりません。ここで、szは重みのサイズです。例については、カスタム重み初期化関数の指定を参照してください。
層は、対応する重みプロパティが空の場合にのみ重みを初期化します。
SelfAttentionLayer オブジェクトは、このプロパティを文字ベクトルまたは関数ハンドルとして格納します。
データ型: char | string | function_handle
query、key、value、および出力のバイアスを初期化する関数。次のいずれかの値として指定します。
"zeros"— 0 でバイアスを初期化します。"ones"— 1 でバイアスを初期化します。"narrow-normal"— 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、バイアスを初期化します。関数ハンドル — カスタム関数でバイアスを初期化します。関数ハンドルを指定する場合、関数は
bias = func(sz)という形式でなければなりません。ここで、szはバイアスのサイズです。
層は、対応するバイアス プロパティが空の場合にのみバイアスを初期化します。
SelfAttentionLayer オブジェクトは、このプロパティを文字ベクトルまたは関数ハンドルとして格納します。
データ型: char | string | function_handle
query の重み。NumQueryChannels 行 numInputChannels 列の行列または [] として指定します。ここで、numInputChannels は層入力内のチャネル数です。
データ型: single | double
key の重み。NumKeyChannels 行 numInputChannels 列の行列または [] として指定します。ここで、numInputChannels は層入力内のチャネル数です。
データ型: single | double
value の重み。NumValueChannels 行 numInputChannels 列の行列または [] として指定します。ここで、numInputChannels は層入力内のチャネル数です。
データ型: single | double
出力の重み。OutputSize 行 NumValueChannels 列の行列または [] として指定します。
データ型: single | double
query のバイアス。NumQueryChannels 行 1 列のベクトルまたは [] として指定します。
データ型: single | double
key のバイアス。NumKeyChannels 行 1 列のベクトルまたは [] として指定します。
データ型: single | double
value のバイアス。NumValueChannels 行 1 列のベクトルまたは [] として指定します。
データ型: single | double
出力のバイアス。OutputSize 行 1 列のベクトルまたは [] として指定します。
データ型: single | double
状態
R2026a 以降
key の状態。NumKeyChannels×x×b の数値配列または [] として指定します。ここで、b は入力の "B" (バッチ) 次元のサイズであり、x は任意の値とすることができます。
AttentionMask プロパティが "causal" に設定された SelfAttentionLayer オブジェクトを含むネットワークの状態を更新すると、KeyState プロパティには、ネットワークの以前のフォワード パスで使用された key が格納されます。AttentionMask が "none" である場合、KeyState プロパティは空でなければなりません。
このプロパティを手動で設定した後に resetState 関数を呼び出すと、key の状態がこの値に設定されます。
データ型: single | double
R2026a 以降
value の状態。NumValueChannels×x×b の数値配列または [] として指定します。ここで、b は入力の "B" (バッチ) 次元のサイズであり、x は任意の値とすることができます。
AttentionMask プロパティが "causal" に設定された SelfAttentionLayer を含むネットワークの状態を更新すると、このプロパティには、ネットワークの以前のフォワード パスで使用された値が格納されます。AttentionMask が "none" である場合、ValueState プロパティは空でなければなりません。
このプロパティを手動で設定した後に resetState 関数を呼び出すと、value の状態がこの値に設定されます。
データ型: single | double
学習率および正則化
query、key、value、および出力の重みの学習率係数。非負のスカラーとして指定します。
この係数にグローバル学習率が乗算されて、この層の重みの学習率が決定されます。たとえば、WeightLearnRateFactor が 2 の場合、この層の重みの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions で指定した設定に基づいて、グローバル学習率が決定されます。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
query、key、value、および出力のバイアスの学習率係数。非負のスカラーとして指定します。
この係数にグローバル学習率が乗算されて、この層のバイアスの学習率が決定されます。たとえば、BiasLearnRateFactor が 2 の場合、層のバイアスの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions で指定した設定に基づいて、グローバル学習率が決定されます。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
query、key、value、および出力の重みの L2 正則化係数。非負のスカラーとして指定します。
この係数にグローバル L2 正則化係数が乗算されて、この層の重みの L2 正則化が決定されます。たとえば、WeightL2Factor が 2 の場合、この層の重みの L2 正則化はグローバル L2 正則化係数の 2 倍になります。グローバル L2 正則化係数は、関数 trainingOptions を使用して指定できます。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
query、key、value、および出力のバイアスの L2 正則化係数。非負のスカラーとして指定します。
この係数にグローバル L2 正則化係数が乗算されて、この層のバイアスの L2 正則化が決定されます。たとえば、BiasL2Factor が 2 の場合、この層のバイアスの L2 正則化はグローバル L2 正則化係数の 2 倍になります。関数 trainingOptions で指定した設定に基づいて、グローバル L2 正則化係数が決定されます。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
層
この プロパティ は読み取り専用です。
層への入力の数。1 または 2 として返されます。
HasPaddingMaskInput プロパティが 0 (false) の場合、層は、入力データに対応する "in" という名前の 1 つの入力をもちます。この場合、層はすべての要素をデータとして扱います。
HasPaddingMaskInput プロパティが 1 (true) の場合、層は、それぞれ入力データおよびマスクに対応する "in" および "mask" という名前の 2 つの入力をもちます。この場合、パディング マスクは 1 と 0 から成る配列になります。層は、入力の要素について、マスク内の対応する要素が 1 の場合は使用し、0 の場合は無視します。
データ型: double
この プロパティ は読み取り専用です。
層の入力名。文字ベクトルの cell 配列として返されます。
HasPaddingMaskInput プロパティが 0 (false) の場合、層は、入力データに対応する "in" という名前の 1 つの入力をもちます。この場合、層はすべての要素をデータとして扱います。
HasPaddingMaskInput プロパティが 1 (true) の場合、層は、それぞれ入力データおよびマスクに対応する "in" および "mask" という名前の 2 つの入力をもちます。この場合、パディング マスクは 1 と 0 から成る配列になります。層は、入力の要素について、マスク内の対応する要素が 1 の場合は使用し、0 の場合は無視します。
SelfAttentionLayer オブジェクトは、このプロパティを文字ベクトルの cell 配列として格納します。
この プロパティ は読み取り専用です。
層の出力の数。
HasScoresOutput プロパティが 0 (false) の場合、層は、出力データに対応する "out" という名前の 1 つの出力をもちます。
HasScoresOutput プロパティが 1 (true) の場合、層は、それぞれ出力データおよび attention スコアに対応する "out" および "scores" という名前の 2 つの入力をもちます。
データ型: double
この プロパティ は読み取り専用です。
層の出力名。
HasScoresOutput プロパティが 0 (false) の場合、層は、出力データに対応する "out" という名前の 1 つの出力をもちます。
HasScoresOutput プロパティが 1 (true) の場合、層は、それぞれ出力データおよび attention スコアに対応する "out" および "scores" という名前の 2 つの入力をもちます。
SelfAttentionLayer オブジェクトは、このプロパティを文字ベクトルの cell 配列として格納します。
例
head 数 8、key と query のチャネル数 256 の self-attention 層を作成します。
layer = selfAttentionLayer(8,256)
layer =
SelfAttentionLayer with properties:
Name: ''
AttentionMask: 'none'
HasPaddingMaskInput: 0
HasScoresOutput: 0
Hyperparameters
InputSize: 'auto'
NumHeads: 8
NumQueryGroups: 8
NumQueryChannels: 256
NumKeyChannels: 256
NumValueChannels: 'auto'
OutputSize: 'auto'
DropoutProbability: 0
Learnable Parameters
QueryWeights: []
KeyWeights: []
ValueWeights: []
OutputWeights: []
QueryBias: []
KeyBias: []
ValueBias: []
OutputBias: []
State Parameters
KeyState: []
ValueState: []
Show all properties
層配列に self-attention 層を含めます。
layers = [
sequenceInputLayer(12)
selfAttentionLayer(4,12)
layerNormalizationLayer
fullyConnectedLayer(9)
softmaxLayer];アルゴリズム
attention 演算は、重み付き乗算を使用して入力の一部に焦点を当てます。
single-head の dot-product attention 演算は、次によって与えられます。
ここで、
Q は query を表します。
K は key を表します。
V は value を表します。
はスケーリング係数を示します。
M は 1 と 0 から成るマスク配列です。
p はドロップアウトの確率です。
マスク演算では、ゼロ値のマスク要素に対して入力の値を に設定することにより、行列乗算の値を含める、または除外します。マスクは、パディング マスクと attention マスクの共用体です。ソフトマックス関数は、和が 1 となるように入力データの値をチャネル次元全体で正規化します。ドロップアウト演算は、確率 p で要素をゼロに設定します。
multihead attention 演算は、複数の head にわたって attention 演算を適用します。各 head は、独自の学習可能なquery、key、および value の射影行列を使用します。
query Q、key K、value V に対する multihead attention 演算は、次で与えられます。
ここで、
h は head の数です。
WO は出力の学習可能なパラメーターの射影行列です。
multihead attention 演算では、query、key、value に対する学習可能な各射影行列が、連結行列 Wi で構成されます。ここで、i は head のインデックスです。
head 演算は、次によって与えられます。
ここで、
i は head のインデックスです。
WQ は query の学習可能なパラメーターの射影行列です。
WK は key の学習可能なパラメーターの射影行列です。
WV は値の学習可能なパラメーターの射影行列です。
multiquery attention (MQA) 演算は、複数の head にわたって attention 演算を適用します。各 head は独自の学習可能な query 射影行列を使用します。この演算では、すべての head にわたって同じ学習可能な key と value の射影行列が使用されます。
query Q、key K、value V に対する multiquery attention 演算は、次で与えられます。
ここで、
h は head の数です。
WO は出力の学習可能なパラメーターの射影行列です。
multiquery attention 演算では、query に対する学習可能な射影行列のみが連結行列 Wi で構成されます。ここで、i は head のインデックスです。
multiquery attention の場合、head 演算は、次によって与えられます。
ここで、
i は head のインデックスです。
WQ は query の学習可能なパラメーターの射影行列です。
WK は key の学習可能なパラメーターの射影行列です。
WV は値の学習可能なパラメーターの射影行列です。
grouped query attention (GQA) 演算は、いくつかの head にわたって attention 演算を適用します。この演算では、同じ学習可能な query 射影行列を使用するグループに head を分割します。この演算では、query head の各グループに対して同じ学習可能な key と value の射影行列が使用されます。
query Q、key K、value V に対する grouped-query attention 演算は、次で与えられます。
ここで、
h は head の数です。
WO は出力の学習可能なパラメーターの射影行列です。
grouped query attention 演算では、次のようになります。
query に対する学習可能な射影行列は連結行列 Wi で構成されます。ここで、i は head のインデックスです。
key と value に対する学習可能な射影行列は連結行列 Wj で構成されます。ここで、j はグループのインデックスです。
query グループの数が 1 より大きい場合、この演算によって、head ごとに query チャネルのグループが作成され、各グループ内で attention 演算が適用されます。
たとえば、3 つの query グループをもつ 6 つの head の場合、この演算によって query チャネルは head (h1、…、h6) に分割され、head グループ g1=(h1,h2)、g2=(h3,h4)、および g3=(h5,h6) が作成されます。この演算によって、key と value のチャネルも head g1、g2、および g3 に分割されます。
query グループの数が head の数と一致する場合、各グループは head を 1 つずつもち、multihead attention と同等になります。query グループの数が 1 である場合、すべての head が同じグループに属し、multiquery attention と同等になります。
head 演算は、次によって与えられます。
ここで、
i は head のインデックスです。
g(i) は head i のグループ番号です。
WQ は query の学習可能なパラメーターの射影行列です。
WK は key の学習可能なパラメーターの射影行列です。
WV は値の学習可能なパラメーターの射影行列です。
self-attention 演算は、入力データに query、key、value を設定することと等価です。
selfAttention(X) = attention(X,X,X)
multiheadSelfAttention(X) = multiheadAttention(X,X,X)
multiquerySelfAttention(X) = multiqueryAttention(X,X,X)
groupedQuerySelfAttention(X) = groupedQueryAttention(X,X,X)
いずれの場合も、演算では key、query、value に対して個別の学習可能なパラメーターが使用されます。たとえば、multiheadSelfAttention(X) を計算するには、次で与えられる head 演算を使用します。
ここで、
i は head のインデックスです。
X は入力データです。
WQ は query の学習可能なパラメーターの射影行列です。
WK は key の学習可能なパラメーターの射影行列です。
WV は値の学習可能なパラメーターの射影行列です。
層配列内または層グラフ内の大半の層は、形式を整えた dlarray オブジェクトとして後続の層にデータを渡します。dlarray オブジェクトの形式は文字列で、各文字はデータ内の対応する次元を表します。この形式には次の文字が 1 つ以上含まれています。
"S"— 空間"C"— チャネル"B"— バッチ"T"— 時間"U"— 指定なし
たとえば、4 次元配列として表された 2 次元イメージ データがあり、最初の 2 つの次元がイメージの空間次元に対応し、3 番目の次元がイメージのチャネルに対応し、4 番目の次元がバッチ次元に対応している場合、このイメージ データは "SSCB" (空間、空間、チャネル、バッチ) という形式で記述できます。
以下などの自動微分ワークフローで、これらの dlarray オブジェクトを操作できます。
カスタム層を開発する
functionLayerオブジェクトを使用する
次の表は、SelfAttentionLayer オブジェクトでサポートされている入力形式、および対応する出力形式を示しています。ソフトウェアが nnet.layer.Formattable クラスを継承していないカスタム層、または Formattable プロパティが 0 (false) に設定された FunctionLayer オブジェクトに層の出力を渡す場合、その層は形式を整えていない dlarray オブジェクトを受け取り、この表に示された形式に従って次元が並べられます。ここには層がサポートする形式の一部の形式のみを示します。層では、追加の "S" (空間) 次元または "U" (未指定) 次元をもつ形式など、追加の形式がサポートされている場合があります。
| 入力形式 | 出力形式 |
|---|---|
"CB" (channel、batch) | "CB" (channel、batch) |
"SCB" (spatial、channel、batch) | "SCB" (spatial、channel、batch) |
"CBT" (channel、batch、time) | "CBT" (channel、batch、time) |
"SC" (spatial、channel) | "SC" (spatial、channel) |
"CT" (channel、time) | "CT" (channel、time) |
"SB" (spatial、batch) | "SCB" (spatial、channel、batch) |
"BT" (batch、time) | "CBT" (channel、batch、time) |
参照
[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_files/paper/2017/hash/3f5ee243547dee91fbd053c1c4a845aa-Abstract.html.
[2] Glorot, Xavier, and Yoshua Bengio. "Understanding the Difficulty of Training Deep Feedforward Neural Networks." In Proceedings of the Thirteenth International Conference on Artificial Intelligence and Statistics, 249–356. Sardinia, Italy: AISTATS, 2010. https://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf
[3] He, Kaiming, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. "Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification." In 2015 IEEE International Conference on Computer Vision (ICCV), 1026–34. Santiago, Chile: IEEE, 2015. https://doi.org/10.1109/ICCV.2015.123
拡張機能
使用上の注意および制限:
HasScoresOutputがtrueに設定されている場合、コード生成はサポートされません。コード生成では、
"U"(指定なし) の次元をもつdlarrayオブジェクトをこの層に渡すことはサポートされていません。コード生成では、この層への入力として、チャネル (C) の次元をもつ
dlarrayオブジェクトを渡さなければなりません。たとえば、コード生成では "SSC" や "SSCBT" などのデータ形式がサポートされます。
使用上の注意および制限については、「C/C++ コード生成」セクションを参照してください。GPU コード生成にも同様の、使用上の注意および制限が適用されます。
バージョン履歴
R2023a で導入NumQueryGroups の値によって、attention 演算のタイプを次のように指定します。
multihead attention の場合は、
NumQueryGroupsをnumHeadsに設定する。multiquery attention (MQA) の場合は、
NumQueryGroupsを1に設定する。grouped-query attention (GQA) の場合は、
NumQueryGroupsを1~numHeadsの正の整数に設定する。
multiquery attention と grouped-query attention を KeyState プロパティおよび ValueState プロパティと組み合わせて使用することで、入力が大きい場合にメモリと計算時間を削減できます。
新しい KeyState プロパティと ValueState プロパティを使用して、以前の key と value をキャッシュし、トランスフォーマー ネットワークによる自己回帰予測を高速化できるようになりました。以前の key と value をキャッシュすると、シーケンス全体ではなく、以前の予測のうち 1 つのみを入力として渡すことができます。以前は、将来の値を予測するために、それまでのすべてのタイム ステップを入力として使用する必要がありました。
key と value をキャッシュし、それらを使用して自己回帰予測を行うには、各予測後にトランスフォーマー ネットワークの状態を設定します。たとえば、次のコードは、トランスフォーマー ネットワークを使用し、1 つ前のタイム ステップを入力として使用してシーケンスの将来の値を予測します。
% Reset the network state. net = resetState(net); % Get the first time step in the sequence. sequence = initialValue; % Predict values for the next 100 time steps. for idx = 1:100 % Make predicitions by passing the previous value as input. previousStep = sequence(end); [sequence(end+1),state] = predict(net,previousStep); % Update the network state. net.State = state; end
HasPaddingMaskInput プロパティの値が 1 (true) である場合、対応するパディング マスク入力の入力データにはチャネル次元は不要です。チャネル次元を指定しないマスクである場合、この演算は大きさが 1 のチャネル次元を想定します。
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)