本人已经打算将这一系列博文做成动画趣味科普的形式来呈现,感兴趣的话可以点这里。
0. 梯度下降有什么卵用?
其实梯度下降不是一个机器学习算法,而是一种基于搜索的最优化方法。因为很多算法都没有闭式解的,所以需要通过一次一次的迭代来找到找到一组参数能让我们的损失函数最小。损失函数的大概套路可以参看这个图:
所以说,如果用人话来描述梯度下降是干嘛的,就是。。。我不断的洗澡(寻找),油腻(靠谱)的师姐(权重)在哪里(是多少)。。
1.怎么搜索?
刚刚我们已经知道了梯度下降就是用来找权重的,那怎么找权重捏?瞎XX玄学猜?不可能的。。这辈子都不可能玄学猜的。想想都知道,权重的取值范围可以看成是个实数空间,那100个特征就对应着100个权重,10000个特征就对应着10000个权重。如果靠瞎XX玄学猜权重的话。嗯,应该这辈子都猜不中了。所以找权重的找个套路来找。这个套路就是梯度!!!
那么梯度是啥?如果撸公式出来那就是酱紫:
嗯。。是不是有点眼熟,如果翻译成中文就是酱紫:
这个时候可以明显的看出来梯度,无非就是把权重对损失函数的偏导算出来排成一个向量而已。而且梯度还有个性质,就是梯度方向是函数值增长最快的的方向。这个性质怎么理解呢?举个栗子。假如我是个想要成为LOL郊区王者的死肥宅,然后要成为郊区王者可能有这么几个因素,一个是英雄池的深浅,一个是大局观,还有一个是骚操作。他们对我成为王者来说都有一定的权重。如图所示,每一个因素的箭头都有方向(也就是因素对于我成为王者的偏导的方向)和长度(偏导的值的大小)。然后在这些因素的共同作用下,我最终会朝着一个方向来训练(好比物理中分力和合力的关系),这个时候我就能以最快的速度向郊区王者更进一步。
也就是说我如果一直朝着最终的那个方向努力的话,理论上来说我就能以最快的速度成为郊区王者。
OK。现在我们知道了梯度的方向是函数增长最快的方向,那我在梯度前面取个负号(反方向),那不就是函数下降最快的方向了么。(还是可以根据郊区王者这个图来自行脑补= =)所以哇,梯度下降它的本质无非就是更新权重的时候是沿着梯度的反方向更新。好比下面这个图,假如我是个瞎子,然后莫名其妙的来到了一个山谷里。现在我要做的事情就是走到山谷的谷底。因为我是瞎子,所以我只能一点一点的挪。要挪的话,那我肯定是那我的脚在我四周扫一遍,觉得哪里感觉起来更像是在下山那我就往哪里走。然后这样循环反复一发我最终就能走到山谷的谷底。
所以嘞,按照这个套路,我们就能撸出梯度下降的伪代码:
循环干的事情就相当于我下山的时候在迈步子,代码里的α装逼点叫学习率,实际上就是代表我下山的时候步子迈多大。值越小就代表我越苟,步子迈得小,深怕掉坑里。值越大就代表我越骚,但是容易扯着蛋~~
OK。这就是我对梯度下降的一个通俗理解,希望能够对你有帮助。