パラメーターと定数
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)