im钱包安卓版下载
数字资产服务平台

im钱包安卓版下载是全球著名的数字资产交易平台之一,主要面向全球用户提供比特币、莱特币、以太币等数字资产的币币和衍生品交易服务。

imtoken钱包下载美国|sgd是什么意思

时间:2024-03-09 17:22:49

随机梯度下降(stochastic gradient descent,SGD) - 知乎

随机梯度下降(stochastic gradient descent,SGD) - 知乎首发于AI大类切换模式写文章登录/注册随机梯度下降(stochastic gradient descent,SGD)飞狗茫然的低欲青年梯度下降法大多数机器学习或者深度学习算法都涉及某种形式的优化。 优化指的是改变 x 以最小化或最大化某个函数 f(x) 的任务。 我们通常以最小化 f(x) 指代大多数最优化问题。 最大化可经由最小化算法最小化 -f(x) 来实现。我们把要最小化或最大化的函数称为目标函数或准则。 当我们对其进行最小化时,我们也把它称为代价函数、损失函数或误差函数。 下面,我们假设一个损失函数为J(\theta)=\frac{1}{2}\sum_{i=1}^{m}({h_\theta(x)-y})^2 ,其中 h_θ(x)=θ_0+θ_1x_1+θ_{2}x_2....+θ_{n}x_n 然后要使得最小化它。注意:这里只是假设,不用知道这个目标函数就是平方损失函数等等,然后肯定有人问既然要最小化它,那求个导数,然后使得导数等于0求出不就好了吗?Emmmm...是的,有这样的解法,可以去了解正规方程组求解。说下这里不讲的原因,主要是那样的方式太难求解,然后在高维的时候,可能不可解,但机器学习或深度学习中,很多都是超高维的,所以也一般不用那种方法。总之,梯度下降是另一种优化的不错方式,比直接求导好很多。梯度下降:我们知道曲面上方向导数的最大值的方向就代表了梯度的方向,因此我们在做梯度下降的时候,应该是沿着梯度的反方向进行权重的更新,可以有效的找到全局的最优解。这个 \theta_i 的更新过程可以描述为[a表示的是步长或者说是学习率(learning rate)]好了,怎么理解?在直观上,我们可以这样理解,看下图,一开始的时候我们随机站在一个点,把他看成一座山,每一步,我们都以下降最多的路线来下山,那么,在这个过程中我们到达山底(最优点)是最快的,而上面的a,它决定了我们“向下山走”时每一步的大小,过小的话收敛太慢,过大的话可能错过最小值,扯到蛋...)。这是一种很自然的算法,每一步总是寻找使J下降最“陡”的方向(就像找最快下山的路一样)。当然了,我们直观上理解了之后,接下来肯定是从数学的角度,我们可以这样想,先想在低维的时候,比如二维,我们要找到最小值,其实可以是这样的方法,具体化到1元函数中时,梯度方向首先是沿着曲线的切线的,然后取切线向上增长的方向为梯度方向,2元或者多元函数中,梯度向量为函数值f对每个变量的导数,该向量的方向就是梯度的方向,当然向量的大小也就是梯度的大小。现在假设我们要求函数的最值,采用梯度下降法,结合如图所示:如图所示,我们假设函数是 y=x^2+1 ,那么如何使得这个函数达到最小值呢,简单的理解,就是对x求导,得到 y‘=\frac{1}{2}x ,然后用梯度下降的方式,如果初始值是(0的左边)负值,那么这是导数也是负值,用梯度下降的公式,使得x更加的靠近0,如果是正值的时候同理。注意:这里的梯度也就是一元函数的导数,高维的可以直接类推之然后是优缺点,这里比较对象是批量梯度和mini-batch梯度下降,先看下他们三者:批量梯度下降:在每次更新时用所有样本,要留意,在梯度下降中,对于 \theta_i 的更新,所有的样本都有贡献,也就是参与调整 \theta .其计算得到的是一个标准梯度,对于最优化问题,凸问题,也肯定可以达到一个全局最优。因而理论上来说一次更新的幅度是比较大的。如果样本不多的情况下,当然是这样收敛的速度会更快啦。但是很多时候,样本很多,更新一次要很久,这样的方法就不合适啦。下图是其更新公式随机梯度下降:在每次更新时用1个样本,可以看到多了随机两个字,随机也就是说我们用样本中的一个例子来近似我所有的样本,来调整θ,因而随机梯度下降是会带来一定的问题,因为计算得到的并不是准确的一个梯度,对于最优化问题,凸问题,虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近。但是相比于批量梯度,这样的方法更快,更快收敛,虽然不是全局最优,但很多时候是我们可以接受的,所以这个方法用的也比上面的多。下图是其更新公式:mini-batch梯度下降:在每次更新时用b个样本,其实批量的梯度下降就是一种折中的方法,他用了一些小样本来近似全部的,其本质就是我1个指不定不太准,那我用个30个50个样本那比随机的要准不少了吧,而且批量的话还是非常可以反映样本的一个分布情况的。在深度学习中,这种方法用的是最多的,因为这个方法收敛也不会很慢,收敛的局部最优也是更多的可以接受!了解之后,总的来说,随机梯度下降一般来说效率高,收敛到的路线曲折,但一般得到的解是我们能够接受的,在深度学习中,用的比较多的是mini-batch梯度下降。最后是收敛性,能收敛吗?收敛到什么地方?对于收敛性的问题,知乎上就有这个问题:为什么随机梯度下降方法能够收敛?,我比较赞赏李文哲博士的回答(推荐一看),总的来说就是从expected loss用特卡洛(monte carlo)来表示计算,那batch GD, mini-batch GD, SGD都可以看成SGD的范畴。因为大家都是在一个真实的分布中得到的样本,对于分布的拟合都是近似的。那这个时候三种方式的梯度下降就都是可以看成用样本来近似分布的过程,都是可以收敛的!对于收敛到什么地方:能到的地方:最小值,极小值,鞍点。这些都是能收敛到的地方,也就是梯度为0的点。当然,几乎不存在找到鞍点的可能,除非很碰巧,因为梯度下降是对损失函数每个维度分别求极小值,即分别求 J(θ) 关于 θ_1、θ_2...θ_n 极小值。然后是最小值和极小值,如果是凸函数,梯度下降会收敛到最小值,因为只有一个极小值,它就是最小值。至于什么是凸函数,详见我的专栏文章:掌握机器学习数学基础之凸优化。对于理论支持:Optimization Methods for Large-Scale Machine Learning:这论文之前的问答也看到了,贴下知友的翻译。为什么我们更宠爱“随机”梯度下降?ROBUST STOCHASTIC APPROXIMATION APPROACH TO STOCHASTIC PROGRAMMINGAn Introduction to optimization以上三个关于优化的文章,一切问题,自然随之而解。值得一看!发布于 2021-03-18 10:43随机梯度下降算法梯度下降​赞同 114​​25 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录AI大类AI通用知识、模型

1 SGD 兑换为 CNY | 将 Singapore Dollars 转换为 中国人民币 | XE

D 兑换为 CNY | 将 Singapore Dollars 转换为 中国人民币 | XE跳至内容个人商业付款转换器货币数据 API工具货币图表任何货币的趋势汇率通知设置目标汇率并获取通知历史货币汇率查看任何日期的汇率IBAN 计算器搜索并验证 IBAN应用智能手机应用等更多工具资源常见问题解答推荐好友博客汇款技巧货币百科全书货币通讯术语表更多资源登录汇款汇率通知注册汇款汇率通知付款转换器货币数据 API工具货币图表任何货币的趋势汇率通知设置目标汇率并获取通知历史货币汇率查看任何日期的汇率IBAN 计算器搜索并验证 IBAN应用智能手机应用等更多工具资源常见问题解答推荐好友博客汇款技巧货币百科全书货币通讯术语表更多资源登录登录汇款汇率通知注册注册汇款汇率通知1 SGD 兑换为 CNYXe 货币转换器转换汇款图表通知金额1S$从SGD – 新加坡元到CNY – 中国人民币1.00 新加坡元 =5.3936452 中国人民币1 CNY = 0.185403 SGD我仅的仅仅器会使用中期市仅仅率。仅仅供参考。您仅款仅不会仅得此仅率。 仅看仅款仅率。查看汇款报价新加坡元 兑换为 中国人民币 — 最近更新时间:2024年3月9日 UTC 09:22將 新加坡元 转换为 中国人民币SGDCNY1 SGD5.39365 CNY5 SGD26.9682 CNY10 SGD53.9365 CNY25 SGD134.841 CNY50 SGD269.682 CNY100 SGD539.365 CNY500 SGD2,696.82 CNY1,000 SGD5,393.65 CNY5,000 SGD26,968.2 CNY10,000 SGD53,936.5 CNY將 中国人民币 转换为 新加坡元CNYSGD1 CNY0.185403 SGD5 CNY0.927017 SGD10 CNY1.85403 SGD25 CNY4.63508 SGD50 CNY9.27017 SGD100 CNY18.5403 SGD500 CNY92.7017 SGD1,000 CNY185.403 SGD5,000 CNY927.017 SGD10,000 CNY1,854.03 SGDSGD 兑 CNY 图表1 SGD = 0 CNY 查看完整图表1 新加坡元兑 中国人民币 统计数据过去 30 天过去 90 天高位这些是过去 30 天和 90 天内的最高汇率。5.39585.4121低这些是过去 30 天和 90 天内的最低汇率。5.32335.2854平均这些是这两种货币在过去 30 天和 90 天的平均汇率。5.35175.3495波动率这些百分比显示了过去 30 天和 90 天内的汇率波动幅度。阅读全文0.16%0.28%货币信息SGD - 新加坡元我们的货币排名显示最热门的 新加坡元 汇率是 SGD 兑 USD 汇率。 Singapore Dollars的货币代码为 SGD。 货币符号为 S$。More 新加坡元 infoCNY - 中国人民币我们的货币排名显示最热门的 中国人民币 汇率是 CNY 兑 USD 汇率。 中国人民币的货币代码为 CNY。 货币符号为 ¥。More 中国人民币 info热门 新加坡元 (SGD) 货币配对将 SGD 转换为 USD将 SGD 转换为 AUD将 SGD 转换为 INR将 SGD 转换为 GBP将 SGD 转换为 EUR将 SGD 转换为 JPY将 SGD 转换为 CHF全球最受欢迎的货币工具XE 国际汇款快捷安全地在线汇款。实时跟踪和通知外加灵活的交付和付款选项。付款XE Currency 图表为全球任何货币对创建图表,以查看其货币历史记录。这些货币图表使用实时中期市场汇率,易于使用且非常可靠。查看图表XE 汇率通知需要知道某个货币何时达到特定汇率?“XE 汇率通知”将在所选货币对触及所需汇率时通知您。创建通知XE Currency 数据 API为全球 300 多家公司提供商业级汇率支持了解更多下载 XE 应用查看实时汇率、安全地汇款、设置汇率通知、接收通知等等。扫描这里!超过 7000 万次全球下载量4.5/5, 2200 ratings3,8/5, 9.08 万 ratings4.7/5, 4.15 万 ratings语言简体中文EnglishEnglish (UK)DeutschEspañolFrançaisPortuguêsItalianoSvenska日本語繁體中文العربية汇款在线汇款汇款到印度汇款到巴基斯坦汇款到墨西哥汇款到日本汇款到英国汇款到加拿大汇款至澳大利亚汇款到新西兰向移动钱包汇款安全举报欺诈行为Trustpilot 评论XE 商业商业付款国际商业付款全球商业付款Risk Management企业资源规划货币数据 API 集成联盟推荐合作伙伴计划大规模付款应用汇款和货币应用Android 汇款应用iOS 汇款应用工具与资源博客货币转换器货币图表历史货币汇率货币百科全书货币汇率通知货币通讯IBAN 计算器术语表公司信息关于我们合作关系诚聘英才常见问题解答站点地图法律隐私Cookie 政策Consent Manager汇款重要信息提交投诉可达性© 1995-2024 XE.com I

如何理解随机梯度下降(stochastic gradient descent,SGD)? - 知乎

如何理解随机梯度下降(stochastic gradient descent,SGD)? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册数学机器学习优化凸优化神经网络如何理解随机梯度下降(stochastic gradient descent,SGD)?它的优缺点在哪?为什么效率比较高?有什么理论支持吗?有实例分析证明收敛性吗?据说在训练 ML、NN 时用的最多,是真的吗?刚接触优化理论,谢谢大家分享…显示全部 ​关注者785被浏览1,214,400关注问题​写回答​邀请回答​好问题 40​添加评论​分享​33 个回答默认排序Jackpop​哈尔滨工业大学 计算数学硕士​ 关注梯度下降法主要分为三种,梯度下降法随机梯度下降小批量梯度下降下面分别来介绍一下,这样更加有助于理解它们之间的联系。梯度下降法梯度下降使用整个训练数据集来计算梯度,因此它有时也被称为批量梯度下降下面就以均方误差讲解一下,假设损失函数如下:J(\theta_0,\theta_1,\theta_2,...,\theta_n)=\frac{1}{m}\sum_{m}^{j=0}{(\hat{y}-y)^2}其中 \hat{y} 是预测值, y 是真实值,那么要最小化上面损失 J ,需要对每个参数 \theta_0、\theta_1、...、\theta_n 运用梯度下降法:\theta_i\leftarrow\theta_i-\alpha\frac{\partial}{\partial\theta_i}J(\theta_0,\theta_1,...,\theta_n)其中 \frac{\partial}{\partial\theta_i}J(\theta_0,\theta_1,...,\theta_n) 是损失函数对参数 \theta_i 的偏导数、 \alpha 是学习率,也是每一步更新的步长。随机梯度下降法在机器学习\深度学习中,目标函数的损失函数通常取各个样本损失函数的平均,那么假设目标函数为:J(x)=\frac{1}{n}\sum_{i=1}^{n}{J(x_i)}其中 J(x_i) 是第 x_i 个样本的目标函数,那么目标函数在在 x 处的梯度为:\nabla{J(x)}=\frac{1}{n}\nabla\sum_{i=1}^{n}{J(x_i)}如果使用梯度下降法(批量梯度下降法),那么每次迭代过程中都要对 n个样本进行求梯度,所以开销非常大,随机梯度下降的思想就是随机采样一个样本 J(x_i)来更新参数,那么计算开销就从 \mathcal{O}{(n)} 下降到 \mathcal{O}{(1)} 。小批量梯度下降法随机梯度下降虽然提高了计算效率,降低了计算开销,但是由于每次迭代只随机选择一个样本,因此随机性比较大,所以下降过程中非常曲折(图片来自《动手学深度学习》),所以,样本的随机性会带来很多噪声,我们可以选取一定数目的样本组成一个小批量样本,然后用这个小批量更新梯度,这样不仅可以减少计算成本,还可以提高算法稳定性。小批量梯度下降的开销为 \mathcal{O}{(\left| \mathscr{B} \right|)} 其中 \left| \mathscr{B} \right|是批量大小。该怎么选择?当数据量不大的时候可以选择批量梯度下降法,当数据量很大时可以选择小批量梯度下降法。编辑于 2022-11-04 09:05​赞同 141​​9 条评论​分享​收藏​喜欢收起​evtor欢迎关注我的专栏​ 关注因为觉得之前的回答都不是很直接和全面,在下回答一波:理解随机梯度下降,首先要知道梯度下降法,故先介绍梯度下降法:梯度下降法大多数机器学习或者深度学习算法都涉及某种形式的优化。 优化指的是改变 x 以最小化或最大化某个函数 f(x) 的任务。 我们通常以最小化 f(x) 指代大多数最优化问题。 最大化可经由最小化算法最小化 -f(x) 来实现。我们把要最小化或最大化的函数称为目标函数或准则。 当我们对其进行最小化时,我们也把它称为代价函数、损失函数或误差函数。 下面,我们假设一个损失函数为 J(\theta)=\frac{1}{2}\sum_{i=1}^{m}({h_\theta(x)-y})^2 ,其中 h_θ(x)=θ_0+θ_1x_1+θ_{2}x_2....+θ_{n}x_n 然后要使得最小化它。注意:这里只是假设,不用知道这个目标函数就是平方损失函数等等,然后肯定有人问既然要最小化它,那求个导数,然后使得导数等于0求出不就好了吗?Emmmm...是的,有这样的解法,可以去了解正规方程组求解。说下这里不讲的原因,主要是那样的方式太难求解,然后在高维的时候,可能不可解,但机器学习或深度学习中,很多都是超高维的,所以也一般不用那种方法。总之,梯度下降是另一种优化的不错方式,比直接求导好很多。梯度下降:我们知道曲面上方向导数的最大值的方向就代表了梯度的方向,因此我们在做梯度下降的时候,应该是沿着梯度的反方向进行权重的更新,可以有效的找到全局的最优解。这个 \theta_i 的更新过程可以描述为[a表示的是步长或者说是学习率(learning rate)]好了,怎么理解?在直观上,我们可以这样理解,看下图,一开始的时候我们随机站在一个点,把他看成一座山,每一步,我们都以下降最多的路线来下山,那么,在这个过程中我们到达山底(最优点)是最快的,而上面的a,它决定了我们“向下山走”时每一步的大小,过小的话收敛太慢,过大的话可能错过最小值,扯到蛋...)。这是一种很自然的算法,每一步总是寻找使J下降最“陡”的方向(就像找最快下山的路一样)。当然了,我们直观上理解了之后,接下来肯定是从数学的角度,我们可以这样想,先想在低维的时候,比如二维,我们要找到最小值,其实可以是这样的方法,具体化到1元函数中时,梯度方向首先是沿着曲线的切线的,然后取切线向上增长的方向为梯度方向,2元或者多元函数中,梯度向量为函数值f对每个变量的导数,该向量的方向就是梯度的方向,当然向量的大小也就是梯度的大小。现在假设我们要求函数的最值,采用梯度下降法,结合如图所示:如图所示,我们假设函数是 y=x^2+1 ,那么如何使得这个函数达到最小值呢,简单的理解,就是对x求导,得到 y‘=\frac{1}{2}x ,然后用梯度下降的方式,如果初始值是(0的左边)负值,那么这是导数也是负值,用梯度下降的公式,使得x更加的靠近0,如果是正值的时候同理。注意:这里的梯度也就是一元函数的导数,高维的可以直接类推之然后是优缺点,这里比较对象是批量梯度和mini-batch梯度下降,先看下他们三者:批量梯度下降:在每次更新时用所有样本,要留意,在梯度下降中,对于 \theta_i 的更新,所有的样本都有贡献,也就是参与调整 \theta .其计算得到的是一个标准梯度,对于最优化问题,凸问题,也肯定可以达到一个全局最优。因而理论上来说一次更新的幅度是比较大的。如果样本不多的情况下,当然是这样收敛的速度会更快啦。但是很多时候,样本很多,更新一次要很久,这样的方法就不合适啦。下图是其更新公式随机梯度下降:在每次更新时用1个样本,可以看到多了随机两个字,随机也就是说我们用样本中的一个例子来近似我所有的样本,来调整θ,因而随机梯度下降是会带来一定的问题,因为计算得到的并不是准确的一个梯度,对于最优化问题,凸问题,虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近。但是相比于批量梯度,这样的方法更快,更快收敛,虽然不是全局最优,但很多时候是我们可以接受的,所以这个方法用的也比上面的多。下图是其更新公式:mini-batch梯度下降:在每次更新时用b个样本,其实批量的梯度下降就是一种折中的方法,他用了一些小样本来近似全部的,其本质就是我1个指不定不太准,那我用个30个50个样本那比随机的要准不少了吧,而且批量的话还是非常可以反映样本的一个分布情况的。在深度学习中,这种方法用的是最多的,因为这个方法收敛也不会很慢,收敛的局部最优也是更多的可以接受! }了解之后,总的来说,随机梯度下降一般来说效率高,收敛到的路线曲折,但一般得到的解是我们能够接受的,在深度学习中,用的比较多的是mini-batch梯度下降。最后是收敛性,能收敛吗?收敛到什么地方?对于收敛性的问题,知乎上就有这个问题:为什么随机梯度下降方法能够收敛?,我比较赞赏李文哲博士的回答(推荐一看),总的来说就是从expected loss用特卡洛(monte carlo)来表示计算,那batch GD, mini-batch GD, SGD都可以看成SGD的范畴。因为大家都是在一个真实的分布中得到的样本,对于分布的拟合都是近似的。那这个时候三种方式的梯度下降就都是可以看成用样本来近似分布的过程,都是可以收敛的!对于收敛到什么地方:能到的地方:最小值,极小值,鞍点。这些都是能收敛到的地方,也就是梯度为0的点。当然,几乎不存在找到鞍点的可能,除非很碰巧,因为梯度下降是对损失函数每个维度分别求极小值,即分别求 J(θ) 关于 θ_1、θ_2...θ_n 极小值。然后是最小值和极小值,如果是凸函数,梯度下降会收敛到最小值,因为只有一个极小值,它就是最小值。至于什么是凸函数,详见我的专栏文章:掌握机器学习数学基础之凸优化。对于理论支持:Optimization Methods for Large-Scale Machine Learning:这论文之前的问答也看到了,贴下知友的翻译。为什么我们更宠爱“随机”梯度下降?ROBUST STOCHASTIC APPROXIMATION APPROACH TO STOCHASTIC PROGRAMMINGAn Introduction to optimization以上三个关于优化的文章,一切问题,自然随之而解。值得一看!编辑于 2018-01-07 22:30​赞同 1020​​添加评论​分享​收藏​喜欢

怎么通俗易懂的理解SGD中Momentum的含义? - 知乎

怎么通俗易懂的理解SGD中Momentum的含义? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册深度学习(Deep Learning)卷积神经网络(CNN)随机梯度下降算法怎么通俗易懂的理解SGD中Momentum的含义?知道用Momentum可以优化SGD,但是一直不能理解momentum在这里的含义到底是什么,为什么momentum就可以优化SGD显示全部 ​关注者53被浏览101,677关注问题​写回答​邀请回答​好问题 6​添加评论​分享​5 个回答默认排序Summer Clover​量子计算机等 4 个话题下的优秀答主​ 关注总的来说,Momentum很有效,直觉上很容易理解,但是其理论性质复杂、超出大多数人想象。Momentum是一个非常经典的改进。以至于现在的机器学习顶会里SGD一般默认是指SGD Momentum,而把原始的SGD称之为vanilla SGD。流行的深度学习库比如PyTorch等,一般也把带Momentum的SGD直接叫做SGD。但是你要说Momentum总是比SGD好也是没有依据的。Momentum并不总能提升SGD的效果。尤其在深度学习里,优化器的性能会受到很多其他超参数的影响,比如batch size和weight decay。所有机器学习的初学者都必然会学习梯度下降(GD)和随机梯度下降(SGD)两个古老的优化方法。细节我就不再多言,他们大体上都可以写成如下的形式:\theta_{t} = \theta_{t-1} - \eta \nabla L(\theta_{t-1}) 其中 \theta_{t} 是第t个iteration时的模型参数, \eta 是学习率, \nabla L(\theta) 是梯度或随机梯度。我们在原始SGD上引入了一个Momentum(又叫Heavy Ball)的改进。Momentum/Heavy Ball. 一般beta3取值设为1或者1-beta1.Momentum实际上就用过去梯度的moving average来更新参数。举一个直观的例子来说明SGD和Momentum的区别的话——SGD是一个轻球(无惯性)做梯度下降寻找loss极小值,而Momentum则是一个重球(有惯性)做梯度下降寻找loss极小值。如果要有依据地比较Momentum和SGD的话——在深度学习里,Momentum相比SGD最主要的好处其实是经常有更好的收敛性(better convergence)。实验依据可参考文献[1] ICML2013,理论上在一些假设下也支持这个说法。但Momentum的理论性质严格地说还有不少值得探讨和怀疑的地方,甚至连SGD的理论性质都还没有那么明明白白。很多人会提到,Momentum可以改善SGD在梯度消失、鞍点等多种不利情况下的表现。但这些说法都是比较intuitive的。这些因素对性能到底有多大影响,实验依据和理论依据都很缺乏。在Momentum的加持下,对深度学习来说,SGD仍然是和Adam并列的两大基线优化器之一。在一些最常见的任务里,SGD仍然是最为强大的基线选择(可参考我的另一篇文章:SGD有多种改进的形式(RMSprop,Adadelta等),为什么大多数论文中仍然用SGD?)。References:[1] Sutskever, I., Martens, J., Dahl, G., & Hinton, G. (2013, May). On the importance of initialization and momentum in deep learning. InInternational conference on machine learning(pp. 1139-1147). PMLR.SGD和Momentum的轨迹对比。我们可以在 Why Momentum Really Works 这个网站直观地可视化SGD和Momentum的运动轨迹。编辑于 2022-06-20 08:52​赞同 248​​10 条评论​分享​收藏​喜欢收起​匿名用户真正理解这个问题,可能需要一些几何力学的知识,给本书Geometric Mechanics and Symmetry: From Finite to Infinite Dimensions其实本质应该是对参数加了约束。编辑于 2020-05-20 15:13​赞同​​添加评论​分享​收藏​喜欢

梯度下降法(SGD)原理解析及其改进优化算法 - 知乎

梯度下降法(SGD)原理解析及其改进优化算法 - 知乎首发于机器学习算法的那点儿东西切换模式写文章登录/注册梯度下降法(SGD)原理解析及其改进优化算法ChuckDo what you want to do.一、梯度下降法原理1. 梯度(在数学上的定义)表示某一函数在该点处的方向导数沿着该方向取得最大值(即最大方向导数的方向),也就是函数在该点处沿着该方向变化最快,变化率最大(为该梯度的模)。梯度下降2. 梯度下降法迭代步骤梯度下降的一个直观的解释: 比如我们在一座大山上的某处位置,由于我们不知道怎么下山,于是决定走一步算一步,也就是在每走到一个位置的时候,求解当前位置的梯度,沿着梯度的负方向,也就是当前最陡峭的位置向下走一步,然后继续求解当前位置梯度,向这一步所在位置沿着最陡峭最易下山的位置走一步。 这样一步步的走下去,一直走到觉得我们已经到了山脚。当然这样走下去,有可能我们不能走到山脚,而是到了某一个局部的山峰低处。以MSE为例: J(\theta)=\frac{1}{m} \sum_{i=1}^{m}(x \cdot \theta-y)^{2} 目标是找到一组合适的θ(w1,w2,w3,…,wn)使得目标函数J(θ)值最小。(以最快得速度、最有效的方式来找到最优解)random(随机)随即给定一组数据 \theta\left(w_{1}, w_{2}, w_{3}, \ldots, w_{n}\right) ,根据已知的 x, y 求解出 J(\theta) 2. 求梯度 g=J^{\prime}(\theta) ,对里面的每个分量求偏导。\begin{aligned} \frac{\partial}{\partial \theta_{j}} J(\theta) &=\frac{\partial}{\partial \theta_{j}} \frac{1}{2}\left(h_{\theta}(x)-y\right)^{2} \\ &=2 \cdot \frac{1}{2}\left(h_{\theta}(x)-y\right) \frac{\partial}{\partial \theta_{j}}\left(h_{\theta}(x)-y\right) \\ &=\left(h_{\theta}(x)-y\right) \cdot \frac{\partial}{\partial \theta_{j}}\left(\sum_{i=0}^{n} \theta_{i} x_{i}-y\right) \\ &=\left(h_{\theta}(x)-y\right) x_{j} \end{aligned} ( x_{j} 对应代表第 j 列的特征)3. 调 \theta ,\theta^{t+1}=\theta^{t}-\alpha \cdot g 然后返回步骤2进行迭代。4. 当 g<\text {thresholdvalue} (某一阈值)时,算法停止迭代。二、梯度下降背后的原理泰勒发现任何一个函数不用管它有多复杂,不管它什么样,千奇百怪的任何一个函数,都可以写成关于N阶导数的一个多项式。即 f(x)=\sum_{n=0}^{N} \frac{f^{(n)}(a)}{n !}(x-a)^{n}+R_{n}(x) 那么,任意函数只要(n+1)阶可导,那么其在a点附近(下面公式中的x0点)可以表达如下:f(x)=f\left(x_{0}\right)+f^{\prime}\left(x_{0}\right)\left(x-x_{0}\right)+\frac{f^{\prime\prime}\left(x_{0}\right)}{2 !}\left(x-x_{0}\right)^{2}+\cdots+\frac{f^{(n)}\left(x_{0}\right)}{n !}\left(x-x_{0}\right)^{n}+\cdots 对泰勒级数进行一阶展开,可得: f(x) \approx f\left(x_{0}\right)+\left(x-x_{0}\right) f^{\prime}\left(x_{0}\right) 对应梯度下降表示为: J(\theta) \approx J\left(\theta_{0}\right)+\left(\theta-\theta_{0}\right) \cdot J^{\prime}(\theta) 目前我们已知 \theta_{0} ,想求得下一时刻的 \theta ,其实 \theta 就是 \theta_{0} 附近的某个点。 \theta 距离 \theta_{0} 越近越好,(这样通过 \theta_{0} 点的直线与曲线的贴合越紧密,越精确)。以 \theta_{0}+\lambda d=\theta 可表示他们的关系,代入得: J(\theta) \approx J\left(\theta_{0}\right)+\lambda \cdot d \cdot f^{\prime}\left(\theta_{0}\right) 每一次做梯度下降,为的是让该值距离最优解更近点。故下一次我们要找的 J(\theta) 要尽可能的比 J\left(\theta_{0}\right) 小。由于, \lambda \cdot d \cdot f^{\prime}\left(\theta_{0}\right)=\lambda \cdot|d| \cdot\left|f^{\prime}\left(\theta_{0}\right)\right| \cdot \cos \theta 想要上式最小,则 \cos \theta=-1, \quad \mathrm{d}=-f^{\prime}\left(\theta_{0}\right) 得出: J(\theta) \approx J\left(\theta_{0}\right)+\lambda \cdot-f^{\prime}\left(\theta_{0}\right) \cdot f^{\prime}\left(\theta_{0}\right) ===> \frac{J(\theta)}{g\left(\theta_{0}\right)} \approx \frac{J\left(\theta_{0}\right)}{g\left(\theta_{0}\right)}+\lambda \cdot-g\left(\theta_{0}\right) 由于 \theta 为 \theta_{0} 后一时刻求得,可以重新表示为: \theta^{t+1}=\theta^{t}-\lambda \cdot g(\theta) 总结梯度下降的本质是:对损失函数进行了一阶泰勒展开的近似,然后对这个近似出来的函数求最小值,把最小值当作下一步用来迭代的值。三、BGD、SGD在工程选择上的tricksBGD:相对噪声低些,幅度也大一些,你可以继续找最小值。SGD:大部分时候你向着全局最小值靠近,有时候你会远离最小值,因为那个样本恰好给你指的方向不对,因此SGD是有很多噪声的,平均来看,它最终会靠近最小值,不过有时候也会方向错误,因为SGD永远不会收敛,而是会一直在最小值附近波动。一次性只处理了一个训练样本,这样效率过于低下。mini-batch:实践中最好选择不大不小的 mini-batch,得到了大量向量化,效率高,收敛快。调节 Batch_Size 对训练效果影响到底如何?Batch_Size 太小,模型表现效果极其糟糕(error飙升)。随着 Batch_Size 增大,处理相同数据量的速度越快。随着 Batch_Size 增大,达到相同精度所需要的 epoch 数量越来越多。由于上述两种因素的矛盾, Batch_Size 增大到某个时候,达到时间上的最优。由于最终收敛精度会陷入不同的局部极值,因此 Batch_Size 增大到某些时候,达到最终收敛精度上的最优。如果训练集较小(小于 2000 个样本),直接使用BGD法,一般的 mini-batch 大小为 64 到 512,考虑到电脑内存设置和使用的方式,如果 mini-batch 大小是 2^{n} ,代码会运行地快一些。四、SGD相关改进优化算法1. Momentum ------- 为SGD进行了提速(对梯度进行调整)模拟物理里动量的概念,积累之前的动量来替代真正的梯度。公式如下:\begin{array}{l}v_{t} \leftarrow \gamma v_{t-1}+\eta_{t} g_{t} \\ x_{t} \leftarrow x_{t-1}-v_{t}\end{array} (其中,动量超参数γ满⾜0 ≤ γ < 1。当γ = 0时,动量法等价于小批量随机梯度下降。)时间步 t 的⾃变量为 x_{t} ,学习率为 \eta_{t} 。在时间步0,动量法创建速度变量 v_{0} ,并将其元素初始化成0。优点:有可能更好的找到最优解如果下降时是鞍点(平原状),Momentum能更快的下降数学上理解Momentum(扩展)指数加权移动平均:给定超参数 0≤γ<1 ,当前时间步 t 的变量 y_t 是上一时间步 t-1 的变量 y_{t-1} 和当前时间步另一变量 x_t 的线性组合: \mathrm{y}_{t}=\gamma y_{t-1}+(1-\gamma) x_{t} 例如,当 \gamma=0.95 时, \quad y_{t} \approx 0.05 \sum_{i=0}^{19} 0.95^{i} x_{t-i} 因此实际中常常将 y_t 看作是对最近 1/(1-γ) 个时间步的 x_t 值的加权平均。对动量法的速度变量做变形: v_{t} \leftarrow \gamma v_{t-1}+(1-\gamma)\left(\frac{\eta_{t}}{1-\gamma} g_{t}\right) 也就是, v_t 实际上对序列 \left\{\frac{\eta_{\mathrm{t}-i} g_{t-i}}{1-\gamma}: i=0, \ldots, \frac{1}{(1-\gamma)-1}\right\} 做了指数加权移动平均。相比SGD:Momentum在每个时间步得自变量近似于将前者对应得最近1/(1-γ) 个时间步得更新量做了指数加权移动平均后再除以1-γ ,所以动量法中自变量在各个方向上得移动幅度不仅取决于当前梯度,还取决于过去得各个梯度在各个方向上是否一致。2. Adagrad--------(对学习率进行了约束)优化算法中,目标函数自变量的每⼀个元素在相同时间步都使用同⼀个学习率来自我迭代。在Momentum⾥我们看到当 θ_1 和 θ_2 的梯度值有较⼤差别时,需要选择⾜够小的学习率使得⾃变量在梯度值较⼤的维度上不发散。AdaGrad使⽤⼀个小批量随机梯度 g_t 按元素平⽅的累加变量 n_t 。在时间步0,将 n_0 中每个元素初始化为0。在时间步t,⾸先将小批量随机梯度 g_t 按元素平⽅后累加到变量 n_t :\begin{array}{l}n_{t}=n_{t-1}+g_{t}^{2} \\ \Delta \theta_{t}=-\frac{\eta}{\sqrt{n_{t}+\epsilon}} * g_{t}\end{array} 根据自变量在每个维度的梯度值的大小来调整各个维度上的学习率,从而避免统⼀的学习率难以适应所有维度的问题。3. RMSProp因为Adagrad在调整学习率时分母上的变量 n_t 一直在累加按元素的平方的小批量随机梯度,所以目标函数自变量每个元素的学习率在迭代过程中一直在降低(或不变)。当学习率在迭代早期降得较快且当前解依然不佳时,Adagrad在迭代后期由于学习率过小,可能较难找到有用的解。\begin{array}{l}n_{t}=n_{t-1}+g_{t}^{2} \\ \Delta \theta_{t}=-\frac{\eta}{\sqrt{n_{t}+\epsilon}} * g_{t}\end{array} ===> \begin{array}{l}\mathrm{n}_{t} \leftarrow \gamma n_{t-1}+(1-\gamma) g_{t}^{2} \\ \theta_{t} \leftarrow \theta_{t-1}-\frac{\eta}{\sqrt{n_{t}+\epsilon}} * g_{t} \quad\end{array} ( \eta 为学习率)其状态变量是对平方项 g_t^2 的指数加权移动平均,所以看作最近的 \frac{1}{1-γ} 个时间步的小批量随机梯度平方项的加权平均。这样,自变量每个元素的学习率在迭代过程中就不再一直降低(或不变)。4. Adadelta与RMSProp相同点是状态变量是对平方项 g_t^2 的指数加权移动平均:\mathrm{n}_{t} \leftarrow \gamma n_{t-1}+(1-\gamma) g_{t}^{2} 与RMSProp算法不同的是,AdaDelta维护⼀个额外的状态变量 ∆x_{t} ,其元素同样在时间步0时被初始化为0。我们使用 ∆x_{t-1} 来计算自变量的变化量: \begin{array}{l}g_{t}^{\prime} \leftarrow \sqrt{\frac{\Delta \mathbf{x}_{t-1}+\epsilon}{n_{t}+\epsilon}} * g_{t} \\ \mathrm{x}_{t} \leftarrow x_{t-1}-g_{t}^{\prime}\end{array} 最后使用 ∆x_{t} 来记录自变量变化量 g_{t}^{\prime} 按元素平方的指数加权移动平均:\Delta x_{t} \leftarrow \gamma \Delta x_{t-1}+(1-\gamma) g_{t}^{\prime 2} 可以看到,如不考虑ϵ的影响,AdaDelta算法与RMSProp算法的不同之处在于使⽤ \sqrt{\Delta x_{t-1}} 来替代超参数η .5. Adam(工程中常用,在RMSProp基础上对小批量随机梯度也做了指数加权移动平均。)给定超参数0 ≤ β1 < 1(建议为0.9),时间步t的动量变量 v_{t} 即小批量随机梯度 g_{t} 的指数加权移动平均:\mathrm{v}_{t} \leftarrow \beta_{1} v_{t-1}+\left(1-\beta_{1}\right) g_{t} 同RMSProp: \mathrm{n}_{t} \leftarrow \beta_{2} n_{t-1}+\left(1-\beta_{2}\right) g_{t}^{2} 由于我们将 v_{0} 和 s_{0} 中的元素都初始化为 0,在时间步 t 我们得到 :\mathrm{v}_{t}=\left(1-\beta_{1}\right) \sum_{i=1}^{t} \beta_{1}^{t-i} g_{i} 将过去各时间步小批量随机梯度的权值相加,得到:\left(1-\beta_{1}\right) \sum_{i=1}^{t} \beta_{1}^{t-i}=1-\beta_{1}^{t} 偏差修正:当 t 较小时,过去各时间步小批量随机梯度权值之和会较小。例如,当β1 = 0.9时, v_1 = 0.1 g_1 。为了消除这样的影响,对于任意时间步 t,我们可以将 v_t 再除以 1-β_1^t ,从而使过去各时间步 g_t 权值和为1.\left\{\begin{array}{l}\hat{v}_{t} \leftarrow \frac{v_{t}}{1-\beta_{1}^{t}} \\ \hat{n}_{t} \leftarrow \frac{n_{t}}{1-\beta_{2}^{t}}\end{array}\right. 使⽤以上偏差修正后的变量 \hat{v}_{t} 和 \hat{n}_{t} ,将模型参数中每个元素的学习率通过按元素运算重新调整: g_{t}^{\prime} \leftarrow \frac{\eta \hat{v}_{t}}{\sqrt{\hat{n}_{t}}+\epsilon} (其中η是学习率,ϵ是为了维持数值稳定性而添加的常数)和AdaGrad算法、RMSProp算法以及AdaDelta算法⼀样,目标函数自变量中每个元素都分别拥有自己的学习率。最后使用 g_{t}^{\prime} 迭代自变量: \mathrm{x}_{t} \leftarrow x_{t-1}-g_{t}^{\prime} 编辑于 2022-11-23 23:33・IP 属地北京梯度下降泰勒公式最优化​赞同 149​​6 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录机器学习算法的那点儿东西计算机怎样模拟或实现人类的学习