gpt4 book ai didi

matlab - 带 softmax 激活的神经网络

转载 作者:行者123 更新时间:2023-11-30 08:39:06 24 4
gpt4 key购买 nike

编辑:

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

<小时/>

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

<小时/>

我目前正在构建一个神经网络,尝试检查输入数据集并输出每个分类的概率/似然(有 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 次反向传播迭代来运行每个实现。然而,对于输入数据集的任何子集,我的神经网络对于所有五个输出节点返回 0.2(均匀分布)。

我的结论:

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

任何帮助将不胜感激!

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

最佳答案

您使用的梯度实际上与平方误差相同:输出 - 目标。乍一看这可能看起来令人惊讶,但诀窍在于不同的误差函数被最小化:

softmax error

(- \sum^N_{n=1}\sum^K_{k=1} t_{kn} log(y_{kn}))

其中 log 是自然对数,N 表示训练示例的数量,K 表示类的数量(以及输出层中的单位)。 t_kn 描述第 n 个训练示例中第 k 个类别的二进制编码(0 或 1)。 y_kn 相应的网络输出。

显示渐变是否正确可能是一个很好的练习,不过我自己还没有这样做过。

针对你的问题:你可以通过数值微分来检查你的梯度是否正确。假设您有一个函数 f 以及 f 和 f' 的实现。那么以下应该成立:

numerical gradient of the softmax

(f'(x) = \frac{f(x - \epsilon) - f(x + \epsilon)}{2\epsilon} + O(\epsilon^2))

关于matlab - 带 softmax 激活的神经网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2680600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com