Questions tagged «gradient-descent»

梯度下降是一阶迭代优化算法。要使用梯度下降来找到函数的局部最小值,需要采取与该函数在当前点的梯度(或近似梯度)的负值成比例的步骤。对于随机梯度下降,也有[sgd]标签。

5
为什么k-均值不给出全局最小值?
我读到k-means算法仅收敛到局部最小值,而不收敛到全局最小值。为什么是这样?我可以从逻辑上考虑初始化如何影响最终的聚类,并且存在次优聚类的可能性,但是我没有找到任何可以从数学上证明这一点的东西。 另外,为什么k-means是一个迭代过程?我们不能仅将目标函数wrt与质心进行部分区分,将其等于零以找到使该函数最小化的质心吗?为什么我们必须使用梯度下降来逐步达到最小?


3
在线学习和批处理学习有什么区别?
我目前正在阅读John Duchi和Yoram Singer撰写的论文《使用正反拆分进行有效的在线和批处理学习》。我对术语“在线”和“批处理”的使用感到非常困惑。 我认为“在线”是指我们在处理了一个单位的训练数据后更新了体重参数。然后,我们使用新的权重参数来处理训练数据的下一个单位。 但是,在上面的文章中,用法尚不清楚。

1
与标准梯度下降相比,随机梯度下降如何节省时间?
标准梯度下降将为整个训练数据集计算梯度。 for i in range(nb_epochs): params_grad = evaluate_gradient(loss_function, data, params) params = params - learning_rate * params_grad 对于预定义的时期数,我们首先使用参数向量参数为整个数据集计算损失函数的梯度向量weights_grad。 相反,随机梯度下降为每个训练示例x(i)和标签y(i)执行参数更新。 for i in range(nb_epochs): np.random.shuffle(data) for example in data: params_grad = evaluate_gradient(loss_function, example, params) params = params - learning_rate * params_grad SGD据说要快得多。但是,我不明白如果仍然对所有数据点进行循环,那么如何更快。GD中梯度的计算是否比分别为每个数据点计算GD慢得多? 代码来自这里。

1
关于感知器规则与梯度下降与随机梯度下降实现的说明
我对不同的Perceptron实现进行了一些实验,并希望确定我是否正确理解了“迭代”。 罗森布拉特的原始感知器规则 据我了解,在罗森布拉特的经典感知器算法中,权重在每个训练示例之后通过 Δw(t+1)=Δw(t)+η(target−actual)xiΔw(t+1)=Δw(t)+η(target−actual)xi\Delta{w}^{(t+1)} = \Delta{w}^{(t)} + \eta(target - actual)x_i 其中是这里的学习规则。目标和实际都被阈值化(-1或1)。我将其实现为1次迭代= 1次遍历训练样本,但是权重向量在每次训练样本后都会更新。Ë 吨一ËŤ一种eta 我将“实际”值计算为 sign(wwTxx)=sign(w0+w1x1+...+wdxd)sign(wwTxx)=sign(w0+w1x1+...+wdxd) sign ({\pmb{w}^T\pmb{x}}) = sign( w_0 + w_1 x_1 + ... + w_d x_d) 随机梯度下降 Δw(t+1)=Δw(t)+η(target−actual)xiΔw(t+1)=Δw(t)+η(target−actual)xi\Delta{w}^{(t+1)} = \Delta{w}^{(t)} + \eta(target - actual)x_i 相同感知规则,但是,target并actual没有阈值处理,但真正的价值。另外,我将“迭代”视为训练样本上的路径。 在这种线性可分离的情况下,SGD和经典感知器规则都收敛,但是,我在梯度下降实现方面遇到了麻烦。 梯度下降 在这里,我查看了训练样本并总结了训练样本1次传递后的权重变化,然后更新了权重,例如, 对于每个训练样本: Δwnew+=Δw(t)+η(target−actual)xiΔwnew+=Δw(t)+η(target−actual)xi\Delta{w_{new}} \mathrel{{+}{=}} \Delta{w}^{(t)} + \eta(target - actual)x_i ... 经过1次训练后: …

1
(最小)批量梯度中梯度的总和或平均值是否合适?
当我实现了迷你批次梯度样例时,我只是对训练批次中所有示例的梯度进行平均。但是,我注意到,现在的最佳学习率远远高于在线梯度样例。我的直觉是,这是因为平均梯度噪声较小,因此可以更快地遵循。因此,也许仅仅总结一批的梯度也是有意义的。无论如何,这些值可以为正也可以为负。 我知道这只是一个恒定因素,可以使用学习率来平衡。但是我不知道科学家们同意哪个定义,以便我可以从神经网络论文中复制结果。 通常是否将批次的总梯度除以批次大小?

1
CNN如何避免消失的梯度问题
我已经阅读了很多有关卷积神经网络的文章,并且想知道它们如何避免消失的梯度问题。我知道深度信任网络会堆叠单级自动编码器或其他经过预先训练的浅层网络,因此可以避免此问题,但是我不知道如何在CNN中避免这种情况。 根据维基百科: “尽管存在上述“消失的梯度问题”,但GPU的优越处理能力使普通的反向传播对于多层多层前馈神经网络来说是可行的。” 我不明白为什么GPU处理会消除此问题?

1
为什么我们不使用非恒定学习率来实现除神经网络以外的其他事物的梯度体面?
在梯度下降中使用非恒定的学习率,深度学习文学充满了巧妙的技巧。像指数衰减,RMSprop,Adagrad等之类的东西很容易实现,并且在每个深度学习包中都可用,但是在神经网络之外似乎并不存在。有什么理由吗?如果只是人们根本不在乎,是否有理由为什么我们不必在神经网络之外关心?

4
如何将其困在鞍点上?
目前,我对如何在鞍点处捕获小批量梯度下降感到有些困惑。 解决方案可能太琐碎,以至于我不明白。 你会得到一个新的样品每一个时代,并计算基于新的一批新的错误,所以成本功能仅适用于每一批静态这意味着梯度也应该为每个小批量根据改变..但这个应该香草的实施是否有鞍点问题? 最小化神经网络常见的高度非凸误差函数的另一个关键挑战是避免陷入其众多次优局部最小值中。Dauphin等。[19]认为困难实际上不是由局部极小值引起的,而是由鞍点引起的,即一维向上倾斜而另一维向下倾斜的点。这些鞍点通常被相同误差的平稳段包围,这使得SGD很难逃脱,因为在所有维度上梯度都接近于零。 我的意思是,随着SGD趋于收敛,特别是SGD相对于鞍点将具有明显的优势...波动和随机采样以及每个时期的成本函数不同,应该足以成为避免陷入困境的充分原因。 对于整批梯度,体形确实有意义,因为误差函数是恒定的,所以可以将其困在鞍点中。 我对其他两个部分有些困惑。

1
情景强盗的成本函数
我正在用vowpal wabbit解决上下文强盗问题。我正在向用户展示广告,并且我有很多有关显示广告的上下文的信息(例如,用户是谁,他们在哪个网站等)。如John Langford所述,这似乎是一个非常经典的情境强盗问题。 在我的情况下,用户可以对广告有2个主要响应:单击(可能多次)或不单击。我大约可以选择1,000个广告。Vowpal Wabbit要求action:cost:probability每个上下文形式的目标变量。在我的情况,action并probability很容易搞清楚:action是广告我选择显示,并且probability是选择给我的展示广告目前的政策,即广告的可能性。 但是,我在想出一种将收益(点击)映射为费用的好方法时遇到了麻烦。点击显然很不错,对同一广告的多次点击也比对同一广告的单次点击要好。但是,不点击广告是中立的:除了错过点击机会之外,它实际上并不会花我任何钱(我在奇怪的广告环境中工作)。 我有一些想法: 费用= -1 *符号(点击)+ 0 *(未点击) 费用= -1 *点击次数+ 0 *(未点击) 费用= -1 *符号(点击)+ 0.01 *(未点击) 费用= -1 *点击次数+ 0.01 *(未点击) 对于一个行动矢量,(0, 1, 5, 0)这四个功能的成本为: (0, -1, -1, 0) (0, -1, -5, 0) (0.01, -1, -1, 0.01) (0.01, -1, -5, 0.01) 很显然,许多其他的方式来表示clicks=good,并no clicks=bad.在一般情况下,我应该如何建模为vowpal wabbit上下文匪问题成本?是否可以将收益表示为负成本,还是应该重新调整所有规模以使所有成本均为正?相对中立的行为将成本设为零是否可以,或者我应该给它们一个小的正成本,以将模型推向积极的行为?

2
R中的梯度下降与lm()函数?
我正在看吴安德(Andrew Ng)的免费在线机器学习课程中的视频在斯坦福大学中。他讨论了梯度下降作为解决线性回归的算法,并在Octave中编写函数来执行该算法。大概我可以用R重写那些函数,但是我的问题是lm()函数是否已经给了我线性回归的输出?为什么要编写自己的梯度下降函数?有优势还是纯粹作为学习练习?lm()会进行梯度下降吗?

5
为什么大数据集的梯度下降效率不高?
假设我们的数据集包含一百万个示例,即,并且我们希望使用梯度下降对这些数据集执行逻辑或线性回归。x1,…,x106x1,…,x106x_1, \ldots, x_{10^6} 梯度下降法使效率低下是什么? 回想一下在时间处的梯度下降步长为:ttt wt+1=wt+ηt∇f(x)wt+1=wt+ηt∇f(x)w_{t+1} = w_{t} + \eta_t \nabla f(x) 其中是损失函数。fff 我没有发现上述步骤导致算法效率低下的任何异常情况。它是的计算吗?不能预先计算此操作,即已经计算出每个,并只是在每个数据点对其求值∇f(x)∇f(x)\nabla f(x)∂f∂x∂f∂x\frac{\partial f}{\partial x}xi?xi?x_i?

1
为什么在实践中不使用“无马鞍牛顿”下降算法?
最近,我读了Yann Dauphin等人的论文。识别和解决高维非凸优化中的鞍点问题,他们引入了一种有趣的下降算法,称为“无鞍牛顿”,该算法似乎是专门为神经网络优化设计的,因此不会卡在鞍点上像香草SGD这样的一阶方法。 该论文的历史可以追溯到2014年,因此并不是什么新鲜事物,但是,我还没有看到它被“野外使用”。为什么不使用此方法?对于现实世界中存在的问题/网络,Hessian计算是否过于严格?该算法是否甚至有一些开源实现,可能与某些主要的深度学习框架一起使用? 2019年2月更新:现在有一个实现:https : //github.com/dave-fernandes/SaddleFreeOptimizer)

1
为随机梯度下降(SGD)选择合适的小批量大小
有没有文献研究随机梯度下降时小批量的选择?以我的经验,这似乎是一个经验选择,通常是通过交叉验证或使用不同的经验法则发现的。 随着验证错误的减少,逐渐增加小批量的大小是否是一个好主意?这将对泛化错误产生什么影响?我是否会使用极小的微型批处理程序进行更好的情况更新数十万次?在数量极少与批量之间保持平衡的状态下,我会更好吗? 我是否应该根据数据集的大小或数据集中预期的要素数量来缩放微型批处理的大小? 我显然对实现小批量学习方案有很多疑问。不幸的是,我阅读的大多数论文并没有真正说明他们如何选择此超参数。我从Yann LeCun等作家那里取得了一些成功,尤其是从Tricks of the Trade的论文收集中获得了成功。但是,我仍然没有看到这些问题得到充分解决。是否有人对论文有任何建议,或者关于在尝试学习功能时可以用来确定良好的小批量大小的标准的建议?

2
梯度下降在此数据集上找不到普通最小二乘法的解?
我一直在研究线性回归,并在下面的集合{(x,y)}上进行过尝试,其中x以平方英尺为单位指定房屋面积,y以美元指定价格。这是Andrew Ng Notes中的第一个示例。 2104,400 1600,330 2400,369 1416,232 3000,540 我开发了一个示例代码,但是当我运行它时,成本随着每一步都在增加,而应该随着每一步而降低。代码和输出如下。bias是W 0 X 0,其中X 0 = 1。featureWeights是[X 1,X 2,...,X N ] 的数组 我还尝试了这里提供的在线python解决方案,并在此处进行了说明。但是此示例也提供了相同的输出。 理解概念的差距在哪里? 码: package com.practice.cnn; import java.util.Arrays; public class LinearRegressionExample { private float ALPHA = 0.0001f; private int featureCount = 0; private int rowCount = 0; private float bias = …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.