日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > 服務(wù)器 > 梯度下降法及其Python實現(xiàn)

梯度下降法及其Python實現(xiàn)

來源:程序員人生   發(fā)布時間:2016-06-17 08:45:28 閱讀次數(shù):6168次

梯度降落法(gradient descent),又名最速降落法(steepest descent)是求解無束縛最優(yōu)化問題最經(jīng)常使用的方法,它是1種迭代方法,每步主要的操作是求解目標(biāo)函數(shù)的梯度向量,將當(dāng)前位置的負(fù)梯度方向作為搜索方向(由于在該方向上目標(biāo)函數(shù)降落最快,這也是最速降落法名稱的由來)。
梯度降落法特點:越接近目標(biāo)值,步長越小,降落速度越慢。
直觀上來看以下圖所示:


這里每個圈代表1個函數(shù)梯度,最中心表示函數(shù)極值點,每次迭代根據(jù)當(dāng)前位置求得的梯度(用于肯定搜索方向和與步長共同決定前進(jìn)速度)和步長找到1個新的位置,這樣不斷迭代終究到達(dá)目標(biāo)函數(shù)局部最優(yōu)點(如果目標(biāo)函數(shù)是凸函數(shù),則到達(dá)全局最優(yōu)點)。


下面我們將通過公式來具體說明梯度降落法
下面這個h(θ)是我們的擬合函數(shù)


也能夠用向量的情勢進(jìn)行表示:


下面函數(shù)是我們需要進(jìn)行最優(yōu)化的風(fēng)險函數(shù),其中的每項都表示在已有的訓(xùn)練集上我們的擬合函數(shù)與y之間的殘差,計算其平方損失函數(shù)作為我們構(gòu)建的風(fēng)險函數(shù)(參見最小2乘法及其Python實現(xiàn))


這里我們乘上1/2是為了方便后面求偏導(dǎo)數(shù)時結(jié)果更加簡潔,之所以能乘上1/2是由于乘上這個系數(shù)后對求解風(fēng)險函數(shù)最優(yōu)值沒有影響。
我們的目標(biāo)就是要最小化風(fēng)險函數(shù),使得我們的擬合函數(shù)能夠最大程度的對目標(biāo)函數(shù)y進(jìn)行擬合,即:


后面的具體梯度求解都是圍繞這個目標(biāo)來進(jìn)行。


批量梯度降落BGD
依照傳統(tǒng)的思想,我們需要對上述風(fēng)險函數(shù)中的每一個求其偏導(dǎo)數(shù),得到每一個對應(yīng)的梯度


這里表示第i個樣本點的第j份量,即h(θ)中的


接下來由于我們要最小化風(fēng)險函數(shù),故依照每一個參數(shù)的負(fù)梯度方向來更新每個


這里的α表示每步的步長


從上面公式可以注意到,它得到的是1個全局最優(yōu)解,但是每迭代1步,都要用到訓(xùn)練集所有的數(shù)據(jù),如果m很大,那末可想而知這類方法的迭代速度!!所以,這就引入了另外1種方法,隨機(jī)梯度降落。


隨機(jī)梯度降落SGD
由于批量梯度降落在訓(xùn)練集很大的情況下迭代速度非常之慢,所以在這類情況下再使用批量梯度降落來求解風(fēng)險函數(shù)的最優(yōu)化問題是不具有可行性的,在此情況下,提出了——隨機(jī)梯度降落
我們將上述的風(fēng)險函數(shù)改寫成以下情勢:


其中,


稱為樣本點的損失函數(shù)


接下來我們對每一個樣本的損失函數(shù),對每一個求其偏導(dǎo)數(shù),得到每一個對應(yīng)的梯度


然后根據(jù)每一個參數(shù)的負(fù)梯度方向來更新每個


與批量梯度降落相比,隨機(jī)梯度降落每次迭代只用到了1個樣本,在樣本量很大的情況下,常見的情況是只用到了其中1部份樣本數(shù)據(jù)便可將θ迭代到最優(yōu)解。因此隨機(jī)梯度降落比批量梯度降落在計算量上會大大減少。


SGD有1個缺點是,其噪音較BGD要多,使得SGD其實不是每次迭代都向著整體最優(yōu)化方向。而且SGD由于每次都是使用1個樣本進(jìn)行迭代,因此終究求得的最優(yōu)解常常不是全局最優(yōu)解,而只是局部最優(yōu)解。但是大的整體的方向是向全局最優(yōu)解的,終究的結(jié)果常常是在全局最優(yōu)解附近。


下面是兩種方法的圖形展現(xiàn):



從上述圖形可以看出,SGD由于每次都是用1個樣本點進(jìn)行梯度搜索,因此其最優(yōu)化路徑看上去比較盲目(這也是隨機(jī)梯度降落名字的由來)。


對照其優(yōu)劣點以下:
批量梯度降落:
優(yōu)點:全局最優(yōu)解;易于并行實現(xiàn);整體迭代次數(shù)不多
缺點:當(dāng)樣本數(shù)目很多時,訓(xùn)練進(jìn)程會很慢,每次迭代需要耗費大量的時間。

隨機(jī)梯度降落:
優(yōu)點:訓(xùn)練速度快,每次迭代計算量不大
缺點:準(zhǔn)確度降落,其實不是全局最優(yōu);不容易于并行實現(xiàn);整體迭代次數(shù)比較多。



============ 分割分割 =============
上面我們講授了甚么是梯度降落法,和如何求解梯度降落,下面我們將通過Python來實現(xiàn)梯度降落法。

# _*_ coding: utf⑻ _*_ # 作者: yhao # 博客: http://blog.csdn.net/yhao2014 # 郵箱: yanhao07@sina.com # 訓(xùn)練集 # 每一個樣本點有3個份量 (x0,x1,x2) x = [(1, 0., 3), (1, 1., 3), (1, 2., 3), (1, 3., 2), (1, 4., 4)] # y[i] 樣本點對應(yīng)的輸出 y = [95.364, 97.217205, 75.195834, 60.105519, 49.342380] # 迭代閥值,當(dāng)兩次迭代損失函數(shù)之差小于該閥值時停止迭代 epsilon = 0.0001 # 學(xué)習(xí)率 alpha = 0.01 diff = [0, 0] max_itor = 1000 error1 = 0 error0 = 0 cnt = 0 m = len(x) # 初始化參數(shù) theta0 = 0 theta1 = 0 theta2 = 0 while True: cnt += 1 # 參數(shù)迭代計算 for i in range(m): # 擬合函數(shù)為 y = theta0 * x[0] + theta1 * x[1] +theta2 * x[2] # 計算殘差 diff[0] = (theta0 + theta1 * x[i][1] + theta2 * x[i][2]) - y[i] # 梯度 = diff[0] * x[i][j] theta0 -= alpha * diff[0] * x[i][0] theta1 -= alpha * diff[0] * x[i][1] theta2 -= alpha * diff[0] * x[i][2] # 計算損失函數(shù) error1 = 0 for lp in range(len(x)): error1 += (y[i]-(theta0 + theta1 * x[i][1] + theta2 * x[i][2]))**2/2 if abs(error1-error0) < epsilon: break else: error0 = error1 print ' theta0 : %f, theta1 : %f, theta2 : %f, error1 : %f' % (theta0, theta1, theta2, error1) print 'Done: theta0 : %f, theta1 : %f, theta2 : %f' % (theta0, theta1, theta2) print '迭代次數(shù): %d' % cnt

結(jié)果(截取部份):
theta0 : 2.782632, theta1 : 3.207850, theta2 : 7.998823, error1 : 7.508687 theta0 : 4.254302, theta1 : 3.809652, theta2 : 11.972218, error1 : 813.550287 theta0 : 5.154766, theta1 : 3.351648, theta2 : 14.188535, error1 : 1686.507256 theta0 : 5.800348, theta1 : 2.489862, theta2 : 15.617995, error1 : 2086.492788 theta0 : 6.326710, theta1 : 1.500854, theta2 : 16.676947, error1 : 2204.562407 theta0 : 6.792409, theta1 : 0.499552, theta2 : 17.545335, error1 : 2194.779569 theta0 : 74.892395, theta1 : ⑴3.494257, theta2 : 8.587471, error1 : 87.700881 theta0 : 74.942294, theta1 : ⑴3.493667, theta2 : 8.571632, error1 : 87.372640 theta0 : 74.992087, theta1 : ⑴3.493079, theta2 : 8.555828, error1 : 87.045719 theta0 : 75.041771, theta1 : ⑴3.492491, theta2 : 8.540057, error1 : 86.720115 theta0 : 75.091349, theta1 : ⑴3.491905, theta2 : 8.524321, error1 : 86.395820 theta0 : 75.140820, theta1 : ⑴3.491320, theta2 : 8.508618, error1 : 86.072830 theta0 : 75.190184, theta1 : ⑴3.490736, theta2 : 8.492950, error1 : 85.751139 theta0 : 75.239442, theta1 : ⑴3.490154, theta2 : 8.477315, error1 : 85.430741 theta0 : 97.986390, theta1 : ⑴3.221172, theta2 : 1.257259, error1 : 1.553781 theta0 : 97.986505, theta1 : ⑴3.221170, theta2 : 1.257223, error1 : 1.553680 theta0 : 97.986620, theta1 : ⑴3.221169, theta2 : 1.257186, error1 : 1.553579 theta0 : 97.986735, theta1 : ⑴3.221167, theta2 : 1.257150, error1 : 1.553479 theta0 : 97.986849, theta1 : ⑴3.221166, theta2 : 1.257113, error1 : 1.553379 theta0 : 97.986963, theta1 : ⑴3.221165, theta2 : 1.257077, error1 : 1.553278 Done: theta0 : 97.987078, theta1 : ⑴3.221163, theta2 : 1.257041 迭代次數(shù): 3443

可以看到最后收斂到穩(wěn)定的參數(shù)值。

注意:這里在選取alphaepsilon時需要謹(jǐn)慎選擇,可能不適的值會致使最后沒法收斂。


參考文檔:

隨機(jī)梯度降落(Stochastic gradient descent)和 批量梯度降落(Batch gradient descent )的公式對照、實現(xiàn)對照

隨機(jī)梯度降落法
python實現(xiàn)梯度降落算法

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 看片91 | 国产精品五区 | 欧美一区二区大片 | 一级毛片一级毛片 | 不卡二区 | 亚洲精品66 | 在线播放一区二区三区 | 久久免费看 | 99久久网| 亚洲欧洲在线观看 | 中文字幕+乱码+中文乱码图片 | 日韩视频在线免费 | 国产精选一区 | 亚洲成人99| 日韩a级毛片免费看 | 国产精品久久久久久久婷婷 | 精品一级毛片 | 日韩精品视频在线播放 | 欧美日韩免费看片 | 久久一区二区国产 | 日韩特黄电影 | 国产精品欧美一区二区三区不卡 | 日本成人网址 | a级毛片免费播放 | 国产成人免费av一区二区午夜 | 伊人国产精品 | 久久久久国产精品人 | 国产精品色综合一区二区三区 | 欧美日韩一区二区三区不卡视频 | 欧美日本国产在线 | 日韩精品第一区 | 一级毛片在线播放 | 91精品国产91久久综合桃花 | 日韩毛片免费视频一级特黄 | 69视频在线免费观看 | 日本中文字幕在线观看 | 欧美成人精品 | 黄色一级毛片免费 | 91麻豆精品视频 | 亚洲88| 91麻豆精品国产 |