- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
机器学及习-03-梯度降维法
回归分析梯度降维法梯度降维法解决什么问题假设y的值与n个因素有关,他们分别是x1、x2、x3......xn,且经过调研,我们已经掌握了m组实际值我们可以将他们的关系用函数y=a0+a1*x1+a2*x2+a3*x3......+anxn进行拟合根据之前的结论,代价函数J(a0,a1,a2......an)=1/2m*∑( f(xi) - yi )2那么我们就需要根据已知的m组值,找出一组(a0,a1,a2......an),让代价函数的值最小上面所说的梯度降维法,就是专门求解minJ(a0,a1,a2......an)问题的一种有效方法为了更直观地看到梯度降维法是如何工作的,我们接下来只看两个因素的问题,即J(a0,a1)问题梯度降维法工作原理思考:你可以把代价函数的图像,想想为群山而你在这群山中的任意一点你需要下到更低的地方,你会怎么做?梯度降维法工作原理思路:假设,我在点A,我会环顾一下四周看看哪个方向的高度比我所在点更低然后朝那个方向前进一小步,到点B到了B点以后,继续刚才的操作,一步一步,慢慢的,我会发现我到了某个点,这个点四周的高度都比现在的高度要高,这个时候就可以停止了这就是梯度降维法的基本思路AB梯度降维法实现在这里,我要先给出结论,梯度降维法的实现方式如下(伪代码)针对代价函数J(a0,a1),我们要找到一个任意的初始点(a0,a1)设置两个变量temp0=0;temp1=0;这两个变量我们接下来会用到然后循环下面这一段{temp0=temp1=a0 = temp0a1 = temp1用新的a0和a1计算一下代价函数值}直到代价函数值不再变化或是变化很小,可以忽略不计的时候,就说明我们已经找到了需要的a0和a1注意:有一点很容易出错,a0和a1一定要同时更新,否则,如果先更新a0,再对a1求偏导的时候,此时的a0是已经更新过的,偏导求的就不对了,所以一定要同时更新,切记。梯度降维法实现看到上面的结论,是不是有点晕?没关系,我们慢慢来,上面的一大串结论里面,对于没有学习过高等数学的人来说,最麻烦的也许就是那个求偏导,完全搞不懂是什么,没关系,那个值我之后会给出,会求偏导的,可以自己算一下。下面,我就介绍一下那个结论中的几个概念学习速率(下山的步子有多大)方向(朝什么方向走)刚才的例子中,不断的循环过程,就是在不断的寻找下一步往哪走,而这“下一步”就是由方向和步子大小决定的,学习速率就好比下山时的步子大小,而那个偏导就是我们下山的方向,就这样,我们会一步一步走到最低点。这是你可能会问,为什么方向会是两个?一个对a0求偏导,一个对a1求偏导。下面我们来说说导数的含义导数的含义我们先把代价函数简化一下,看看一个变量的代价函数图像。在上一节中我们知道了,J(a1)的函数图像如下J(a1)假设我们的初始点在A我们利用梯度降维法,就需要做下面这件事来找到点B我们可以看到,新的a1实际上是原来的值减去一个值减去的这个值由学习速率和一个导数组成这个导数的意义,实际上是点A的斜率我们沿着斜率的方向,就可以保证下一步的值肯定比这一步要小,我们可以看到,我们沿着斜率前进了α,得到了一个新的a1,从而得到了新的点,这个点离我们的最低点更近了这个时候你可能会想明明是减去一个值,为什么a1会向右跑了呢?别忘了斜率的含义,你看看这条直线的方向,此时的斜率是负数,减去一个负数,所以值增加了。ABa1导数的含义我们再来看看,如果我的上一个点不在最低点的左边,而在最低点的右边,会是什么情况呢?J(a1)假设上一个点在A我们利用梯度降维法,就需要做下面这件事来找到点B这种情况下,A的斜率变为了负值,我们新的点依然会朝着最小点的方向前进,这就是导数(斜率)的神奇之处。它保障了我们的算法永远向着目标前进到目前为止,我们看到了斜率可以在方向上保证我们永远向着最低点前进,下面,我们看看这个斜率对我们步子的大小有什么作用。ABa1导数的含义实际上,随着我们的计算越来越接近最低点,斜率可以保证我们的步子越来越小,尽量不越过最低点J(a1)假设我们从A点出发,到了B点,经过几轮循环以后,我们的数值已经到达了C点C点的斜率已经明显发生了变化,我们可以看到,C点切线的斜率与之前相比,已经变得更小了,这时,对于相同的学习速率α来说,每次的变化都更小了所以,越接近最低点,步子的变化会越来越小,是我们尽量不会越过最低点。注意,这里说的是尽量不越过,如果你的α选择得很大,还是会越过,还会出现一只无法到达最低点的情况,不过我们可以先不要关心这一点,在后面我会讲到如何选择合适的αABCa1导数的含义之前的例子,为了便于理解,我用的是只有一个参数的J(a1),当有两个参数的时候,图像是三维的,所以在确定下山方向的时候,要分别对a1和a2求偏导,得到两个方向上的增量,这样才可以确定
文档评论(0)