你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 BrainScript 激活函数

Sigmoid () , Tanh () , ReLU () , Softmax () , LogSoftmax () , Hardmax ()

神经网络的非线性激活函数。

Sigmoid (x)
Tanh (x)
ReLU (x)
Softmax (x)
LogSoftmax (x)
Hardmax (x)

parameters

  • x:将非线性应用于的参数

返回值

应用非线性的结果。 输出的张量形状与输入的形状相同。

说明

这些是神经网络的热门激活功能。 除系列外 Softmax() 的所有项,均 Hardmax() 按元素应用。

请注意,为了提高效率,在使用交叉枚举训练标准时,通常需要在末尾不应用 Softmax 操作,而是将 Softmax 的 输入 传递给 CrossEntropyWithSoftmax()

Hardmax() 操作确定具有最高值的元素,并将其位置表示为单热向量/张量。 这用于执行分类。

在 BrainScript 中表达其他非线性

如果需要的非线性不是上述任一项,则它可以作为 BrainScript 表达式进行组合。 例如,负部分的斜率为 0.1 的泄漏 ReLU 可能只写为

LeakyReLU (x) = 0.1 * x + 0.9 * ReLU (x)

沿轴的 Softmax

Softmax 系列特别,因为它涉及分母的计算。 此分母在输入向量的所有值上计算。

但是,在某些情况下,输入是排名>为 1 的张量,应分别处理轴。 例如,考虑存储 20 个不同的分布的形状 [10000 x 20] 的输入张量,每列表示不同输入项的概率分布。 因此,Softmax 运算应计算 20 个单独的分母。 内置 (Log)Softmax() 函数不支持此操作,但可以使用元素缩减操作在 BrainScript 中实现,如下所示:

ColumnwiseLogSoftmax (z) = z - ReduceLogSum (axis=1)

在这里, ReduceLogSum() 计算分母) 的 (对数,从而产生维度为 1 的张 [1 x 20] 量;在上面的示例中。 从 [10000 x 20]-dimension 输入向量中减去此值是一个有效的操作,即 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)