随机梯度下降(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随机梯度下降算法梯度下降赞同 11425 条评论分享喜欢收藏申请转载文章被以下专栏收录AI大类AI通用知识、模型
梯度下降法(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 属地北京梯度下降泰勒公式最优化赞同 1496 条评论分享喜欢收藏申请转载文章被以下专栏收录机器学习算法的那点儿东西计算机怎样模拟或实现人类的学习
转换 新加坡元 为 人民币 | SGD 为 CNY 汇率转换工具
转换 新加坡元(SGD) 为人民币(CNY)
汇率转换工具
SGD 汇率
1 SGD = 5.32 CNY
invert currencies
x
从
SGD - 新加坡元
到
CNY - 人民币
汇率(买/卖)
CNY/SGD = 5.3177968
Major
Minor
Exotic
AED
2.75
JPY
110.682
ARS
633.367
KRW
995.218
AUD
1.13356
MAD
7.49315
BRL
3.69951
MXN
12.6228
CAD
1.01031
NOK
7.82836
CHF
0.658624
NZD
1.21516
CNY
5.3178
PHP
41.799
CZK
17.4231
PLN
2.95746
DKK
5.12169
RUB
68.1669
EUR
0.687054
SEK
7.69226
GBP
0.587002
SGD
1
HKD
5.85715
THB
26.6426
HUF
271.579
TRY
23.9417
ILS
2.68779
USD
0.748868
INR
61.9345
ZAR
14.0676
BHD
0.282242
MYR
3.51641
BOB
5.17214
NAD
14.0904
CLP
738.768
NGN
1184.03
COP
2935.03
NPR
98.8725
DOP
44.0627
OMR
0.288226
EGP
36.9917
PAB
0.74724
IDR
11714.5
PEN
2.79739
IRR
31491.8
PKR
209.012
ISK
102.012
RON
3.41524
JMD
116.442
SAR
2.80771
JOD
0.530818
TWD
23.6094
KES
108.156
UAH
28.5078
KWD
0.230184
UYU
29.259
LBP
67090.8
VES
27.0228
LKR
230.169
VND
18489.4
AWG
1.34974
MGA
3373.18
BAM
1.34374
MKD
42.3363
BBD
1.51124
MUR
34.2565
BDT
82.1442
MVR
11.5655
BGN
1.34374
PYG
5451.09
BMD
0.750634
QAR
2.72948
BSD
0.748476
RSD
80.533
BWP
10.1975
SCR
10.0908
FJD
1.67091
TND
2.33166
GHS
9.54318
TTD
5.08145
GMD
50.9008
UGX
2922.73
GTQ
5.84619
XAF
450.678
KHR
3037.47
XCD
2.02365
LAK
15620.9
XOF
450.701
MDL
13.2746
XPF
82.2513
最近更新
2024/3/7 下午12:45:05
Locale
SGD 新加坡元
国家
新加坡
洲
亚洲
附属单位
1 Dollar = 100 cents
标志
S$
由马来西亚,新加坡和汶莱组成的货币联盟在新加坡独立两年后解体。此后新加坡在1967年发行独立后的第一批纸币和硬币。新加坡元一直保持着与汶莱元的可互换性。
SGD 汇率
CNY 人民币
国家
中国
洲
亚洲
附属单位
1 Yuan = 10 jiao or 100 fen
标志
¥
在中华民国时代,不同种类的货币流通于中国。它们的大多数都被称为“元”。1948年中国人民银行开始发行统一的货币人民币。在汉语里元的字面意思为“圆的物体”或者“圆的硬币”。
CNY 汇率
新加坡元 到人民币 的汇率走势图
120-day exchange rate history for SGD to CNY
新加坡元到人民币的汇率:1 SGD = 5.3177968 CNY
SGDCNY
S$ 1¥ 5.32
S$ 5¥ 26.59
S$ 10¥ 53.18
S$ 50¥ 265.89
S$ 100¥ 531.78
S$ 250¥ 1,329.45
S$ 500¥ 2,658.90
S$ 1,000¥ 5,317.80
S$ 5,000¥ 26,588.98
S$ 10,000¥ 53,177.97
S$ 50,000¥ 265,889.84
S$ 100,000¥ 531,779.68
S$ 500,000¥ 2,658,898.38
S$ 1,000,000¥ 5,317,796.76
最近更新
2024/3/7 下午12:45:05
亚洲
孟加拉塔卡 - BDT
人民币 - CNY
港元 - HKD
印尼盾 - IDR
印度卢比 - INR
日元 - JPY
柬埔寨瑞爾 - KHR
韩元 - KRW
寮國基普 - LAK
斯里兰卡卢比 - LKR
馬爾地夫拉菲亞 - MVR
马来西亚林吉特 - MYR
尼泊尔卢比 - NPR
菲律宾比索 - PHP
巴基斯坦卢比 - PKR
新加坡元 - SGD
泰铢 - THB
新臺幣 - TWD
越南盾 - VND
欧洲
波斯尼亚和黑塞哥维那可兑换马克 - BAM
保加利亞列弗 - BGN
瑞士法郎 - CHF
捷克克朗 - CZK
丹麦克朗 - DKK
欧元 - EUR
英镑 - GBP
克羅埃西亞庫納 - HRK
匈牙利福林 - HUF
冰岛克朗 - ISK
摩爾多瓦列伊 - MDL
馬其頓代納爾 - MKD
挪威克朗 - NOK
波兰兹罗提 - PLN
罗马尼亚列伊 - RON
塞爾維亞第納爾 - RSD
俄罗斯卢布 - RUB
瑞典克朗 - SEK
土耳其里拉 - TRY
乌克兰格里夫纳 - UAH
北美洲
阿魯巴弗羅林 - AWG
巴巴多斯元 - BBD
百慕達元 - BMD
巴哈馬元 - BSD
加元 - CAD
多明尼加比索 - DOP
瓜地馬拉格查爾 - GTQ
牙买加元 - JMD
墨西哥比索 - MXN
巴拿马波亚 - PAB
美元 - USD
东加勒比海元 - XCD
大洋洲
澳元 - AUD
斐濟元 - FJD
新西兰元 - NZD
太平洋法郎 - XPF
南美洲
阿根廷比索 - ARS
玻利維亞諾 - BOB
巴西雷亚尔 - BRL
智利比索 - CLP
哥伦比亚比索 - COP
秘鲁索尔 - PEN
巴拉圭瓜拉尼 - PYG
特立尼达和多巴哥元 - TTD
烏拉圭比索 - UYU
委内瑞拉玻利瓦尔 - VES
中东
阿联酋迪拉姆 - AED
巴林第纳尔 - BHD
以色列谢克尔 - ILS
伊朗里亞爾 - IRR
约旦第纳尔 - JOD
科威特第纳尔 - KWD
黎巴嫩镑 - LBP
阿曼里亚尔 - OMR
卡塔尔里亚尔 - QAR
沙特里亚尔 - SAR
敘利亞鎊 - SYP
非洲
波札那普拉 - BWP
埃及鎊 - EGP
迦納塞地 - GHS
甘比亞達拉西 - GMD
肯尼亚先令 - KES
摩洛哥迪拉姆 - MAD
阿里亞里 - MGA
模里西斯盧比 - MUR
纳米比亚元 - NAD
奈及利亞奈拉 - NGN
塞席爾盧比 - SCR
突尼斯第納爾 - TND
烏干達先令 - UGX
中非法郎 - XAF
西非法郎 - XOF
南非南特 - ZAR
首页
联系我们
免责声明
隐私政策
免费网站控制
English
español
Deutsch
français
Forex Data by Xignite
© The Money Converter 2024. All rights reserved
CNY 转换为 SGD - Wise跳到主要内容个人账户功能多币种账户探索全球 1600 万人用来生活、工作、旅行和汇款的账户。汇款大额汇款费用帮助登录注册汇率换算器浏览所有货币获取汇率提醒比较银行汇率人民币兑新加坡元按实际汇率将 CNY 换算成 SGD金额1,000 cny换算为185.54 sgd1.000 CNY = 0.1855 SGD13:02 UTC 中间市场汇率跟踪汇率汇款跨境汇款时省钱立即注册Loading比较境外汇款的价格银行和其他汇款服务往往暗藏玄机。他们会在汇率上暗做手脚 - 在您不知情的情况下向您收取更多费用。如果他们有手续费,则表示他们会对您进行二次收费。Wise 永远不会在汇率中加入隐性费用。我们为您提供由路透社独立提供的实际汇率。欢迎将我们的汇率和费用与 Western Union、印度工业信贷投资银行、WorldRemit 等各种平台进行比较,从而亲自了解差异。 热门货币 USDHKDCADEURGBPAUDINRSGD1 USD17.8211.350.9180.7841.51582.7151.3351 HKD0.12810.1730.1170.10.19410.5760.1711 CAD0.7415.79510.680.5811.12261.2820.9891 EUR1.0898.5211.4710.8541.6590.1141.455当心不良汇率。 银行和传统提供商通常会收取额外费用,该费用会通过暗升汇率的手段转嫁给您。我们的智能技术使我们更高效 – 这意味着您在每次交易中都能享受到更划算的汇率。比较汇率如何将人民币兑换成新加坡元1输入金额只需在框中输入您要换算的金额。2选择您的货币点击下拉列表,在第一个下拉列表中选择CNY作为要换算的原始货币,在第二个下拉列表中选择SGD作为要换算的目标货币。3就是这么简单我们的汇率换算器将为您显示CNY兑SGD的当前汇率,以及过去一天、一周或一个月的汇率变化。Top currency pairings for 人民币→←CNY兑USD→←CNY兑HKD→←CNY兑CAD→←CNY兑EUR→←CNY兑GBP→←CNY兑AUD→←CNY兑INR→←CNY兑SGDChange Converter source currency丹麦克朗人民币以色列新谢克尔保加利亚列弗加元匈牙利福林印尼盾印度卢比土耳其里拉巴西雷亚尔挪威克朗捷克克朗新西兰元日元欧元波兰兹罗提港元澳元瑞典克朗瑞士法郎罗马尼亚列伊美元英镑马来西亚林吉特您是否在向银行支付过高的费用?银行通常会宣传免费或者低手续费的汇款服务,却在汇率中添加隐藏的差价赚取利润。Wise 为你提供真实的市场汇率中间价,因此你可以大幅节省跨境汇款的费用。将我们与银行进行比较通过 Wise 汇款Download Our Currency Converter AppFeatures our users love: Free and ad-free.Track live exchange rates.Compare the best money transfer providers.See how rates have changed over the last day or the last 500. Add currencies you use often — or just want to keep an eye on — to your favourites for easy access. Pounds, dollars, pesos galore.汇率换算器是一个提供汇率资讯和最新消息的 App,并不是一个货币交易平台。任何显示在这里的信息均非财务建议。人民币/新加坡元汇率1 CNY0.18554 SGD5 CNY0.92769 SGD10 CNY1.85538 SGD20 CNY3.71076 SGD50 CNY9.27690 SGD100 CNY18.55380 SGD250 CNY46.38450 SGD500 CNY92.76900 SGD1000 CNY185.53800 SGD2000 CNY371.07600 SGD5000 CNY927.69000 SGD10000 CNY1,855.38000 SGD新加坡元/人民币汇率1 SGD5.38972
CNY5 SGD26.94860
CNY10 SGD53.89720
CNY20 SGD107.79440
CNY50 SGD269.48600
CNY100 SGD538.97200
CNY250 SGD1,347.43000
CNY500 SGD2,694.86000
CNY1000 SGD5,389.72000
CNY2000 SGD10,779.44000
CNY5000 SGD26,948.60000
CNY10000 SGD53,897.20000
CNYالإمارات العربية المتحدةAustraliaBrazilБългарияSwitzerlandCzechiaDeutschlandDenmarkEspañaSuomiFranceUnited KingdomGreeceHrvatskaMagyarországIndonesiaIsraelIndiaItaliaJapanSouth KoreaမလေးရှားMexicoNederlandNorgePortugalPolskaRomâniaРоссияRuoŧŧaไทยTürkiyeUnited StatesVietnam中国中國香港特別行政區公司与团队公司与团队媒体报道工作机会服务状态投资者关系使命路线图联盟机构与合作伙伴帮助中心无障碍功能Wise 产品跨境汇款Wise 账户国际借记卡旅行现金卡大额汇款收款Wise 平台企业借记卡批量付款资源研究隐私政策汇率换算器国际股票代码Swift / BIC 银行国际代码IBAN 代码汇率提醒比较汇率关注我们法律声明隐私政策Cookie 政策投诉国家/地区站点地图《现代奴役法案》© Wise Payments Limited 2024Wise 遵循《2011 年电子货币条例》,由英国金融行为监管局授权,公司参考编号 900507,可以发行电子
SGD 兑 CNY: 在线将新加坡元换算成人民币
VALUTA FX
在线货币换算器
货币换算
中文
货币换算器
澳大利亚元汇率
港元汇率
韩元汇率
马来西亚令吉汇率
美元汇率
欧元汇率
人民币汇率
日元汇率
泰国泰铢汇率
印尼盾汇率
货币换算
货币换算器
澳大利亚元汇率
港元汇率
韩元汇率
马来西亚令吉汇率
美元汇率
欧元汇率
人民币汇率
日元汇率
泰国泰铢汇率
印尼盾汇率
数字格式:
1,234.56
1.234,56
1 234,56
1'234.56
1234,56
1234.56
时间格式:
1:00 PM
13:00
13.00
日期格式:
06-30-24
30-06-24
2024-06-30
2024-6-30
06.30.24
30.06.24
2024.06.30
30.06.2024
2024. 06. 30.
30. 06. 2024.
06/30/24
30/06/24
2024/06/30
Bahasa Indonesia Bahasa Melayu Čeština Deutsch English Español Français Italiano Nederlands Norsk Polski Português Svenska Tiếng Việt Türkçe Русский 日本語 한국어 繁體中文 ภาษาไทย हिंदी
更多语言...
ValutaFX货币换算器SGDCNYSGD 兑 CNY
SGD 兑 CNY: 在线将新加坡元换算成人民币
1.0000 SGD=5.3898 CNY 2024年3月7日 13:00 UTC查看新加坡元与人民币甚至120多种世界货币之间的最新汇率。我们的实时货币换算器使用简单,对用户友好,并显示可信赖来源的最新汇率。
货币换算器
金额
S$
从
▼
swap
swap
换算为
▼
1.0000 SGD = 5.3898 CNY
1 SGD = 5.3898 CNY
1 CNY = 0.18554 SGD
最后更新2024/03/07 13:00 UTC
历史汇率 (SGD/CNY)
30天
90天
1年
低点
¥5.2737
¥5.2737
¥5.0837
高点
¥5.3776
¥5.4108
¥5.4533
平均
¥5.3309
¥5.3369
¥5.3048
变化值
+1.79%
+0.74%
+4.60%
在2023年7月19日,新加坡元兑人民币为¥5.4533,达到一年来的高点。最低点是在2023年3月13日,新加坡元兑人民币为¥5.0837。
在过去的一年里,新加坡元兑人民币汇率上涨了+4.60%。
新加坡元兑人民币的历史图
SGD
CNY
CNY
SGD
显示历史时间:
7天1个月3个月6个月9个月1年
新加坡元兑人民币的历史表格
2024/03/06星期三1 SGD = CNY 5.37762024/03/05星期二1 SGD = CNY 5.36072024/03/04星期一1 SGD = CNY 5.35982024/03/01星期五1 SGD = CNY 5.35162024/02/29星期四1 SGD = CNY 5.33992024/02/28星期三1 SGD = CNY 5.34712024/02/27星期二1 SGD = CNY 5.3558
2024/03/06星期三1 CNY = SGD 0.18602024/03/05星期二1 CNY = SGD 0.18652024/03/04星期一1 CNY = SGD 0.18662024/03/01星期五1 CNY = SGD 0.18692024/02/29星期四1 CNY = SGD 0.18732024/02/28星期三1 CNY = SGD 0.18702024/02/27星期二1 CNY = SGD 0.1867
查看更多SGD/CNY的汇率记录
查看更多CNY/SGD的汇率记录
新加坡元与人民币换算
SGD CNY1 SGD5.3898 CNY2 SGD10.780 CNY5 SGD26.949 CNY10 SGD53.898 CNY20 SGD107.80 CNY50 SGD269.49 CNY100 SGD538.98 CNY200 SGD1,078.0 CNY500 SGD2,694.9 CNY1,000 SGD5,389.8 CNY2,000 SGD10,780 CNY5,000 SGD26,949 CNY10,000 SGD53,898 CNY20,000 SGD107,795 CNY50,000 SGD269,488 CNY100,000 SGD538,975 CNY
CNY SGD100 CNY18.554 SGD200 CNY37.107 SGD500 CNY92.769 SGD1,000 CNY185.54 SGD2,000 CNY371.07 SGD5,000 CNY927.69 SGD10,000 CNY1,855.4 SGD20,000 CNY3,710.7 SGD50,000 CNY9,276.9 SGD100,000 CNY18,554 SGD200,000 CNY37,107 SGD500,000 CNY92,769 SGD1,000,000 CNY185,537 SGD2,000,000 CNY371,074 SGD5,000,000 CNY927,686 SGD10,000,000 CNY1,855,372 SGD
如何将SGD换算为CNY?
通过ValutaFX货币转换器,只需一个简单的步骤就可以将新加坡元换算为人民币。在标有 "金额 "的方框中输入您要换算为人民币的金额即可。现在你会看到根据最近的汇率兑换的货币价值。
更多新加坡元的换算
SGD 换算 AUD
SGD 换算 CAD
SGD 换算 CNY
SGD 换算 EUR
SGD 换算 GBP
SGD 换算 HKD
SGD 换算 IDR
SGD 换算 INR
SGD 换算 JPY
SGD 换算 KRW
SGD 换算 MYR
SGD 换算 RUB
SGD 换算 THB
SGD 换算 TWD
SGD 换算 USD
SGD 换算 VND
为什么选择我们?
ValutaFX是一家全球领先的受数百万人信任的汇率和银行数据提供商。 自2015年以来,我们一直在提供最准确和最新的汇率和货币数据。我们的使命是成为一个值得信赖的SWIFT代码和金融信息来源。ValutaFX.com上所有关于银行、SWIFT代码和货币汇率的信息都有最新的数据支持,这些数据是由特许数据提供商和网络上其他值得信赖的金融信息来源汇总而成。
隐私政策
服务条款
联系我们
关于我们
货币换算器
阿尔巴尼亚列克 (ALL)阿尔及利亚第纳尔 (DZD)阿根廷比索 (ARS)阿联酋迪拉姆 (AED)阿曼里亚尔 (OMR)阿塞拜疆马纳特 (AZN)埃及镑 (EGP)埃塞俄比亚比尔 (ETB)安哥拉宽扎 (AOA)澳大利亚元 (AUD)澳门帕塔卡 (MOP)巴巴多斯元 (BBD)巴哈马元 (BSD)巴基斯坦卢比 (PKR)巴拉圭瓜拉尼 (PYG)巴林第纳尔 (BHD)巴拿马巴波亚 (PAB)巴西雷阿尔 (BRL)白俄罗斯卢布 (BYN)百慕大元 (BMD)保加利亚列弗 (BGN)冰岛克朗 (ISK)波兰兹罗提 (PLN)玻利维亚币 (BOB)伯利兹元 (BZD)博茨瓦纳普拉 (BWP)布隆迪法郎 (BIF)丹麦克朗 (DKK)东加勒比元 (XCD)多米尼加比索 (DOP)俄罗斯卢布 (RUB)非洲金融共同体法郎 (XOF)菲律宾比索 (PHP)斐济元 (FJD)佛得角埃斯库多 (CVE)冈比亚达拉西 (GMD)港元 (HKD)哥伦比亚比索 (COP)哥斯达黎加科郎 (CRC)格鲁吉亚拉里 (GEL)古巴比索 (CUP)哈萨克斯坦坚戈 (KZT)海地古德 (HTG)韩元 (KRW)荷属安的列斯盾 (ANG)洪都拉斯伦皮拉 (HNL)吉布提法郎 (DJF)吉尔吉斯斯坦索姆 (KGS)几内亚法郎 (GNF)加拿大元 (CAD)加纳塞地 (GHS)柬埔寨瑞尔 (KHR)捷克克朗 (CZK)卡塔尔里亚尔 (QAR)开曼群岛元 (KYD)科威特第纳尔 (KWD)克罗地亚库纳 (HRK)肯尼亚先令 (KES)莱索托洛蒂 (LSL)老挝基普 (LAK)黎巴嫩镑 (LBP)利比亚第纳尔 (LYD)卢旺达法郎 (RWF)罗马尼亚新列伊 (RON)马拉维客瓦查 (MWK)马来西亚令吉 (MYR)马其顿第纳尔 (MKD)毛里求斯卢比 (MUR)美元 (USD)孟加拉塔卡 (BDT)秘鲁索尔 (PEN)缅甸缅元 (MMK)摩尔多瓦列伊 (MDL)摩洛哥迪拉姆 (MAD)墨西哥比索 (MXN)纳米比亚元 (NAD)南非兰特 (ZAR)尼泊尔卢比 (NPR)尼加拉瓜新科多巴 (NIO)尼日利亚奈拉 (NGN)挪威克朗 (NOK)欧元 (EUR)人民币 (CNY)日元 (JPY)瑞典克朗 (SEK)瑞士法郎 (CHF)塞尔维亚第纳尔 (RSD)塞舌尔卢比 (SCR)沙特里亚尔 (SAR)斯里兰卡卢比 (LKR)斯威士兰埃马兰吉尼 (SZL)苏丹镑 (SDG)索马里先令 (SOS)太平洋金融共同体法郎 (XPF)泰国泰铢 (THB)坦桑尼亚先令 (TZS)特立尼达和多巴哥元 (TTD)突尼斯第纳尔 (TND)土耳其新里拉 (TRY)土库曼斯坦马纳特 (TMT)危地马拉格查尔 (GTQ)委内瑞拉玻利瓦尔 (VES)文莱元 (BND)乌干达先令 (UGX)乌克兰格里夫纳 (UAH)乌拉圭比索 (UYU)乌兹别克斯坦索姆 (UZS)新加坡元 (SGD)新台币 (TWD)新西兰元 (NZD)匈牙利福林 (HUF)牙买加元 (JMD)亚美尼亚德拉姆 (AMD)也门里亚尔 (YER)伊拉克第纳尔 (IQD)伊朗里亚尔 (IRR)以色列新谢克尔 (ILS)印度卢比 (INR)印尼盾 (IDR)英镑 (GBP)约旦第纳尔 (JOD)越南盾 (VND)赞比亚克瓦查 (ZMW)智利比索 (CLP)中非金融合作法郎 (XAF)
如何理解随机梯度下降(stochastic gradient descent,SGD)? - 知乎首页知乎知学堂发现等你来答切换模式登录/注册数学机器学习优化凸优化神经网络如何理解随机梯度下降(stochastic gradient descent,SGD)?它的优缺点在哪?为什么效率比较高?有什么理论支持吗?有实例分析证明收敛性吗?据说在训练 ML、NN 时用的最多,是真的吗?刚接触优化理论,谢谢大家分享…显示全部 关注者785被浏览1,214,028关注问题写回答邀请回答好问题 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赞同 1419 条评论分享收藏喜欢收起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添加评论分享收藏喜欢
Saccharomyces Genome Database | SGD
AboutBlogDownloadExploreHelpYeastMine
Email UsTwitterFacebookLinkedinYouTube
Saccharomyces Genome Database
Saccharomyces Genome Database
Saccharomyces Genome Database
Menu
Analyze
Gene Lists
BLAST
Fungal BLAST
GO Term Finder
GO Slim Mapper
Pattern Matching
Design Primers
Restriction Site Mapper
Sequence
Download
Genome Browser
BLAST
Fungal BLAST
Gene/Sequence Resources
Reference Genome
Download Genome
Genome Snapshot
Chromosome History
Systematic Sequencing Table
Original Sequence Papers
Strains and Species
Variant Viewer
Align Strain Sequences
Resources
UniProtKB
InterPro (EBI)
HomoloGene (NCBI)
YGOB (Trinity College)
AlphaFold
Function
Gene Ontology
GO Term Finder
GO Slim Mapper
GO Slim Mapping File
Expression
Biochemical Pathways
Phenotypes
Browse All Phenotypes
Interactions
YeastGFP
Resources
GO Consortium
BioGRID (U. Toronto)
Literature
Full-text Search
New Yeast Papers
YeastBook
Genome-wide Analysis Papers
Resources
PubMed (NCBI)
PubMed Central (NCBI)
Google Scholar
Community
Community Forum
Colleague Information
Find a Colleague
Add or Update Info
Find a Yeast Lab
Career Resources
Education
Meetings
Future
Yeast Genetics
Nomenclature
Submit a Gene Registration
Gene Registry
Nomenclature Conventions
Methods and Reagents
Strains and Constructs
Reagents
Protocols and Methods
Historical Data
Physical & Genetic Maps
Genetic Maps
Genetic Loci
ORFMap Chromosomes
Sequence
Gene Summary Paragraphs
Wiki
Submit Data
Resources
API
Info & Downloads
About
Blog
Downloads
Site Map
Help
Hsf1p-target genes (green) coalesce into foci after heat shock (nuclear pore complex, red).
Image courtesy of S. Chowdhary and A. Kainth, Gross Lab, LSU Health Sciences Center.
Rap1-GFP and Calcofluor White staining of stationary phase cells.
Image courtesy of M. Guidi, M. Ruault and A. Taddei, Institut Curie (Paris).
Pma1-mCherry and Vma1-GFP localization in mitotic cells.
Image courtesy of M. Eastwood, Fred Hutch and M. Meneghini, University of Toronto.
CCCP-induced decrease of mitochondrial membrane potential (below) or control treatment (above) as measured by MitoLoc.
Image courtesy of Dr. Jakob Vowinckel, Ralser Lab, University of Cambridge.
Redistribution of Msn5 pools from the nucleus to the cytoplasm upon glucose deprivation.
Image courtesy of H. Huang and A. Hopper, Ohio State University.
Floccule of yeast rho0 cells expressing PTS1-GFP as a peroxisomal marker, stained with calcofluor white.
Image courtesy of Dr. Jakob Vowinckel, University of Cambridge
S. cerevisiae membrane proteins visualized by RFP and GFP.
Image courtesy of Masur. Wikimedia Commons.
Peroxisome (red) and mitochondrial (green) fission defects in vps1 fis1 double deletion strain transformed with FIS1.
Image courtesy of S. Lefevre, S. Kumar and I. van der Klei, University of Groningen.
Yeast cells expressing TRK1/GFP.
Image courtesy of V. Zayats and J. Ludwig, Center of Nanobiology and Structural Biology, AV CR.
The distribution of mtDNA (green) within the mitochondrial network (red).
Image courtesy of Christof Osman and Peter Walter, University of California, San Francisco
The distribution of ER exit sites (ERES, green) within the ER (red).
Image courtesy of A. Nakano and K. Kurokawa, RIKEN.
Cell, actin and nuclear morphology of yeast cells treated with DMSO (left) and poacic acid (right).
Images courtesy of Hiroki Okada and Yoshikazu Ohya, University of Tokyo.
Localization of active Ras in a wild type strain
Image courtesy of S. Colombo and E. Martegani, University Milano Bicocca
Sectored colonies showing loss of silencing at the HML locus
Image courtesy of Anne Dodson, UC Berkeley
Pma1p imaged using the RITE tagging system in mother (green) and daughter cells (red)
Image courtesy of Dan Gottschling Ph.D., Fred Hutchinson Cancer Research Center
Lipid droplets in fld1 mutant images by CARS
Image courtesy of Heimo Wolinski, Ph.D. and Sepp D. Kohlwein, Ph.D., University of Graz, Austria
Fpr3p accumulation in the nucleolus of S. cerevisiae
Image courtesy of Amy MacQueen, Ph.D., Wesleyan University
anti-Fpr3 antibody courtesy of Jeremy Thorner, Ph.D., UC Berkeley
San1 strain visualized with FUN and calcofluor white
Image courtesy of the Bruschi lab, ICGEB, Trieste, Italy
Single MDN1 mRNAs detected by FISH
Image courtesy of the Zenklusen Lab, Université de Montréal
Localization of Ace2-GFP to daughter cell nuclei
Image courtesy of Eric Weiss, Ph.D. Northwestern University
About SGD
The Saccharomyces Genome Database (SGD) provides comprehensive integrated biological information for the budding yeast Saccharomyces cerevisiae along with search and analysis tools to explore these data, enabling the discovery of functional relationships between sequence and gene products in fungi and higher organisms.
Explore SGD
Meetings
32nd Fungal Genetics Conference
March 12 to March 17, 2024 -
Asilomar Conference Grounds, Pacific Grove, CA
16th Yeast Lipid Conference
May 29 to May 31, 2024 -
Saarland University, Homburg, Germany
FASEB Yeast Chromosome Biology and Cell Cycle
June 23 to June 27, 2024 -
Fort Garry Hotel, Winnipeg, Manitoba, Canada
JCS2024: Diversity and Evolution in Cell Biology
June 24 to June 27, 2024 -
Montanya Hotel & Lodge, Catalonia, Spain
39th Small Meeting of Yeast Transporters and Energetics (SMYTE)
August 28 to September 01, 2024 -
University of York, York, United Kingdom
ICY2024: 16th International Congress on Yeasts
September 29 to October 03, 2024 -
Cape Town International Convention Centre, Cape Town, South Africa
New & Noteworthy
Changes to Saccharomyces cerevisiae GFF3 file - March 01, 2024
The saccharomyces_cerevisiae.gff contains sequence features of Saccharomyces cerevisiae and related information such as Locus descriptions and GO annotations. It is fully compatible with Generic Feature Format Version 3. It is updated weekly. After November 2020, SGD updated the transcripts in the GFF file to reflect the experimentally determined transcripts (Pelechano et al. 2013, Ng et […]
Read More
Apply Now for the 2024 Yeast Genetics and Genomics Course - February 13, 2024
For over 50 years, the legendary Yeast Genetics & Genomics course has been taught each summer at Cold Spring Harbor Laboratory, though the name didn’t include “Genomics” in the beginning. The list of people who have taken the course reads like a Who’s Who of yeast research, including Nobel laureates and many of today’s leading […]
Read More
SGD Newsletter, December 2023 - December 13, 2023
About this newsletter:This is the December 2023 issue of the SGD newsletter. The goal of this newsletter is to inform our users about new features in SGD and to foster communication within the yeast community. You can view this newsletter, as well as previous newsletters, on the SGD Community Wiki. Contents Reference Genome Annotation Update R64.4 The S. cerevisiae strain […]
Read More
Search full-text with Textpresso: new papers added weekly - December 06, 2023
SGD’s instance of Textpresso has recently been updated! Each week, SGD biocurators triage new publications from PubMed to load the newest yeast papers into the database. Once they are in SGD, those papers get indexed and loaded into Textpresso – a tool for full-text mining and searching. This is the new part: Content updates in SGD’s […]
Read More
Fpt1p is a negative regulator of RNA Polymerase III embedded in the tDNA chromatin-proteome - November 27, 2023
Gene transcription is facilitated by RNA polymerase enzyme complexes that collaborate with transcription factors, repressors, chromatin remodelers, and other cellular factors. RNA Polymerase III (RNAPIII) mainly transcribes short DNA fragments called tDNAs, that code for transfer-RNAs (tRNAs). In repressive conditions, tDNA transcription is repressed by the well-characterized protein Maf1. A new study by Van Breugel et al., […]
Read More
More Articles
Community Forum
Changes to Saccharomyces cerevisiae GFF3 fileAnnouncements
NOW LIVE: TAGC 2024 Program Book & Conference AppConferences
FASEB Yeast Chromosome Biology and Cell Cycle - June 23-27, 2024Conferences
Advance registration for #TAGC24 ends Thursday, February 15Conferences
Apply Now for the 2024 CSHL Yeast Genetics and Genomics Course - due March 31Conferences
Open Access: High plasticity of ribosomal DNA organization in budding yeastNews and Views
SMYTE 2024 Registration is open!Conferences
Reserve your hotel room for #TAGC24 by Feb 12Conferences
Open Access: Riboproteome remodeling during quiescence exit in Saccharomyces cerevisiaeNews and Views
Join BREWMOR and GSA for a microBREW on bioinformatics in the undergrad classroom - Feb 9Conferences
Yeast Genetics & Genomics - CSHL Course July/August 2024Conferences
Fungal 2024 registration is closed, but you can still attend #TAGC24Conferences
ICYMI: Synthetic Yeast Genome Project (Sc2.0) consortiumNews and Views
Open Access: Humanization reveals pervasive incompatibility of yeast and human kinetochore componentsNews and Views
Open Access: Non-additive genetic components contribute significantly to population-wide gene expression variationNews and Views
LAST CALL for #TAGC24 poster abstract submissions Conferences
Yeast Lipid Conference 2024, Saarland University, Homburg, GermanyConferences
CSHL Yeast Genetics & Genomics - Applications due March 31Conferences
Browse Metabolic Pathways at SGDTutorial
Genes with updated locus descriptions in the past monthNews and Views
More...
SGD
About
Blog
Help
Privacy Policy
Email Us
YouTube
© Stanford University, Stanford, CA 94305.
从 SGD 到 Adam —— 深度学习优化算法概览(一) - 知乎首发于Girl 是世界上最好的语言切换模式写文章登录/注册从 SGD 到 Adam —— 深度学习优化算法概览(一)骆梁宸潜水半退乎楔子前些日在写计算数学课的期末读书报告,我选择的主题是「分析深度学习中的各个优化算法」。在此前的工作中,自己通常就是无脑「Adam 大法好」,而对算法本身的内涵不知所以然。一直希望能抽时间系统的过一遍优化算法的发展历程,直观了解各个算法的长处和短处。这次正好借着作业的机会,补一补课。本文主要借鉴了 @Juliuszh 的文章[1]思路,使用一个 general 的框架来描述各个梯度下降变种算法。实际上,本文可以视作对[1]的重述,在此基础上,对原文描述不够详尽的部分做了一定补充,并修正了其中许多错误的表述和公式。另一主要参考文章是 Sebastian Ruder 的综述[2]。该文十分有名,大概是深度学习优化算法综述中质量最好的一篇了。建议大家可以直接阅读原文。本文许多结论和插图引自该综述。对优化算法进行分析和比较的文章已有太多,本文实在只能算得上是重复造轮,旨在个人学习和总结。希望对优化算法有深入了解的同学可以直接查阅文末的参考文献。引言最优化问题是计算数学中最为重要的研究方向之一。而在深度学习领域,优化算法的选择也是一个模型的重中之重。即使在数据集和模型架构完全相同的情况下,采用不同的优化算法,也很可能导致截然不同的训练效果。梯度下降是目前神经网络中使用最为广泛的优化算法之一。为了弥补朴素梯度下降的种种缺陷,研究者们发明了一系列变种算法,从最初的 SGD (随机梯度下降) 逐步演进到 NAdam。然而,许多学术界最为前沿的文章中,都并没有一味使用 Adam/NAdam 等公认“好用”的自适应算法,很多甚至还选择了最为初级的 SGD 或者 SGD with Momentum 等。本文旨在梳理深度学习优化算法的发展历程,并在一个更加概括的框架之下,对优化算法做出分析和对比。Gradient Descent梯度下降是指,在给定待优化的模型参数 \theta \in \mathbb{R}^d 和目标函数 J(\theta) 后,算法通过沿梯度 \nabla_\theta J(\theta) 的相反方向更新 \theta 来最小化 J(\theta) 。学习率 \eta 决定了每一时刻的更新步长。对于每一个时刻 t ,我们可以用下述步骤描述梯度下降的流程:(1) 计算目标函数关于参数的梯度g_t = \nabla_\theta J(\theta) (2) 根据历史梯度计算一阶和二阶动量m_t = \phi(g_1, g_2, \cdots, g_t) v_t = \psi(g_1, g_2, \cdots, g_t) (3) 更新模型参数\theta_{t+1} = \theta_t - \frac{1}{\sqrt{v_t + \epsilon}} m_t 其中, \epsilon 为平滑项,防止分母为零,通常取 1e-8。Gradient Descent 和其算法变种根据以上框架,我们来分析和比较梯度下降的各变种算法。Vanilla SGD朴素 SGD (Stochastic Gradient Descent) 最为简单,没有动量的概念,即m_t = \eta g_t v_t = I^2 \epsilon = 0 这时,更新步骤就是最简单的\theta_{i+1}= \theta_t - \eta g_t SGD 的缺点在于收敛速度慢,可能在鞍点处震荡。并且,如何合理的选择学习率是 SGD 的一大难点。MomentumSGD 在遇到沟壑时容易陷入震荡。为此,可以为其引入动量 Momentum[3],加速 SGD 在正确方向的下降并抑制震荡。m_t = \gamma m_{t-1} + \eta g_t SGD-M 在原步长之上,增加了与上一时刻步长相关的 \gamma m_{t-1} ,\gamma 通常取 0.9 左右。这意味着参数更新方向不仅由当前的梯度决定,也与此前累积的下降方向有关。这使得参数中那些梯度方向变化不大的维度可以加速更新,并减少梯度方向变化较大的维度上的更新幅度。由此产生了加速收敛和减小震荡的效果。图 1(a): SGD图 1(b): SGD with momentum从图 1 中可以看出,引入动量有效的加速了梯度下降收敛过程。Nesterov Accelerated Gradient图 2: Nesterov update更进一步的,人们希望下降的过程更加智能:算法能够在目标函数有增高趋势之前,减缓更新速率。NAG 即是为此而设计的,其在 SGD-M 的基础上进一步改进了步骤 1 中的梯度计算公式:g_t = \nabla_\theta J(\theta - \gamma m_{t-1}) 参考图 2,SGD-M 的步长计算了当前梯度(短蓝向量)和动量项 (长蓝向量)。然而,既然已经利用了动量项来更新 ,那不妨先计算出下一时刻 \theta 的近似位置 (棕向量),并根据该未来位置计算梯度(红向量),然后使用和 SGD-M 中相同的方式计算步长(绿向量)。这种计算梯度的方式可以使算法更好的「预测未来」,提前调整更新速率。AdagradSGD、SGD-M 和 NAG 均是以相同的学习率去更新 \theta 的各个分量。而深度学习模型中往往涉及大量的参数,不同参数的更新频率往往有所区别。对于更新不频繁的参数(典型例子:更新 word embedding 中的低频词),我们希望单次步长更大,多学习一些知识;对于更新频繁的参数,我们则希望步长较小,使得学习到的参数更稳定,不至于被单个样本影响太多。Adagrad[4] 算法即可达到此效果。其引入了二阶动量:v_t = \text{diag}(\sum_{i=1}^t g_{i,1}^2, \sum_{i=1}^t g_{i,2}^2, \cdots, \sum_{i=1}^t g_{i,d}^2) 其中, v_t \in \mathbb{R}^{d\times d} 是对角矩阵,其元素 v_{t, ii} 为参数第 i 维从初始时刻到时刻 t 的梯度平方和。此时,可以这样理解:学习率等效为 \eta / \sqrt{v_t + \epsilon} 。对于此前频繁更新过的参数,其二阶动量的对应分量较大,学习率就较小。这一方法在稀疏数据的场景下表现很好。RMSprop在 Adagrad 中, v_t 是单调递增的,使得学习率逐渐递减至 0,可能导致训练过程提前结束。为了改进这一缺点,可以考虑在计算二阶动量时不累积全部历史梯度,而只关注最近某一时间窗口内的下降梯度。根据此思想有了 RMSprop[5]。记 g_t \odot g_t 为 g_t^2 ,有v_t = \gamma v_{t-1} + (1-\gamma) \cdot \text{diag}(g_t^2) 其二阶动量采用指数移动平均公式计算,这样即可避免二阶动量持续累积的问题。和 SGD-M 中的参数类似,\gamma 通常取 0.9 左右。Adadelta待补充AdamAdam[6] 可以认为是 RMSprop 和 Momentum 的结合。和 RMSprop 对二阶动量使用指数移动平均类似,Adam 中对一阶动量也是用指数移动平均计算。m_t = \eta[ \beta_1 m_{t-1} + (1 - \beta_1)g_t ] v_t = \beta_2 v_{t-1} + (1-\beta_2) \cdot \text{diag}(g_t^2) 其中,初值m_0 = 0 v_0 = 0 注意到,在迭代初始阶段,m_t 和 v_t 有一个向初值的偏移(过多的偏向了 0)。因此,可以对一阶和二阶动量做偏置校正 (bias correction),\hat{m}_t = \frac{m_t}{1-\beta_1^t} \hat{v}_t = \frac{v_t}{1-\beta_2^t} 再进行更新,\theta_{t+1} = \theta_t - \frac{1}{\sqrt{\hat{v}_t} + \epsilon } \hat{m}_t 可以保证迭代较为平稳。NAdamNAdam[7] 在 Adam 之上融合了 NAG 的思想。首先回顾 NAG 的公式,g_t = \nabla_\theta J(\theta_t - \gamma m_{t-1}) m_t = \gamma m_{t-1} + \eta g_t \theta_{t+1} = \theta_t - m_t NAG 的核心在于,计算梯度时使用了「未来位置」\theta_t - \gamma m_{t-1}。NAdam 中提出了一种公式变形的思路[7],大意可以这样理解:只要能在梯度计算中考虑到「未来因素」,即能达到 Nesterov 的效果;既然如此,那么在计算梯度时,可以仍然使用原始公式 g_t = \nabla_\theta J(\theta_t) ,但在前一次迭代计算 \theta_t 时,就使用了未来时刻的动量,即 \theta_t = \theta_{t-1} - m_t ,那么理论上所达到的效果是类似的。这时,公式修改为,g_t = \nabla_\theta J(\theta_t) m_t = \gamma m_{t-1} + \eta g_t \bar{m}_t = \gamma m_t + \eta g_t \theta_{t+1} = \theta_t - \bar{m}_t 理论上,下一刻的动量为 m_{t+1} = \gamma m_t + \eta g_{t+1},在假定连续两次的梯度变化不大的情况下,即 g_{t+1} \approx g_t,有 m_{t+1} \approx \gamma m_t + \eta g_t \equiv \bar{m}_t。此时,即可用 \bar{m}_t 近似表示未来动量加入到 \theta 的迭代式中。类似的,在 Adam 可以加入 \bar{m}_t \leftarrow \hat{m}_t 的变形,将 \hat{m}_t 展开有\hat{m}_t = \frac{m_t}{1-\beta_1^t} = \eta[ \frac{\beta_1 m_{t-1}}{1-\beta_1^t} + \frac{(1 - \beta_1)g_t}{1-\beta_1^t} ] 引入\bar{m}_t = \eta[ \frac{\beta_1 m_{t}}{1-\beta_1^{t+1}} + \frac{(1 - \beta_1)g_t}{1-\beta_1^t} ] 再进行更新,\theta_{t+1} = \theta_t - \frac{1}{\sqrt{\hat{v}_t} + \epsilon } \bar{m}_t 即可在 Adam 中引入 Nesterov 加速效果。可视化分析图 3: SGD optimization on loss surface contours图 4: SGD optimization on saddle point图 3 和图 4 两张动图直观的展现了不同算法的性能。(Image credit: Alec Radford)图 3 中,我们可以看到不同算法在损失面等高线图中的学习过程,它们均同同一点出发,但沿着不同路径达到最小值点。其中 Adagrad、Adadelta、RMSprop 从最开始就找到了正确的方向并快速收敛;SGD 找到了正确方向但收敛速度很慢;SGD-M 和 NAG 最初都偏离了航道,但也能最终纠正到正确方向,SGD-M 偏离的惯性比 NAG 更大。图 4 展现了不同算法在鞍点处的表现。这里,SGD、SGD-M、NAG 都受到了鞍点的严重影响,尽管后两者最终还是逃离了鞍点;而 Adagrad、RMSprop、Adadelta 都很快找到了正确的方向。关于两图的讨论,也可参考[2]和[8]。可以看到,几种自适应算法在这些场景下都展现了更好的性能。讨论、选择策略读书报告中的讨论内容较为杂乱,该部分待整理完毕后再行发布。References[1] Adam那么棒,为什么还对SGD念念不忘 (1) —— 一个框架看懂优化算法[2] An overview of gradient descent optimization algorithms[3] On the momentum term in gradient descent learning algorithms[4] Adaptive Subgradient Methods for Online Learning and Stochastic Optimization[5] CSC321 Neural Networks for Machine Learning - Lecture 6a[6] Adam: A Method for Stochastic Optimization[7] Incorporating Nesterov Momentum into Adam[8] CS231n Convolutional Neural Networks for Visual Recognition编辑于 2018-03-09 04:56深度学习(Deep Learning)机器学习梯度下降赞同 148750 条评论分享喜欢收藏申请转载文章被以下专栏收录Girl 是世界上最好的语言Hey wo