您能描述一下如何以 C++ 的通用术语应用 SoftMax 导数吗?

问题描述 投票:0回答:1

我需要一个可以跳出框框几分钟的人。问题是关于 Softmax 的导数。在开始之前我先说一下;

有些人有这个障碍 - 我开始在装配现场编程。在没有 DOS 的 Win 操作系统运行之前,我们为嵌入式系统、设备驱动程序编写了代码。作为一名混合语言程序员,我将旧的 Fortran、Cobol、代码和大型数据库从大型机转换为英特尔系统语言; C、C++ 等。虽然技能很高,但我们没有微积分公式,而且大多数时候不需要确保新设备可以与操作系统一起运行,或处理数百万条记录。因此,我对一些新方法的挣扎是真实的,这些新方法在公式 - 微笑中进行了描述! 从软件工程师到科学家; “我们相信您的数学,我们只是想知道您需要在哪里应用它,我们将从那里处理编码”.

话虽如此,我四处寻找 SoftMax 函数。有网页,有多个打印页,专门讨论漫无目的的内容。当我收到这个的时候,我很惊讶。我发现没有人这样明确地表达它(很好,通用,没有特定的编程语言或代码 - 你可以按照你认为合适的方式处理代码)。

这可以很好地转换为 C/C++。

void TransformToSoftMax(DoubleListType &inputs, DoubleListType &outputs, int NumberOfNeurons)
{
  double sum = 0.0;
  double maxvalue;

  maxvalue = inputs[0];
  for (int i = 0; i < NumberOfNeurons; i++)
      maxvalue = max(inputs[i], maxvalue);
  for (int i = 0; i < NumberOfNeurons; i++) 
      sum += exp(inputs[i])
  for (int i = 0; i < NumberOfNeurons; i++)
      outputs[i] = exp(inputs[i] - maxvalue) / sum;
}

不幸的是,我没有导数。该消息来源并未对其衍生品进行弥补。我在互联网搜索中发现了一些奇怪的结果,比如来自 SMID 库在线文档的内容。我知道一定是错的。

我发现了很多例子,Python代码中很厚重,提到了向量、矩阵,几乎没有提到“网络或神经元本身”,几乎需要一个人学习Python并编写代码,因为响应者必须看到诸如“什么”之类的东西被传递”到示例以及原因。

有可能吗?只需提及神经元、层、网络(如应用 SoftMax 的图片描述)即可以清晰的步骤解释导数,或者矩阵、向量、“np”是描述它的唯一方法吗?如果是这样,请快速给出“这是你必须做的”。

提前致谢!

neural-network softmax
1个回答
1
投票

这里的问题是你假设的“the导数”。 SoftMax 没有一个导数,因为它有多个输入。如果您查看所有其他动作函数,您会发现它们被定义为

x
的简单标量函数。因此,在这种情况下,导数只是导数
df/dx

评论中提到的 MLDawn 页面显示了给定三个神经元的 9 个导数。这清楚地证明了the导数不存在。所以,是的,您需要类似矩阵的东西来表示 3x3 导数。

旁注:我的印象是您对神经网络的理解相当不寻常。您正在寻找“衍生品”,所以大概您正在做一些需要它的事情。我知道的一个应用是反向传播,但这需要更深入地了解神经网络中的学习是如何发生的。这使得回答你的问题变得困难 - 显然你的知识有差距,这就是你提出问题的原因,但目前还不清楚你理解什么。

© www.soinside.com 2019 - 2024. All rights reserved.