您想知道的人工智能干货,第一时间送达
版权声明
转自闪客,版权属于原作者,用于学术分享,如有侵权留言删除小宇:闪客,上次你讲《白话机器学习 | 损失函数
》讲得我是豁然开朗!但后面那个"高维曲面"把我真是吓到了。
闪客:哈哈别怕,上次画那个图就是为了吓你的,我想表达的就是,虽然通过导数为 0 这种传统的方法可以直接求出最低点,但一旦函数非常复杂这个方法就不好用了,就迫使我们找找其他办法。
小宇:你为什么拿图吓唬我?是不是显着你了!
闪客:额没有没有,我向你道歉,我们赶紧进入正题吧。
小宇:好,那你快告诉我什么是梯度下降呢?
闪客:别急,直接告诉你可不是我的风格,我们先不要管什么梯度下不下降的,先来想想我们的目的是什么。
小宇:嗯目的我还是清晰的,就是我们想求解一个叫损失函数的最小值,比如 L(w, b) 甚至更多维的 L(w₁, w₂, ..., b)。
闪客:没错,但最终目标可不是知道这个最小值是多少。
小宇:哦哦对,我说得不给力,是求解使得这个损失函数最小的 w 和 b 都是多少。
闪客:没错,那你想想看,直接一步到位求出 w 和 b 的值太难了,那我们是不是可以一点一点调整它们,分多次求解呢?
小宇:一点一点调整?听起来好像是个思路,但还是没太明白怎么调整。
闪客:没关系,我们假设个生活中的场景,你现在有一杯咖啡和糖,你怎么调出符合你口味的甜度呢?
小宇:哦这个我深有感悟,一步到位很难。比如我想要微微甜,那就得先加一点点糖,然后尝一尝,然后再加点,再尝一尝,直到刚好到我满意为止。
闪客:没错,没想到你还挺精致的,这就是梯度下降的精髓!
小宇:啊,这和梯度下降有什么关系呢?
闪客:你可以把符合你的口味这个目标当做一个损失函数,糖的量就是损失函数中的参数,你不能一下子就确定糖这个值是多少,于是只能从一个初始状态开始,比如先加一勺糖,然后一点一点变化糖的量。每次加完糖后你品尝咖啡就是你在计算这次的损失函数,也就是你对口味的喜欢程度。
小宇:啊,我明白了!没想到生活中的例子这么有启发作用!
闪客:对!生活中的很多事都是这样的,比如做饭调味、调音响音质,甚至选衣服搭配颜色,都是通过不断尝试和调整来找到最优解。机器学习的梯度下降,也是用这种思路来优化参数的。
小宇:这个思路我明白了。不过你之前说的“梯度”具体是啥呢?
闪客:假如损失函数只有一个参数,像之前的 L(w),那么梯度就和导数是一个意思。
如果损失函数有多个参数,像之前的 L(w,b),那么梯度就是各个参数的偏导数。
在这种情况下,梯度是个向量,是所有参数的偏导数累加起来的综合结果。
小宇:额,你这一大堆输出差点又给我整懵了,向量这个概念确实学过,但总感觉还不直观,你能形象地给我展示下么?
闪客:没问题,我们就拿之前三维坐标系下的那个带两个参数 w 和 b 的损失函数来说,对应图中的这个点,它的梯度是多少呢?
小宇:对 w 和 b 分别求偏导?
闪客:没错,在图中,对 w 求偏导就是把 b = 0 这个平面和曲面的交线求导数。
把视角转一下就清晰了。
小宇:原来如此!那对 b 求偏导呢?
闪客:也是一样,线画 w = -1 这个平面和曲面的交线。
从侧面看,这条交线已经在最低点了,所以 b 的偏导数就是 0。
所以把这两股偏导数的力量合在一起,就是最终的向量,也就是梯度。
小宇:我明白了!其实就是找个坡度最大的方向往下滑,直到滑到最低点。
闪客:没错,不过这里的图只是为了让你形象理解梯度的意思,实际计算的时候不用考虑那么多,直接求各参数的偏导数就行了。
小宇:诶,那算出偏导数之后,要怎么样呢?
闪客:简单!每次都沿着梯度的反方向,走一小步,也就是你说的往下滑。公式写出来是这样的:
小宇:哇,这么简单呀,其实就是每个参数每次都变化自己偏导数那么大的值就好了。
闪客:没错!不过这样的话有个小问题,就是每次变化的这个量,太大了容易走过了错过最低点,太小了又太磨叽,所以我们乘以一个学习率 η 来调整一下速度。
小宇:哦还真是,人类真是好聪明呀!
闪客:哈哈是呀。咱们找到了梯度下降的求解方法,你来实践一下吧。回到那个最简单的题目,假设 x 和 y 的数据如下:x=[1,2,3,4] y=[1,2,3,4] ,求一下 y = wx 中的 w 是多少。
虽然傻子也能直接看出 y = x 是最终的解,不过我们就用这个来举例实战一下,你来用梯度下降的方法求一下 w 的值。
小宇:好的,不过我学你,这种小事儿我也懒得自己算了,交给 AI 吧!
闪客:哈哈真不赖,活学活用呀,这 AI 直接把图都帮我们画出来了,图里可以看到损失函数的值 Loss 再逐渐降低为 0,而我们要计算的权重 w 的值在不断接近 1。之后你看到再复杂的机器学习或者深度学习等过程的展示,最核心的其实就是这两个东西的变化罢了。
小宇:是呀,现在这 AI 当老师也太体贴了!诶?那更高维度也就是更多参数的梯度下降求解,是不是和这个步骤完全一样呀?
闪客:没错,你也可以直接丢给 AI 一个你想要实践的场景,让它帮你把详细过程事无巨细地画出来。不过高维也带来一些新的问题,比如更容易陷入局部最优解,或者梯度变得特别小,导致优化速度变慢。幸好,梯度下降有不少改进版本,比如动量法、Adam 优化器,这些可以帮助我们更快、更稳地找到最优解。
小宇:听起来这梯度下降已经很厉害了!改进版岂不是要更牛?
闪客:当然!下次我就带你看看这些聪明的优化器,比如怎么用“动量”像滚雪球一样加速下降,或者让学习率动态调整,变得更智能。
小宇:好嘞,期待!
闪客:哎呀,不知不觉又到饭点了,今天讲的给你画了这么多图很累的,请我吃个饭吧。
小宇:哦才想起来我家里洗的衣服还在洗衣机里呢,我得回去晾衣服啦,下次吧。
闪客:哦~