当前位置:  开发笔记 > 大数据 > 正文

具有softmax激活的神经网络

如何解决《具有softmax激活的神经网络》经验,为你挑选了1个好方法。

编辑:

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


这或多或少是一门课程的研究项目,我对NN的理解非常/非常有限,所以请耐心等待:)


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

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

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

    Logistic sigmoid用于隐藏层激活,softmax用于输出激活

    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



1> bayer..:

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

softmax错误

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

softmax的数值梯度

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


更新了上传的图片到stackoverflow;)
推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有