3.梯度下降算法

目录

1  梯度下降算法的输出是什么

2  梯度下降算法输出结果表明了什么

3  例子


梯度下降算法是找到损失函数函数极值点的算法,目的是将损失函数最小化,我们的机器进行"学习"的目的就是改进模型参数(例如上一章提到的y = ax + b 改进a和b)以便将损失最小化

我们现在回顾一个概念-偏导数

  • 偏导数

我们之前学过导数,导数的意思是是对含有一个自变量的函数进行求导。偏导数是是对含有两个自变量的函数中的一个自变量求导。

比如说,我们现在有一条线 y = 2x + 1,我们现在对这个线求导数,通过公式我们可以知道,此线的导数为2,我们现在对 y = 2x + a + 1求x的偏导数,那么我们得到的结果就应该是

下面这个表示a对x的导数

1  梯度下降算法的输出是什么

梯度的输出是一个由若干偏导数构成的向量

  • 公式中右上角的T意思是转置,转置的算法和矩阵相同,向量与矩阵的区别之一是:向量是一维的,矩阵是二维的

我们称一个向量中的元素叫做向量中的分量,红色框框出来的就是一个分量

梯度下降算法输出结果(上图的倒三角)的每个分量(红框框出的内容)是损失函数对输入向量(输入也可能是一个向量)的相应分量的偏导,上面这个图中,我们的输入向量就为(w1,w2,...,wN)

2  梯度下降算法输出结果表明了什么

梯度下降算法输出结果表明了每个位置(输入点x)损失函数增长(变化)最快的方向

  • 输出的结果是向量,向量有两个东西构成,方向和值,无论在最终结果如何我们都视作其是增长的只是增长的方向不同

3  例子

我们以上节课的例子举例 y = ax + b

我们现在有一个坐标轴z,它现在是损失函数的输出

  • f(x)为预测值,y为实际值,n为样本数量

我们的模型是y = ax + b ,很明显实际值是固定的,样本数量是固定的,fx根据a与b的变化而变化,那影响我们z轴的两个值分别的a和b

每一轮epoch都会使我们都会得到一组a,b值,那我们最终就可以得到这样一条曲线

假设我们获得的曲线是这样的

  • 这个并不是普通视觉上的二维曲线,这条曲线是会偏向或远离b方向的

我们现在找这个曲线的极值点,如果我们有上帝视角我们从这个曲线不难看出这些极值点

  • 极值点:斜率正负改变的点

每一个极值点我们都可以得到一组a,b的值

我们当然是没有上帝视角的,在训练中不会得知曲线的全貌,我们在深度学习中使用的方法叫随机初始化

  • 在tensorflow.keras已经将初始化封装好了,所以不需要我们去写代码进行初始化
  • 随机初始化

以咱们上面这个函数为例,它会随机出很多组a与b,然后再计算出此组ab值生成的结果z的梯度

  • 梯度:z轴上的值变化最快的方向,我们可以放到导数中理解一下,如果导数的绝对值越大,它变化的速度也就越快,计算方式为该点Z值对输入向量的微分,实际上就是导数

回到我们如何找极值点的问题来,我们比如现在初始化了点A

此时它会找到此时Z变化最快的方向,我们假设是这个方向

我们的目的是让z值变到最小,很明显这个曲线往这个方向走Z的值是变大的,那么此时我们就会反向寻找极值点

反向走着走着发现变化的速率越来越慢,此时就代表这梯度越来越小,这个就梯度下降的来历,当我们的梯度达到0的时候,梯度为0的点就是我们的极值点

上面这个例子没体现出为什么要找最快的点,那么我们换一个初始的位置

现在我们初始到了B点,此时它的两个方向都可以使z变小

那么这个时候梯度下降算法会选择下降最快的那条路线,找到那条路线上的极值点

那么现在又遇到一个问题,就算是一点儿一点儿向前蹭,那么进行一次改变也应该有一个值,这个值的名字叫做学习速度

  • 在上一章我们在编译时并没有给学习速率的参数,这是因为我们使用的optimizer的adam中又默认的学习速率,默认学习速率为0.001

比如下面这个图,我一次从B -> C的学习速度是要比B -> d 的学习速度慢的

学习速率如果过小,迭代的次数就越多,也就是进行一个epoch的时间会变长,如果太大的话优点是速度会变快,但是有可能会因为步子太大而跳过我们想要的极值点,比如说从B -> E

还有一种情况它会一次就跳到F,那么此时它发现Z是处于上升趋势,那它就会往回走,又返回B点,如果将学习速率写死它将永远找不到中间的正确极值点

算法的最后一步,我们现在通过随机初始化找到了若干个极值点,此时我们从若干个极值点中找到对应Z最小的极值点返回

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Suyuoa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值