次の方法で共有


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)