神經(jīng)網(wǎng)絡(luò)入門(mén)

1.機(jī)器學(xué)習(xí)模型


????上圖展示了機(jī)器學(xué)習(xí)的基本模型, 我們先從最簡(jiǎn)單的線性回歸來(lái)解釋每個(gè)部分的基本概念。



公式如下
W和b就是這個(gè)模型的映射函數(shù)(mapper)。 需要找到合適的W和b使代價(jià)函數(shù)(cost function)最小。模型的代價(jià)函數(shù)選用均方誤差(mean square error)。
對(duì)圖中每一個(gè)點(diǎn)來(lái)說(shuō)
d(i)表示每個(gè)點(diǎn)的縱坐標(biāo),x2(i)表示橫坐標(biāo)映射后的縱坐標(biāo)。

代價(jià)函數(shù)J為

為了簡(jiǎn)化起見(jiàn),我們假設(shè)b=0。所有J是和W有關(guān)的函數(shù),我們只需求
即找到代價(jià)函數(shù)的最小值,得到最優(yōu)W。
由于直接求導(dǎo)難以計(jì)算,梯度下降算法應(yīng)運(yùn)而生,逐點(diǎn)計(jì)算誤差(error)并更新W使得J趨近于Jmin。公式如下:
u是步長(zhǎng)(stepsize)表示每次梯度下降走的距離。W靠誤差(error)e(i)和當(dāng)前值x(i)進(jìn)行更新,迭代次數(shù)可以人為設(shè)定,這個(gè)公式也叫l(wèi)earning algorithm。

2.神經(jīng)網(wǎng)絡(luò)

2.1處理單元(processing element)

處理單元(PE)也叫神經(jīng)元(neuron), 是神經(jīng)網(wǎng)絡(luò)中最小的單位

上圖展示了一個(gè)最簡(jiǎn)單的PE, 省略了偏置b。非線性方程也被稱為激活函數(shù)。本例選取符號(hào)函數(shù)作為激活函數(shù)。若y等于-1,則判定為紅色點(diǎn), 若y等于1,則判定為藍(lán)色點(diǎn)。 由分類圖可以看出,我們只需要一個(gè)處理單元也就是一條直線就可以對(duì)紅藍(lán)色點(diǎn)進(jìn)行分類。
由于符號(hào)函數(shù)無(wú)法求導(dǎo),也就無(wú)法對(duì)代價(jià)方程進(jìn)行求解,我們需要引入一個(gè)連續(xù)的非線性函數(shù)作為激活函數(shù),最常用的激活函數(shù)是sigmoid函數(shù),如上圖所示。引入sigmoid函數(shù)后,通過(guò)第一節(jié)所述的w的迭代公式進(jìn)行更新。

2.2多層神經(jīng)網(wǎng)絡(luò)


如果我們想分離上圖中三角形區(qū)域和其他區(qū)域,直覺(jué)上來(lái)說(shuō)只需要含有三個(gè)PE的單層網(wǎng)絡(luò)來(lái)分就夠了。但是三個(gè)PE的單層網(wǎng)絡(luò)只能分離出淺藍(lán)色區(qū)域和其他,原因是對(duì)每個(gè)PE來(lái)說(shuō),直線下方表示-1,上方表示1。若要表示三角形區(qū)域,我們需要增加網(wǎng)絡(luò)層數(shù)。
如圖,需要在網(wǎng)絡(luò)中增加一層來(lái)把第三個(gè)PE的映射值翻折上去。
理論上來(lái)說(shuō),神經(jīng)元越多,神經(jīng)網(wǎng)絡(luò)的層數(shù)越多,所能表示的區(qū)域就可以越復(fù)雜。大家可以想一想,怎樣的網(wǎng)絡(luò)結(jié)構(gòu)能夠表示這個(gè)面具,把黑白區(qū)分開(kāi)來(lái)。

2.3 反向傳播算法(Back Propagation algorithm)

基于W更新的公式,每次我們都需要知道計(jì)算值與目標(biāo)值之間的差值e。當(dāng)神經(jīng)網(wǎng)絡(luò)的層數(shù)增加后,我們只知道最后一層也就是輸出層的e而不知道中間層的e。為了計(jì)算中間層的e來(lái)更新w,引入了基于鏈?zhǔn)角髮?dǎo)法則的反向傳播算法。

y是整個(gè)網(wǎng)絡(luò)的輸出,net是x的線性組合,f是激活函數(shù)

J表示整個(gè)網(wǎng)絡(luò)輸出的代價(jià)函數(shù), wij 表示第 i 層第 j 個(gè)PE所對(duì)應(yīng)的權(quán)重。根據(jù)鏈?zhǔn)角髮?dǎo)法則

, k是 i 的下一層也就是輸出層的PE, 結(jié)合以上兩個(gè)式子
上面的式子所做的假設(shè)是輸出層只有一個(gè)PE,若輸出層有多個(gè)PE。
結(jié)合此式子和第二個(gè)式子,有

帶入w的迭代公式
即可逐層更新權(quán)重W

3.總結(jié)

本文用平面內(nèi)的二維數(shù)據(jù)作為例子,簡(jiǎn)要的講述了一下神經(jīng)網(wǎng)絡(luò)的基本概念和作用。神經(jīng)網(wǎng)絡(luò)最主要的作用是當(dāng)網(wǎng)絡(luò)層數(shù)增加以后,可以表示任何空間,不論是二維,三維,四維或是圖像的1080*1080的數(shù)據(jù)。Dr.Princepe的一句話我很喜歡"Everyone treats neural net as a black box, but it's not. It all depends on you"在模型構(gòu)造前需要根據(jù)當(dāng)前數(shù)據(jù)的分布來(lái)選取參數(shù),盲目調(diào)參是不可取的。

順帶一提

網(wǎng)絡(luò)初始化時(shí)w一般從0-1中隨機(jī)選取一個(gè)作為初始參數(shù),再根據(jù)w的迭代公式進(jìn)行調(diào)整。
以后可能會(huì)寫(xiě)一寫(xiě)用原生的python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò),有助于神經(jīng)網(wǎng)絡(luò)細(xì)節(jié)的理解。原生的python性能很差,現(xiàn)在基本都用tensorflow框架,用python調(diào)c++的庫(kù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容