【问题标题】:Neural Network with softmax activation具有 softmax 激活的神经网络
【发布时间】:2010-04-21 05:41:57
【问题描述】:

编辑:

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


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


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

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

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

  1. Lo​​gistic 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

【问题讨论】:

  • 我在帖子顶部添加了一个更尖锐的问题。我试着向我的教授寻求帮助,但我还没有收到他的回复。这绝对超出了课程的范围。
  • 原来,我的代码中有一个愚蠢的错误,但我太专注于认为我的 softmax 导数是错误的。啊!

标签: matlab machine-learning neural-network softmax


【解决方案1】:

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

(- \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' 的实现。那么以下应该成立:

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

【讨论】:

  • 更新上传图片到stackoverflow ;)
【解决方案2】:

请查看 sites.google.com/site/gatmkorn 了解开源 Desire 模拟程序。 对于 Windows 版本,/mydesire/neural 文件夹有几个 softmax 分类器,其中一些具有特定于 softmax 的梯度下降算法。

在示例中,这非常适用于简单字符识别任务。

A另见

佐治亚州科恩:高级动态系统仿真,Wiley 2007

GAK

【讨论】:

    【解决方案3】:

    查看链接: http://www.youtube.com/watch?v=UOt3M5IuD5s softmax导数为:dyi/dzi= yi * (1.0 - yi);

    【讨论】:

      猜你喜欢
      • 2012-04-11
      • 2012-12-14
      • 2018-02-28
      • 2018-03-24
      • 2014-01-18
      • 2017-12-08
      • 2018-05-16
      • 2013-08-20
      相关资源
      最近更新 更多