sinusoidalPositionEncodingLayer
説明
正弦波位置符号化層は、正弦関数演算を使用して位置インデックスをベクトルにマッピングします。トランスフォーマー ニューラル ネットワークでこの層を使用して、シーケンスまたはイメージにおけるデータの位置に関する情報を提供します。
作成
構文
プロパティ
正弦波位置の符号化
この プロパティ は読み取り専用です。
層出力のチャネル数。正の偶数として指定します。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
この プロパティ は読み取り専用です。
入力内の位置。次のいずれかの値として指定します。
"auto"— シーケンスまたは時空間の入力の場合、時間インデックスを位置として使用します。これは、"temporal-indices"を使用することに相当します。1 次元イメージ入力の場合、空間インデックスを位置として使用します。これは、"spatial-indices"を使用することに相当します。その他の入力の場合、入力値を位置として使用します。これは、"data-values"を使用することに相当します。"temporal-indices"— 入力の時間インデックスを位置として使用します。"spatial-indices"— 入力の空間インデックスを位置として使用します。"data-values"— 入力の値を位置として使用します。
層
この プロパティ は読み取り専用です。
層への入力の数。1 として格納されます。この層は単一の入力のみを受け入れます。
データ型: double
この プロパティ は読み取り専用です。
入力名。{'in'} として格納されます。この層は単一の入力のみを受け入れます。
データ型: cell
この プロパティ は読み取り専用です。
層からの出力の数。1 として格納されます。この層には単一の出力のみがあります。
データ型: double
この プロパティ は読み取り専用です。
出力名。{'out'} として格納されます。この層には単一の出力のみがあります。
データ型: cell
例
出力サイズが 300 である正弦波位置符号化層を作成します。
layer = sinusoidalPositionEncodingLayer(300)
layer =
SinusoidalPositionEncodingLayer with properties:
Name: ''
OutputSize: 300
Positions: 'auto'
Learnable Parameters
No properties.
State Parameters
No properties.
Show all properties
正弦波位置符号化層を含むニューラル ネットワークを作成します。
net = dlnetwork;
numChannels = 1;
embeddingOutputSize = 64;
numWords = 128;
maxPosition = 128;
numHeads = 4;
numKeyChannels = 4*embeddingOutputSize;
layers = [
sequenceInputLayer(numChannels,Name="input")
wordEmbeddingLayer(embeddingOutputSize,numWords,Name="word-emb")
sinusoidalPositionEncodingLayer(embeddingOutputSize,Name="pos-enc");
additionLayer(2,Name="add")
selfAttentionLayer(numHeads,numKeyChannels,AttentionMask="causal")
fullyConnectedLayer(numWords)
softmaxLayer];
net = addLayers(net,layers);
net = connectLayers(net,"word-emb","add/in2");ニューラル ネットワーク アーキテクチャを表示します。
plot(net) axis off box off

アルゴリズム
正弦波位置符号化層は、正弦関数演算を使用して位置インデックスをベクトルにマッピングします。この層は、トランスフォーマー ニューラル ネットワークのデータの位置情報を符号化します。
この層の出力は入力と同じ次元数をもちます。出力では、チャネル次元上の位置 p にある各ベクトルは次のように与えられます。
ここで、p は位置、d は OutputSize で与えられる符号化出力サイズ、 は次式で与えられる波長です。
ただし、 です。
Positions が "auto" である場合、出力のレイアウトはデータのタイプによって異なります。
numChannels×numObservations×numTimeStepsの配列で表されるシーケンス データXの場合 (numChannels、numObservations、numTimeStepsはそれぞれ入力のチャネル数、観測値数、タイム ステップ数)、出力はOutputSize×numObservations×by-numTimeStepsの配列Yとなります。ここで、チャネル次元上のY(:,:,t)の各ベクトルは となります。height×numChannels×numObservationsの配列で表される 1 次元イメージ データXの場合 (height、numChannels、numObservationsはそれぞれ入力イメージの高さ、チャネル数、観測値数)、出力はheight×OutputSize×numObservationsの配列Yとなります。ここで、チャネル次元上のY(i,:,:)の各ベクトルは となります。height×width×numChannels×numObservations×numTimeStepsの配列で表される 2 次元イメージ シーケンス データXの場合 (heightとwidthはそれぞれ入力イメージ シーケンスの高さと幅、numChannels、numObservations、numTimeStepsはそれぞれ入力イメージ シーケンスのチャネル数、観測値数、タイム ステップ数)、出力はheight×width×OutputSize×numObservations×numTimeStepsの配列Yとなります。ここで、チャネル次元上のY(:,:,:,:,t)の各ベクトルは となります。
層配列内または層グラフ内の層は、形式を整えた dlarray オブジェクトとして後続の層にデータを渡します。dlarray オブジェクトの形式は文字列で、各文字はデータ内の対応する次元を表します。この形式には次の文字が 1 つ以上含まれています。
"S"— 空間"C"— チャネル"B"— バッチ"T"— 時間"U"— 指定なし
たとえば、4 次元配列として表された 2 次元イメージ データがあり、最初の 2 つの次元がイメージの空間次元に対応し、3 番目の次元がイメージのチャネルに対応し、4 番目の次元がバッチ次元に対応している場合、このイメージ データは "SSCB" (空間、空間、チャネル、バッチ) という形式で記述できます。
functionLayer オブジェクトを使用するか、関数 forward と関数 predict を dlnetwork オブジェクトと共に使用して、カスタム層の開発などの自動微分ワークフローで、これらの dlarray オブジェクトを操作できます。
次の表は、SinusoidalPositionEncodingLayer オブジェクトでサポートされている入力形式、および対応する出力形式を示しています。ソフトウェアが nnet.layer.Formattable クラスを継承していないカスタム層、または Formattable プロパティが 0 (false) に設定された FunctionLayer オブジェクトに層の出力を渡す場合、その層は形式を整えていない dlarray オブジェクトを受け取り、この表に示された形式に従って次元が並べられます。ここには一部の形式のみを示します。層では、追加の "S" (空間) 次元または "U" (未指定) 次元をもつ形式など、追加の形式がサポートされている場合があります。
| 入力形式 | 位置 | 出力形式 |
|---|---|---|
"CB" (channel、batch) |
| "CB" (channel、batch) |
"SCB" (spatial、channel、batch) |
| "SCB" (spatial、channel、batch) |
"SSCB" (spatial、spatial、channel、batch) | "data-values" | "SSCB" (spatial、spatial、channel、batch) |
"SSSCB" (spatial、spatial、spatial、channel、batch) | "data-values" | "SSSCB" (spatial、spatial、spatial、channel、batch) |
"CBT" (channel、batch、time) |
| "CBT" (channel、batch、time) |
"SCBT" (spatial、channel、batch、time) |
| "SCBT" (spatial、channel、batch、time) |
"SSCBT" (spatial、spatial、channel、batch、time) |
| "SSCBT" (spatial、spatial、channel、batch、time) |
"SSSCBT" (spatial、spatial、spatial、channel、batch、time) |
| "SSSCBT" (spatial、spatial、spatial、channel、batch、time) |
"SC" (spatial、channel) |
| "SC" (spatial、channel) |
"SSC" (spatial、spatial、channel) | "data-values" | "SSC" (spatial、spatial、channel) |
"SSSC" (spatial、spatial、spatial、channel) | "data-values" | "SSSC" (spatial、spatial、spatial、channel) |
"SB" (spatial、batch) |
| "SCB" (spatial、channel、batch) |
"SSB" (spatial、spatial、batch) | "data-values" | "SSCB" (spatial、spatial、channel、batch) |
"SSSB" (spatial、spatial、spatial、batch) | "data-values" | "SSSCB" (spatial、spatial、spatial、channel、batch) |
"SS" (空間、空間) | "data-values" | "SSC" (spatial、spatial、channel) |
"SSS" (空間、空間、空間) | "data-values" | "SSSC" (spatial、spatial、spatial、channel) |
"SU" (spatial、unspecified) |
| "SCU" (spatial、channel、unspecified) |
"BU" (batch、unspecified) |
| "CBU" (チャネル、バッチ、指定なし) |
"UU" (unspecified、unspecified) |
| "CUU" (チャネル、指定なし、指定なし) |
"UUU" (unspecified、unspecified、unspecified) |
| "CUUU" (チャネル、指定なし、指定なし、指定なし) |
"UUUU" (unspecified、unspecified、unspecified、unspecified) |
| "CUUUU" (チャネル、指定なし、指定なし、指定なし、指定なし) |
"UUUUU" (指定なし、指定なし、指定なし、指定なし、指定なし) |
| "CUUUUU" (チャネル、指定なし、指定なし、指定なし、指定なし、指定なし) |
dlnetwork オブジェクトでは、SinusoidalPositionEncodingLayer オブジェクトもこれらの入力形式と出力形式の組み合わせをサポートします。
| 入力形式 | 位置 | 出力形式 |
|---|---|---|
"CT" (channel、time) |
| "CT" (channel、time) |
"SCT" (spatial、channel、time) |
| "SCT" (spatial、channel、time) |
"SSCT" (spatial、spatial、channel、time) |
| "SSCT" (spatial、spatial、channel、time) |
"SSSCT" (spatial、spatial、spatial、channel、time) |
| "SSSCT" (spatial、spatial、spatial、channel、time) |
"BT" (batch、time) |
| "CBT" (channel、batch、time) |
"SBT" (spatial、batch、time) |
| "SCBT" (spatial、channel、batch、time) |
"SSBT" (spatial、spatial、batch、time) |
| "SSCBT" (spatial、spatial、channel、batch、time) |
"SSSBT" (spatial、spatial、spatial、batch、time) |
| "SSSCBT" (spatial、spatial、spatial、channel、batch、time) |
"ST" (spatial、time) |
| "SCT" (spatial、channel、time) |
"SST" (spatial、spatial、time) |
| "SSCT" (spatial、spatial、channel、time) |
"SSST" (spatial、spatial、spatial、time) |
| "SSSCT" (spatial、spatial、spatial、channel、time) |
"TU" (time、unspecified) |
| "CTU" (channel、time、unspecified) |
参照
[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.
バージョン履歴
R2023b で導入
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)