17

我见过的用于分类任务的大多数神经网络示例都使用 softmax 层作为输出激活函数。通常,其他隐藏单元使用 sigmoid、tanh 或 ReLu 函数作为激活函数。在这里使用 softmax 函数 - 据我所知 - 在数学上也可以计算出来。

  • 不使用 softmax 函数作为隐藏层激活函数的理论依据是什么?
  • 有没有这方面的出版物,有什么可以引用的?
4

5 回答 5

19

我还没有找到任何关于为什么在隐藏层中使用 softmax 作为激活不是最好的想法的出版物(除了你可能已经阅读过的Quora问题),但我会尝试解释为什么使用它不是最好的想法在这种情况下 :

1. 变量独立性:大量的正则化和努力是为了让你的变量保持独立、不相关和相当稀疏。如果您使用 softmax 层作为隐藏层 - 那么您将保持所有节点(隐藏变量)线性相关,这可能会导致许多问题和较差的泛化性。

2. 训练问题:试着想象一下,为了让你的网络更好地工作,你必须让隐藏层的一部分激活值低一点。然后 - 你会自动让其余的人在更高的水平上进行平均激活,这实际上可能会增加错误并损害你的训练阶段。

3. 数学问题:通过对模型的激活创建约束,您会在没有任何逻辑解释的情况下降低模型的表达能力。在我看来,努力使所有激活都相同是不值得的。

4. 批量标准化做得更好:人们可能会考虑这样一个事实,即来自网络的恒定平均输出可能对训练有用。但另一方面,一种称为Batch Normalization的技术已被证明效果更好,而据报道,在隐藏层中将 softmax 设置为激活函数可能会降低准确性和学习速度。

于 2016-06-02T20:52:55.093 回答
11

实际上,Softmax 函数已经在神经网络的深处使用,在某些情况下,在处理可微记忆和注意力机制时!

Softmax 层可用于神经网络,例如神经图灵机 (NTM)和可微神经计算机 (DNC)的改进。

总而言之,这些架构是RNN/LSTM,它们已被修改为包含可微分(神经)记忆矩阵,可以通过时间步进行写入和访问。

快速解释一下,这里的 softmax 函数可以实现内存获取的规范化和其他类似的基于内容的内存寻址的怪癖。关于这一点,我真的很喜欢这篇文章,它用交互式图形说明了 NTM 和其他最近的 RNN 架构中的操作。

此外,Softmax 用于机器翻译的注意机制,例如本文。在那里,Softmax 能够对注意力分布的位置进行归一化,以便“柔和地”保留要注意的最大位置:也就是说,也以柔和的方式对其他地方给予一点关注。然而,正如论文中所解释的,这可以被认为是一个处理注意力的小型神经网络,在大网络中。因此,Softmax 是否仅用于神经网络的末端可能存在争议。

希望能帮助到你!

编辑 - 最近,甚至可以看到仅使用注意力(使用 softmax)的神经机器翻译(NMT)模型,没有任何 RNN 或 CNN: http: //nlp.seas.harvard.edu/2018/04/03 /注意.html

于 2017-03-09T15:14:32.630 回答
3

在要对多项分布建模的任何地方都使用 softmax 激活。这可能(通常)是一个输出层y,但也可以是一个中间层,比如多项式潜在变量z。正如在这个线程中提到的输出{o_i}sum({o_i}) = 1是一个线性依赖,这是在这一层有意的。附加层可以在下游提供所需的稀疏性和/或特征独立性。

深度学习的第 198 页(Goodfellow、Bengio、Courville)

任何时候我们希望用 n 个可能值表示离散变量的概率分布,我们可以使用 softmax 函数。这可以看作是 sigmoid 函数的推广,该函数用于表示二进制变量的概率分布。Softmax 函数最常用作分类器的输出,以表示 n 个不同类别的概率分布。更罕见的是,softmax 函数可以在模型本身内部使用,如果我们希望模型在某些内部变量的 n 个不同选项中进行选择的话。

于 2018-01-29T19:58:22.660 回答
1

Softmax 函数仅用于输出层(至少在大多数情况下),以确保输出向量的分量之和等于 1(为清楚起见,请参见 softmax 成本函数的公式)。这也意味着输出的每个组件(类)出现的概率是多少,因此概率(或输出组件)的总和等于 1。

于 2016-06-02T10:34:53.560 回答
0

Softmax 函数是神经网络中深度学习中使用的最重要的输出函数之一(参见 Uniqtech 的《Understanding Softmax in minute》)。Softmax 函数适用于存在三类或更多类结果的情况。softmax 公式将 e 提高到每个值 score 的指数分数,然后除以 e 提高的指数分数值的总和。例如,如果我知道这四个类别的 Logit 分数为:[3.00, 2.0, 1.00, 0.10],为了获得概率输出,可以应用如下 softmax 函数:

  1. 将 numpy 导入为 np

  2. 定义软最大(x):

  3. z = np.exp(x - np.max(x))
  4. 返回 z / z.sum()
  5. 分数 = [3.00, 2.0, 1.00, 0.10]
  6. 打印(softmax(分数))

  7. 输出:概率 (p) = 0.642 0.236 0.087 0.035

所有概率的总和 (p) = 0.642 + 0.236 + 0.087 + 0.035 = 1.00。您可以尝试将您知道的任何值替换为上述分数,您将得到不同的值。所有值或概率的总和将等于 1。这是有道理的,因为所有概率之和等于 1,从而将 Logit 分数转换为概率分数,以便我们可以更好地预测。最后,softmax 的输出,可以帮助我们理解和解释 Multinomial Logit Model。如果您喜欢这些想法,请在下面留下您的评论。

于 2020-03-01T11:48:15.730 回答