メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

positionEmbeddingLayer

位置埋め込み層

R2023b 以降

    説明

    位置埋め込み層は、シーケンシャル インデックスまたは空間インデックスをベクトルにマッピングします。トランスフォーマー ニューラル ネットワークでこの層を使用して、シーケンスまたはイメージにおけるデータの位置に関する情報を符号化します。

    作成

    説明

    layer = positionEmbeddingLayer(outputSize,maxPosition) は、位置埋め込み層を作成し、OutputSize プロパティと MaxPosition プロパティを設定します。

    layer = positionEmbeddingLayer(outputSize,maxPosition,Name=Value) は、位置埋め込み層を作成し、1 つ以上の名前と値の引数を使用して、PositionDimensionNameパラメーターと初期化、および学習率および正則化の各プロパティを設定します。

    プロパティ

    すべて展開する

    位置埋め込み

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

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

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

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

    層入力の最大シーケンス長または空間インデックス。正の整数として指定します。

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

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

    埋め込む位置の次元。次のいずれかの値として指定します。

    • "auto" — シーケンスまたは時空間の入力の場合、時間位置を埋め込みます。これは、"temporal" を使用することに相当します。1 次元イメージ入力の場合、空間位置を埋め込みます。これは、"spatial" を使用することに相当します。

    • "temporal" — 時間位置を埋め込みます。

    • "spatial" — 空間位置を埋め込みます。

    パラメーターと初期化

    重みを初期化する関数。次のいずれかの値として指定します。

    • "narrow-normal" — 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、重みを初期化します。

    • "glorot" — Glorot 初期化子[2] (Xavier 初期化子とも呼ばれる) を使用して重みを初期化します。Glorot 初期化子は、平均 0、分散 2/(numIn + numOut) の一様分布から個別にサンプリングを行います。ここで、numIn = MaxPosition および numOut = OutputSize です。

    • "he" — He 初期化子[3]を使用して重みを初期化します。He 初期化子は、平均 0、分散 2/numIn の正規分布からサンプリングを行います。ここで、numIn = MaxPosition です。

    • "zeros" — 0 で重みを初期化します。

    • "ones" — 1 で重みを初期化します。

    • 関数ハンドル – カスタム関数で重みを初期化します。関数ハンドルを指定する場合、関数は weights = func(sz) という形式でなければなりません。ここで、sz は重みのサイズです。

    この層では、Weights プロパティが空の場合にのみ重みが初期化されます。

    データ型: char | string | function_handle

    学習可能なパラメーターの重み。OutputSizeMaxPosition 列の数値配列または [] として指定します。

    層の重みは学習可能なパラメーターです。層の Weights プロパティを使用して、重みの初期値を直接指定できます。ネットワークに学習させるときに、層の Weights プロパティが空でない場合、trainnet 関数は Weights プロパティを初期値として使用します。Weights プロパティが空の場合、ソフトウェアは層の WeightsInitializer プロパティによって指定された初期化子を使用します。

    データ型: single | double

    学習率および正則化

    重みの学習率係数。非負のスカラーとして指定します。

    この係数にグローバル学習率が乗算されて、この層の重みの学習率が決定されます。たとえば、WeightLearnRateFactor2 の場合、この層の重みの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions で指定した設定に基づいて、グローバル学習率が決定されます。

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

    重みの L2 正則化係数。非負のスカラーとして指定します。

    この係数にグローバル L2 正則化係数が乗算されて、この層の重みの L2 正則化が決定されます。たとえば、WeightL2Factor2 の場合、この層の重みの L2 正則化はグローバル L2 正則化係数の 2 倍になります。グローバル L2 正則化係数は、関数 trainingOptions を使用して指定できます。

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

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

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

    データ型: char | string

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

    層への入力の数。1 として格納されます。この層は単一の入力のみを受け入れます。

    データ型: double

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

    入力名。{'in'} として格納されます。この層は単一の入力のみを受け入れます。

    データ型: cell

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

    層からの出力の数。1 として格納されます。この層には単一の出力のみがあります。

    データ型: double

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

    出力名。{'out'} として格納されます。この層には単一の出力のみがあります。

    データ型: cell

    すべて折りたたむ

    出力サイズが 300、最大位置が 128 の位置埋め込み層を作成します。

    layer = positionEmbeddingLayer(300,128)
    layer = 
      PositionEmbeddingLayer with properties:
    
                         Name: ''
                   OutputSize: 300
                  MaxPosition: 128
            PositionDimension: 'auto'
           WeightsInitializer: 'narrow-normal'
        WeightLearnRateFactor: 1
               WeightL2Factor: 1
    
       Learnable Parameters
                      Weights: []
    
       State Parameters
        No properties.
    
      Show all properties
    
    

    dlnetwork オブジェクトを作成します。

    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")
        positionEmbeddingLayer(embeddingOutputSize,maxPosition,Name="pos-emb");
        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] Gehring, Jonas, Michael Auli, David Grangier, Denis Yarats, and Yann N. Dauphin. "Convolutional Sequence to Sequence Learning." In Proceedings of the 34th International Conference on Machine Learning - Volume 70, 1243–52. ICML’17. Sydney, NSW, Australia: JMLR.org, 2017

    [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

    拡張機能

    すべて展開する

    バージョン履歴

    R2023b で導入