吳恩達第一集筆記 梯度下降

2021-09-22 01:31:16 字數 2848 閱讀 5148

參考文章:

筆記:1.為什麼該點處的梯度向量是在該點處變化最大的方向

導數在某一點的值就是在該點處變化區間取無窮小的值,如下式:

以二維梯度舉例,梯度就是乙個二維向量,分別是x和y的偏導值,x的偏導值表示函式在x方向上變化率最大值,y的偏導值表示在y方向上變化率最大值,所以該向量就是表示在整個二維面上的最大值。(只這是我個人理解,具體推到可以參考這篇部落格

2.變數與引數的問題

或者更加習慣的表達方式;

雖然在這個回歸方程中,x和y是變數,我們通過輸入自變數x來**y,但是現在是在求解引數theta的過程,現在的問題是已經給你若干個訓練樣本,需要你求得引數theta,然後再根據theta進行**,所以現在可以看成是兩個theta是未知數,而x,y是已知數。

梯度下降演算法公式

在這個函式中,把j(theta)函式看成是關於theta的函式,目的是讓j(theta)取值最小,所以j(theta)函式就是那座山,通過theta引數來描述所在位置,如圖所示,不斷地經過迭代找到最低位置的theta值。 

3.將j(theta)和它的梯度矩陣化過程

#得到乙個m行1列的0矩陣

x1 = np.arange(1, m+1).reshape(m, 1)

#得到乙個m行1列的元素從1到m的矩陣

x = np.hstack((x0, x1))

#將x0和x1合併為m行2列的矩陣

# points y-coordinate

y = np.array([

3, 4, 5, 5, 2, 4, 7, 8, 11, 8, 12,

11, 13, 13, 16, 17, 18, 17, 19, 21

]).reshape(m, 1)

# the learning rate alpha.

alpha = 0.01

def error_function(theta, x, y):

'''error function j definition.'''

diff = np.dot(x, theta) - y

#np.dot()是將括號中的矩陣相乘

return (1./2*m) * np.dot(np.transpose(diff), diff)

#求得j(theta)

def gradient_function(theta, x, y):

'''gradient of the function j definition.'''

diff = np.dot(x, theta) - y

return (1./m) * np.dot(np.transpose(x), diff)

#求得梯度的值

def gradient_descent(x, y, alpha):

'''perform gradient descent.'''

theta = np.array([1, 1]).reshape(2, 1)

gradient = gradient_function(theta, x, y)

while not np.all(np.absolute(gradient) <= 1e-5):

theta = theta - alpha * gradient

gradient = gradient_function(theta, x, y)

return theta

optimal = gradient_descent(x, y, alpha)

print('optimal:', optimal)

print('error function:', error_function(optimal, x, y)[0,0])

4.正規方程法

以上介紹的都是梯度下降的迭代法計算引數的,還有一種可以直接通過矩陣運算就可以得到引數,其實原理與迭代法類似。

就是讓梯度等於0,當梯度等於0時,函式就可以得到乙個極值,這個極值所對應的引數theta就是我們需要的引數。

直接可以從上面迭代法的推導過程中得出:

所以可以直接通過矩陣運算就求出引數theta。

但是當x矩陣很大時xtx的逆需要計算非常多的時間,所以當x維數較大時最好使用迭代,維數較小時使用正規方程。

吳恩達機器學習筆記 梯度下降法

1 假設函式的引數更新要做到同時更新,即先將求得的引數放在統一的temp中,然後同時賦值給對應的引數w0,w1,w2,w3.2 特徵縮放和收斂速度問題 倘若,特徵向量中一些特徵值相差太大,就會導致代價函式特徵引數的函式曲線很密集,以至於需要多次迭代才能達到最小值。學習率 決定演算法收斂的速度,較大的...

吳恩達機器學習筆記 梯度下降演算法(3)

引言 上節介紹了特徵縮放,可以使梯度下降演算法效率更高,但是還沒有解決收斂問題,這節介紹的自動收斂測試就是解決收斂問題。為什麼要收斂測試?因為在梯度下降演算法中,值是一步一步逼近最佳的,而且j 和 的影象是u型,所以步幅就很重要,如果步幅過大可能會引起 值在最佳之間往返或者越來越遠的問題,所以要進行...

梯度下降 from 吳恩達的機器學習

梯度下降 用來求函式最小值的演算法,使用梯度下降演算法來求出代價函式的最小值。梯度下降思想是 開始時我們隨機選擇乙個引數的組合 計算代價函式,然後我們尋找下乙個能讓代價函式值下降最多的引數組合。我們持續這麼做直到到到乙個區域性最小值 local minimum 因為我們並沒有嘗試完所有的引數組合,所...