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

分享

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

 天朗氣清uizw04 2020-02-18

準(zhǔn)備工作

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

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

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

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

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

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

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

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

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

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

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

一個(gè)無隱層的神經(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)網(wǎng)絡(luò)

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

對于生物學(xué)意義上的神經(jīng)元來說,通常存在一個(gè)閾值(threshold)來使其達(dá)到興奮的狀態(tài),也就是被激活。在我們所討論的神經(jīng)網(wǎng)絡(luò)中,我們的神經(jīng)元將會(huì)通過輸入值和激活函數(shù)(activation function)計(jì)算一個(gè)輸出值。激活函數(shù)最值得稱贊的一點(diǎn)就是它可以是任何類型的函數(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ò)

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

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

入門神經(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)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

結(jié)合上面所學(xué)的知識(shí),我們可以快速構(gòu)建一個(gè)單隱層神經(jīng)網(wǎng)絡(luò)的前饋(即預(yù)測)過程了。我們?nèi)匀皇褂?sigmoid 函數(shù)作為我們的激活函數(shù)(并且在之后很長時(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)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

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

    類似文章 更多