在上一节中,我们回顾了极限,它为精确地定义瞬时变化率提供了数学工具。现在,我们来使用极限正式定义导数。
设想有一个函数,比如f(x),它代表了你想要理解或优化的某种事物,比如机器学习 (machine learning)模型基于单个参数 (parameter)x的成本。你关心的是当输入x发生微小变动时,输出f(x)如何变化。
从平均变化率到瞬时变化率
考虑函数y=f(x)图上的两个点:一个在x处,另一个在附近的x+h处。对应的y值分别为f(x)和f(x+h)。x的变化量是(x+h)−x=h,y的变化量是f(x+h)−f(x)。
这两个点之间的平均变化率是连接它们的直线的斜率(称为割线):
平均变化率=x的变化量y的变化量=hf(x+h)−f(x)
这表明在从x到x+h的区间内,f平均每个单位x变化量对应改变了多少。
那么,如果我们想知道在x点精确地变化率是多少呢?我们可以通过让区间h变得越来越小来找到这个瞬时变化率,这样第二个点就越来越接近第一个点。这就是极限的作用。我们取平均变化率当h趋近于零时的极限。
导数的定义
函数f(x)关于x的导数,记作f′(x)(读作“f撇x”)或dxdy(莱布尼茨记号,读作“dee y dee x”),定义为函数在x点的瞬时变化率。形式上,它是这个极限:
f′(x)=limh→0hf(x+h)−f(x)
如果此极限存在,我们就说函数f在x处是可微的。f′(a)的值给出了函数f(x)在特定点x=a处变化的精确速率。
几何意义:切线的斜率
从几何上看,导数f′(a)表示函数y=f(x)在点(a,f(a))处切线的斜率。切线是恰好“接触”曲线在该点,并且在该点与曲线方向相同的直线。
当h→0时,连接(x,f(x))和(x+h,f(x+h))的割线会旋转并接近在(x,f(x))处的切线。这条极限直线的斜率就是导数。
随着第二个点(由h控制)越来越接近曲线f(x)=x2上的第一个点(1,1),割线的斜率趋近于在x=1处切线的斜率。切线的斜率就是导数f′(1)。对于f(x)=x2,有f′(x)=2x,所以f′(1)=2。
为什么这个定义对机器学习 (machine learning)有益处?
在机器学习中,我们经常使用成本函数(或损失函数 (loss function))来衡量模型表现得有多差。假设J(w)是成本函数,w表示模型中的一个参数 (parameter)(比如权重 (weight))。我们希望调整w来最小化J(w)。
导数dwdJ告诉我们成本J对参数w的微小变化有多敏感。
- 如果dwdJ是正数,稍微增加w会使成本增加。要降低成本,我们应该减小w。
- 如果dwdJ是负数,稍微增加w会使成本降低。要降低成本,我们应该增加w。
- dwdJ的大小告诉我们成本函数在该点有多陡峭。更大的大小表明w微小变化会带来更大的成本变化。
这种关于变化方向和大小的信息,正是梯度下降 (gradient descent)等优化算法迭代更新模型参数并找到最小成本所使用的。因此,理解导数对于理解机器学习模型如何训练是十分必要的。
在接下来的部分中,我们将学习计算导数的实用规则,而无需每次都回到极限定义。我们还将研究如何使用导数来寻找函数的最小值点和最大值点。