大家好,欢迎来到IT知识分享网。
梯度下降
梯度下降法(Gradient descent)是一个一阶最优化算法,就是让参数沿着损失函数负梯度的方向更新。迭代的步长,也就是学习率是事先给定的,如果负梯度的绝对值越大,这次更新的幅度也会越大,越接近极值点时,负梯度会越小,这时更新就会较慢。
牛顿法
牛顿法是一个二阶最优化算法,它将损失函数进行二阶展开,因此会涉及到二阶导对应的海森矩阵。它的更新速度很快,但计算复杂度较高,主要是要求解海森矩阵的逆。
另外,牛顿法不仅可以用来求解函数的极值问题,还可以用来求解方程的根,二者在本质上是一个问题,因为求解函数极值的思路是寻找导数为0的点,如果要求f(x)的极值,也就是求f’(x)=0的根了。
题
给定一个正数,不用开根符号求解这个数的开方根。
分析:换一个思路,题目就是给定y,要求解y-x^2=0的根,可以通过学习的方法来实现,那以x^2为预测值,y为实际值,最小化损失函数
L=(y-x^2)^2
对损失函数求导就可以得到每一步更新的量了,然后逐步更新即可。
下面是梯度下降和牛顿法对应的python代码:
def gradient_descent(y): x = 1 alpha = 0.001 # 注意学习率不能太大,否则会震荡甚至发散,啥,不信 ?!陷入死循环之后你会改回来的 deta = 1 count = 1 while abs(deta)>0.00001: deta = 4*x*(x2-y) x -= alpha * deta count += 1 return x,count def newton(y): x=1 deta = 1 # 牛顿法,求解方程的根不需要学习率,它会自动确定每一步的更新步长,细节可出门谷歌 count = 1 while abs(deta)>0.00001: fx = (y-x2)2 deta = 4*x*(x2-y) if not deta: break x -= fx/(deta) count += 1 return x,count res1, count1 = gradient_descent(16) res2, count2 = newton(16) print(res1, res2, count1,count2)
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/182102.html