编辑:
一个更尖锐的问题:在我的梯度下降中使用的 softmax 的导数是什么?
这或多或少是一个课程的研究项目,我对神经网络的理解非常/相当有限,所以请耐心等待:)
我目前正在构建一个神经网络,该网络试图检查输入数据集并输出每个分类的概率/可能性(有 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