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

下一篇傳送門(mén)

英文原文,雖然也是我寫(xiě)的 Chinglish敦跌,但是因?yàn)橹霸诩幽么竽承〈逍I蠈W(xué)導(dǎo)致中文術(shù)語(yǔ)可能會(huì)表述不準(zhǔn)憋沿。

文章和代碼都在這兒,用來(lái)騙 歡迎Star GitHub repo

準(zhǔn)備工作

讀懂這篇文章季稳,需要你有以下方面的知識(shí)

  • 如何求導(dǎo)數(shù)
  • 基本的矩陣乘法

如果有下列知識(shí)就更好了

  • 懂一點(diǎn)機(jī)器學(xué)習(xí)的知識(shí)擅这,比如線性回歸
  • 知道什么是 感知機(jī)(perceptron)

有任何沒(méi)看懂的部分,歡迎留言景鼠,信不信我半小時(shí)內(nèi)秒回仲翎。

一個(gè)巨簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)(A Deadly Simple NN)

如果你對(duì)神經(jīng)網(wǎng)絡(luò)(neural network)感興趣或者關(guān)注過(guò)相關(guān)的文章,那下圖中的這個(gè)模型想必你不會(huì)感覺(jué)很陌生。

一個(gè)人工神經(jīng)網(wǎng)絡(luò)模型

不過(guò)這個(gè)可能對(duì)于初學(xué)者有點(diǎn)不太友好谭确?那看看下面這個(gè)簡(jiǎn)化版的

一個(gè)無(wú)隱層的神經(jīng)網(wǎng)絡(luò)

圖里的這些東西帘营,咱們一個(gè)一個(gè)的捋一遍。每個(gè)藍(lán)色的圓代表一個(gè)神經(jīng)元(neuron)逐哈。每個(gè)方塊代表一個(gè)運(yùn)算芬迄,比如 + 代表求和。上圖中最左邊的三個(gè)神經(jīng)元組成了輸入層(input layer)昂秃,包含一個(gè) h 的神經(jīng)元組成了輸出層(output layer)禀梳,并且這一層只有這一個(gè)神經(jīng)元。

輸出層神經(jīng)元的輸入值

對(duì)于生物學(xué)意義上的神經(jīng)元來(lái)說(shuō)肠骆,通常存在一個(gè)閾值(threshold)來(lái)使其達(dá)到興奮的狀態(tài)算途,也就是被激活。在我們所討論的神經(jīng)網(wǎng)絡(luò)中蚀腿,我們的神經(jīng)元將會(huì)通過(guò)輸入值和激活函數(shù)(activation function)計(jì)算一個(gè)輸出值嘴瓤。激活函數(shù)最值得稱(chēng)贊的一點(diǎn)就是它可以是任何類(lèi)型的函數(shù),包括但不限于躍階函數(shù)莉钙,多項(xiàng)式函數(shù)或者 sigmoid 函數(shù)廓脆。h 是輸出神經(jīng)元的輸入值,結(jié)合激活函數(shù)磁玉,輸出神經(jīng)元會(huì)輸出 f(h) 計(jì)算的結(jié)果 y停忿,也就是整個(gè)神經(jīng)網(wǎng)絡(luò)的輸出值。

如果你選擇 f(h) = h 作為你的激活函數(shù)蚊伞,那么你的神經(jīng)網(wǎng)絡(luò)輸出結(jié)果將會(huì)是下圖中的這個(gè)公式席赂,這里 y = f(h)

神經(jīng)網(wǎng)絡(luò)的輸出

如果你覺(jué)得這看起來(lái)是一個(gè)線性回歸的模型时迫,那就對(duì)了颅停。如果你的激活函數(shù)是連續(xù)可導(dǎo)的,那么(通常情況下)你就可以使用一個(gè)叫做 梯度下降(gradient descent) 的方法來(lái)訓(xùn)練你的網(wǎng)絡(luò)掠拳。不過(guò)這理解起來(lái)要稍微麻煩一點(diǎn)便监,在我們深入到訓(xùn)練的步驟之前,我們先來(lái)編寫(xiě)一個(gè)很簡(jiǎn)單的程序來(lái)了解神經(jīng)網(wǎng)絡(luò)作出預(yù)測(cè)的過(guò)程碳想。我們將使用 sigmoid 函數(shù)作為激活函數(shù), Python 作為編程語(yǔ)言毁靶。預(yù)測(cè)的這個(gè)過(guò)程是一種前饋(feedforward)的計(jì)算胧奔,僅僅有這一部分的神經(jīng)網(wǎng)絡(luò)是不能學(xué)習(xí)的(例如,通過(guò)反向傳播(backpropagation))预吆,但我們稍后再關(guān)注訓(xùn)練學(xué)習(xí)的部分龙填。

Sigmoid 函數(shù)
import numpy as np

def sigmoid(x):
    # sigmoid function
    return 1/(1 + np.exp(-x))

inputs = np.array([0.7, -0.3])
weights = np.array([0.1, 0.8])
bias = -0.1

# calculate the output
output = sigmoid(np.dot(weights, inputs) + bias)

print('Output:')
print(output)

代碼跟這兒呢

第一個(gè)單隱層神經(jīng)網(wǎng)絡(luò)(Your First 2-Layer NN)

注:?jiǎn)坞[層,即為包括一個(gè)隱層,一個(gè)輸出層的神經(jīng)網(wǎng)絡(luò)岩遗,輸入層和輸出層因?yàn)槭潜仨毜纳壬蹋圆挥?jì)數(shù)。

現(xiàn)在你已經(jīng)基本知道了一個(gè)神經(jīng)網(wǎng)絡(luò)是怎么計(jì)算預(yù)測(cè)結(jié)果的宿礁。在現(xiàn)實(shí)生活中案铺,我們面臨的預(yù)測(cè)問(wèn)題往往十分復(fù)雜,這樣簡(jiǎn)單的網(wǎng)絡(luò)結(jié)構(gòu)可能遠(yuǎn)遠(yuǎn)不夠梆靖。這里我們要引入一個(gè)新的概念控汉,隱層(hidden layer)

一個(gè)擁有三個(gè)輸入層神經(jīng)元返吻,兩個(gè)隱層神經(jīng)元和一個(gè)輸出層神經(jīng)元的神經(jīng)網(wǎng)絡(luò)

在第一部分那個(gè)簡(jiǎn)單的網(wǎng)絡(luò)模型中姑子,我們的權(quán)重(weight)是一個(gè)向量。但是對(duì)于多數(shù)神經(jīng)網(wǎng)絡(luò)來(lái)說(shuō)测僵,其實(shí)權(quán)重將會(huì)是一個(gè)如下圖一樣的矩陣街佑。

三個(gè)輸入層神經(jīng)元和兩個(gè)隱層神經(jīng)元的權(quán)重矩陣

結(jié)合第一部分的理解和上面單隱層神經(jīng)網(wǎng)的模型,你也許已經(jīng)知道怎么通過(guò)這個(gè)模型計(jì)算 h1 的具體數(shù)值了捍靠。我們給出一個(gè)簡(jiǎn)單的公式定義

計(jì)算隱層神經(jīng)元輸入值的公式

對(duì)于我們所關(guān)注的這個(gè)單隱層模型來(lái)說(shuō)沐旨,它是下面這樣的

計(jì)算隱層輸入值的矩陣乘法

注意!剂公!:上圖中的權(quán)重下角標(biāo)已經(jīng)更改為矩陣的表達(dá)方式希俩,并不是和單隱層神經(jīng)網(wǎng)絡(luò)圖中的下角標(biāo)所對(duì)應(yīng)的。因?yàn)樵诰仃嚨谋磉_(dá)方法中纲辽,是用行/列的順序來(lái)標(biāo)注的颜武。所以如果用示意圖中的方法標(biāo)注的話,會(huì)造成一些誤會(huì)拖吼。

用先前神經(jīng)網(wǎng)絡(luò)模型圖中的下角標(biāo)所標(biāo)注的矩陣

記住鳞上,上圖中的這個(gè)計(jì)算過(guò)程使用的并非是矩陣使用的角標(biāo),但這個(gè)和我們上面單隱層神經(jīng)網(wǎng)絡(luò)的示意圖中的標(biāo)注是一致的吊档。

結(jié)合上面所學(xué)的知識(shí)篙议,我們可以快速構(gòu)建一個(gè)單隱層神經(jīng)網(wǎng)絡(luò)的前饋(即預(yù)測(cè))過(guò)程了。我們?nèi)匀皇褂?sigmoid 函數(shù)作為我們的激活函數(shù)(并且在之后很長(zhǎng)時(shí)間都會(huì)用這個(gè)函數(shù))怠硼。

待辦事項(xiàng):

  • 計(jì)算隱層的輸入值
  • 計(jì)算隱層的輸出值
  • 計(jì)算輸出層的輸出值
  • 計(jì)算輸出層的輸出值
import numpy as np

def sigmoid(x):
    # sigmoid function
    return 1/(1+np.exp(-x))

# 神經(jīng)網(wǎng)絡(luò)各層神經(jīng)元數(shù)量
N_input = 3
N_hidden = 2
N_output = 1

np.random.seed(42)
# Make some fake data
X = np.random.randn(4)

# 生成輸入層到隱層/隱層到輸出層權(quán)重
weights_in_hidden = np.random.normal(0, scale=0.1, size=(N_input, N_hidden))
weights_hidden_out = np.random.normal(0, scale=0.1, size=(N_hidden, N_output))

# 計(jì)算隱層的輸入值/輸出值
hidden_layer_in = np.dot(X, weights_in_hidden)
hidden_layer_out = sigmoid(hidden_layer_in)

print('Hidden-layer Output:')
print(hidden_layer_out)

# 計(jì)算輸出層的輸入值/輸出值
output_layer_in = np.dot(hidden_layer_out, weights_hidden_out)
output_layer_out = sigmoid(output_layer_in)

print('Output-layer Output:')
print(output_layer_out)

代碼在這兒

參考資料

Thanks for reading. If you find any mistake/typo in this blog, please don't hesitate to let me know, you can reach me by email: jyang7[at]ualberta.ca

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鬼贱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子香璃,更是在濱河造成了極大的恐慌这难,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件葡秒,死亡現(xiàn)場(chǎng)離奇詭異姻乓,居然都是意外死亡嵌溢,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)蹋岩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)赖草,“玉大人,你說(shuō)我怎么就攤上這事剪个⊙砥铮” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵禁偎,是天一觀的道長(zhǎng)腿堤。 經(jīng)常有香客問(wèn)我,道長(zhǎng)如暖,這世上最難降的妖魔是什么笆檀? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮盒至,結(jié)果婚禮上酗洒,老公的妹妹穿的比我還像新娘。我一直安慰自己枷遂,他們只是感情好樱衷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著酒唉,像睡著了一般矩桂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上痪伦,一...
    開(kāi)封第一講書(shū)人閱讀 51,775評(píng)論 1 307
  • 那天侄榴,我揣著相機(jī)與錄音,去河邊找鬼网沾。 笑死癞蚕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的辉哥。 我是一名探鬼主播桦山,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼醋旦!你這毒婦竟也來(lái)了恒水?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤饲齐,失蹤者是張志新(化名)和其女友劉穎寇窑,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體箩张,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡甩骏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了先慷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饮笛。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖论熙,靈堂內(nèi)的尸體忽然破棺而出福青,到底是詐尸還是另有隱情,我是刑警寧澤脓诡,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布无午,位于F島的核電站,受9級(jí)特大地震影響祝谚,放射性物質(zhì)發(fā)生泄漏宪迟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一交惯、第九天 我趴在偏房一處隱蔽的房頂上張望次泽。 院中可真熱鬧,春花似錦席爽、人聲如沸意荤。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)玖像。三九已至,卻和暖如春齐饮,著一層夾襖步出監(jiān)牢的瞬間捐寥,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工沈矿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留上真,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓羹膳,卻偏偏與公主長(zhǎng)得像睡互,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子陵像,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

推薦閱讀更多精彩內(nèi)容