人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Network)算法簡(jiǎn)介
人工神經(jīng)網(wǎng)絡(luò),簡(jiǎn)稱(chēng)神經(jīng)網(wǎng)絡(luò),是一種模仿生物神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)和功能的數(shù)學(xué)模型或者計(jì)算模型。其實(shí)是一種與貝葉斯網(wǎng)絡(luò)很像的一種算法。之前看過(guò)一些內(nèi)容始終云里霧里,這次決定寫(xiě)一篇博客。弄懂這個(gè)基本原理,畢竟現(xiàn)在深度學(xué)習(xí)太火了。
本文引用地址:http://2s4d.com/article/201809/389189.htm神經(jīng)網(wǎng)絡(luò)是一種方法,既可以用來(lái)做有監(jiān)督的任務(wù),如分類(lèi)、視覺(jué)識(shí)別等,也可以用作無(wú)監(jiān)督的任務(wù)。首先,我們看一個(gè)簡(jiǎn)單的例子。如下圖所示(這個(gè)圖網(wǎng)上有很多人引用了,但我找不到出處,歡迎指正),如果我們想訓(xùn)練一個(gè)算法可以使其識(shí)別出是貓還是狗,這是很簡(jiǎn)單的一個(gè)分類(lèi)任務(wù),我們可以找一條線(模型),在這個(gè)二元坐標(biāo)中進(jìn)行“一刀切”,把這兩組數(shù)據(jù)分開(kāi)。我們知道,在解析幾何中,這條直線可以用如下的公式表達(dá):
圖1 貓狗數(shù)據(jù)
圖2 一個(gè)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)
這里的W1和W2就是兩個(gè)坐標(biāo)軸上的系數(shù),可以稱(chēng)為權(quán)重。W0可以稱(chēng)作截距,也叫做偏移。新來(lái)一個(gè)數(shù)據(jù)點(diǎn),也就是一組輸入值(X1,X2),如果在這條線的左邊,那么它就是一只狗,如果在右邊就是一只貓了。這就可以用一個(gè)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)來(lái)表示。如圖2所示,X1和X2分別是輸入值,Y是輸出值,兩條邊的權(quán)重分別是W1和W2。這是一個(gè)最簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)了。這就是使用神經(jīng)網(wǎng)絡(luò)定義了一個(gè)線性分類(lèi)器了。這里的一個(gè)圓形的節(jié)點(diǎn)就是一個(gè)神經(jīng)元。我們也可以采用另一種方式,即在輸入輸出之間加一個(gè)中間節(jié)點(diǎn)S,然后增加一個(gè)輸出層,包括兩個(gè)節(jié)點(diǎn)Y1和Y2,分別對(duì)應(yīng)貓和狗,最后哪個(gè)輸出節(jié)點(diǎn)的值大,那么這個(gè)數(shù)據(jù)就屬于哪個(gè)類(lèi)別(貓或者狗)。
對(duì)于簡(jiǎn)單的二分類(lèi)問(wèn)題這就可以解決了。但在實(shí)際情況中,有很多問(wèn)題無(wú)法簡(jiǎn)單的使用“一刀切”的方式解決,如圖3所示,假設(shè)貓和狗的數(shù)據(jù)分布如下圖,那么這就無(wú)法用“一刀切”的方式來(lái)解決了,但是我們可以切兩刀,橫豎各一刀,然后把相同的“塊”聯(lián)合起來(lái),這樣就解決了比較復(fù)雜的分類(lèi)問(wèn)題了。也有些問(wèn)題,需要用曲線來(lái)分割。在這種情況下,我們就需要比較復(fù)雜一點(diǎn)的神經(jīng)網(wǎng)絡(luò)了。以曲線為例,我們可以設(shè)計(jì)出一個(gè)三層的神經(jīng)網(wǎng)絡(luò)。這就是用神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)的一個(gè)非線性分類(lèi)器。理論上講,如何一個(gè)分類(lèi)器都可以設(shè)計(jì)一個(gè)神經(jīng)網(wǎng)絡(luò)來(lái)表征,也就是說(shuō),不管實(shí)際圖形如何,我們都可以設(shè)計(jì)一個(gè)神經(jīng)網(wǎng)絡(luò)來(lái)擬合。到這里,可能有人問(wèn),每個(gè)節(jié)點(diǎn)的這個(gè)函數(shù)要如何選擇?根據(jù)吳軍老師《數(shù)學(xué)之美》第二版中的說(shuō)法,為了提供人工神經(jīng)網(wǎng)絡(luò)的通用性,我們一般規(guī)定每個(gè)神經(jīng)元的函數(shù)只能針對(duì)其輸入的變量做一次非線性的變換。舉個(gè)例子說(shuō)就是假如某個(gè)神經(jīng)元Y 的輸入值是X1,X2,...Xn,它們的邊的權(quán)重分別為W1,W2,...Wn,那么計(jì)算Y節(jié)點(diǎn)的值分兩步進(jìn)行,第一步是計(jì)算來(lái)自輸入值的線性組合:
第二步是計(jì)算y=f(G),這里的f(⋅)可以使非線性的,,但因?yàn)槔锩娴膮?shù)是一個(gè)具體的值,所以不會(huì)很復(fù)雜。這兩個(gè)步驟的結(jié)合使得人工神經(jīng)網(wǎng)絡(luò)既靈活又不至于太復(fù)雜。這里的f(⋅)就是激活函數(shù)。線性模型的表達(dá)能力不夠,它的作用就是來(lái)增強(qiáng)模型的表示能力。人工神經(jīng)網(wǎng)絡(luò)可以很多層連接在一起,因此在人工神經(jīng)網(wǎng)絡(luò)中,主要的工作就是設(shè)計(jì)結(jié)構(gòu)(基層網(wǎng)絡(luò),每層幾個(gè)節(jié)點(diǎn)等)和激活函數(shù)。我們常用的激活函數(shù)包括Sigmoid函數(shù)、ReLU函數(shù)、Tanh函數(shù)等等。如下圖所示,這是幾種簡(jiǎn)單的激活函數(shù)的示意圖( https://ypwhs.gitbooks.io/nnplayground/content/Activation.html )
評(píng)論