日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

 天朗氣清uizw04 2020-02-18

準(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é)很陌生。

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

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

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

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

一個(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)元。

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

輸出層神經(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)

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

神經(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í)的部分。

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

Sigmoid 函數(shù)

import numpy as npdef 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 outputoutput = 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)。

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

一個(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è)如下圖一樣的矩陣。

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

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

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

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

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

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

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

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

注意?。?/strong>:上圖中的權(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ì)。

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

用先前神經(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 npdef sigmoid(x): # sigmoid function return 1/(1+np.exp(-x))# 神經(jīng)網(wǎng)絡(luò)各層神經(jīng)元數(shù)量N_input = 3N_hidden = 2N_output = 1np.random.seed(42)# Make some fake dataX = 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)

參考資料

  • All formulas are generated by HostMath
  • Some figures are taken from the Udacity deep learning course
  • 【模式識(shí)別】多層感知器 MLP
  • CS224d:
    TensorFlow Tutorial
  • CS231n Winter 2016 Lecture 4 Backpropagation, Neural Networks

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(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)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多