梯度下降(gradient descent)是最基礎的優化演算法。在微積分中,梯度表示函式增長速度最快的方向。在機器學習問題中,我們的目標常常是求極大值或者極小值。梯度下降法就是沿著梯度的不斷走的方法,當求極小值時沿與梯度相反的方向
用通俗的話說,梯度下降法就像下山,我們會沿著當前最快下降的道路走,直至走至山底(當然這條路未必是最快到達山底的)。
如圖,在乙個求極小值的問題中,我們會沿著梯度不斷往下走,直至走至乙個最低點(區域性最優)。
先從簡單的一元二次方程開始說起。我們擁有乙個函式,
我們使用matplotlib畫出這個函式的圖
我們想求得這個函式的最小值,從圖中可以得到,顯然是在-1處。
那麼梯度下降法會如何求得這個過程呢?
目標函式以及它的導數
f = lambda x:x**2+2*x+1
g = lambda x: 2*x+2
梯度下降法的python表示
def
gd(x_start,step,g,itera):
#x_start 起始點
#step 步長
#g 梯度
#itera 迭代次數
x = x_start
for i in range(itera):
grad = g(x)
x -= grad*step
print("epoch:grad=,x=".format(i,grad,x))
if abs(grad)<1e-6:
break
return x
epoch29:grad=0.01856910058928074,x=-0.9925723597642877
最終答案離-1的舉例已經很小了
# 引數的選擇
當我們把step的值使用1.1代入時,迭代次數不變會怎麼樣呢?
>>>gd(5,1.1,g,30)
epoch29:grad=-2373.7631379977083,x=1423.2578827986254
你會發現x會離目標越來越遠
當我們的step值使用0.0001代入時,迭代次數不變時的答案又是怎麼樣的呢
你會發現他雖然沿著梯度不斷向下走但在總體看來幾乎沒怎麼變·
當你把迭代次數增加到一定大時,它仍然能達到最低點。
當步長過長時,有可能會使梯度下降法無法收斂。
當步長小時,適當增加迭代次數,仍能達到最優解。但是過多的迭代次數會增加訓練的時間。
梯度下降是門手藝活……
梯度下降法的步長到底怎麼確定?
梯度下降演算法的python實現
import sys training data set each element in x represents x0,x1,x2 x 1,0.3 1,1.3 1,2.3 1,3.2 1,4.4 y i is the output of y theta0 x 0 theta1 x 1 theta2...
Python 梯度下降
code import random import numpy as np import matplotlib.pyplot as plt 最速下降法 rosenbrock函式 函式 f x 100 x 2 x 1 2 2 1 x 1 2 梯度 g x 400 x 2 x 1 2 x 1 2 1 x...
梯度下降原理及Python實現
梯度下降演算法是乙個很基本的演算法,在機器學習和優化中有著非常重要的作用,本文首先介紹了梯度下降的基本概念,然後使用python實現了乙個基本的梯度下降演算法。梯度下降有很多的變種,本文只介紹最基礎的梯度下降,也就是批梯度下降。實際應用例子就不詳細說了,網上關於梯度下降的應用例子很多,最多的就是ng...