3. 机器学习中为什么需要梯度下降?梯度下降算法缺点?_浅谈随机梯度下降amp;小批量梯度下降...
機器學習三要素
上次的報告中,我們介紹了一種用于求解模型參數的迭代算法——梯度下降法。首先需要明確一點,即“梯度下降算法”在一個完整的統計學習流程中,屬于什么?根據《統計學習方法》這本書,統計學習一般有三個要素,即模型、策略和算法(目前以筆者的淺見,統計學習和機器學習沒有太大的差別)。
模型
所謂模型,我們可以簡單理解為數據的組織形式。換句話說,就是輸入數據與輸出數據之間可能存在的關系。機器學習的主要任務是預測,根據預測值的取值情況,我們可以分為“分類任務”(預測值是離散的),“回歸任務”(預測值是連續的),“聚類任務”(預測值是空白的,對輸入數據進行自動分組)。
因此,我們分別可以提出相應的模型,即分類模型,回歸模型和聚類模型。繼續向下細分,分類模型有二分類模型,多分類模型;回歸模型有線性回歸,非線性回歸模型;聚類模型還有Kmeans,DBSCAN等……
當我們拋開這些術語,回到初始的情況,其實就是輸入數據,經過某種機制的加工,得到了預測輸出數據。這個加工數據的機制,就是所謂的模型。上次提到的一元線性回歸模型,,其實就是“”經過“”的處理,得到了“”。
策略
策略,可以簡單理解為模型的評價標準。例如同樣是1000組的數據,我們選擇什么樣的模型更能表達它們之間的關系呢?線性模型,還是二次函數模型2?
這里,我們就要引入某種準則,對每種模型進行評價。通常,我們把損失函數作為我們的評價函數。常用的損失函數有0-1損失函數、平方損失函數、絕對損失函數,對數損失函數等等,在上次的分析報告中,我們使用的就是平方損失函數,也就是我們想要最小化的目標函數。
顯然,當模型中的參數取值不同,損失函數的值也不同。我們便可以通過損失函數的值,來衡量不同模型的優劣。這便是所謂的策略。
當然,對于機器學習的模型而言,評價其能力的最重要的指標應該是它的泛化能力,也就是預測未知數據的能力,但歸根到底,還是通過選擇合適的損失函數或者策略函數,來量化這種能力。
算法
最后,就是算法啦。無論是我們已經確定了某種模型,想要求解參數。亦或是我們希望比較兩種或多種模型的優劣,我們都需要通過算法,去找到損失函數的全局最小值,以確定相關的參數,以及模型的最優擬合效果。對于參數的求解,就是算法需要做到的。
所以說到這里,我們就知道算法的重要性了,即使你提出了好的模型和好的策略,但如果你找不到合適的算法去求解你的模型參數,那么你的模型就無法發揮功能,最終也只是一文不值。現在十分火熱的神經網絡模型,曾經一度處于低谷狀態,就是因為當時沒有找到合適的算法對模型進行求解。而它的復蘇,也是源于某位數學家提出了“每層局部最優最終達到全局近似最優”的想法并取得了很不錯的效果。
上次提到的梯度下降算法,就是目前業界最為常用的機器學習優化算法之一。同時,經典梯度下降算法還衍生出一系列算法,例如隨機梯度下降、小批量梯度下降、動量梯度下降法等等。此外,還有拉格朗日乘數法、Adam算法、牛頓法及相關延申、分治法及相關延申等等。啟發式算法也是一類不錯的算法,例如模擬退火、遺傳算法、粒子群優化等等,針對某些問題也會有很不錯的效果。
隨機梯度下降
下面進入正題,隨機梯度下降算法。顯而易見,隨機梯度算法是引入了隨機性的梯度下降算法。如果理解了經典的梯度下降算法,隨機梯度下降就很簡單啦。
在經典的隨機梯度下降算法中,我們的迭代下降公式是
以一元線性回歸的目標函數為例,其梯度可以表達為顯然我們可以看到,這里的梯度計算,使用了所有的樣本數據。倘若我們的數據集有1000組數據,那就需要計算1000次才可以得到梯度,倘若數據集有1億組數據,就需要計算一億次,其時間復雜度是O(n)。當我們面對的樣本數據較多時,毫無疑問,模型的求解,學習一次的過程是很浪費時間的。因此,我們可以在所有的樣本數據中選擇隨機的一個實例,用這個實例所包含的數據計算我們的“梯度”。此時的梯度為
其中是一個隨機選中的樣本。到了這里,可能會存在一定的疑問,因為對于
這個目標函數,其梯度并不是既然如此,這個方向還是不是可以使函數值下降的方向?只能說,對于一次迭代而言,不一定,但是站在宏觀的角度去考慮,最后還是很有機會收斂到近似最優解的。事實上,我們的目標函數可以寫成
所以我們的梯度則是這個時候,我們的優化目標是所有樣本的損失函數之和,所以在梯度下降時,自然而然是朝著使總的偏差縮小的方向去移動的。而對于隨機梯度下降,我們每一步迭代的優化目標函數不是始終不變的,其變化的范圍就是在第步,我們隨機地選中了作為我們的優化目標,其梯度便是而在第步,我們的優化目標可能就變成了此時,梯度也自然變成了顯然,隨機梯度下降迭代過程中,我們考慮的下降方向并不是全局下降方向,而是使得某個隨機選中的樣本的損失函數下降的方向。在一步迭代中,這種局部樣本的下降未必會導致全局損失的下降,但是當迭代次數足夠的時候,絕大部分樣本都會被考慮到,最終一步一步走向全局最優解。所以,隨機梯度下降相對于梯度下降而言,其根本區別在于每一步迭代時需要優化的目標函數不同。對于經典的梯度下降,其每一步的目標函數(損失函數)是一樣的,即所有樣本的(平均)損失函數之和。而對于隨機梯度下降而言,其每一步的目標函數是被隨機選中的某個樣本的損失函數,并不是一直不變的。
下面這個視頻可以直觀的感受一下隨機梯度下降。
上面的每個小球,我們可以將其理解為隨機梯度下降過程中由于隨機性而帶來的迭代情況的分支。正是由于這種隨機性的存在,每個球可以較為自由地選擇其運動方向,有些就停在某個位置,有些則一路向下。當迭代的次數足夠多時,總會有某個球的路徑十分順暢,最終到達全局最優解的附近。我們甚至可以猜測,隨機梯度下降相對于經典梯度下降,其逃離局部最優的能力更強。因為一旦到達了某個樣本的局部最優,隨著目標函數的更換,很可能不再是另一個樣本的局部最優,迭代就可以繼續進行。
當然,隨機梯度下降的缺點也是存在的,即它很可能無法收斂到全局最優解。什么是全局最優,是達到最小嘛?還是每一個都無法繼續下降?一般而言,前者可能更容易衡量一些,我們也更偏向于使用總體的最優作為全局最優,而非每一個樣本的最優。而對于隨機梯度下降,即使我們已經達到了總體全局最優,對于某些樣本而言,其可能依然可以繼續下降,所以一旦選中了這些樣本,我們就要偏離全局最優點了。所以隨機梯度下降最終的收斂性確實值得考慮。
但總的來說,隨機梯度下降還是很不錯的,特別是對于大樣本的處理情況,每一次迭代中O(1)的計算開銷無疑會輕松很多,至于最終的收斂問題,則要根據迭代次數,終止準則等進行一個衡量取舍啦。
代碼基本上是差不多的,只是參數的選擇上要多花時間調整了……
clear;clc;load?a1data.mat
a=[0;0];%?初始值,a(1)=a;???a(2)=b;?y=ax+b
alpha=1e-5;?%學習率?alpha
eps=1e-12;?%終止準則?eps
[q,s,num]=SGD(a,x,y,alpha,eps);?%q是最終的解,s的均方誤差的變化向量,num是迭代次數
figure(1);
plot(1:length(s),s);
disp("迭代了"+num+"次"+"???收斂結果是"+q)
title("均方誤差下降曲線")
xlabel("迭代次數")
ylabel("均方誤差")
y1=q(1)*x+q(2);
figure(2);
plot(x,y,'or',x,y1,'b');
function?[q,s,num,daa]=SGD(a,x,y,alpha,eps)
i=1;?%迭代序號
s=1:10;??%MSE向量
num=0;?%迭代次數
q=[inf;inf];?%返回結果的初值
daa=1:10;?%?梯度對a的分量向量
while?1
????disp(i);
????ch=unidrnd(length(x));
????da=2*x(ch)*(a(1)*x(ch)+a(2)-y(ch));
????db=2*(a(1)*x(ch)+a(2)-y(ch));%梯度對b的分量
????a1=a-alpha*[da;db];?%迭代格式
????%disp(a1);
????num=i;?
????s(i)=sum((a1(1)*x+a1(2)-y).^2)/length(x);?%計算MSE
????disp(s(i));
????if?i>500?&&?abs(s(i)-s(i-1))????????q=a1;
????????break;
????end
????if?i>200000000
????????disp("迭代了20000次也沒有收斂,停下來改一下最大迭代次數試試")
????????break;
????end
????a=a1;
????daa(i)=da;
????i=i+1;
end
end?
由于一次只計算一個樣本的損失函數,所以其迭代次數肯定更多啦。但是除以樣本數目1000,其計算開銷也就相當于經典梯度下降迭代了200次。而之前的梯度下降700多次才收斂。當然啦,經典梯度下降更加穩定,隨機梯度下降的結果相對而言還是差了點。
最優結果:
確實有些差距,如果多花點時間調節參數,修改修改終止準則,結果應該會好些。
小批量梯度下降
我們現在了解了經典的梯度下降和隨機梯度下降,并且知道其不同之處主要在于迭代過程中目標函數選擇的不同。同時,我們知道經典梯度下降雖然穩定性比較強,但是大樣本情況下迭代速度較慢;隨機梯度下降雖然每一步迭代計算較快,但是其穩定性不太好,而且實際使用中,參數的調整往往更加麻煩。
所以,為了協調穩定性和速度,小批量梯度下降應運而生啦。其實很簡單,小批量梯度下降法和前面兩種梯度下降的主要區別就是每一步迭代過程中目標函數的選擇不同。小批量梯度下降是從個樣本中隨機且不重復地選擇個進行損失函數的求和
并將其作為每一步迭代過程中的目標函數。此時,迭代公式中的梯度也就變成了顯然,m=1時,小批量梯度下降就是隨機梯度下降,m=n時,小批量梯度下降就是經典梯度下降。同時,我們也把經典的梯度下降方法稱之為全批量梯度下降。這里的m一般稱之為批量尺寸,其值的選擇對于收斂的穩定性和速度有著較大的影響,也是一個技術活。
其他的也沒什么好分析的了,基本上和隨機梯度下降差不多。
以上。
總結
以上是生活随笔為你收集整理的3. 机器学习中为什么需要梯度下降?梯度下降算法缺点?_浅谈随机梯度下降amp;小批量梯度下降...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有宫颈糜烂该怎么办
- 下一篇: 牙黄做烤瓷贴面需要多少钱