日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

3. 机器学习中为什么需要梯度下降?梯度下降算法缺点?_浅谈随机梯度下降amp;小批量梯度下降...

發(fā)布時間:2024/9/18 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3. 机器学习中为什么需要梯度下降?梯度下降算法缺点?_浅谈随机梯度下降amp;小批量梯度下降... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

機器學(xué)習(xí)三要素

上次的報告中,我們介紹了一種用于求解模型參數(shù)的迭代算法——梯度下降法。首先需要明確一點,即“梯度下降算法”在一個完整的統(tǒng)計學(xué)習(xí)流程中,屬于什么?根據(jù)《統(tǒng)計學(xué)習(xí)方法》這本書,統(tǒng)計學(xué)習(xí)一般有三個要素,即模型、策略和算法(目前以筆者的淺見,統(tǒng)計學(xué)習(xí)和機器學(xué)習(xí)沒有太大的差別)。

模型

所謂模型,我們可以簡單理解為數(shù)據(jù)的組織形式。換句話說,就是輸入數(shù)據(jù)與輸出數(shù)據(jù)之間可能存在的關(guān)系。機器學(xué)習(xí)的主要任務(wù)是預(yù)測,根據(jù)預(yù)測值的取值情況,我們可以分為“分類任務(wù)”(預(yù)測值是離散的),“回歸任務(wù)”(預(yù)測值是連續(xù)的),“聚類任務(wù)”(預(yù)測值是空白的,對輸入數(shù)據(jù)進行自動分組)。

因此,我們分別可以提出相應(yīng)的模型,即分類模型,回歸模型和聚類模型。繼續(xù)向下細分,分類模型有二分類模型,多分類模型;回歸模型有線性回歸,非線性回歸模型;聚類模型還有Kmeans,DBSCAN等……

當(dāng)我們拋開這些術(shù)語,回到初始的情況,其實就是輸入數(shù)據(jù),經(jīng)過某種機制的加工,得到了預(yù)測輸出數(shù)據(jù)。這個加工數(shù)據(jù)的機制,就是所謂的模型。上次提到的一元線性回歸模型,,其實就是“”經(jīng)過“”的處理,得到了“”。

策略

策略,可以簡單理解為模型的評價標準。例如同樣是1000組的數(shù)據(jù),我們選擇什么樣的模型更能表達它們之間的關(guān)系呢?線性模型,還是二次函數(shù)模型2?

這里,我們就要引入某種準則,對每種模型進行評價。通常,我們把損失函數(shù)作為我們的評價函數(shù)。常用的損失函數(shù)有0-1損失函數(shù)、平方損失函數(shù)、絕對損失函數(shù),對數(shù)損失函數(shù)等等,在上次的分析報告中,我們使用的就是平方損失函數(shù),也就是我們想要最小化的目標函數(shù)。

顯然,當(dāng)模型中的參數(shù)取值不同,損失函數(shù)的值也不同。我們便可以通過損失函數(shù)的值,來衡量不同模型的優(yōu)劣。這便是所謂的策略。

當(dāng)然,對于機器學(xué)習(xí)的模型而言,評價其能力的最重要的指標應(yīng)該是它的泛化能力,也就是預(yù)測未知數(shù)據(jù)的能力,但歸根到底,還是通過選擇合適的損失函數(shù)或者策略函數(shù),來量化這種能力。

算法

最后,就是算法啦。無論是我們已經(jīng)確定了某種模型,想要求解參數(shù)。亦或是我們希望比較兩種或多種模型的優(yōu)劣,我們都需要通過算法,去找到損失函數(shù)的全局最小值,以確定相關(guān)的參數(shù),以及模型的最優(yōu)擬合效果。對于參數(shù)的求解,就是算法需要做到的。

所以說到這里,我們就知道算法的重要性了,即使你提出了好的模型和好的策略,但如果你找不到合適的算法去求解你的模型參數(shù),那么你的模型就無法發(fā)揮功能,最終也只是一文不值?,F(xiàn)在十分火熱的神經(jīng)網(wǎng)絡(luò)模型,曾經(jīng)一度處于低谷狀態(tài),就是因為當(dāng)時沒有找到合適的算法對模型進行求解。而它的復(fù)蘇,也是源于某位數(shù)學(xué)家提出了“每層局部最優(yōu)最終達到全局近似最優(yōu)”的想法并取得了很不錯的效果。

上次提到的梯度下降算法,就是目前業(yè)界最為常用的機器學(xué)習(xí)優(yōu)化算法之一。同時,經(jīng)典梯度下降算法還衍生出一系列算法,例如隨機梯度下降、小批量梯度下降、動量梯度下降法等等。此外,還有拉格朗日乘數(shù)法、Adam算法、牛頓法及相關(guān)延申、分治法及相關(guān)延申等等。啟發(fā)式算法也是一類不錯的算法,例如模擬退火、遺傳算法、粒子群優(yōu)化等等,針對某些問題也會有很不錯的效果。

隨機梯度下降

下面進入正題,隨機梯度下降算法。顯而易見,隨機梯度算法是引入了隨機性的梯度下降算法。如果理解了經(jīng)典的梯度下降算法,隨機梯度下降就很簡單啦。

在經(jīng)典的隨機梯度下降算法中,我們的迭代下降公式是

以一元線性回歸的目標函數(shù)為例,其梯度可以表達為

顯然我們可以看到,這里的梯度計算,使用了所有的樣本數(shù)據(jù)。倘若我們的數(shù)據(jù)集有1000組數(shù)據(jù),那就需要計算1000次才可以得到梯度,倘若數(shù)據(jù)集有1億組數(shù)據(jù),就需要計算一億次,其時間復(fù)雜度是O(n)。當(dāng)我們面對的樣本數(shù)據(jù)較多時,毫無疑問,模型的求解,學(xué)習(xí)一次的過程是很浪費時間的。因此,我們可以在所有的樣本數(shù)據(jù)中選擇隨機的一個實例,用這個實例所包含的數(shù)據(jù)計算我們的“梯度”。此時的梯度為

其中是一個隨機選中的樣本。

到了這里,可能會存在一定的疑問,因為對于

這個目標函數(shù),其梯度并不是既然如此,這個方向還是不是可以使函數(shù)值下降的方向?只能說,對于一次迭代而言,不一定,但是站在宏觀的角度去考慮,最后還是很有機會收斂到近似最優(yōu)解的。

事實上,我們的目標函數(shù)可以寫成

所以我們的梯度則是這個時候,我們的優(yōu)化目標是所有樣本的損失函數(shù)之和,所以在梯度下降時,自然而然是朝著使總的偏差縮小的方向去移動的。而對于隨機梯度下降,我們每一步迭代的優(yōu)化目標函數(shù)不是始終不變的,其變化的范圍就是在第步,我們隨機地選中了作為我們的優(yōu)化目標,其梯度便是而在第步,我們的優(yōu)化目標可能就變成了此時,梯度也自然變成了顯然,隨機梯度下降迭代過程中,我們考慮的下降方向并不是全局下降方向,而是使得某個隨機選中的樣本的損失函數(shù)下降的方向。在一步迭代中,這種局部樣本的下降未必會導(dǎo)致全局損失的下降,但是當(dāng)?shù)螖?shù)足夠的時候,絕大部分樣本都會被考慮到,最終一步一步走向全局最優(yōu)解。

所以,隨機梯度下降相對于梯度下降而言,其根本區(qū)別在于每一步迭代時需要優(yōu)化的目標函數(shù)不同。對于經(jīng)典的梯度下降,其每一步的目標函數(shù)(損失函數(shù))是一樣的,即所有樣本的(平均)損失函數(shù)之和。而對于隨機梯度下降而言,其每一步的目標函數(shù)是被隨機選中的某個樣本的損失函數(shù),并不是一直不變的。

下面這個視頻可以直觀的感受一下隨機梯度下降。

上面的每個小球,我們可以將其理解為隨機梯度下降過程中由于隨機性而帶來的迭代情況的分支。正是由于這種隨機性的存在,每個球可以較為自由地選擇其運動方向,有些就停在某個位置,有些則一路向下。當(dāng)?shù)拇螖?shù)足夠多時,總會有某個球的路徑十分順暢,最終到達全局最優(yōu)解的附近。我們甚至可以猜測,隨機梯度下降相對于經(jīng)典梯度下降,其逃離局部最優(yōu)的能力更強。因為一旦到達了某個樣本的局部最優(yōu),隨著目標函數(shù)的更換,很可能不再是另一個樣本的局部最優(yōu),迭代就可以繼續(xù)進行。

當(dāng)然,隨機梯度下降的缺點也是存在的,即它很可能無法收斂到全局最優(yōu)解。什么是全局最優(yōu),是達到最小嘛?還是每一個都無法繼續(xù)下降?一般而言,前者可能更容易衡量一些,我們也更偏向于使用總體的最優(yōu)作為全局最優(yōu),而非每一個樣本的最優(yōu)。而對于隨機梯度下降,即使我們已經(jīng)達到了總體全局最優(yōu),對于某些樣本而言,其可能依然可以繼續(xù)下降,所以一旦選中了這些樣本,我們就要偏離全局最優(yōu)點了。所以隨機梯度下降最終的收斂性確實值得考慮。

但總的來說,隨機梯度下降還是很不錯的,特別是對于大樣本的處理情況,每一次迭代中O(1)的計算開銷無疑會輕松很多,至于最終的收斂問題,則要根據(jù)迭代次數(shù),終止準則等進行一個衡量取舍啦。

代碼基本上是差不多的,只是參數(shù)的選擇上要多花時間調(diào)整了……

clear;clc;
load?a1data.mat
a=[0;0];%?初始值,a(1)=a;???a(2)=b;?y=ax+b
alpha=1e-5;?%學(xué)習(xí)率?alpha
eps=1e-12;?%終止準則?eps
[q,s,num]=SGD(a,x,y,alpha,eps);?%q是最終的解,s的均方誤差的變化向量,num是迭代次數(shù)
figure(1);
plot(1:length(s),s);
disp("迭代了"+num+"次"+"???收斂結(jié)果是"+q)
title("均方誤差下降曲線")
xlabel("迭代次數(shù)")
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;?%迭代次數(shù)
q=[inf;inf];?%返回結(jié)果的初值
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次也沒有收斂,停下來改一下最大迭代次數(shù)試試")
????????break;
????end
????a=a1;
????daa(i)=da;
????i=i+1;
end
end?

由于一次只計算一個樣本的損失函數(shù),所以其迭代次數(shù)肯定更多啦。但是除以樣本數(shù)目1000,其計算開銷也就相當(dāng)于經(jīng)典梯度下降迭代了200次。而之前的梯度下降700多次才收斂。當(dāng)然啦,經(jīng)典梯度下降更加穩(wěn)定,隨機梯度下降的結(jié)果相對而言還是差了點。

最優(yōu)結(jié)果:

確實有些差距,如果多花點時間調(diào)節(jié)參數(shù),修改修改終止準則,結(jié)果應(yīng)該會好些。

小批量梯度下降

我們現(xiàn)在了解了經(jīng)典的梯度下降和隨機梯度下降,并且知道其不同之處主要在于迭代過程中目標函數(shù)選擇的不同。同時,我們知道經(jīng)典梯度下降雖然穩(wěn)定性比較強,但是大樣本情況下迭代速度較慢;隨機梯度下降雖然每一步迭代計算較快,但是其穩(wěn)定性不太好,而且實際使用中,參數(shù)的調(diào)整往往更加麻煩。

所以,為了協(xié)調(diào)穩(wěn)定性和速度,小批量梯度下降應(yīng)運而生啦。其實很簡單,小批量梯度下降法和前面兩種梯度下降的主要區(qū)別就是每一步迭代過程中目標函數(shù)的選擇不同。小批量梯度下降是從個樣本中隨機且不重復(fù)地選擇個進行損失函數(shù)的求和

并將其作為每一步迭代過程中的目標函數(shù)。此時,迭代公式中的梯度也就變成了

顯然,m=1時,小批量梯度下降就是隨機梯度下降,m=n時,小批量梯度下降就是經(jīng)典梯度下降。同時,我們也把經(jīng)典的梯度下降方法稱之為全批量梯度下降。這里的m一般稱之為批量尺寸,其值的選擇對于收斂的穩(wěn)定性和速度有著較大的影響,也是一個技術(shù)活。

其他的也沒什么好分析的了,基本上和隨機梯度下降差不多。

以上。

總結(jié)

以上是生活随笔為你收集整理的3. 机器学习中为什么需要梯度下降?梯度下降算法缺点?_浅谈随机梯度下降amp;小批量梯度下降...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。