问题标签 [gradient-descent]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
artificial-intelligence - 如何使用梯度下降解决逻辑回归?
我正在解决关于机器学习的在线课程形式 coursera 的练习。问题陈述是:
假设一所高中有一个数据集,代表 40 名被大学录取的学生和 40 名未被录取的学生。每个( x(i), y(i) )
训练示例都包含一个学生在两次标准化考试中的分数和一个学生是否被录取的标签。
我们的任务是建立一个二元分类模型,根据学生在两次考试中的成绩来估计大学录取机会。在训练数据中,
一个。数组的第一列x
代表所有测试 1 分数,第二列代表所有测试 2 分数。
湾。该y
向量使用“1”标记被录取的学生,使用“0”标记未被录取的学生。
我已经通过使用名为fminunc
. 现在,我正在通过使用梯度下降来解决它,但我的成本与迭代次数的图表没有转换,即成本函数值不会随着迭代次数而减少。我的 theta 值也与我应该得到的答案不匹配。
我得到的theta值:
[-0.085260 0.047703 -0.022851]
我应该得到的θ值(答案):
[-16.38 0.1483 0.1589]
我的源代码:
我得到的图形看起来像 1/x;
请告诉我我在哪里做错了。如果有什么我误解了,请告诉我。
artificial-intelligence - 我的 RPROP 神经网络卡住了
由于算法的实现是正确的(我检查了数百次),我想我误解了一些理论事实。
我假设:假设
j 指的是隐藏层侧,k 指的是输出层
∂E/∂wjk 通过以下方式计算:
对于∂E/∂wij,其中“i”指的是输入层,“j”指的是隐藏层,它有点长。
每个隐藏单元 (Zj, j = 1, ... ,p) 将其增量输入(来自输出层中的单元)相加,
然后我计算隐藏单元的错误信息:
最后,∂E/∂wij 是:
我按照此处的描述应用 RPROP http://www.inf.fu-berlin.de/lehre/WS06/Musterererkennung/Paper/rprop.pdf
对于输入和隐藏以及隐藏输出之间的所有权重。
我正在尝试识别由 '#' 和 '-' 、 9(rows)x7(columns) 组成的字母。
几个时期后,MSE 卡在 172 处。
我知道 RPROP 是批量学习,但我正在使用在线学习,因为我读到它仍然有效。
machine-learning - 使用 Shuffle 数据进行回归的随机梯度下降比 unshuffle 数据表现更好。为什么?
我将随机梯度下降 (SGD) 算法用于回归任务,并训练网络以对输入数据点进行多次迭代。我发现,与相同迭代次数的未打乱输入数据相比,输入数据的打乱会产生更好的结果。例如,我正在训练网络以学习 [-1,1] 之间输入范围的“平方”函数,总共 100 个点和 500 次迭代。因此,总训练点将是 100*500,如果我对所有这些训练点进行洗牌,系统性能会好得多。
有人可以建议它背后的数学原理是什么吗?为什么输入的改组效果更好?或者对参考论文的任何建议,它解释了培训中的随机性如何提供帮助。
谢谢。
r - 在线 SGD 中使用的来自 glmnet (R) 的 Lambda
我正在使用cv.glmnet
fromglmnet
包(in R
)。在结果中,我得到一个lambda
's(正则化参数)的向量。我想在在线 SGD 算法中使用它。有没有办法这样做以及如何做?
任何建议都会有所帮助。
我想知道如何将广义线性模型中的结果(根据模型的系数和正则化输出参数)与使用 R 包中的 cv.glmnet 函数离线计算的 l1 正则化和二项式分布(逻辑链接函数)进行比较我认为使用 Raphson-Newton 估计算法和相同类型的在线评估模型,但在每次新观察后使用随机梯度下降算法(经典,类型 I)重新计算估计值。
algorithm - 最初训练神经网络的困难
我正在研究人工神经网络(ANN)。我正在尝试训练许多不同的人工神经网络,主要研究重点是结构变化和预测率之间的相关性。
我注意到,由于训练步长太小,训练算法在前 100 次左右的迭代中收敛到接近初始状态是很常见的。我不清楚为什么会发生这种情况。有没有人遇到过同样的问题?这可能是什么原因?有没有更好的方法来克服这个问题,而不是仅仅强制迭代方案从问题所在的地方开始工作?
我一直在使用 fmincg 和 fminunc 在 Octave 中训练我的网络。反向传播。获得梯度和成本函数与逻辑回归相同。问题出现在第一隐藏层 10 个神经元和第二隐藏层 10 个神经元的网络结构上。MNIST 数据库同时用于训练和测试集。
加法:Fminunc 似乎在三层 ANN 上表现不佳,但在一些随机变量下,两层 ANN 似乎收敛没有问题。如果强制通过初始阶段,共轭梯度似乎起作用。
问题可能是权重的随机初始化吗?可能具有太低的可变性 [-0.12; 0;12] 导致问题?
编辑:使网络结构部分更加清晰。
optimization - 在计算我的参数 w 和 u 的梯度后,下一步以 SGD 方式优化它们是什么?
我正在编码的内容:我正在构建一个简单的神经网络,其中包含权重矩阵 w 和分数的第二个参数 u。将我的输入向量与 w 相乘后,将结果与向量 u 相乘,得到一个数字的结果,这就是我的分数。
我现在在哪里:我计算了两个参数相对于我的损失函数的梯度。
我的问题:现在我卡住了下一步该做什么?
我的解决方案建议:我可以用 w = w + learningrate * w_grad 更新参数(也可以用 u = u 学习率 *u_grad 更新参数)并执行此过程,直到我的成本/损失值降低……这行得通吗?这个对吗?这是随机梯度下降的简单实现吗?
我正在使用 Java 进行编码,如果您有一个简单且良好的文档示例,如何以一种简单的方式优化神经网络,您可以与我分享。
提前致谢!
optimization - Excel 中的非线性、非平滑优化
我正在尝试解决 excel 中的非线性、非平滑优化。GRG 和进化算法都不能给出合理的结果(在某些情况下它们不会收敛)。约束的数量在 excel 建议的限制范围内,并且模型构造是正确的。我必须在 excel 中运行这个优化问题的下一个最佳选择是什么?选择 Frontline Premium Solver 平台(其求解器引擎比 excel 求解器更多)更好还是有更好的第三方求解器插件?请给出建议。
PS:将其移出 excel 对我来说不是一个选择。
machine-learning - 感知器一直学习只复制一种模式
这是一个比较奇怪的问题。
A 有一个完美运行的反向传播代码,如下所示:
现在,当我进行批量学习时,即使它只涉及一个简单的标量函数逼近,我也会得到错误的结果。
训练后,网络为所有输入模式产生几乎相同的输出。
到目前为止,我已经尝试过:
- 引入偏差权重
- 尝试更新和不更新输入权重
- 改组批量学习中的模式
- 尝试在每个模式后更新并累积
- 以不同的可能方式初始化权重
- 仔细检查代码 10 次
- 按模式数量归一化累积更新
- 尝试了不同的层,神经元数量
- 尝试了不同的激活函数
- 尝试了不同的学习率
- 尝试了从 50 到 10000 的不同时期数
- 试图规范化数据
我注意到,在对一个模式进行大量反向传播之后,网络会为大量输入产生几乎相同的输出。
当我尝试逼近一个函数时,我总是得到一条线(几乎是一条线)。像这样:
相关问题:神经网络总是为任何输入产生相同/相似的输出 而添加偏置神经元的建议并没有解决我的问题。
我发现了一个类似的帖子:
这足够详细地描述了我的情况。但是如何处理呢?
我得出的结论是,我遇到的情况是有权利的。真的,对于每个网络配置,一个人可能只是“切断”到输出层的所有连接。这确实是可能的,例如,通过将所有隐藏权重设置为接近零或将偏差设置为一些疯狂的值,以使隐藏层过饱和并使输出独立于输入。之后,我们可以自由地调整输出层,使其能够独立于输入再现输出。在批量学习中,发生的情况是梯度被平均化,网络只再现了目标的平均值。输入不扮演任何角色。
python - 神经网络训练平稳中的梯度下降
我一直在尝试在 python 中实现一个基本的反向传播神经网络,并完成了初始化和训练权重集的编程。然而,在我训练的所有集合上,误差(均方)总是收敛到一个奇怪的数字——误差总是在进一步的迭代中减小,但从来没有真正接近于零。
任何帮助将非常感激。
r - 梯度下降计算错误
我试图编写一个函数来计算线性回归模型的梯度下降。但是,我得到的答案与我使用正规方程方法得到的答案不匹配。
我的样本数据是:
其中 c(4,6,8) 是 y 值。
运行这个函数,
我得到的结果是
当我使用正规方程法时,我得到
希望有人可以阐明我在此功能中出错的地方。