导数零点问题基础问题

最近浏览的课程
导数的基础知识
数学重点考点解析,樊老师总结的方法技巧,帮你快速掌握倒数的基础知识。
自主招生辅导专家,海淀区教研员,从教十余年,多年数学竞赛辅导经验。
樊兆春老师的微课
樊兆春老师的推荐课程
2000人正在学习您好,欢迎来到新东方
&&&&&&正文
高考数学导数知识点:基本求导法则及导数公式
来源:新东方网整理
&&& 新东方网整理高考数学知识点,本系列是高考数学导数知识点的复习资料,内容有导数公式及法则、导数四则基本运算、导数的应用、导数的概念、导数与函数的综合题、导数的历年真题、文科生导数复习题和导数的压轴题等,更多高考备考资料在新东方网高考频道:。
基本的求导发则及导数公式
(责任编辑:贾志超)
新东方网高考官方微信:新东方高考 (微信号:xdfgaokao)
最新高考热点资讯、高考报名信息、高考历年真题、高考热门课程,请扫一扫二维码,关注我们的官方微信!
知分选大学
北京天津河北河南山东山西内蒙古陕西辽宁吉林黑龙江上海江苏浙江安徽江西湖北湖南重庆四川贵州云南广东广西福建甘肃青海宁夏新疆西藏港澳台
说明:系统推荐的大学是依据往年数据计算所得,供广大考生填报志愿参考使用!
专题 & 院校库
新东方中学辅导专区
版权及免责声明
① 凡本网注明"稿件来源:新东方"的所有文字、图片和音视频稿件,版权均属新东方教育科技集团(含本网和新东方网)
所有,任何媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他任何方式复制、发表。已经本网协议授权的媒体、网站,在下载使用时必须注明"稿件来源:新东方",违者本网将依法追究法律责任。
② 本网未注明"稿件来源:新东方"的文/图等稿件均为转载稿,本网转载仅基于传递更多信息之目的,并不意味着赞同转载稿的观点或证实其内容的真实性。如其他媒体、网站或个人从本网下载使用,必须保留本网注明的"稿件来源",并自负版权等法律责任。如擅自篡改为"稿件来源:新东方",本网将依法追究法律责任。
③ 如本网转载稿涉及版权等问题,请作者见稿后在两周内速来电与新东方网联系,电话:010-。
请选择城市
请选择学校
请选择城市
请选择学校
请选择城市
高考实用工具机器学习中导数最优化方法(基础篇) - daniel-D - 博客园
熟悉机器学习的童鞋都知道,优化方法是其中一个非常重要的话题,最常见的情形就是利用目标函数的导数通过多次迭代来求解无约束最优化问题。实现简单,coding 方便,是训练模型的必备利器之一。这篇博客主要总结一下使用导数的最优化方法的几个基本方法,梳理梳理相关的数学知识,本人也是一边写一边学,如有问题,欢迎指正,共同学习,一起进步。
2. 几个数学概念
1) 梯度(一阶导数)
考虑一座在 (x1, x2) 点高度是 f(x1, x2) 的山。那么,某一点的梯度方向是在该点坡度最陡的方向,而梯度的大小告诉我们坡度到底有多陡。注意,梯度也可以告诉我们不在最快变化方向的其他方向的变化速度(二维情况下,按照梯度方向倾斜的圆在平面上投影成一个椭圆)。对于一个含有 n 个变量的标量函数,即函数输入一个 n 维 的向量,输出一个数值,梯度可以定义为:
2) Hesse 矩阵(二阶导数)
Hesse 矩阵常被应用于牛顿法解决的大规模优化问题(后面会介绍),主要形式如下:
当 f(x) 为二次函数时,梯度以及 Hesse 矩阵很容易求得。二次函数可以写成下列形式:
其中 A 是 n 阶对称矩阵,b 是 n 维列向量, c 是常数。f(x) 梯度是 Ax+b, Hesse 矩阵等于 A。
3) Jacobi 矩阵
Jacobi 矩阵实际上是向量值函数的梯度矩阵,假设F:Rn&Rm 是一个从n维欧氏空间转换到m维欧氏空间的函数。这个函数由m个实函数组成: 。这些函数的偏导数(如果存在)可以组成一个m行n列的矩阵(m by n),这就是所谓的雅可比矩阵:
a) 如果 f(x) 是一个标量函数,那么雅克比矩阵是一个向量,等于 f(x) 的梯度, Hesse 矩阵是一个二维矩阵。如果 f(x) 是一个向量值函数,那么Jacobi 矩阵是一个二维矩阵,Hesse 矩阵是一个三维矩阵。
b) 梯度是 Jacobian 矩阵的特例,梯度的 jacobian 矩阵就是 Hesse 矩阵(一阶偏导与二阶偏导的关系)。
3. 优化方法
1) Gradient Descent
Gradient descent 又叫 steepest descent,是利用一阶的梯度信息找到函数局部最优解的一种方法,也是机器学习里面最简单最常用的一种优化方法。Gradient descent 是 line search 方法中的一种,主要迭代公式如下:
其中,是第 k 次迭代我们选择移动的方向,在 steepest descent 中,移动的方向设定为梯度的负方向, 是第 k 次迭代用 line search 方法选择移动的距离,每次移动的距离系数可以相同,也可以不同,有时候我们也叫学习率(learning rate)。在数学上,移动的距离可以通过 line search 令导数为零找到该方向上的最小值,但是在实际编程的过程中,这样计算的代价太大,我们一般可以将它设定位一个常量。考虑一个包含三个变量的函数 ,计算梯度得到 。设定 learning rate = 1,算法代码如下:
# Code from Chapter 11 of Machine Learning: An Algorithmic Perspective
# by Stephen Marsland (http://seat.massey.ac.nz/personal/s.r.marsland/MLBook.html)
# Gradient Descent using steepest descent
from numpy import *
def Jacobian(x):
return array([x[0], 0.4*x[1], 1.2*x[2]])
def steepest(x0):
while i&iMax and Delta&10**(-5):
p = -Jacobian(x)
x = x + alpha*p
Delta = sum((x-xOld)**2)
print 'epoch', i, ':'
print x, '\n'
x0 = array([-2,2,-2])
steepest(x0)
Steepest gradient 方法得到的是局部最优解,如果目标函数是一个凸优化问题,那么局部最优解就是全局最优解,理想的优化效果如下图,值得注意一点的是,每一次迭代的移动方向都与出发点的等高线垂直:
需要指出的是,在某些情况下,最速下降法存在锯齿现象( zig-zagging)将会导致收敛速度变慢:
粗略来讲,在二次函数中,椭球面的形状受 hesse 矩阵的条件数影响,长轴与短轴对应矩阵的最小特征值和最大特征值的方向,其大小与特征值的平方根成反比,最大特征值与最小特征值相差越大,椭球面越扁,那么优化路径需要走很大的弯路,计算效率很低。
2) Newton's method
在最速下降法中,我们看到,该方法主要利用的是目标函数的局部性质,具有一定的&盲目性&。牛顿法则是利用局部的一阶和二阶偏导信息,推测整个目标函数的形状,进而可以求得出近似函数的全局最小值,然后将当前的最小值设定近似函数的最小值。相比最速下降法,牛顿法带有一定对全局的预测性,收敛性质也更优良。牛顿法的主要推导过程如下:
第一步,利用 Taylor 级数求得原目标函数的二阶近似:
第二步,把&x 看做自变量, 所有带有 x^k 的项看做常量,令一阶导数为 0 ,即可求近似函数的最小值:
第三步,将当前的最小值设定近似函数的最小值(或者乘以步长)。
与 1) 中优化问题相同,牛顿法的代码如下:
# Code from Chapter 11 of Machine Learning: An Algorithmic Perspective
# by Stephen Marsland (http://seat.massey.ac.nz/personal/s.r.marsland/MLBook.html)
# Gradient Descent using Newton's method
from numpy import *
def Jacobian(x):
return array([x[0], 0.4*x[1], 1.2*x[2]])
def Hessian(x):
return array([[1,0,0],[0,0.4,0],[0,0,1.2]])
def Newton(x0):
while i&iMax and Delta&10**(-5):
p = -dot(linalg.inv(Hessian(x)),Jacobian(x))
x = x + alpha*p
Delta = sum((x-xOld)**2)
x0 = array([-2,2,-2])
Newton(x0)
上面例子中由于目标函数是二次凸函数,Taylor 展开等于原函数,所以能一次就求出最优解。
牛顿法主要存在的问题是:
Hesse 矩阵不可逆时无法计算
矩阵的逆计算复杂为 n 的立方,当问题规模比较大时,计算量很大,解决的办法是采用拟牛顿法如 BFGS, L-BFGS, DFP, Broyden's Algorithm 进行近似。
如果初始值离局部极小值太远,Taylor 展开并不能对原函数进行良好的近似
3) Levenberg&Marquardt Algorithm
Levenberg&Marquardt algorithm 能结合以上两种优化方法的优点,并对两者的不足做出改进。与 line search 的方法不同,LMA 属于一种&信赖域法&(trust region),牛顿法实际上也可以看做一种信赖域法,即利用局部信息对函数进行建模近似,求取局部最小值。所谓的信赖域法,就是从初始点开始,先假设一个可以信赖的最大位移 s(牛顿法里面 s 为无穷大),然后在以当前点为中心,以 s 为半径的区域内,通过寻找目标函数的一个近似函数(二次的)的最优点,来求解得到真正的位移。在得到了位移之后,再计算目标函数值,如果其使目标函数值的下降满足了一定条件,那么就说明这个位移是可靠的,则继续按此规则迭代计算下去;如果其不能使目标函数值的下降满足一定的条件,则应减小信赖域的范围,再重新求解。
LMA 最早提出是用来解决最小二乘法曲线拟合的优化问题的,对于随机初始化的已知参数 beta, 求得的目标值为:
对拟合曲线函数进行一阶 Jacobi 矩阵的近似:
进而推测出 S 函数的周边信息:
位移是多少时得到 S 函数的最小值呢?通过几何的概念,当残差
垂直于 J 矩阵的 span 空间时, S 取得最小(至于为什么?请参考的最后一部分)
我们将这个公式略加修改,加入阻尼系数得到:
就是莱文贝格-马夸特方法。这种方法只计算了一阶偏导,而且不是目标函数的 Jacobia 矩阵,而是拟合函数的 Jacobia 矩阵。当
大的时候可信域小,这种算法会接近最速下降法,
小的时候可信域大,会接近高斯-牛顿方法。
算法过程如下:
给定一个初识值 x0
并且没有到达最大迭代次数时
算出移动向量
计算更新值:
计算目标函数真实减少量与预测减少量的比率
if ,接受更新值
else if ,说明近似效果很好,接受更新值,扩大可信域(即减小阻尼系数)
else: 目标函数在变大,拒绝更新值,减小可信域(即增加阻尼系数)
直到达到最大迭代次数
维基百科在介绍 Gradient descent 时用包含了细长峡谷的 Rosenbrock function
展示了 zig-zagging 锯齿现象:
用 LMA 优化效率如何。套用到我们之前 LMA 公式中,有:
代码如下:
LevenbergMarquardt.py
# Code from Chapter 11 of Machine Learning: An Algorithmic Perspective
# by Stephen Marsland (http://seat.massey.ac.nz/personal/s.r.marsland/MLBook.html)
# The Levenberg Marquardt algorithm
from numpy import *
def function(p):
r = array([10*(p[1]-p[0]**2),(1-p[0])])
fp = dot(transpose(r),r) #= 100*(p[1]-p[0]**2)**2 + (1-p[0])**2
J = (array([[-20*p[0],10],[-1,0]]))
grad = dot(transpose(J),transpose(r))
return fp,r,grad,J
def lm(p0,tol=10**(-5),maxits=100):
nvars=shape(p0)[0]
fp,r,grad,J = function(p)
e = sum(dot(transpose(r),r))
while nits&maxits and linalg.norm(grad)&tol:
fp,r,grad,J = function(p)
H=dot(transpose(J),J) + nu*eye(nvars)
pnew = zeros(shape(p))
while (p!=pnew).all() and nits2&maxits:
nits2 += 1
dp,resid,rank,s = linalg.lstsq(H,grad)
pnew = p - dp
fpnew,rnew,gradnew,Jnew = function(pnew)
enew = sum(dot(transpose(rnew),rnew))
rho = linalg.norm(dot(transpose(r),r)-dot(transpose(rnew),rnew))
rho /= linalg.norm(dot(transpose(grad),pnew-p))
update = 1
if rho&0.25:
update = 0
print fp, p, e, linalg.norm(grad), nu
p0 = array([-1.92,2])
大概 5 次迭代就可以得到最优解 (1, 1).
Levenberg&Marquardt algorithm 对局部极小值很敏感,维基百科举了一个二乘法曲线拟合的例子,当使用不同的初始值时,得到的结果差距很大,我这里也有 python 代码,就不细说了。
4) Conjugate Gradients
共轭梯度法也是优化模型经常经常要用到的一个方法,背后的数学公式和原理稍微复杂一些,光这一个优化方法就可以写一篇很长的博文了,所以这里并不打算详细讲解每一步的推导过程,只简单写一下算法的实现过程。与最速梯度下降的不同,共轭梯度的优点主要体现在选择搜索方向上。在了解共轭梯度法之前,我们首先简单了解一下共轭方向:
共轭方向和马氏距离的定义有类似之处,他们都考虑了全局的数据分布。如上图,d(1) 方向与二次函数的等值线相切,d(1) 的共轭方向 d(2) 则指向椭圆的中心。所以对于二维的二次函数,如果在两个共轭方向上进行一维搜索,经过两次迭代必然达到最小点。前面我们说过,等值线椭圆的形状由 Hesse 矩阵决定,那么,上图的两个方向关于 Hessen 矩阵正交,共轭方向的定义如下:
如果椭圆是一个正圆, Hessen 矩阵是一个单位矩阵,上面等价于欧几里得空间中的正交。
在优化过程中,如果我们确定了移动方向(GD:垂直于等值线,CG:共轭方向),然后在该方向上搜索极小值点(恰好与该处的等值线相切),然后移动到最小值点,重复以上过程,那么 Gradient Descent 和 Conjugate gradient descent 的优化过程可以用下图的绿线与红线表示:
讲了这么多,共轭梯度算法究竟是如何算的呢?
给定一个出发点 x0 和一个停止参数 e, 第一次移动方向为最速下降方向:
用 Newton-Raphson 迭代计算移动距离,以便在该搜索方向移动到极小,公式就不写了,具体思路就是利用一阶梯度的信息向极小值点跳跃搜索
移动当前的优化解 x:
用 Gram-Schmidt 方法构造下一个共轭方向,即
的确定公式又可以分为 FR 方法和 PR 和 HS 等。
在很多的资料中,介绍共轭梯度法都举了一个求线性方程组 Ax = b 近似解的例子,实际上就相当于这里所说的
还是用最开始的目标函数 && &来编写共轭梯度法的优化代码:
# Code from Chapter 11 of Machine Learning: An Algorithmic Perspective
# by Stephen Marsland (http://seat.massey.ac.nz/personal/s.r.marsland/MLBook.html)
# The conjugate gradients algorithm
from numpy import *
def Jacobian(x):
#return array([.4*x[0],2*x[1]])
return array([x[0], 0.4*x[1], 1.2*x[2]])
def Hessian(x):
#return array([[.2,0],[0,1]])
return array([[1,0,0],[0,0.4,0],[0,0,1.2]])
def CG(x0):
r = -Jacobian(x0)
betaTop = dot(r.transpose(),r)
beta0 = betaTop
epsilon = 10**(-2)
# Restart every nDim iterations
nRestart = shape(x0)[0]
while i & iMax and betaTop & epsilon**2*beta0:
dp = dot(p.transpose(),p)
alpha = (epsilon+1)**2
# Newton-Raphson iteration
while j & jMax and alpha**2 * dp & epsilon**2:
# Line search
alpha = -dot(Jacobian(x).transpose(),p) / (dot(p.transpose(),dot(Hessian(x),p)))
print "N-R",x, alpha, p
x = x + alpha * p
# Now construct beta
r = -Jacobian(x)
print "r: ", r
betaBottom = betaTop
betaTop = dot(r.transpose(),r)
beta = betaTop/betaBottom
print "Beta: ",beta
# Update the estimate
p = r + beta*p
print "p: ",p
print "----"
if k==nRestart or dot(r.transpose(),p) &= 0:
print "Restarting"
x0 = array([-2,2,-2])
参考资料:
[1] Machine Learning: An Algorithmic Perspective, chapter 11[2] 最优化理论与算法(第2版),陈宝林[3] wikipedia查看: 380|回复: 7
关于卷积导数理解的一个问题??
这是陆教授以前的一个帖子。见橙色椭圆部分,是否可以理解为f(x)与g(x)的导数的卷积,即f(x)*g`(x)??
卷积的导数.GIF (64.94 KB, 下载次数: 0)
22:47 上传
这个论坛的图片显示也是扁的,而且点击图片弹出一个框,而不是一个单独网页。该图片框好像用鼠标很难控制,还会不断移动。这是什么问题?怎样调整?
这个论坛的图片显示也是扁的,而且点击图片弹出一个框,而不是一个单独网页。该图片框好像用鼠标很难控制, ...
发一个跟帖后图片显示就正常了,真奇怪。
本帖最后由 luyuanhong 于
12:51 编辑
可以理解为 f(x) 与 g'(x) 的卷积。 下面是我过去在《数学中国》发表过的帖子:
卷积的导数等于什么(续).GIF (40.32 KB, 下载次数: 0)
12:49 上传
f(x-t)关于x的偏导等于先求f(x)的导数再用x-t代入.GIF (17.62 KB, 下载次数: 0)
12:50 上传
陆教授,我发现您的公式当存在某些特殊函数时可能不成立。例如:
设f(x)=e^x,g(x)=u(x)为单位阶跃函数,于是g`(x)=δ(x)为单位冲击函数。
f(x)*g(x)=e^x-1,[f(x)*g(x)]`=e^x;
f(x)g(0)+f(x)*g`(x)=e^x+e^x,显然左右并不相等。
而且即使认为g(0)=(g(0-)+g(0+))/2=(0+1)/2=0.5,等式仍不成立。换言之,即使我们能用某种初等函数模拟阶跃函数,使之连续光滑甚至有无穷多阶的导数,由于该初等函数在0点的值一定是0前和0后的中值,因此也不能使等式成立。
除非我们将您的公式中g(0)理解为g(0-),由于g(0-)=0,这样等式才成立。
请问陆教授:是我的计算错了,或者理解错了,还是存在u(x)等特殊函数时,有其他形式的公式??
在非标准分析中,对于u(x),δ(x),公式[f(x)*g(x)]'=f(x)g(0) f(x)*g'(x)也成立.GIF (37.33 KB, 下载次数: 0)
23:10 上传
(26.52 KB, 下载次数: 1)
23:10 上传
点击文件名下载附件
首先感谢陆教授详细耐心的解答!
不过,我觉得这个问题并不一定要用非标准分析才能理解。事实上,当我们用某些初等函数来模拟冲击函数δ(x)时,这个波形一定是关于y轴对称的,由此(0,+∞)必然只有1/2的积分面积,所以卷积f(x)*g`(x)=e^x*δ(x)/2=0.5e^x。而初等函数模拟的阶跃函数u(x)必有u(0)=1/2,故f(x)g(0)+f(x)*g`(x)=0.5e^x+0.5e^x=e^x。这样就完全对上了。
陆教授认为以上理解是否正确?
本帖最后由 luyuanhong 于
00:52 编辑
首先,对于普通的初等函数来说,公式肯定是成立的,这是没有疑问的。
你在第 5 楼中的疑问是:对 δ(x) 这样的不属于初等函数的广义函数,公式是否也成立?
如果你用初等函数来模拟 δ(x) ,因为模拟的函数已经是普通的初等函数了,公式当然成立。
非标准分析的好处是,用含有无穷大量的函数来表达 δ(x) ,δ(x)&&还是真正的广义函数,
没有变成普通的初等函数,但另一方面,用无穷大量表达的 δ(x) 又可以像普通的初等函数
一样来处理,得到与普通的初等函数一样的处理结果。
Powered by关于张宇基础班和强化班讲解的一个导数问题_考研吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:1,912,157贴子:
关于张宇基础班和强化班讲解的一个导数问题收藏
同一个问题,为什么在基础班讲的是f(0)‘不存在,而在强化班讲的是存在,不知道有没有大神同样遇到
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或}

我要回帖

更多关于 高中数学导数基础习题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信