梯度下降,sgd~,adam,牛頓法,擬牛頓法
首先要理解,優化方法對誰優化?沒有說錯,我們是做機器學習或者深度學習,在程式中是通過不斷迭代完成的,那麼,學習什麼呢?是x?不對,因為x其實是我們的資料,我們是想通過x求得y也就是根據我們的已有的資料求出對應對映下的結果,可能是個分類,也可能是個回歸,其實我們要的就是建立這個對映的關係,怎麼建立呢?就是通過引數矩陣w,無論是任何機器學習演算法中,還是在深度學習演算法中,我們都是為了求這個w矩陣。
因此要優化損失函式,使損失函式最小化,優化的引數是什麼?對嘍,要優化的引數是引數矩陣w,因此在梯度下降,adam,牛頓法,擬牛頓法中,優化的引數都是w,換一種好理解的說法就是梯度下降那個圖,牛頓法那個切線的圖,橫座標x其實是引數矩陣w。
#下面的損失函式均用f(x)表示,δf(x)為損失函式對引數矩陣求導。
梯度下降迭代過程:
初始化引數矩陣w,設定學習率alpha
根據公式w = w - alpha * δf(x)
直至滿足停止條件
sgd迭代過程:
sgd隨機梯度下降,每次迭代只選一條x樣本
初始化引數矩陣w,設定學習率lapha
更具公式w = w- alpha * δf(x)進行跟新w
只至滿是停止條件
adam迭代過程:
adam有幾個引數,m,belta1,n,belta2,ee(乙個很小的數)
初始化引數矩陣w,初始化m,belta1,n,belta2
更新m = belta1 * m + (1 - belta1 ) * δf(x)
更新n = belta2 * n + (1 0 belta2) * δf(x)
計算m_ = m / (1 - belta1 ** t)
計算n_ = n /(1 - belta2 ** t)
更新引數矩陣
w = w - alpha * m_ /(np.sqrt(n_) + ee
返回第二步直至滿足截至條件為止
牛頓法:
首先理解牛頓法是泰勒一節展開的應用,牛頓法和擬牛頓法優化目標是使損失函式為0,也就是在找損失函式為0的路上越走越遠~~~,而梯度下降的優化目標是使損失函式最小話,也就是在找算函式最小值點的路上越走越遠~~~。這裡可以看到,其實梯度下降的優化目標更接近真實情況,因為不是所有的損失函式都有零點,但是look the other side of the road,找損失函式為零的點也沒什麼大問題,我是在找這個的路上,而不是非要找這個點。
先寫下損失函式的1階泰勒展開:
f(x) = f(x0) + f』(x0)*(x - x0)
如果看了上面那段話,大家應該知道,我們的目標是什麼?f(x) == 0.因此損失函式的一階泰勒展開可以寫成
0 = f(x0) + f』(x0)(x - x0)
變形求x(這裡的x就是引數矩陣,而且是x0,下乙個迭代的值)得x = x0 - f(x0) / f』(x0)
這個就是我們牛頓法更新權重矩陣的公式。下面總結牛頓法迭代過程
初始化引數矩陣w
更新w = w - f(x)/δf(x)
直至滿足截至條件
擬牛頓法
擬牛頓法是考慮損失函式的二階泰勒展開
f(x) = f(x0) + f』(x0)* ( x - x0) + f』2(x0) * (x - x0)2/2
這裡我們再說下泰勒展開,什麼是泰勒展開?除了上面這個公式大家還有什麼其他的理解?簡單點的,就是乙個函式的泰勒展開等於這個函式(廢話)。再回過頭想我們的優化目標是什麼?沒錯是損失函式為0,所以令f(x) == 0,公式變形為
0 = f(x0) + f』(x0)* ( x - x0) + f』2(x0) * (x - x0)2/2
求目標為0的函式的引數的最小值,也就是對這個公式右面的公式對x求導(再次明確,則例的x0是本時刻的求出的w值,x是根據本時刻要求的下一時刻的w值)
變形中~~~~~~~~~~
x = x0 - f』(x0) / f』』(x0)
理論上來說,到這一步,我們就可以更新迭代求w矩陣了。but~~~~·0 ·
這裡的f』』(x0)是乙個二階求導後的矩陣,而且是在分母,也就是還要求逆(hassion矩陣~費勁)如果直接求,計算量太大,其實就是基本算不出來。所有我們需要找乙個矩陣u---->f』』(x0)來逼近這個hassion矩陣,這裡便有了dfp以及bfgs演算法,都是為了找這麼乙個逼近f』』(x0)的矩陣u。我們不管,這麼低階的應用的時候直接來就行了。下面寫下擬牛頓法的更新迭代過程。
初始化引數矩陣w
更新w直至滿足截至條件為止。
最優化方法總結
1.座標下降法 coordinate descent method 對於乙個最優化問題 min x f x 1,x 2,x n 其求解過程如下 loop until convergence for i 1 n x i arg min x i f x 1,x 2,x i 1,x i,x i 1,x n...
pandas優化方法的總結
一般情況下,我們肯定不能用for 迴圈的方式來處理資料 再不然用df.itertuples 或 df.iterrows,來實現迴圈遍歷,利用pandas操作的最好的方式還是向量化操作,這樣才能最大化的發揮pandas的優勢 處理最好的採用向量化的操作方式之外,在pandas的官方文件中,也介紹了如何...
搜尋引擎優化 常用SEO優化方法總結
外部速度監測 1 監測伺服器與區域網的速度開啟伺服器的速度是多少,如果很慢要麼就更換伺服器,要麼就增加伺服器頻寬或者盡量少用動態ip。2 監測 開啟速度,盡量找些不同地方的ip進行測試 速度。內部速度監測 2 js css樣式表定義每個框架的尺寸 顏色等是否有不合理的地方。3 有沒有啟用gzip壓縮...