在没有 Softmax 的情况下标准化输出

Posted

技术标签:

【中文标题】在没有 Softmax 的情况下标准化输出【英文标题】:Normalize output without Softmax 【发布时间】:2018-10-29 02:33:23 【问题描述】:

使用softmax 输出层为我的生成神经网络进行训练总体上比使用relu 得到更好的结果,但relu 给了我所需的稀疏性(以像素为单位的零)。 Softmax 还有助于获得标准化输出(即 sum =1.)。

我想做:

outputs = Dense(200, activation='softmax', activity_regularizer=l1(1e-5))(x)
outputs = Activation('relu')(outputs) # to get real zeros
outputs = Activation('softmax')(outputs) # still real zeros, normalized output

但是通过应用连续的 softmax,我会得到极端的输出。有没有我可以使用的层,它只是将输出标准化为 1 (output_i/sum(output)) 而不是 softmax?

【问题讨论】:

【参考方案1】:

你不需要添加两个softmax。就最后一个就好了:

outputs = Dense(200, activation='relu', activity_regularizer=l1(1e-5))(x)
outputs = Activation('softmax')(outputs) # still real zeros, normalized 

然而,如果你有更多的中间层并且你希望它们表现得更温和,你可以使用“tanh”而不是 softmax。

relu 模型的问题通常不完全是“它们的总和不为 1”,而只是“它们的值太高,梯度不能很好地表现”。

#this combines a max output of 1 (but doesn't care about the sum)
#yet keeping the sparsity:
outputs = Dense(200, activation='tanh')(x)
outputs = Activation('relu')(outputs) # to get real zeros

outputs = Dense(200, activation='relu')(outputs)

#this should only be used at the final layer
#and only if you really have a classification model with only one correct class
outputs = Activation('softmax')(outputs) # still real zeros, normalized output

Softmax 倾向于只支持其中一种结果。如果您不想更改结果之间的比较方式,但又想制作sum=1,您可以寻求@nuric 的答案。

【讨论】:

我需要对我的输出进行标准化,总和正好 = 1。你的建议是一个非常好的建议,可以用 tanh 改进 relu。但不是我要解决的问题。我的模型不是分类,但我需要一个标准化的输出。我可以尝试不使用softmax,而是使用@nuric 建议的单位规范 我明白了 :) --- 即便如此,真正需要 softmax 的唯一层是最后一层。所以你只需要调用一次“softmax”,你的结果就不会那么极端了。【参考方案2】:

您可以编写自己的层来将输出转换为单位范数(即在您的情况下进行归一化),而无需应用 softmax。您可以通过将输出转换为单位向量来实现。大致如下:

def unitnorm(x):
  return x / (K.epsilon() + K.sqrt(K.sum(K.square(x), keepdims=True)))
# Wrap Lambda layer
outputs = Lambda(unitnorm, name='unitnorm')(outputs)

代码来自unit norm constraint,它对内核和层中的偏差执行相同的操作。您可以尝试不使用 epsilon 以更精确,但如果您有很多零,则可能会不太稳定。

【讨论】:

以上是关于在没有 Softmax 的情况下标准化输出的主要内容,如果未能解决你的问题,请参考以下文章

默认情况下,stdout 行是缓冲的、无缓冲的还是不确定的?

我怎样才能管道标准错误,而不是标准输出?

标准流打印无关字符

在没有(标准)播放器的情况下运行 VAST?

Softmax classifier

Softmax classifier