小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

科學(xué)網(wǎng)

 imelee 2017-04-16

最近在研究Deep Learning在個(gè)性化推薦中的應(yīng)用,由于DL跟神經(jīng)網(wǎng)絡(luò)有很大的關(guān)系,索性開(kāi)篇就介紹下神經(jīng)網(wǎng)絡(luò)和自己所了解到的知識(shí)。接觸ML時(shí)間不是很長(zhǎng),難免有描述不當(dāng)?shù)牡胤?,旨在于交流學(xué)習(xí),有啥想法直接后面回復(fù)。

在這篇博文中,你將會(huì)看到如下知識(shí):

神經(jīng)網(wǎng)絡(luò)的基本模型,前向神經(jīng)網(wǎng)絡(luò)(Feed-forward neural network),General Feed-forward  NN 的組件,優(yōu)化目標(biāo)函數(shù),逆向誤差傳播算法。

“ 根據(jù)一個(gè)簡(jiǎn)化的統(tǒng)計(jì),人腦由百億條神經(jīng)組成 ― 每條神經(jīng)平均連結(jié)到其它幾千條神經(jīng)。通過(guò)這種連結(jié)方式,神經(jīng)可以收發(fā)不同數(shù)量的能量。神經(jīng)的一個(gè)非常重要的功能是它們對(duì)能量的接受并不是立即作出響應(yīng),而 是將它們累加起來(lái),當(dāng)這個(gè)累加的總和達(dá)到某個(gè)臨界閾值時(shí),它們將它們自己的那部分能量發(fā)送給其它的神經(jīng)。大腦通過(guò)調(diào)節(jié)這些連結(jié)的數(shù)目和強(qiáng)度進(jìn)行學(xué)習(xí)。盡管 這是個(gè)生物行為的簡(jiǎn)化描述。但同樣可以充分有力地被看作是神經(jīng)網(wǎng)絡(luò)的模型。 ”

人的大腦是非常復(fù)雜的,特別是大腦神經(jīng)系統(tǒng),可以說(shuō)沒(méi)有它,大腦就是一些組織,細(xì)胞而已。在機(jī)器學(xué)習(xí)領(lǐng)域,對(duì)神經(jīng)網(wǎng)絡(luò)的研究應(yīng)該是希望從大腦的工作機(jī)制和神經(jīng)系統(tǒng)結(jié)構(gòu)中獲得啟發(fā),一方面可以設(shè)計(jì)高效的學(xué)習(xí)算法,讓機(jī)器也能夠?qū)?wèn)題進(jìn)行大規(guī)模學(xué)習(xí),另一方面可以從神經(jīng)元的并行工作方式中得到啟發(fā),設(shè)計(jì)高效的并行計(jì)算算法,讓機(jī)器擁有更強(qiáng)的實(shí)時(shí)處理大規(guī)模數(shù)據(jù)的能力。

在這里就不介紹生物上的神經(jīng)網(wǎng)絡(luò)了,一來(lái)是不懂,二來(lái)這里的神經(jīng)網(wǎng)絡(luò)一概指 機(jī)器學(xué)習(xí)領(lǐng)域的神經(jīng)網(wǎng)絡(luò)模型(人工神經(jīng)網(wǎng)絡(luò)),如果你對(duì)這個(gè)生物的神經(jīng)網(wǎng)絡(luò)感興趣的話,可以參考《A Brief Introduction to Neural Networks · D. Kriesel》,這篇文章有講到不同類型的神經(jīng)網(wǎng)絡(luò),大多數(shù)跟生物神經(jīng)系統(tǒng)的基本結(jié)構(gòu)有關(guān)系。在機(jī)器學(xué)習(xí)領(lǐng)域的神經(jīng)網(wǎng)絡(luò)一般會(huì)指 前向傳播神經(jīng)網(wǎng)絡(luò) (Feed-forward neural network),這種模型較為通用。

人工神經(jīng)網(wǎng)絡(luò)的基本模型

前向神經(jīng)網(wǎng)絡(luò)



上圖描述的是一個(gè)目前研究最為成熟Shallow 結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)(只含有單層隱藏層神經(jīng)元的結(jié)構(gòu))。第一層為輸入層 (input layer ),第二層稱為隱藏層 ( hidden layer ),最后一層為輸出層( output layer )。神經(jīng)元之間都是由低層出發(fā),終止于高層神經(jīng)元的一條有向邊進(jìn)行連接,每條邊都有自己的權(quán)重。每個(gè)神經(jīng)元都是一個(gè)計(jì)算單元,如在Feed-forward neural network 中,除輸入層神經(jīng)元外,每個(gè)神經(jīng)元為一個(gè)計(jì)算單元,可以通過(guò)一個(gè)計(jì)算函數(shù) f()  來(lái)表示,函數(shù)的具體形式可以自己定義,現(xiàn)在用的較多的是 感知器計(jì)算神經(jīng)元,如果你對(duì)感知器有所了解的話,理解起來(lái)會(huì)容易很多。 可以計(jì)算此時(shí)神經(jīng)元所具有的能量值,當(dāng)該值超過(guò)一定閥值的時(shí)候神經(jīng)元的狀態(tài)就會(huì)發(fā)生改變,神經(jīng)元只有兩種狀態(tài),激活或未激活。在實(shí)際的人工神經(jīng)網(wǎng)絡(luò)中,一般是用一種概率的方式去表示神經(jīng)元是否處于激活狀態(tài),可以用 h(f) 來(lái)表示,f 代表神經(jīng)元的能量值,h(f) 代表該能量值使得神經(jīng)元的狀態(tài)發(fā)生改變的概率有多大,能量值越大,處于激活狀態(tài)的概率就越高。到這部分你已經(jīng)接觸到了關(guān)于神經(jīng)網(wǎng)絡(luò)的幾個(gè)基本術(shù)語(yǔ),下面用更加規(guī)范的符號(hào)來(lái)表示,神經(jīng)元的激活值(activations)  f() ,表示計(jì)算神經(jīng)元的能量值, 神經(jīng)元的激活狀態(tài) h(f) ,h 表示激活函數(shù)。

激活函數(shù)有好幾種形式,這里列舉兩種,

f(z) = .frac{1}{1+.exp(-z)}.                                 f(z) = .tanh(z) = .frac{e^z - e^{-z}}{e^z + e^{-z}},


General Feed-forward  NN 的組件

假設(shè)有 包涵有N個(gè)樣本的數(shù)據(jù)集 = { (X1,T1) , (X2,T2) , (X3,T3)......  (Xn,Tn)} ,其中T的取值可以根據(jù)你的任務(wù)不同而不同,比如你要用神經(jīng)網(wǎng)絡(luò)進(jìn)行回歸分析,T ( target value)就是一個(gè)連續(xù)值,如果你面對(duì)的是一個(gè)回歸問(wèn)題的話,T 的取值就是離散的,比如二分類問(wèn)題 T = { 0,1 },輸入樣本的每個(gè)觀測(cè)值(Observation) Xi 都具有相同的維度數(shù)量 m ,與之對(duì)應(yīng)的輸入層的神經(jīng)元個(gè)數(shù)也為 (m + 1)個(gè),包含有一個(gè)偏置神經(jīng)元( bais unit )。

這里采用了Andrew Ng的 Deep Learning tutorials 上的符號(hào)系統(tǒng)。nl表示神經(jīng)網(wǎng)絡(luò)具有的總層數(shù), L_{n_l} 表示最后一層神經(jīng)網(wǎng)絡(luò),下標(biāo)就是表示第幾層,L1表示第一層,也就是輸入層。低層與高層的神經(jīng)元之間都是通過(guò)帶權(quán)重的單向邊進(jìn)行連接,(W,b)表示整個(gè)神經(jīng)網(wǎng)絡(luò)中的參數(shù),W 表示連邊的權(quán)重,b表示偏置。在上圖中(W,b) = (W(1),b(1),W(2),b(2)),上角標(biāo)表示第 i 層與(i + 1)層之間的權(quán)重系數(shù)矩陣(如無(wú)特殊說(shuō)明,下文中的上角標(biāo)都表示層號(hào),當(dāng)然對(duì)于系數(shù)矩陣和神經(jīng)元來(lái)說(shuō),上角標(biāo)的意思是不太一樣的),W^{(l)}_{ij}表示第L層的第 j 個(gè)神經(jīng)元與第 L + 1 層的第 i 個(gè)神經(jīng)元之間的權(quán)重系數(shù)。在上圖的例子中 W^{(1)} .in .Re^{3.times 3},W^{(2)} .in .Re^{1.times 3} 。 該部分采用向量化的表述方式,這個(gè)為后面的向量化編程會(huì)帶來(lái)非常大的好處,不用一個(gè)一個(gè)的去記哪個(gè)跟哪個(gè)權(quán)重系數(shù)對(duì)應(yīng),直接一個(gè)矩陣,非常簡(jiǎn)潔。整個(gè)神經(jīng)網(wǎng)絡(luò)可以用一個(gè)函數(shù)  hW,b(x) 來(lái)表示。

接著來(lái)看下跟每個(gè)神經(jīng)元都相關(guān)的符號(hào),a^{(l)}_i = f(z^{(l)}_i)表示第L層的第i個(gè)神經(jīng)元的激活狀態(tài)(activations),該過(guò)程是非線性操作,這個(gè)概念非常重要,要牢記。當(dāng)L = 1的時(shí)候,可以認(rèn)為a^{(1)}_i = x_i 就是等于輸入神經(jīng)元的值, z^{(l)}_i表示該神經(jīng)元具有的能量值。

到此為止,你已經(jīng)可以掌握一個(gè)神經(jīng)網(wǎng)絡(luò)中的基本符號(hào)和表示方法,盡快熟悉這些符號(hào),在你的腦子里面神經(jīng)網(wǎng)絡(luò)已經(jīng)不再是抽象的神經(jīng)元之間的連接方式了,可以通過(guò)上述的符號(hào)來(lái)刻畫(huà),這對(duì)后面公式的理解會(huì)有很大的幫助。

下面來(lái)看下神經(jīng)網(wǎng)絡(luò)的基本成分( neural network components)

對(duì)線性模型 (Linear Model ) 比較了解的人應(yīng)該非常熟悉這個(gè)公式

線性模型可以表示成有限個(gè)基函數(shù)(basis function)的線性融合,基函數(shù)的形式可以自己定義,舉個(gè)簡(jiǎn)單的例子,可以是關(guān)于輸入 m 次冪的多項(xiàng)式 x^m(順便吐槽一下,這里敲公式實(shí)在麻煩)。實(shí)際上神經(jīng)網(wǎng)絡(luò)也可以看成是一些線性函數(shù)的疊加,不過(guò)中間有了一個(gè)激活函數(shù),情況就變得跟線性模型不一樣了。還是以FNN(Feed-forward Neural Network)為例對(duì)除輸入層之外的每個(gè)神經(jīng)元進(jìn)行 .textstyle z_i^{(2)} = .sum_{j=1}^n W^{(1)}_{ij} x_j + b^{(1)}_i 的操作就可以得到神經(jīng)元的能量值,每個(gè)神經(jīng)元的激活狀態(tài)就可以表示成 a^{(l)}_i = f(z^{(l)}_i) ( 非線性操作 ) ,下面對(duì)整個(gè)網(wǎng)絡(luò)進(jìn)行同樣的操作就可以得到

.begin{align}a_1^{(2)} &= f(W_{11}^{(1)}x_1 + W_{12}^{(1)} x_2 + W_{13}^{(1)} x_3 + b_1^{(1)})  ..a_2^{(2)} &= f(W_{21}^{(1)}x_1 + W_{22}^{(1)} x_2 + W_{23}^{(1)} x_3 + b_2^{(1)})  ..a_3^{(2)} &= f(W_{31}^{(1)}x_1 + W_{32}^{(1)} x_2 + W_{33}^{(1)} x_3 + b_3^{(1)})  ..h_{W,b}(x) &= a_1^{(3)} =  f(W_{11}^{(2)}a_1^{(2)} + W_{12}^{(2)} a_2^{(2)} + W_{13}^{(2)} a_3^{(2)} + b_1^{(2)}) .end{align}

上述過(guò)程的向量化表示,這里的f和h函數(shù)就都變成了向量函數(shù),如 f([z1,z2,z3]) = [f(z1),f(z2),f(z3)]

.begin{align}z^{(2)} &= W^{(1)} x + b^{(1)} ..a^{(2)} &= f(z^{(2)}) ..z^{(3)} &= W^{(2)} a^{(2)} + b^{(2)} ..h_{W,b}(x) &= a^{(3)} = f(z^{(3)}).end{align}

到該部分,你已經(jīng)基本掌握了一個(gè)神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu),如何執(zhí)行得到輸出,但是還差如何去訓(xùn)練得到我們的參數(shù) (W,b)。上面都是以單隱藏層的神經(jīng)網(wǎng)絡(luò)而且輸出只有一個(gè)神經(jīng)元,如果你知道了如何去訓(xùn)練這個(gè)簡(jiǎn)易的神經(jīng)網(wǎng)絡(luò),那下面這個(gè)看起來(lái)更復(fù)雜一些的例子你同樣知道該如何去訓(xùn)練。

Network3322.png


優(yōu)化目標(biāo)函數(shù)

這個(gè)是在用機(jī)器學(xué)習(xí)方式為問(wèn)題建模的第二部,確定你的損失函數(shù)(Loss Function),也就是你的優(yōu)化目標(biāo)。該過(guò)程會(huì)涉及到一些基本的優(yōu)化方法,統(tǒng)計(jì)學(xué)概念以及一些實(shí)際的應(yīng)用經(jīng)驗(yàn)。當(dāng)然如果你跟我一樣是剛接觸機(jī)器學(xué)習(xí)(Machine Learning)不久的話,了解了一些關(guān)于梯度優(yōu)化方法的話,你就能掌控這里的一切啦。

假設(shè)我們有m個(gè)樣本  .{ (x^{(1)}, y^{(1)}), .ldots, (x^{(m)}, y^{(m)}) .} ,這里采用的是二次平方和最小化 (最小二乘)作為損失函數(shù)(關(guān)于損失函數(shù)的類型可以參考《統(tǒng)計(jì)學(xué)習(xí)方法》- 李航)  ,用該公式表示損失函數(shù).begin{align}J(W,b; x,y) = .frac{1}{2} .left.| h_{W,b}(x) - y .right.|^2..end{align},在實(shí)際優(yōu)化目標(biāo)函數(shù)需要表示成如下形式,比上面的公式多了一個(gè) "+"好后面的內(nèi)容,該項(xiàng)也稱作 weight decay,該部分是起正則作用,防止過(guò)擬合。

.begin{align}J(W,b)&= .left[ .frac{1}{m} .sum_{i=1}^m J(W,b;x^{(i)},y^{(i)}) .right]                       + .frac{.lambda}{2} .sum_{l=1}^{n_l-1} .; .sum_{i=1}^{s_l} .; .sum_{j=1}^{s_{l+1}} .left( W^{(l)}_{ji} .right)^2 ..&= .left[ .frac{1}{m} .sum_{i=1}^m .left( .frac{1}{2} .left.| h_{W,b}(x^{(i)}) - y^{(i)} .right.|^2 .right) .right]                       + .frac{.lambda}{2} .sum_{l=1}^{n_l-1} .; .sum_{i=1}^{s_l} .; .sum_{j=1}^{s_{l+1}} .left( W^{(l)}_{ji} .right)^2.end{align}

之所以采用二次損失函數(shù),我想應(yīng)該是為了構(gòu)建一個(gè)具有 convex 性質(zhì)的目標(biāo)函數(shù),便于使用梯度優(yōu)化的方法尋找最優(yōu)值。下圖就是在參數(shù)(w,b)下的誤差曲面(error surface)。

     

下面公式表示了權(quán)重系數(shù)更新的方式,也就是為了找到一個(gè)使得目標(biāo)函數(shù)最小值的系數(shù) (w,b) 。在整個(gè)優(yōu)化的過(guò)程中,最重要的就是如何求解不同W^{(l)}_{ij}的梯度信息,為了求解這個(gè)東西,又要來(lái)一個(gè)新的概念了,逆誤差傳播(error backpropagation)學(xué)習(xí)算法。機(jī)器學(xué)習(xí)的問(wèn)題總是會(huì)這樣,找到優(yōu)化目標(biāo)以后,就需要相應(yīng)的學(xué)習(xí)算法尋找最優(yōu)值,此時(shí)的系數(shù)就是我們所要選擇的模型的參數(shù)了。

.begin{align}W_{ij}^{(l)} &= W_{ij}^{(l)} - .alpha .frac{.partial}{.partial W_{ij}^{(l)}} J(W,b) ..b_{i}^{(l)} &= b_{i}^{(l)} - .alpha .frac{.partial}{.partial b_{i}^{(l)}} J(W,b).end{align}

.begin{align}.frac{.partial}{.partial W_{ij}^{(l)}} J(W,b) &=.left[ .frac{1}{m} .sum_{i=1}^m .frac{.partial}{.partial W_{ij}^{(l)}} J(W,b; x^{(i)}, y^{(i)}) .right] + .lambda W_{ij}^{(l)} ...frac{.partial}{.partial b_{i}^{(l)}} J(W,b) &=.frac{1}{m}.sum_{i=1}^m .frac{.partial}{.partial b_{i}^{(l)}} J(W,b; x^{(i)}, y^{(i)}).end{align}


逆向誤差傳播算法 (error backpropagation)

如其名,該方法就是讓輸出層的y 與 輸入 x 的誤差往回傳播。因?yàn)槲覀冊(cè)谇竺總€(gè)參數(shù)的梯度的時(shí)候是通過(guò)對(duì)真值與預(yù)測(cè)值之間的誤差項(xiàng)求導(dǎo)得到的,對(duì)于輸出神經(jīng)元還可以做到,但是我們無(wú)法獲取隱藏層的真值,這就造成了隱藏層的神經(jīng)元梯度不可求的尷尬局面。還好領(lǐng)域大牛們想到了這種方式,讓輸出層的誤差往回傳播,計(jì)算出底層神經(jīng)元的激活狀態(tài)要為該誤差付出多大的責(zé)任,也可以理解成該神經(jīng)元的誤差值,用.delta^{(l)}_i表示,.delta^{(n_l)}_i表示輸出層神經(jīng)元的誤差。


逆誤差傳播算法執(zhí)行過(guò)程:

1,先執(zhí)行一次前向傳播,計(jì)算出每一層的神經(jīng)元的激活值a^{(l)}_i = f(z^{(l)}_i),直到輸出層為止

2,對(duì)于每一個(gè)輸出層神經(jīng)元,采用如下方式計(jì)算誤差(實(shí)際上在Andrew的資料中省略了很多推到部分,該部分我后面會(huì)放上,你們先理解個(gè)大概過(guò)程)

                    .begin{align}.delta^{(n_l)}_i= .frac{.partial}{.partial z^{(n_l)}_i} .;.;        .frac{1}{2} .left.|y - h_{W,b}(x).right.|^2 = - (y_i - a^{(n_l)}_i) .cdot f'(z^{(n_l)}_i).end{align}

3,對(duì)于較低層的神經(jīng)元的誤差用如下公式進(jìn)行表示,l = n_l-1, n_l-2, n_l-3, .ldots, 2

                                     .delta^{(l)}_i = .left( .sum_{j=1}^{s_{l+1}} W^{(l)}_{ji} .delta^{(l+1)}_j .right) f'(z^{(l)}_i)

4,關(guān)于不同參數(shù)的梯度

                   .begin{align}.frac{.partial}{.partial W_{ij}^{(l)}} J(W,b; x, y) &= a^{(l)}_j .delta_i^{(l+1)} ...frac{.partial}{.partial b_{i}^{(l)}} J(W,b; x, y) &= .delta_i^{(l+1)}..end{align}

下面來(lái)看下.delta^{(l)}_i項(xiàng)的具體推導(dǎo)過(guò)程。


PS:其實(shí)要想更好的理解該推導(dǎo)過(guò)程可以參考《Pattern Recognition and Machine Learning》中5.3節(jié)部分關(guān)于估計(jì)誤差函數(shù)梯度的內(nèi)容,由于里面采用的符號(hào)系統(tǒng)跟Andrew的是相反的,我就沒(méi)有放上來(lái),借用了一個(gè)簡(jiǎn)易的推導(dǎo)過(guò)程。



摘自《Deep Learning 教程中文版》--鄧侃老師主導(dǎo),各路英雄好漢共同翻譯


下面來(lái)看一個(gè)利用神經(jīng)網(wǎng)絡(luò)擬合不同函數(shù)(Linear Regression)的例子,你可以在《Pattern Recognition and Machine Learning》的5.1節(jié)中找到。4副圖分別對(duì)應(yīng)四個(gè)不同的函數(shù),紅色的實(shí)線表示利用神經(jīng)網(wǎng)絡(luò)擬合的函數(shù),圓點(diǎn)表示原函數(shù)生成的樣本點(diǎn),虛線表示不同的神經(jīng)元在對(duì)應(yīng)于不同 x 取值的輸出值,幾條虛線經(jīng)過(guò)線性添加后得到的就是擬合后的曲線。



總結(jié):

1,簡(jiǎn)易的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)并不復(fù)雜,但在實(shí)際訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)的時(shí)候是會(huì)遇見(jiàn)很多問(wèn)題的,比如 選擇線上梯度下降還是Batch梯度下降 ,隱藏層神經(jīng)元個(gè)數(shù)的選擇, 是選擇多層神經(jīng)網(wǎng)絡(luò)還是單層。這些都需要多多實(shí)踐才行。

2,從理論上來(lái)講,神經(jīng)網(wǎng)絡(luò)是可以擬合任何函數(shù),但實(shí)際上并非如此。就我個(gè)人的實(shí)際經(jīng)驗(yàn)來(lái)看,對(duì)于某些數(shù)據(jù)神經(jīng)網(wǎng)絡(luò)是失敗的。

3,模型不是萬(wàn)能,還需要做很多功課。

#梯度信息在訓(xùn)練 NN 中的使用

#Batch 梯度上升和線上梯度上升的比較


理解了該部分的神經(jīng)網(wǎng)絡(luò)知識(shí)對(duì)后面理解深度神經(jīng)網(wǎng)絡(luò)會(huì)很大幫助,包括其中的優(yōu)化方法,能量模型(Energy-based Model),以及RBM(EBM的一個(gè)特例)


參考文獻(xiàn):

《Pattern Recognition and Machine Learning》

Andrew Ng's Wiki Page http://deeplearning./wiki/index.php/Neural_Networks

http://www./billhsu/archive/2008/08/30/60455.html

Geoff Hinton's Coursera Lectures  https://d396qusza40orc./neuralnets/lecture_slides%2Flec1.pdf




http://blog.sciencenet.cn/blog-696950-697101.html


下一篇:奇異值分解(SVD) --- 線性變換幾何意義

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多