BrainScript を使用したアクティブ化関数
Sigmoid()、Tanh()、ReLU()、Softmax()、LogSoftmax()、Hardmax()
ニューラル ネットワークの非線形アクティブ化関数。
Sigmoid (x)
Tanh (x)
ReLU (x)
Softmax (x)
LogSoftmax (x)
Hardmax (x)
パラメーター
x
: 非線形性を適用する引数
戻り値
非線形性を適用した結果。 出力のテンソル図形は、入力と同じです。
説明
これらは、ニューラル ネットワークの一般的なアクティブ化関数です。
これらはすべてファミリを Softmax()
除き、 Hardmax()
要素単位で適用されます。
効率のために、クロスエントロピトレーニング基準を使用する場合、多くの場合、最後に Softmax 演算を適用せず、代わりに Softmax の 入力 を渡すことが望ましいことに注意してください。 CrossEntropyWithSoftmax()
この操作は Hardmax()
、最も高い値を持つ要素を決定し、その位置をワンホット ベクター/テンソルとして表します。
これは分類を実行するために使用されます。
BrainScript で他の非線形性を表現する
必要な非線形性が上記の 1 つでない場合は、BrainScript 式として構成できる可能性があります。 たとえば、負の部分の傾きが 0.1 の漏れ ReLU は、次のように記述できます。
LeakyReLU (x) = 0.1 * x + 0.9 * ReLU (x)
軸に沿ったソフトマックス
Softmax ファミリは、分母の計算を含むという点で特別です。 この分母は、入力ベクトルのすべての値に対して計算されます。
ただし、一部のシナリオでは、入力はランク>1 のテンソルであり、軸は個別に処理する必要があります。
たとえば、20 個の異なる分布を格納する図形 [10000 x 20]
の入力テンソルを考えてみましょう。各列は、個別の入力項目の確率分布を表します。
そのため、Softmax 演算では 20 個の分母を計算する必要があります。
この操作は組み込み関数では (Log)Softmax()
サポートされていませんが、次のように要素ごとの縮小操作を使用して BrainScript で実現できます。
ColumnwiseLogSoftmax (z) = z - ReduceLogSum (axis=1)
ここで、 ReduceLogSum()
分母 (分母の対数) を計算し、その結果、縮小軸 [1 x 20]
に対して次元 1 のテンソルが生成されます。上記の例では。 次元入力ベクトルから [10000 x 20]
これを減算することは、通常どおり有効な操作です。つまり、 1
入力ディメンションに一致するように複製された "ブロードキャスト" が自動的に行われます。
例
40 次元特徴ベクトルの 10 方向分類を実行する単純な MLP:
features = Input{40}
h = Sigmoid (ParameterTensor{256:0} * features + ParameterTensor{256})
z = ParameterTensor{10:0} * h * ParameterTensor{10} # input to Softmax
labels = Input{10}
ce = CrossEntropyWithSoftmax (labels, z)