问题标签 [softmax]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
12523 浏览

matlab - 具有 softmax 激活的神经网络

编辑:

一个更尖锐的问题:在我的梯度下降中使用的 softmax 的导数是什么?


这或多或少是一个课程的研究项目,我对神经网络的理解非常/相当有限,所以请耐心等待:)


我目前正在构建一个神经网络,该网络试图检查输入数据集并输出每个分类的概率/可能性(有 5 种不同的分类)。自然,所有输出节点的总和应为 1。

目前,我有两层,我将隐藏层设置为包含 10 个节点。

我想出了两种不同类型的实现

  1. Logistic sigmoid 用于隐藏层激活,softmax 用于输出激活
  2. 隐藏层和输出激活的 Softmax

我正在使用梯度下降来找到局部最大值,以调整隐藏节点的权重和输出节点的权重。我确信我对 sigmoid 有这个正确的。我不太确定softmax(或者我是否可以使用梯度下降),经过一番研究,我找不到答案并决定自己计算导数并获得softmax'(x) = softmax(x) - softmax(x)^2(这会返回一个大小为n的列向量) . 我还研究了 MATLAB NN 工具包,该工具包提供的 softmax 的导数返回了一个大小为 nxn 的方阵,其中对角线与我手动计算的 softmax'(x) 一致;而且我不确定如何解释输出矩阵。

我以 0.001 的学习率和 1000 次反向传播迭代运行每个实现。但是,对于输入数据集的任何子集,我的 NN 为所有五个输出节点返回 0.2(均匀分布)。

我的结论:

  • 我相当肯定我的下降梯度做错了,但我不知道如何解决这个问题。
  • 也许我没有使用足够的隐藏节点
  • 也许我应该增加层数

任何帮助将不胜感激!

我正在使用的数据集可以在这里找到(处理的克利夫兰): http: //archive.ics.uci.edu/ml/datasets/Heart+Disease

0 投票
1 回答
3057 浏览

matlab - Softmax 回归的向量化实现

我在 Octave 中实现 softmax 回归。目前我正在使用使用以下成本函数和导数的非矢量化实现。

替代文字

替代文字

资料来源:Softmax 回归

现在我想在 Octave 中实现它的矢量化版本。对我来说,为这些方程编写矢量化版本似乎有点困难。有人可以帮我实现这个吗?

谢谢

上普尔

0 投票
2 回答
14951 浏览

c++ - 神经网络的softmax激活函数的实现

我在神经网络的最后一层使用Softmax激活函数。但是我在安全实现此功能时遇到了问题。

一个天真的实现将是这个:

这对于 > 100 个隐藏节点来说效果不佳,因为NaN在许多情况下 y 将是(如果 y(f) > 709,exp(y(f)) 将返回 inf)。我想出了这个版本:

其中safeExp定义为

该函数限制 exp 的输入。在大多数情况下,这有效,但并非在所有情况下都有效,我并没有真正设法找出在哪些情况下它不起作用。当我在前一层有 800 个隐藏神经元时,它根本不起作用。

然而,即使这有效,我还是以某种方式“扭曲”了 ANN 的结果。你能想到任何其他方法来计算正确的解决方案吗?是否有任何 C++ 库或技巧可用于计算此 ANN 的确切输出?

编辑: Itamar Katz 提供的解决方案是:

它在数学上确实是一样的。然而,在实践中,由于浮点精度,一些小值变为 0。我想知道为什么没有人在教科书中写下这些实现细节。

0 投票
1 回答
902 浏览

softmax - 如果我在 RBM 中使用 softmax,我是否需要在隐藏单元和可见单元中使用它?

据我了解,当在 RBM 可见单元中使用 K 值的 softmax 时,隐藏单元保持二进制。

如果是这样 - 我不确定如何计算二进制单位对可见单位的贡献。我是否应该将隐藏单元中的二进制 0 状态与 softmax 的 K 个状态中的特定状态相关联,并将 1 状态与其他 K-1 状态相关联?或者,隐藏单元中的 0 可能与可见单元的所有 K 个可能状态中的 0 相关(但这不与至少 K 个状态中的一个必须打开的事实相矛盾吗?)。

0 投票
10 回答
53871 浏览

math - 为什么使用 softmax 而不是标准归一化?

在神经网络的输出层,通常使用 softmax 函数来近似概率分布:

在此处输入图像描述

由于指数,这计算起来很昂贵。为什么不简单地执行 Z 变换以使所有输出均为正数,然后仅通过将所有输出除以所有输出之和进行归一化?

0 投票
1 回答
2089 浏览

machine-learning - softmax分类器的代价函数和梯度

在训练softmax分类器的时候,我用了minFunc函数Matlab,但是没用,步长TolX很快就达到了,准确率连5%都没有。一定有什么问题,但我就是找不到。

这是我Matlab关于成本函数和梯度的代码:

z=x*W; %x是输入数据,它是一个 m*n 矩阵,m 是样本数,n 是输入层中的单元数。W 是一个 n*o 矩阵,o 是输出层中的单元数。

a=sigmoid(z)./repmat(sum(sigmoid(z),2),1,o); %a是分类器的输出。

J=-mean(sum(target.*log(a),2))+l/2*sum(sum(W.^2));%这是成本函数,目标是期望的输出,它是一个 m*n 矩阵。l 是权重衰减参数。

公式可以在这里找到。谁能指出我的错误在哪里?

0 投票
1 回答
3434 浏览

r - 在 nnet R 中使用 softmax 来处理超过 2 个状态的目标列

我正在使用 nnet 包对具有 3 个状态的目标列进行分类

但我希望它使用熵而不是默认的 softmax,当我设置 softmax=false 时,它​​会失败并出现错误:

有没有办法在这种情况下以某种方式使用熵建模?

0 投票
3 回答
3754 浏览

python-2.7 - 有没有比这更好的方法来实现强化学习的 Softmax 动作选择?

我正在为强化学习任务(http://www.incompleteideas.net/book/ebook/node17.html)实施 Softmax 动作选择策略。

我提出了这个解决方案,但我认为还有改进的余地。

1-在这里我评估概率

2-在这里,我将 ]0,1[ 范围内的随机生成数与动作的概率值进行比较:

编辑:

示例:rand_action 为 0.78,prob_t[0] 为 0.25,prob_t[1] 为 0.35,prob_t[2] 为 0.4。概率总和为 1。0.78 大于动作 0 和 1 (prob_t[0] + prob_t[1]) 的概率之和,因此选择动作 2。

有没有更有效的方法来做到这一点?

0 投票
1 回答
3194 浏览

r - R中的nnet,'softmax = TRUE'需要至少两个响应类别

我正在尝试在 R 中使用 nnet,但在使用 softmax 时遇到了问题。

我正在尝试构建一个三层网络,输入层有 25 个神经元,隐藏层有 25 个神经元,输出层只有一个神经元。这是重现问题的方法。

当我运行这段代码时,我得到了一个错误:

“需要至少两个响应类别”是什么意思?以及如何解决?谢谢。

0 投票
1 回答
4887 浏览

neural-network - 反向传播中的交叉熵、Softmax 和导数项

我目前对在执行 BackPropagation 算法进行分类时使用交叉熵误差感兴趣,我在输出层中使用 Softmax 激活函数。

根据我的收集,您可以使用 Cross Entropy 和 Softmax 将导数去掉,使其看起来像这样:

这不同于以下的均方误差:

那么,当您的输出层使用 Softmax 激活函数进行交叉熵分类时,您是否可以只删除导数项?例如,如果我要使用交叉熵误差(比如 TANH 激活函数)进行回归,我仍然需要保留导数项,对吗?

我还没有找到一个明确的答案,我也没有试图计算出这方面的数学(因为我生疏了)。