hung-yi lee

it2026-10-09  2

原视频地址 https://www.bilibili.com/video/BV1JE411g7XF?p=5

文章目录

梯度下降是如何优化函数的tips1. 使用Adagrad2. Stochastic Gradient Descent3. Feature Scaling 梯度下降理论基础梯度下降的局限性

梯度下降是如何优化函数的

前情回顾:损失函数是用来衡量找到的函数对应的那一组参数的好坏的。 theta是一组参数,上标表示参数是第几组的,下标表示参数是组中的第几个。 上图是将梯度分成两个偏导数表示,下图是直接使用梯度。 把梯度看成是损失函数等高线的法线方向,现在每得到一个函数,算出梯度,然后按梯度相反方向走。

tips

1. 使用Adagrad

应当小心调节学习率,原因如下图所示: 学习率太小:过慢,效率低 学习率太大:找不到最小的损失函数值 学习率刚刚好 Just make 原则: ①学习率逐渐减小,离目标越近走得越慢。 ②给不同的参数以不同的学习率。(参数独立) 例:Adagrad方法 把每一个参数的学习率都除以之前导数的均方根(均方根:将所有值平方求和, 求其均值, 再开平方) 使用Adagrad之前,学习率这样更改 使用Adagrad之后,学习率这样更改 其中 具体操作如下 化简后的Adagrad公式 这里有个矛盾的地方,最终得出的Adagrad公式,从一项看是梯度越大,学习率变化越大,从另一项看结果相反 直观解释这么做的原因 学习率可能变化是很大的,给人很大反差,除以过去的方均根可以平和掉这个反差 更科学的解释:修改参数的步伐(当前点和最低点的距离)最好正好是那个微分的整数倍,但这只在只考虑一个参数时成立,如果有多个参数呢?那个bset step则需要将二次微分(derivative)考虑进来 再回头看Adagrad公式,分号下面的方均根就是模拟了二次微分。

2. Stochastic Gradient Descent

下面介绍一个改进的参数更新方法——Stochastic Gradient Descent,直译是随机梯度下降 该方法在原梯度下降的基础上做的改进是,原先的梯度下降损失函数是所有样本的总和,现在只随机取第n个样本 也就是之前是看完所有样本再更新参数,现在遇到一个样本更新一次参数,如下图所示

3. Feature Scaling

直译是特征缩放,做什么事呢?希望不同特征的分布差不多,如下图,从左图转化到右图是我们要做的 为什么要这样做? 如下图所示,当输入的x1是1,2……而x2是100,200……那么w1对Loss函数的影响显然比w2对Loss函数的影响小得多,如下左图所示,如果对x2进行缩小,则可以使得w1和w2对Loss函数的影响差不多,如下右图所示 对于左右两图,左边想更新参数不用Adagrad公式就会很困难,右边的正圆形想更新参数则容易得多 具体方法: 常见方法 对每一维参数的第i个样本求均值m i和标准偏差sigma i 对第r维参数的第i个样本进行图中公式所示方法的更新 类似正态分布标准化

梯度下降理论基础

每次我们得到的新的theta代入到Loss函数里面,都会比上一次小,对吗? 答案是否定的。 假如现在给定一个theta的起点,圈定一个范围,可以找到这个范围内最小的Loss函数值对应的theta。 将theta更新,得到theta1 可以重复刚才过程。现在的问题是如何在那个确定的范围内找到Loss值最小时对应的theta? 就要从Taylor Series(泰勒级数)说起。 对于任一函数h(x),只要在x0这一点是无穷次可微的。就可以把h(x)写成下图所示(其中k表示微分的次数)。当x无限接近x0,可以把(x-x0)的平方项,立方项,四次方项……忽略。将h(x)表示成下图最下方形式。 例如,以h(x)=sin(x)为例,在x0=pi/4处,只考虑0次和1次,approximation(近似法)的效果还是很好的。(虽然整体看不像) 当然,泰勒级数可以有多个参数,有2个参数的如下所示 再回到梯度下降法,当刚刚圈定的范围(红圈)足够小,就可以运用泰勒级数,将损失函数L(theta)表示成下图最下行所示 这样算损失函数的最小值对应的(theta1,theta2)就变得容易。其中s,u,v都是常数。 具体求法如下,我们要找的(delta-theta1,delta-theta2)是和(u,v)反方向,且长度等于圈定的radius(半径)的。 代入u,v,发现得到的就是最初的梯度下降的公式。 但要记得的是,找到的红色圈的半径要足够小,而这个半径和学习率是成正比的。因此学习率要合适。 刚才只考虑到1次的级数,如果考虑的次数更高呢?会引入更复杂的运算,并没有梯度下降法合适。

梯度下降的局限性

会停在微分值是0但不是我们要找的全局最小值的地方。如:saddle point(驻点)和local minima(局部最小值点)。

最新回复(0)