梯度下降過程向量化

2021-08-22 08:34:00 字數 2766 閱讀 4142

關於θ更新過程的vectorization,andrew ng的課程中只是一帶而過,沒有具體的講解。

《機器學習實戰》連cost函式及求梯度等都沒有說明,所以更不可能說明vectorization了。但是,其中給出的實現**確是實現了vectorization的,圖4所示**的32行中weights(也就是θ)的更新只用了一行**,直接通過矩陣或者向量計算更新,沒有用for迴圈,說明確實實現了vectorization,具體**下一章分析。

文獻[3]中也提到了vectorization,但是也是比較粗略,很簡單的給出vectorization的結果為:

且不論該更新公式正確與否,這裡的σ(...)是乙個求和的過程,顯然需要乙個for語句迴圈m次,所以根本沒有完全的實現vectorization,不像《機器學習實戰》的**中一條語句就可以完成θ的更新。

下面說明一下我理解《機器學習實戰》中**實現的vectorization過程。

約定訓練資料的矩陣形式如下,x的每一行為一條訓練樣本,而每一列為不同的特稱取值:

約定待求的引數θ的矩陣形式為:

先求x.θ並記為a

hθ(x)-y並記為e

g(a)的引數a為一列向量,所以實現g函式時要支援列向量作為引數,並返回列向量。由上式可知hθ(x)-y可以由g(a)-y一次計算求得。

再來看一下(15)式的θ更新過程,當j=0時:

同樣的可以寫出θj

綜合起來就是:

綜上所述,vectorization後θ更新的步驟如下:

(1)求a=x.θ

(2)求e=g(a)-y

(3)求θ:=θ-α.x'.e,x'表示矩陣x的轉置。

也可以綜合起來寫成:

前面已經提到過:1/m是可以省略的。

圖4中是《機器學習實戰》中給出的部分實現**。

圖4sigmoid函式就是前文中的g(z)函式,引數inx可以是向量,因為程式中使用了python的numpy。

gradascent函式是梯度上公升的實現函式,引數datamatin和classlabels為訓練資料,23和24行對訓練資料做了處理,轉換成numpy的矩陣型別,同時將橫向量的classlabels轉換成列向量labelmat,此時的datamatrix和labelmat就是(18)式中的xy。alpha為學習步長,maxcycles為迭代次數。weights為n維(等於x的列數)列向量,就是(19)式中的θ

29行的for迴圈將更新θ的過程迭代maxcycles次,每迴圈一次更新一次。對比3.4節最後總結的向量化的θ更新步驟,30行相當於求了a=x.θg(a),31行相當於求了e=g(a)-y,32行相當於求θ:=θ-α.x'.e。所以這三行**實際上與向量化的θ更新步驟是完全一致的。

【參考文獻】

[1]《機器學習實戰》——【美】peter harington

[2] stanford機器學習公開課(

[3] 

[4] 

[5] 

[6] 

梯度下降法的向量化及隨機梯度下降法

此結果是乙個一行n 1列的行向量,我們再將這個結果整體進行一下轉置 當資料樣本比較大時,採用隨機梯度下降法既簡單又高效。將梯度的式子設想一下每一次都隨機取出乙個樣本i,在隨機梯度下降法中,樣本的學習率是乙個非常重要的乙個引數,如果學習率一直取乙個固定值,很有可能隨機梯度下降法已經來到最小值中心左右的...

梯度下降的向量化和資料標準化

將梯度式寫為 此處,x0 i 1。若將上式轉置,則可分解為 或者直接寫為下式 由此,可對我們之前的 進行修改,如下 def dj theta,x b,y res np.empty len theta 對每個 theta 求導,所以開闢 len theta 個空間 res 0 np.sum x b.d...

文字向量化

table of contents概述 word2vec nnlm c wcbow and skip gram doc2vec str2vec 文字表示是自然語言處理中的基礎工作,文字表示的好壞直接影響到整個自然語言處理系統的效能。文字向量化就是將文字表示成一系列能夠表達文字語義的向量,是文字表示的...