我需要一个可以跳出框框几分钟的人。问题是关于 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”是描述它的唯一方法吗?如果是这样,请快速给出“这是你必须做的”。
提前致谢!
这里的问题是你假设的“the导数”。 SoftMax 没有一个导数,因为它有多个输入。如果您查看所有其他动作函数,您会发现它们被定义为
x
的简单标量函数。因此,在这种情况下,导数只是导数df/dx
。
评论中提到的 MLDawn 页面显示了给定三个神经元的 9 个导数。这清楚地证明了the导数不存在。所以,是的,您需要类似矩阵的东西来表示 3x3 导数。
旁注:我的印象是您对神经网络的理解相当不寻常。您正在寻找“衍生品”,所以大概您正在做一些需要它的事情。我知道的一个应用是反向传播,但这需要更深入地了解神经网络中的学习是如何发生的。这使得回答你的问题变得困难 - 显然你的知识有差距,这就是你提出问题的原因,但目前还不清楚你做理解什么。