次の方法で共有


パラメーターと定数

ParameterTensor{}

学習可能なパラメーターのスカラー、ベクター、マトリックス、またはテンソルを作成します。

ParameterTensor {shape,
                 init='uniform'/*|heNormal|...*/, initOutputRank=1, initValueScale=1.0,
                 randomSeed=-1,
                 initValue=0.0, initFromFilePath='',
                 learningRateMultiplier=1.0}

パラメーター

  • shape: 配列としてのパラメーターの図形 (次元)。 たとえば、13 行と 42 列のマトリックスを作成 (13:42)。 一部の操作では、0 として指定されたディメンションは自動的に 推論されます (こちらを参照)
  • init (既定の 'uniform'): ランダムな初期化を指定します(例: init='heNormal'(こちらを参照)
  • initOutputRank (既定値は 1): 先行するファンアウト軸の数を指定します。 負の場合は、後続のファンアウト軸の -number (こちらを参照)
  • initValueScale (既定値 1): ランダムな初期化値に適用される追加のスケーリング 係数
  • randomSeed (既定の -1): 正の場合は、ランダムな初期化にこのランダム シードを使用します。 負の場合は、ParameterTensor{} ごとに増加するカウンターを使用します
  • initValue: 定数値を使用して初期化を指定します (例: initValue=0
  • initFromFilePath: ファイルから初期値を読み込んで初期化を指定します。 例: initFromFilePath="my_init_vals.txt"
  • learningRateMultiplier: システム学習率は、この (学習を無効にする場合は 0) (こちらを参照) によってスケーリング

戻り値

学習可能なパラメーターのテンソル。

形容

このファクトリ関数は、学習可能なパラメーターのスカラー、ベクター、マトリックス、またはテンソルを作成します。つまり、トレーニング中に更新されるパラメーターを含む "train" アクションによって認識されるテンソルです。

どの省略可能なパラメーターが指定されているかに応じて、値が初期化されます。

  • init が与えられている場合は乱数。
  • initValue が指定されている場合は定数。又は
  • initFromFilePath が指定されている場合、外部入力ファイルから読み取られたテンソル。 既定値は init="uniform"です。

ランクが 2 のスカラー、ベクター、行列、またはテンソル>を作成するには、shape パラメーターとして次を渡します。

  • スカラーの (1)
  • M 要素を持つ列ベクトルの (M)
  • N 要素を持つ行ベクトルの (1:N)。 行ベクトルは 1 行行列です。
  • N 行と I 列を含むマトリックスの (M:N)
  • 任意のランク>2 のテンソルの (I:J:K...) (注: 許可される最大ランクは 12 です)。そして
  • C チャネルを持つ [W x H] イメージの寸法と一致するテンソルの (W:H:C)

自動ディメンション推論

特定の操作の即時入力として重み付けに ParameterTensor を使用する場合は、いくつかのディメンションを Inferredとして指定できます。 たとえば、行列積ParameterTensor{42:Inferred} * x) では、2 番目の次元が xの次元と等しいと自動的に推論されます。

これは、ユーザーの BrainScript コードが入力ディメンションを通過する負担から解放されるため、レイヤーの入力に非常に便利です。 さらに、場合によっては、レイヤーの正確な入力ディメンションを決定するのは非常に面倒です。たとえば、埋め込みのない畳み込み/プーリングの組み合わせのピラミッド上の最初の完全に接続されたレイヤーでは、各畳み込みとプール操作によって境界ピクセルの行または列が削除され、ストライドによってディメンションがスケーリングされます。

この機能を使用すると、CNTK の 定義済みレイヤー を出力ディメンションでのみ指定できます (例: DenseLayer{1024})。

ランダムな初期化

ランダム初期化は、init パラメーターによって選択されます。このパラメーターは、均一分布と正規分布のどちらかを選択します。ここで、範囲/標準偏差はファンインとファンアウトの関数として計算されます。

init の値 流通 range/標準偏差
'heNormal' 正常 sqrt (2 / fanIn)
'heUniform' 制服 sqrt (6 / fanIn)
'glorotNormal' 正常 sqrt (2 / (fanIn+fanOut))
'glorotUniform' 制服 sqrt (6 / (fanIn+fanOut))
'xavier' 制服 sqrt (3 / fanIn)
'uniform' 制服 1/20
'gaussian' 正常 sqrt (0.04 / fanIn)
'zero' n/a 0

(zero は、initValue=0を指定する代わりに便利な場合があります)。均一分散の場合、パラメーターは [-range, range]で均一に初期化されます。正規分布の場合、平均は常に 0 です。

ParameterTensor{} を直接使用する場合、init の既定値は uniform されることに注意してください。 ただし、DenseLayer{}ConvolutionalLayer{}など、内部にパラメーターを含む レイヤー の既定値は glorotUniform です。

ランダム初期化のためのファンインとファンアウト

ランダム初期化では、パラメーターは、上の表ごとのランダム値のスケーリングを決定するために使用される、明確に定義されたファンインとファンアウトを持つマトリックス積のような操作の何らかの形式の一部であると想定しています。 既定では、最初の軸はファンアウトと見なされ、残りの軸/軸はファンインであり、通常のマトリックス積のセマンティクスに一致します。

省略可能なパラメーター initOutputRank を使用して、ファンアウトと見なす必要がある先行軸の数を指定できます。たとえば、CNTK の拡張テンソル解釈 内の行列積の場合、[K]次元ベクトル x[I x J]次元ランク 2 オブジェクトにマップする Times (W, x, outputRank=2)として書き込むことができます。ここで、W は図形 [I x J x K]を持ちます。 ここでは、initOutputRank=2 ランダムな初期化値をスケーリングする場合、ファンアウトが I*J され、ファンイン Kが指定されます。

initOutputRank の負の値は、ファンアウト軸が後続の軸であることを示します。 たとえば、一般的な画像処理セットアップの ConvolutionalLayer{} と基になる Convolution() 操作のフィルター カーネルには、ファンインが W*H*Cされている間、K がファンアウトである図形 [W x H x C x K]があります。 これは、initOutputRank=-1で指定されます。

ファイルからの初期値の読み取り

初期値はテキスト ファイルから読み取ることができます。 これを行うには、省略可能なパラメーター initFromFilePathのパス名を渡します。 テキスト ファイルは、空白で区切られた数値で構成されるマトリックス行ごとに 1 行、列ごとに 1 行で構成されることが想定されています。 ファイル内の行と列のディメンションは、shape一致する必要があります。

パラメーター固有の学習率

パラメーター固有の学習率は、省略可能な learningRateMultiplier パラメーターを使用して実現できます。 この係数は、パラメーターの更新を実行するときに、実際の学習率と乗算されます。 たとえば、0 を指定した場合、パラメーターは更新されず、定数になります。

heUniform として初期化される通常のパラメーター マトリックス (既定値は heNormal)。

W = ParameterTensor {(outDim:inDim), init=`heUniform`}

ゼロとして初期化される通常のバイアス パラメーター:

b = ParameterTensor {outDim, initValue=0}

ファイルから読み取り、定数を維持する必要がある埋め込み行列:

E = ParameterTensor {(embedDim:vocabSize),
                     initFromFilePath='./EmbeddingMatrix.txt',
                     learningRateMultiplier=0}  # prevents learning

numChannels カラー プレーンを持つ [width x height]サイズイメージのフルサイズのバイアス パラメーター:

bFull = ParameterTensor {(width:height:numChannels)}

定数{}

定数テンソルを作成します。

Constant {scalarValue, rows=1, cols=1}

パラメーター

  • scalarValue: この定数の値
  • rows (既定値: 1): 定数がスカラーでない場合の行数
  • cols (既定値: 1): 定数がスカラーでない場合の cols の数

戻り値

次元 [rows x cols]のスカラーまたはランク 1 またはランク 2 のいずれかの定数。すべての要素が scalarValueで埋められます。

形容

定数値。 スカラー、または 1 つの値 (0 など) で初期化された rank-1 オブジェクト (ベクター) または rank-2 オブジェクト (マトリックス) のいずれかを指定できます。 ベクトル定数と行列定数ではすべての値が同一であるため、要素ごとの演算 と組み合わせて使用される定数は、多くの場合、スカラーとして指定できますが、ブロードキャスト利用できます。

実装に関する注意:

Constant() は、learningRateMultiplier=0を含む ParameterTensor{} です。

補間の重みが 0..1 ("ソフト マルチプレクサー") の alpha を持つ 2 つの値間の補間:

SoftMUX (x, y, alpha) = Constant (1-alpha) .* x + Constant (alpha) .* y

Hamming loss (cf. here):

HammingLoss (y, p) = ReduceSum (BS.Boolean.Xor (y, Greater (p, Constant(0.5))))
hl = HammingLoss (multiLabels, probabilities)