Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 20:41   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 具有softmax激活的神经网络

编辑:

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

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

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

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

我想出了两种不同类型的实现
  1. Logistic Sigmoid用于隐藏层激活,softmax用于输出激活
  2. 用于隐藏层和输出激活的Softmax
我正在使用梯度下降来找到局部最大值,以调整隐藏节点的权重和输出节点的权重。我敢肯定,我对乙状结肠有这种认识。我对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



回答:

您使用的渐变实际上与平方误差相同:输出-目标。乍一看似乎令人惊讶,但诀窍在于最大程度地减少了另一个错误函数:



(- \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))

更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 20:37


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.