大白话讲梯度下降法(一)

导言

在用机器学习算法解决问题时,求解模型参数是很经常的事情,也就是在优化损失函数的时候,需要找到最合适的模型参数。那么如何找到最优的参数呢,这个时候就需要我们本文要讲的 梯度下降法 了。

学习前提

  • 微积分

  • 求导

梯度下降法原理简单易懂,但是需要有微积分,以及求导的数学理论基础,其实也就是会微积分的求导。下文也会提到,忘记也无妨。

梯度下降法是什么

在机器学习算法中,很多模型本质就是通过最小化损失函数来间接求解模型参数。我们在最小化损失函数时,可以通过梯度下降法来一步步迭代求解,得到最小参数值,来得到最小化损失函数,从而得到模型参数。

通过场景来理解梯度下降法

相信读者大大们一定很好奇为什么梯度下降法可以求解最优参数。接下来我们先通过一个场景来了解它的原理。

ps:图片来源于网络

假如我们现在在山顶,想到山脚下,但是不知道具体怎么走。那我们只能一步一步走,走一步算一步。我们现在要怎么走到山底,还是有科学依据的。就需要我们每次都选能最快到达山底的方向走,这个也就相当于梯度下降法中梯度的定义, 也就是最陡峭的地方,然后继续走,继续选择最陡峭的方向走(顺便提一下:最陡峭的地方,是不是跟我们函数的斜率很像?),直到走到山脚。

进一步思考

那怎么确定是否是山脚呢,也就是当你的下一步跟上一步相差无几,基本没有变化的时候, 我们就可以说达到局部最低点了。

梯度下降法的数学解释

经过上面的场景解释,相信对梯度下降法的基本思想有一定理解了。那么通过数学是怎么表现的呢,让我们进入本文的重点。

梯度下降法的重点公式,如下图

其中 θ0 就是我们现在的所处的位置,J 就是关于 θ 的函数,∇J(θ)就是该点的斜率,就是我们往下走选择的方向,α 就是我们移动的步长,在机器学习中我们称为学习率。θ1 就是我们在 θ0 往 ∇J(θ) 的方向走了 α*∇J(θ) 后到达的位置。

下面我们对几个概念重点介绍

初始值:上式中的 θ0 就是我们梯度下降法最开始随机选择的一个初始值。

学习率:上式中的 α,也就是我们确定下降的方向后移动的距离。

梯度:

单变量函数中梯度j就是函数的微积分,也就是函数在某点的斜率。

多变量函数中梯度就是向量。

迭代求解梯度

重点来了,解释之前,我们先来演示下怎么迭代求梯度

首先看看一个自变量的梯度下降情况

假设函数:

随机选择一个值作为初始值,假设为:

学习率为:

梯度:

迭代过程 

根据公式,我们开始迭代计算梯度:

经过5次迭代运算,基本到了第五步,就到函数的最低点,也就是我们上面下山场景的山底了。

再来看多变量的梯度下降情况

假设函数:

随机选择一个值作为初始值,假设为:

学习率为:

梯度:

根据公式,我们开始迭代计算梯度:

经过50次迭代运算,我们发现基本到函数最低点了。

总结

可以看出梯度下降法的原理:求解每个位置也就是每个点的斜率,并乘以步长。梯度就是斜率,学习率就是梯度下降的步长,构成了移动的要素。进而求解到最小值。

通过下山场景以及迭代演算相信读者大大们对梯度下降法的思想以及过程已经基本了解了。那么本篇的目的就达到了。篇幅所致,下篇我们将继续介绍梯度下降法的分类,优缺点,作用,应用实现,可以更全面了解梯度下降法。

推荐阅读:

深入浅出Apriori关联分析算法(一)

深入浅出Apriori关联分析算法(二)

Scala 函数式编程(一) 什么是函数式编程?

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嗨!大白话解Promise(一)啊!好的,我来给你解释一下。 首先,我们要知道Promise是JavaScript中处理异步操作的一种方式。异步操作就是那些不会立即返回结果的操作,比如从服务器上获取数据或者执行耗时的任务。在以前,我们通常使用回调函数来处理异步操作,但是回调函数的嵌套会导致代码变得难以阅读和维护。而Promise就是为了解决这个问题而出现的。 Promise可以被看作是一种代表了未来结果的对象。它有三个状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。当一个异步操作开始执行时,它的状态是pending;当操作成功完成时,它的状态变为fulfilled,并且会返回一个值;当操作失败时,它的状态变为rejected,并且会返回一个错误。 使用Promise的好处是可以更清晰地编写异步代码。我们可以通过调用Promise的then()方法来处理成功的情况,通过调用catch()方法来处理失败的情况。这样就避免了回调函数的嵌套,代码更加易读和易于维护。 当我们创建一个Promise对象时,我们需要传入一个执行器函数,这个函数会立即执行。执行器函数接受两个参数:resolve和reject。在执行器函数中,我们可以执行异步操作,并在合适的时候调用resolve或reject来改变Promise的状态。 我来举个例子来说明一下: ```javascript const promise = new Promise((resolve, reject) => { // 这里可以执行异步操作 // 如果操作成功,调用resolve并传入结果 // 如果操作失败,调用reject并传入错误 }); promise.then((result) => { // 处理操作成功的情况 }).catch((error) => { // 处理操作失败的情况 }); ``` 这就是Promise的简单介绍,望能帮到你!如果你还有其他问题,尽管问吧!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值