迭代30000次身辨,loss=0.0984,學(xué)習(xí)率=0.1芍碧,數(shù)字圖片分類效果一般
迭代40000次煌珊,loss=0.0352,學(xué)習(xí)率=0.1, 數(shù)字圖片分類效果較好
畫出了loss曲線圖泌豆,可以看出定庵,在loss=4附近,loss曲線發(fā)生短暫上升踪危,之后持續(xù)下降蔬浙;其中在迭代10000次左右后,下降速度趨緩贞远。
對(duì)預(yù)測(cè)值y按照閾值法進(jìn)行了分類畴博,分類函數(shù)為classify_id(result)
具體結(jié)果:
學(xué)習(xí)率=0.1
epoch=39999,loss=tensor([[0.0353]], grad_fn=),weights=tensor([ 0.2679,-1.1017, 75.4234, -27.5171, -49.4079, 15.8718, -13.4961, 95.7110, -14.0505,-56.6473, -106.9320, 0.5181, 102.3565], grad_fn=)
干貨
線性回歸(Linear Regression)
線性回歸假設(shè)目標(biāo)值與特征之間線性相關(guān),即滿足一個(gè)多元一次方程蓝仲。通過構(gòu)建損失函數(shù)俱病,來(lái)求解損失函數(shù)最小時(shí)的參數(shù)w和b。
線性回歸算法步驟:
1袱结、先令w=w0(初始化w)
2亮隙、把w0代入model輸出
3、觀察模型輸出與期望值y*
4垢夹、如果輸出與期望相同咱揍,求解完成(
)
5、如果不同棚饵,以一定規(guī)則更新w,即w1=R(w)
6掩完、把w1代入model噪漾,得到模型輸出
7、轉(zhuǎn)到第三步
線性回歸算法的關(guān)鍵問題有2個(gè):
1且蓬、如何觀察輸出與期望之間的差欣硼?
2、更新w的規(guī)則如何制定恶阴?
對(duì)于第一個(gè)關(guān)鍵問題——
定義Loss 函數(shù):
解決第二個(gè)關(guān)鍵問題——第一種思路是用最小二乘法(least square method)诈胜;第二種思路,就用到大名鼎鼎的“梯度下降”(gradient descent)了冯事。
梯度下降法(gradient descent)是一個(gè)最優(yōu)化算法焦匈,常用于機(jī)器學(xué)習(xí)和人工智能當(dāng)中用來(lái)遞歸性地逼近最小偏差模型。
梯度下降是迭代法的一種,可以用于求解最小二乘問題(線性和非線性都可以)昵仅。在求解機(jī)器學(xué)習(xí)算法的模型參數(shù)缓熟,即無(wú)約束優(yōu)化問題時(shí)累魔,梯度下降(Gradient Descent)是最常采用的方法之一,另一種常用的方法是最小二乘法够滑。在求解損失函數(shù)的最小值時(shí)垦写,可以通過梯度下降法來(lái)一步步的迭代求解,得到最小化的損失函數(shù)和模型參數(shù)值彰触。反過來(lái)梯投,如果我們需要求解損失函數(shù)的最大值,這時(shí)就需要用梯度上升法來(lái)迭代了况毅。在機(jī)器學(xué)習(xí)中分蓖,基于基本的梯度下降法發(fā)展了兩種梯度下降方法,分別為隨機(jī)梯度下降法和批量梯度下降法俭茧。
如果說在機(jī)器學(xué)習(xí)領(lǐng)域有哪個(gè)優(yōu)化算法最廣為認(rèn)知咆疗,用途最廣,非梯度下降算法莫屬母债。梯度下降算法是一種非常經(jīng)典的求極小值的算法午磁,比如在線性回歸里我們可以用最小二乘法去解析最優(yōu)解,但是其中會(huì)涉及到對(duì)矩陣求逆毡们,由于多重共線性問題的存在是很讓人難受的迅皇,無(wú)論進(jìn)行L1正則化的Lasso回歸還是L2正則化的嶺回歸,其實(shí)并不讓人滿意衙熔,因?yàn)樗鼈兊漠a(chǎn)生是為了修復(fù)此漏洞登颓,而不是為了提升模型效果,甚至使模型效果下降红氯。但是換一種思路框咙,比如用梯度下降算法去優(yōu)化線性回歸的損失函數(shù),完全就可以不用考慮多重共線性帶來(lái)的問題痢甘。其實(shí)不僅是線性回歸喇嘱,邏輯回歸同樣是可以用梯度下降進(jìn)行優(yōu)化,因?yàn)檫@兩個(gè)算法的損失函數(shù)都是嚴(yán)格意義上的凸函數(shù)塞栅,即存在全局唯一極小值者铜,較小的學(xué)習(xí)率和足夠的迭代次數(shù),一定可以達(dá)到最小值附近放椰,滿足精度要求是完全沒有問題的作烟。并且隨著特征數(shù)目的增多(列如100000),梯度下降的效率將遠(yuǎn)高于去解析標(biāo)準(zhǔn)方程的逆矩陣砾医。神經(jīng)網(wǎng)絡(luò)中的后向傳播算法其實(shí)就是在進(jìn)行梯度下降拿撩,GDBT(梯度提升樹)每增加一個(gè)弱學(xué)習(xí)器(CART回歸樹),近似于進(jìn)行一次梯度下降,因?yàn)槊恳豢没貧w樹的目的都是去擬合此時(shí)損失函數(shù)的負(fù)梯度如蚜,這也可以說明為什么GDBT往往沒XGBoost的效率高绷雏,因?yàn)樗鼪]辦法擬合真正的負(fù)梯度头滔,而Xgboost 的每增加的一個(gè)弱學(xué)習(xí)器是使得損失函數(shù)下降最快的解析解。
以上是自己實(shí)現(xiàn)梯度算法的原理涎显,python代碼如下
自己實(shí)現(xiàn)梯度下降前坤检,需要推導(dǎo)出計(jì)算梯度的公式,對(duì)于我這種數(shù)學(xué)就飯吃的人就不友好了期吓。
遇到問題不要慌早歇,調(diào)用庫(kù)來(lái)幫忙!
我們可以使用pytorch讨勤,它把求取梯度的方法內(nèi)嵌了箭跳。下面是調(diào)用pytorch實(shí)現(xiàn)的代碼
下面是轉(zhuǎn)載
一、算法簡(jiǎn)介
1.1 什么是回歸分析
回歸分析是一種預(yù)測(cè)性的建模技術(shù)潭千,它研究的是因變量(目標(biāo))和自變量(預(yù)測(cè)器)之間的關(guān)系谱姓。這種技術(shù)通常用于預(yù)測(cè)分析,時(shí)間序列模型以及發(fā)現(xiàn)變量之間的因果關(guān)系刨晴。通常使用曲線/線來(lái)擬合數(shù)據(jù)點(diǎn)屉来,目標(biāo)是使曲線到數(shù)據(jù)點(diǎn)的距離差異最小。
1.2 線性回歸
線性回歸是回歸問題中的一種狈癞,線性回歸假設(shè)目標(biāo)值與特征之間線性相關(guān)茄靠,即滿足一個(gè)多元一次方程。通過構(gòu)建損失函數(shù)蝶桶,來(lái)求解損失函數(shù)最小時(shí)的參數(shù)w和b慨绳。通長(zhǎng)我們可以表達(dá)成如下公式:
y^為預(yù)測(cè)值,自變量x和因變量y是已知的真竖,而我們想實(shí)現(xiàn)的是預(yù)測(cè)新增一個(gè)x脐雪,其對(duì)應(yīng)的y是多少。因此恢共,為了構(gòu)建這個(gè)函數(shù)關(guān)系战秋,目標(biāo)是通過已知數(shù)據(jù)點(diǎn),求解線性模型中w和b兩個(gè)參數(shù)旁振。
1.3 目標(biāo)/損失函數(shù)
求解最佳參數(shù),需要一個(gè)標(biāo)準(zhǔn)來(lái)對(duì)結(jié)果進(jìn)行衡量涨岁,為此我們需要定量化一個(gè)目標(biāo)函數(shù)式拐袜,使得計(jì)算機(jī)可以在求解過程中不斷地優(yōu)化。
針對(duì)任何模型求解問題梢薪,都是最終都是可以得到一組預(yù)測(cè)值y^ 蹬铺,對(duì)比已有的真實(shí)值 y ,數(shù)據(jù)行數(shù)為 n 秉撇,可以將損失函數(shù)定義如下:
即預(yù)測(cè)值與真實(shí)值之間的平均的平方距離甜攀,統(tǒng)計(jì)中一般稱其為MAE(mean square error)均方誤差秋泄。把之前的函數(shù)式代入損失函數(shù),并且將需要求解的參數(shù)w和b看做是函數(shù)L的自變量规阀,可得
現(xiàn)在的任務(wù)是求解最小化L時(shí)w和b的值恒序,
即核心目標(biāo)優(yōu)化式為
求解方式有兩種:
1)最小二乘法(least square method)
求解 w 和 b 是使損失函數(shù)最小化的過程,在統(tǒng)計(jì)中谁撼,稱為線性回歸模型的最小二乘“參數(shù)估計(jì)”(parameter estimation)歧胁。我們可以將 L(w,b) 分別對(duì) w 和 b 求導(dǎo),得到
令上述兩式為0厉碟,可得到 w 和 b 最優(yōu)解的閉式(closed-form)解:
2)梯度下降(gradient descent)
梯度下降核心內(nèi)容是對(duì)自變量進(jìn)行不斷的更新(針對(duì)w和b求偏導(dǎo))喊巍,使得目標(biāo)函數(shù)不斷逼近最小值的過程