当前位置:网站首页>2.1-梯度下降
2.1-梯度下降
2022-08-11 06:50:00 【一条大蟒蛇6666】
文章目录
在上一章回归那节,我们讨论了如何找到一个最好模型的过程,也就是去找一组参数θ,让这个loss函数越小越好:
θ ∗ = a r g m i n θ L ( θ ) θ^{*}=arg\underset{θ}{min}L(θ) θ∗=argθminL(θ)
当θ有两个参数 { θ 1 , θ 2 } \{\theta _{1},\theta _{2}\} { θ1,θ2}时,随机选择一组起始的点 θ 0 = [ θ 1 0 θ 2 0 ] \theta ^{0}=\begin{bmatrix} \theta _{1}^{0}\\ \theta _{2}^{0} \end{bmatrix} θ0=[θ10θ20],上标0代表为初始的那一组参数,下标1,2代表是这一组参数中的第一个参数和第二个参数。
接下来计算 { θ 1 , θ 2 } \{\theta _{1},\theta _{2}\} { θ1,θ2}各自的偏微分:
[ θ 1 1 θ 2 1 ] = [ θ 1 0 θ 2 0 ] − η [ ∂ L ( θ 1 0 ) ∂ θ 1 ∂ L ( θ 2 0 ) ∂ θ 2 ] \begin{bmatrix} \theta _{1}^{1}\\ \theta _{2}^{1} \end{bmatrix}=\begin{bmatrix} \theta _{1}^{0}\\ \theta _{2}^{0} \end{bmatrix}-\eta \begin{bmatrix} \frac{\partial L(\theta _{1}^{0})}{\partial \theta _{1}}\\ \frac{\partial L(\theta _{2}^{0})}{\partial \theta _{2}} \end{bmatrix} [θ11θ21]=[θ10θ20]−η[∂θ1∂L(θ10)∂θ2∂L(θ20)]
[ θ 1 2 θ 2 2 ] = [ θ 1 1 θ 2 1 ] − η [ ∂ L ( θ 1 1 ) ∂ θ 1 ∂ L ( θ 2 1 ) ∂ θ 2 ] \begin{bmatrix} \theta _{1}^{2}\\ \theta _{2}^{2} \end{bmatrix}=\begin{bmatrix} \theta _{1}^{1}\\ \theta _{2}^{1} \end{bmatrix}-\eta \begin{bmatrix} \frac{\partial L(\theta _{1}^{1})}{\partial \theta _{1}}\\ \frac{\partial L(\theta _{2}^{1})}{\partial \theta _{2}} \end{bmatrix} [θ12θ22]=[θ11θ21]−η[∂θ1∂L(θ11)∂θ2∂L(θ21)]
对于 { θ 1 , θ 2 } \{\theta _{1},\theta _{2}\} { θ1,θ2}的偏微分还有另外一种写法: ▽ L ( θ ) \bigtriangledown L(\theta) ▽L(θ)也被叫做梯度(Gradient),代表一组向量(vector)
▽ L ( θ ) = [ ∂ L ( θ 1 ) ∂ θ 1 ∂ L ( θ 2 ) ∂ θ 2 ] \bigtriangledown L(\theta)=\begin{bmatrix} \frac{\partial L(\theta _{1})}{\partial \theta _{1}}\\ \frac{\partial L(\theta _{2})}{\partial \theta _{2}} \end{bmatrix} ▽L(θ)=[∂θ1∂L(θ1)∂θ2∂L(θ2)]
- θ 1 = θ 0 − η ▽ L ( θ 0 ) \theta ^1=\theta ^0-\eta\bigtriangledown L(\theta ^0) θ1=θ0−η▽L(θ0)
- θ 2 = θ 1 − η ▽ L ( θ 1 ) \theta ^2=\theta ^1-\eta\bigtriangledown L(\theta ^1) θ2=θ1−η▽L(θ1)
下图是梯度下降(Gradient Descent)的可视化过程:红色的箭头代表梯度的方向,蓝色的箭头代表参数更新的方向,两者是相反的。
一、调整学习率
- 当你有3个及以上的参数时,是无法可视化梯度下降(Gradient Descent)的过程的。但是却可以可视化学习率(learning rate)η和Loss值之间的曲线。
1.1 自适应学习率(Adaptive Learning Rates)
- 在开始时,由于我们距离最优解有较远的距离,因此可以采用较大的学习率,加大梯度下降的步伐。
- 在经过几轮的训练后,我们此时比较靠近最优解,所以要减小学习率,降低梯度下降的步伐,防止在最优解附近一直震荡。
- 最简单的策略是让学习率随着时间的变化而变化,如: η t = η t + 1 \eta^t=\frac{\eta}{\sqrt{t+1}} ηt=t+1η
- 但并不是所有的参数都适用这样一套调整策略
1.2 Adagrad
- Adagrad是将每个参数的学习率除以其先前微分值的均方根(root mean square )
让我们来看一看普通的梯度下降(Vanilla Gradient descent)和Adagrad之间的区别:
- Vanilla Gradient descent:
- Font metrics not found for font: .
- Adagrad: σ t \sigma ^t σt代表参数w先前所有微分值的均方根(root mean square )
- Font metrics not found for font: .
- 下面是Adagrad的具体推导过程和最终的简化写法:
- 在最终的简化写法中存在着一些矛盾(Contradiction)之处:当梯度g越大时,我们期望得到更大的下降步伐,然而式子的分母却在阻止我们这样做。
对于这个问题,有这样两种解释:
- 直观的解释(Intuitive Reason):为了强调某一次梯度的反差效果(特别大或者特别小),我们加上了分母这一项
更正式的解释:
- 对于一个参数:当我们踏出去的步伐和微分的大小成正比时,那么有可能就是最好的步伐。
- 比较不同的参数(Comparison between different parameters):为了真实反映所在位置和最低点之间的距离,我们不仅要正比于梯度g的一次微分,还要反比于梯度g的二次微分。
下图是对式子中分母这一项来估计二次微分的解释:当采样足够多的点,梯度g的平方和再开根号就可以近似等于梯度g的二次微分
二、随机梯度下降(Stochastic Gradient Descent)
- 随机梯度下降相比普通的梯度下降要快很多:
- 这是因为对于随机梯度下降而言,它会看每一个example的loss值,相当于走了20步
三、特征缩放(Feature Scaling)
- 将x1和x2两个不同的特征分布缩放到同一比例:
- 如右图,这样做的意义是让我们在做梯度下降这一过程时变得更加容易,更加有效率。因为经过特征缩放后的起始点无论从哪里开始,做梯度下降的方向都是指向最低点的。
- Z分数归一化(Z-Score Normalization)
- Z分数归一化是实现特征缩放的一种常见方法。其工作原理为算出每一维(行)特征的均值mi和标准差σi,然后将特征矩阵的每一个值 x i r x_i^r xir都减去均值mi并除以标准差σi,这样更新后的 x i r x_i^r xir就都处于0~1之间了。
四、数学推导
- 泰勒级数(Taylor Series):
- 设h(x)是任意函数在x=x0附近可微,那么h(x)可以写成下面这样
- 多变量泰勒级数(Multivariable Taylor Series):
- 根据泰勒级数的定义,如果右图中的红圈足够小,那么在红圈内就可以把loss函数用泰勒级数做简化
- 简化之后,就变成了在红圈范围内找 θ 1 , θ 2 \theta_1,\theta_2 θ1,θ2使得loss值最小的问题
- 当推导到最后一步时,就变成了我们之前做梯度下降的式子,但式子成立的前提是红圈的半径r要足够小,由于学习率 η \eta η是和r成正比的,所以学习率不能太大,理论上要无穷小时式子才会成立,但在实际操作的过程中只要足够小就可以了。
- 上面的推导过程我们采用的是泰勒级数的一次式,当考虑到二次,三次,甚至是多次时,我们对红圈的要求就没有那么大了,理论上学习率也可以调的高一点。但在深度学习的过程中却很少这么做,这是因为由此带来的庞大计算量是无法承受的。
五、梯度下降的限制(More Limitation of Gradient Descent)
- 在做梯度下降的过程,实际上就是在找loss函数微分为0的地方,然而微分为0的地方却不一定是局部最优解,它还可能是图中的鞍点。
- 另外在实际求解的过程中,我们并不是找微分真正为0的点,而是当微分小于某一个数(如10的-6次方)的点,实际上这个点可能还在一个比较高的地方,离要找的局部最优解仍然很远。
- 在下一章我们会继续讨论这个问题
边栏推荐
猜你喜欢
When MySQL uses GROUP BY to group the query, the SELECT query field contains non-grouping fields
linux 安装mysql服务报错
1051 Multiplication of Complex Numbers (15 points)
Douyin share password url API tool
1688 product interface
1002 写出这个数 (20 分)
PIXHAWK飞控使用RTK
unable to extend table xxx by 1024 in tablespace xxxx
TF中的四则运算
opencv实现数据增强(图片+标签)平移,翻转,缩放,旋转
随机推荐
go-grpc TSL认证 解决 transport: authentication handshake failed: x509 certificate relies on ... ...
Pico neo3 Unity打包设置
Strongly recommend an easy-to-use API interface
opencv实现数据增强(图片+标签)平移,翻转,缩放,旋转
动态代理学习
LeetCode刷题系列 -- 46. 全排列
Implementation of FIR filter based on FPGA (5) - FPGA code implementation of parallel structure FIR filter
1051 复数乘法 (15 分)
Pico neo3在Unity中的交互操作
详述 MIMIC护理人员信息表(十五)
【LeetCode每日一题】——844.比较含退格的字符串
Unity开发者必备的C#脚本技巧
1036 跟奥巴马一起编程 (15 分)
Edge 提供了标签分组功能
为什么C#中对MySQL不支持中文查询
下一代 无线局域网--强健性
Redis测试
Unity底层是如何处理C#的
ssh服务攻防与加固
1076 Wifi密码 (15 分)