text.html 7.3 KB
Newer Older
ToTensor's avatar
ToTensor 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
 
<p class="content">机器学习所关心的问题之一是捕捉函数的变化趋势,也就是研究<span class="italic">y</span>如何随着<span class="italic">x</span>而变,这个趋势是通过求导和微分来实现的。</p> 
<h3 class="thirdTitle" id="bw34"><a >2.2.1 连续性是求导的前提条件</a></h3> 
<p class="content">连续性是函数的性质之一,它是可以对函数求导的前提条件。</p> 
<p class="content">具有连续性的函数,<span class="italic">y</span>值随<span class="italic">x</span>值的变化是连贯不间断的。并不是所有函数都具有连续性,像上面提到的阶跃函数从-1到1的跃迁明显就不具有连续性。</p> 
<p class="content">然而,有连续性的函数对于机器学习来说至关重要。因为机器学习的过程总体来说是对趋势和函数的变化规律的学习。失去了连续性,趋势和变化的规律也就难以用下面所要介绍的方法寻找了。</p> 
<h3 class="thirdTitle" id="bw35"><a >2.2.2 通过求导发现y如何随x而变</a></h3> 
<p class="content"><span class="bold">导数</span>(derivative)是定义在连续函数的基础之上的。想要对函数求导,函数至少要有一段是连续的。导数的这个“导”字命名得好,导,是引导,是导航,它与函数上连续两个点之间的变化趋势,也就是与变化的方向相关。</p> 
<p class="content">看下面这张图,在一段连续函数的两个点<span class="italic">A</span><span class="italic">B</span>之间,<span class="italic">y</span>值是怎么从<span class="italic">A</span>点逐渐过渡到<span class="italic">B</span>点的?是因为<span class="italic">x</span>的变化,<span class="italic">y</span>也随之发生了变化,这个变化记作d<span class="italic">x</span>,d<span class="italic">y</span></p> 
<p class="content">为了演示得比较清楚,<span class="italic">A</span><span class="italic">B</span>两点离得比较远,通过一条割线,就可以把d<span class="italic">x</span>,d<span class="italic">y</span>割出来。这个割线给出的方向,就是从<span class="italic">A</span>点到<span class="italic">B</span>点的变化,也就是割线的斜率。初中数学讲过,直线的斜率就是它相对于横轴的倾斜程度,求法是d<span class="italic">y</span>/d<span class="italic">x</span>,也等价于从<span class="italic">A</span>点到<span class="italic">B</span>点的变化方向。</p> 
<div class="pic"> 
 <img src="http://csdn-ebook-resources.oss-cn-beijing.aliyuncs.com/images/b88b00f6ad14402ea66695d6809614da/figure-0070-0071.jpg"> 
 <p class="imgtitle"><span class="italic">x</span>变化,导致<span class="italic">y</span>随之发生了变化</p> 
</div> 
<p class="content">那么当<span class="italic">A</span>点和<span class="italic">B</span>点的距离越来越小,两个点无限接近,逼近极限的时候,在即将重合而又未重合的一刹那,割线就变成切线了,如下图所示。</p> 
<div class="pic"> 
 <img src="http://csdn-ebook-resources.oss-cn-beijing.aliyuncs.com/images/b88b00f6ad14402ea66695d6809614da/figure-0070-0072.jpg"> 
 <p class="imgtitle">对切点求导所得的值,就是切线的斜率</p> 
</div> 
<p class="content">而此时,对切点求导所得的值,就是切线的斜率。</p> 
<p class="content">■当斜率为正的时候,说明函数目前变化趋势是在上升。</p> 
<p class="content">■当斜率为负的时候,说明函数目前变化趋势是在下降。</p> 
<p class="content">■当斜率为0的时候,说明函数正处于全局或者局部的最低点,趋势即将发生改变。</p> 
<p class="content">总结一下:函数变化的趋势至少由两个点体现,即当<span class="italic">A</span>趋近于<span class="italic">B</span>的时候,求其变换的极限,这就是导数。导数的值和它附近的一小段连续函数有关。如果没有那么一段连续的函数,就无法计算其切线的斜率,函数在该点也就是不可导的。</p> 
<p class="content">通过求导,实现了以直代曲,也发现了<span class="italic">y</span>值随<span class="italic">x</span>值而变化的方向。引申到机器学习领域,通过导数就可以得到标签<span class="italic">y</span>随特征<span class="italic">x</span>而变化的方向。</p> 
<p class="content">导数是针对一个变量而言的函数变化趋向。而对于多元(即多变量)的函数,它关于其中一个变量的导数为偏导数,此时保持其他变量恒定。如果其中所有变量都允许变化,则称为全导数。</p> 
<p class="content_101"><img alt="" class="h-pic" src="http://csdn-ebook-resources.oss-cn-beijing.aliyuncs.com/images/b88b00f6ad14402ea66695d6809614da/figure-0071-0073.jpg">咖哥发言</p> 
<p class="content">我们经常听说<span class="italic">n</span><span class="italic">n</span>次方程式,或者<span class="italic">n</span><span class="italic">n</span>次函数,其中的“元”,指的是自变量<span class="italic">x</span>的个数;其中的“次”,指的是<span class="italic">x</span>的指数的最大值。</p> 
<p class="content">在微积分中,可微函数是指那些在定义域中所有点都存在导数的函数。</p> 
<div class="pic"> 
 <img src="http://csdn-ebook-resources.oss-cn-beijing.aliyuncs.com/images/b88b00f6ad14402ea66695d6809614da/figure-0071-0074.jpg"> 
 <p class="imgtitle">一个可微的二元函数</p> 
</div> 
<p class="content">右图所示为一个可微的二元函数(对应机器学习中特征轴是二维的情况),这时候对函数求导,切线就变成了切面。</p> 
<h3 class="thirdTitle" id="bw36"><a >2.2.3 凸函数有一个全局最低点</a></h3> 
<p class="content">凹凸性也是函数的性质之一(函数还有很多其他性质,如奇偶性、单调性、周期性等),在这里只说说什么是凸函数。凸函数的定义比较抽象,这里只通过函数图形从直观上去理解。首先,函数形状必须是连续的,而不是断续的。其次,函数平滑,只存在一个最低点,整个函数呈现碗状。而非凸函数,可能呈现各种形状,有很多个底部(机器学习里面叫作局部最低点)。下图所示的函数<span class="italic">f</span><span class="sub">1</span>就是一个凸函数,而函数<span class="italic">f</span><span class="sub">2</span>就不是一个凸函数。</p> 
<p class="content">在连续函数图像上的局部或者全局最低点对函数求导,导数值都为0。</p> 
<div class="pic"> 
 <img src="http://csdn-ebook-resources.oss-cn-beijing.aliyuncs.com/images/b88b00f6ad14402ea66695d6809614da/figure-0071-0075.jpg"> 
 <p class="imgtitle">凸函数和非凸函数</p> 
</div> 
<p class="content">为什么要特别讲这个凸函数呢?因为在机器学习的梯度下降过程中,只有凸函数能够确保下降到全局最低点。你们可能注意到我在上面的图像里面画了一个小球,凸函数的小球不管初始位置放在哪里,都可以<span class="bold">沿着导数给出的方向滚到最低点</span>;而在其他非凸函数中,小球就可能卡在半路,也就是那个叫作局部最低点的地方。在机器学习中,无法达到全局最低点是很不理想的情况(这是后话,暂且不讲解)。</p>