神經(jīng)網(wǎng)絡(luò)之損失函數(shù)與優(yōu)化函數(shù)——梯度下降 原創(chuàng)
“ 損失函數(shù)和梯度下降是神經(jīng)網(wǎng)絡(luò)中僅次于神經(jīng)網(wǎng)絡(luò)模型本身的兩個(gè)函數(shù),甚至神經(jīng)網(wǎng)絡(luò)模型的性能就是由其所決定的 ”
今天我們來(lái)介紹一下神經(jīng)網(wǎng)絡(luò)模型中非常重要的兩個(gè)知識(shí)點(diǎn),損失函數(shù)與優(yōu)化函數(shù)。
了解過(guò)神經(jīng)網(wǎng)絡(luò)模型基礎(chǔ)運(yùn)作流程的應(yīng)該都知道這兩個(gè)重要函數(shù),可以說(shuō)一個(gè)神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)的怎么樣是一方面,但怎么讓神經(jīng)網(wǎng)絡(luò)表現(xiàn)更好,就看這兩個(gè)函數(shù)的質(zhì)量了。
損失函數(shù)與優(yōu)化函數(shù)??
神經(jīng)網(wǎng)絡(luò)訓(xùn)練流程
在現(xiàn)有的神經(jīng)網(wǎng)絡(luò)體系中,神經(jīng)網(wǎng)絡(luò)的基本運(yùn)作模式是,根據(jù)需求設(shè)計(jì)完成神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)之后;輸入待訓(xùn)練數(shù)據(jù),然后神經(jīng)網(wǎng)絡(luò)就可以通過(guò)損失函數(shù)計(jì)算模型的擬合誤差,然后通過(guò)反向傳播的方式使用優(yōu)化函數(shù)來(lái)優(yōu)化模型參數(shù),最終達(dá)到最優(yōu)解——可能只是理論最優(yōu)解不是實(shí)際最優(yōu)解。???
基本流程如下圖所示:??
損失函數(shù)
思考一個(gè)問(wèn)題,損失函數(shù)的作用是什么?以及它基本理論是什么樣的? ??????????
從字面來(lái)理解,損失函數(shù)就是用來(lái)計(jì)算損失的;但它具體的原理是什么呢? ????????????
在神經(jīng)網(wǎng)絡(luò)中,數(shù)據(jù)的基本格式是向量;而向量是有大小和方向的量,因此就可以用向量來(lái)表示數(shù)據(jù)之間的關(guān)系——也就是相似度。??????
以監(jiān)督學(xué)習(xí)圖像處理為例,給你一堆貓或狗的照片,然后把貓和狗單獨(dú)放到不同的目錄下,也就是貓一個(gè)目錄,狗一個(gè)目錄;這時(shí)把貓和狗以及他們的標(biāo)簽——也就是目錄名稱,轉(zhuǎn)化為向量結(jié)構(gòu)之后;表示貓的向量和表示狗的向量會(huì)占據(jù)不同的向量空間,而表示不同貓的向量會(huì)離的近一點(diǎn);同樣表示狗的向量也會(huì)離的近一點(diǎn),這種表示方式就叫做歐式距離。????????????????????????
以生活中的分類問(wèn)題舉例,比如老師在講臺(tái)上寫兩個(gè)標(biāo)簽,一個(gè)男同學(xué),一個(gè)女同學(xué);然后說(shuō)男同學(xué)站男同學(xué)標(biāo)簽下,女同學(xué)站女同學(xué)標(biāo)簽下;???????????????????????????????????????????
?監(jiān)督學(xué)習(xí)也是同樣的道理,貓狗的標(biāo)簽(目錄)就是告訴神經(jīng)網(wǎng)絡(luò)模型,這個(gè)是貓,那個(gè)是狗;然后讓神經(jīng)網(wǎng)絡(luò)模型自己去根據(jù)特征讓表示貓的向量和表示狗的向量,盡量靠近貓標(biāo)簽和狗標(biāo)簽。?
無(wú)監(jiān)督學(xué)習(xí)的基礎(chǔ)理論和監(jiān)督學(xué)習(xí)基本類似,只不過(guò)不會(huì)告訴神經(jīng)網(wǎng)絡(luò)貓和狗的標(biāo)簽;而是讓神經(jīng)網(wǎng)絡(luò)自己去根據(jù)貓狗的特征去區(qū)分,雖然區(qū)分的結(jié)果可能是錯(cuò)的。
但想法雖然很美好,現(xiàn)實(shí)卻很殘酷;未經(jīng)過(guò)訓(xùn)練的神經(jīng)網(wǎng)絡(luò)模型就像幼兒園的小孩子一樣,雖然你說(shuō)了,他也聽(tīng)了,但他做的都是錯(cuò)的;但怎么衡量這個(gè)錯(cuò)誤的大小呢 ???????????
這就是損失函數(shù)的作用,通過(guò)計(jì)算神經(jīng)網(wǎng)絡(luò)給的貓狗向量與真實(shí)標(biāo)簽之間的誤差,來(lái)告訴神經(jīng)網(wǎng)絡(luò)你這個(gè)搞錯(cuò)了,再想想辦法;然后神經(jīng)網(wǎng)絡(luò)就會(huì)進(jìn)行新一輪的計(jì)算,只不過(guò)在從新訓(xùn)練之前會(huì)先進(jìn)行參數(shù)調(diào)優(yōu),也就是優(yōu)化函數(shù)。???
數(shù)學(xué)模型如下圖所示:
優(yōu)化函數(shù)
優(yōu)化函數(shù)的作用就是告訴神經(jīng)網(wǎng)絡(luò)模型,你剛剛算的誤差太大了,現(xiàn)在去調(diào)整一下你的參數(shù)然后從新計(jì)算。
但是這里就有一個(gè)問(wèn)題,神經(jīng)網(wǎng)絡(luò)怎么知道自己應(yīng)該怎么調(diào)優(yōu)?總要有一個(gè)具體的解決方法或者說(shuō)算法吧。??????????
這時(shí)優(yōu)化函數(shù)的經(jīng)典實(shí)現(xiàn)——梯度下降的作用就體現(xiàn)了;實(shí)現(xiàn)優(yōu)化函數(shù)的方式有多種,但使用最多影響力最大的就是梯度下降算法。?
什么是梯度下降算法?
想明白什么是梯度下降,首先你要明白什么是梯度;假如某一天你和朋友等山的時(shí)候遇到意外傷害,這時(shí)你的所有通訊設(shè)施都無(wú)法使用;必須有一個(gè)人下山去通知救援隊(duì)來(lái)救你的隊(duì)友。這時(shí)你需要找一個(gè)在保證安全的前提下,能最快下山的路徑?這時(shí)你應(yīng)該怎么辦?
ok, 先思考一下下山有哪些途徑? ?
1. 找一條人工修好的山路下山,一般是上來(lái)的路,也就是原路返回
2. 找一些山間小道,這條路可能會(huì)比較難走,但速度會(huì)比走修好的山路更快
3. 到懸崖邊,直接跳下去,這是下山最快的一種方式,但結(jié)果可能就是直接死亡;這時(shí)下山就沒(méi)了意義。?????
因此,一般情況下大家應(yīng)該會(huì)選擇第二種方式下山;因?yàn)樗茉诒WC盡量安全的前提下,以最快的速度下山。???????
但是同樣,這樣的山路會(huì)比第一種的山路要更難走,因?yàn)樗露雀?,更陡峭;其?shí),我們就可以把這個(gè)山的坡度理解成梯度。??????????????
簡(jiǎn)單來(lái)說(shuō),所謂的梯度就是衡量某種事物的變化率,但畢竟梯度只是我們想出來(lái)的一個(gè)東西;我們需要把梯度構(gòu)建成一個(gè)數(shù)學(xué)模型,這樣我們才能解決它;
而從數(shù)學(xué)的角度來(lái)說(shuō)梯度其實(shí)就是導(dǎo)數(shù)問(wèn)題。導(dǎo)數(shù)就是用來(lái)衡量函數(shù)在某一個(gè)點(diǎn)附近的變化率;因此,所謂的梯度問(wèn)題就是導(dǎo)數(shù)問(wèn)題。只不過(guò)真實(shí)的神經(jīng)網(wǎng)絡(luò)模型中,梯度下降會(huì)更復(fù)雜,比如與向量相結(jié)合,以及偏導(dǎo)數(shù),方向?qū)?shù)等等。????????????????
如下圖所示:
但為什么梯度下降就可以優(yōu)化損失函數(shù)計(jì)算的誤差?或者說(shuō)為什么導(dǎo)數(shù)就可以解決損失函數(shù)的誤差?
之所以導(dǎo)數(shù)能解決損失函數(shù)的誤差問(wèn)題,主要原因就在于,數(shù)學(xué)追求的一種完美曲線(直線),雖然這個(gè)曲線不是一般意義上的水平直線,但它依然是一個(gè)連續(xù)曲線。???????????????????
而在數(shù)學(xué)中,通過(guò)導(dǎo)數(shù)或者多階導(dǎo)數(shù)就可以求出損失函數(shù)在最小值時(shí),自變量x的取值,也就是極值問(wèn)題。如下圖所示,關(guān)于導(dǎo)數(shù)的求值問(wèn)題。??????????????????????
而通過(guò)這種方式,損失函數(shù)就可以找到其極值點(diǎn),雖然可能并不是最小值或最大值,原因就在于不同的函數(shù)在一定的范圍內(nèi)可能存在多個(gè)極值點(diǎn);這也是為什么前面說(shuō),神經(jīng)網(wǎng)絡(luò)最終得到的最優(yōu)解只是理論上的最優(yōu)解,可能并不是實(shí)際上的最優(yōu)解。??????
那么現(xiàn)在應(yīng)該明白為什么優(yōu)化函數(shù)使用梯度下降算法了吧????????????
原因就在于優(yōu)化函數(shù)會(huì)讓損失函數(shù)在極值點(diǎn)附近不斷的去測(cè)試,然后找到極值;因?yàn)椋瑩p失函數(shù)不能像我們?nèi)祟愐粯?,直接畫個(gè)圖看一下極值點(diǎn)在哪里,因此損失函數(shù)并不知道其極值點(diǎn)在哪里,只能不斷的去計(jì)算才能獲得結(jié)果。????????
學(xué)習(xí)率和步長(zhǎng)
而關(guān)于梯度下降的問(wèn)題,神經(jīng)網(wǎng)絡(luò)還有兩個(gè)超參數(shù),學(xué)習(xí)率和步長(zhǎng);步長(zhǎng)理解比較簡(jiǎn)單;以上圖導(dǎo)數(shù)求極值為例,如果損失函數(shù)想求最小值,但它的起始點(diǎn)是a點(diǎn),但它的最小值點(diǎn)是b點(diǎn);如果要在a和b之間一個(gè)點(diǎn)一個(gè)點(diǎn)的實(shí),那么效率也太低了。因此步長(zhǎng)就可以調(diào)大一點(diǎn),第一次在a點(diǎn),第二次就可以跳到第一個(gè)極小值點(diǎn)附近,也就是a和o點(diǎn)之間的最低點(diǎn);第三次到y(tǒng)所在的最高點(diǎn),第四次就可以到b所在的最小值點(diǎn)。???????????????????????????????????????????????????
但從上圖也可以看出,如果按照這種步長(zhǎng),損失函數(shù)會(huì)錯(cuò)過(guò)兩個(gè)極大值和一個(gè)極小值點(diǎn);這就可能會(huì)產(chǎn)生梯度消失或者梯度爆炸的問(wèn)題。步長(zhǎng)太大可能會(huì)導(dǎo)致梯度消失,而步長(zhǎng)太小又可能會(huì)導(dǎo)致收斂過(guò)慢,訓(xùn)練時(shí)間和成本大大增加。?????????????????
而學(xué)習(xí)率是直接影響步長(zhǎng)的參數(shù),很多時(shí)候有些人也會(huì)把學(xué)習(xí)率和步長(zhǎng)當(dāng)作是一個(gè)東西。??????
這也是為什么在模型訓(xùn)練中,需要根據(jù)不同的模型和場(chǎng)景設(shè)置不同的超參數(shù)的原因。
本文轉(zhuǎn)載自公眾號(hào)AI探索時(shí)代 作者:DFires
