メインコンテンツ

sinusoidalPositionEncodingLayer

正弦波位置符号化層

R2023b 以降

    説明

    正弦波位置符号化層は、正弦関数演算を使用して位置インデックスをベクトルにマッピングします。トランスフォーマー ニューラル ネットワークでこの層を使用して、シーケンスまたはイメージにおけるデータの位置に関する情報を提供します。

    作成

    説明

    layer = sinusoidalPositionEncodingLayer(outputSize) は、正弦波位置符号化層を作成し、OutputSize プロパティを設定します。

    layer = sinusoidalPositionEncodingLayer(outputSize,Name=Value) は、正弦波位置符号化層を作成し、1 つ以上の名前と値の引数を使用して Positions プロパティおよび Name プロパティを設定します。

    プロパティ

    すべて展開する

    正弦波位置の符号化

    この プロパティ は読み取り専用です。

    層出力のチャネル数。正の偶数として指定します。

    データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    この プロパティ は読み取り専用です。

    入力内の位置。次のいずれかの値として指定します。

    • "auto" — シーケンスまたは時空間の入力の場合、時間インデックスを位置として使用します。これは、"temporal-indices" を使用することに相当します。1 次元イメージ入力の場合、空間インデックスを位置として使用します。これは、"spatial-indices" を使用することに相当します。その他の入力の場合、入力値を位置として使用します。これは、"data-values" を使用することに相当します。

    • "temporal-indices" — 入力の時間インデックスを位置として使用します。

    • "spatial-indices" — 入力の空間インデックスを位置として使用します。

    • "data-values" — 入力の値を位置として使用します。

    層の名前。文字ベクトルまたは string スカラーとして指定します。Layer 配列入力の場合、trainnet 関数および dlnetwork 関数は、名前のない層に自動的に名前を割り当てます。

    SinusoidalPositionEncodingLayer オブジェクトは、このプロパティを文字ベクトルとして格納します。

    データ型: char | string

    この プロパティ は読み取り専用です。

    層への入力の数。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

    Figure contains an axes object. The hidden axes object contains an object of type graphplot.

    アルゴリズム

    すべて展開する

    参照

    [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 で導入