0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于Numpy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò):反向傳播

zhKF_jqr_AI ? 來源:未知 ? 作者:steve ? 2018-04-01 09:29 ? 次閱讀

和DeepMind數(shù)據(jù)科學(xué)家、Udacity深度學(xué)習(xí)導(dǎo)師Andrew Trask一起,基于Numpy手寫神經(jīng)網(wǎng)絡(luò),更深刻地理解反向傳播這一概念。

總結(jié):基于可以嘗試和修改的玩具代碼,我能取得最好的學(xué)習(xí)效果。本教程基于一個(gè)非常簡單的玩具樣例(簡短的Python代碼實(shí)現(xiàn))介紹反向傳播這一概念。

如果你對我的文章感興趣,歡迎在推特上關(guān)注 電子說,也歡迎給我反饋。

直接給我代碼

  1. X = np.array([ [0,0,1],[0,1,1],[1,0,1],[1,1,1] ])

  2. y = np.array([[0,1,1,0]]).T

  3. syn0 =2*np.random.random((3,4)) -1

  4. syn1 =2*np.random.random((4,1)) -1

  5. forjinxrange(60000):

  6. l1 =1/(1+np.exp(-(np.dot(X,syn0))))

  7. l2 =1/(1+np.exp(-(np.dot(l1,syn1))))

  8. l2_delta = (y - l2)*(l2*(1-l2))

  9. l1_delta = l2_delta.dot(syn1.T) * (l1 * (1-l1))

  10. syn1 += l1.T.dot(l2_delta)

  11. syn0 += X.T.dot(l1_delta)

其他語言:D、C++、CUDA

不過,上面的代碼有點(diǎn)過于凝練了……讓我們循序漸進(jìn)。

一、微型玩具網(wǎng)絡(luò)

基于反向傳播的神經(jīng)網(wǎng)絡(luò)嘗試通過輸入來預(yù)測輸出。

基于Numpy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò):反向傳播

嘗試通過上表的輸入預(yù)測輸出。我們可以通過測量輸入值和輸出值的統(tǒng)計(jì)數(shù)據(jù)來解決這一問題。如果我們這么干,我們會發(fā)現(xiàn)最左邊的輸入和輸出完全相關(guān)(perfectly correlated)。最簡單形式的反向傳播,就是通過類似的測量統(tǒng)計(jì)數(shù)據(jù)的方式來建立模型。

雙層神經(jīng)網(wǎng)絡(luò)

  1. importnumpyasnp

  2. # sigmoid函數(shù)

  3. defnonlin(x,deriv=False):

  4. if(deriv==True):

  5. returnx*(1-x)

  6. return1/(1+np.exp(-x))

  7. # 輸入數(shù)據(jù)集

  8. X = np.array([ [0,0,1],

  9. [0,1,1],

  10. [1,0,1],

  11. [1,1,1] ])

  12. # 輸出數(shù)據(jù)集

  13. y = np.array([[0,0,1,1]]).T

  14. # 設(shè)置隨機(jī)數(shù)種子使計(jì)算結(jié)果是確定的

  15. # (實(shí)踐中這是一個(gè)很好的做法)

  16. np.random.seed(1)

  17. # 隨機(jī)初始化權(quán)重(均值0)

  18. syn0 =2*np.random.random((3,1)) -1

  19. foriterinxrange(10000):

  20. # 前向傳播

  21. l0 = X

  22. l1 = nonlin(np.dot(l0,syn0))

  23. # 差多少?

  24. l1_error = y - l1

  25. # 誤差乘以sigmoid在l1處的斜率

  26. l1_delta = l1_error * nonlin(l1,True)

  27. # 更新權(quán)重

  28. syn0 += np.dot(l0.T,l1_delta)

  29. print"訓(xùn)練后輸出:"

  30. printl1

  1. 訓(xùn)練后輸出:

  2. [[0.00966449]

  3. [0.00786506]

  4. [0.99358898]

  5. [0.99211957]]

基于Numpy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò):反向傳播

如你所見,“訓(xùn)練后輸出:"下面打印出的結(jié)果說明這一網(wǎng)絡(luò)是有效的?。。≡谖颐枋鲞@個(gè)過程之前,我建議你嘗試探索以上代碼以獲得一些它如何工作的感性認(rèn)識。以上代碼應(yīng)該可以在Jupyter Notebook中直接運(yùn)行(或者你也可以以腳本的形式運(yùn)行,但我強(qiáng)烈建議使用notebook)。下面是探索代碼的一些提示:

  • 比較第一次迭代和最后一次迭代后的l1

  • 查看nonlin函數(shù)定義。該函數(shù)給出一個(gè)概率作為輸出。

  • 查看迭代過程中l(wèi)1_error的值是如何改變的。

  • 仔細(xì)看看第36行。這段代碼的奧秘主要藏在此處。

  • 查看第39行。網(wǎng)絡(luò)中的一切是為這個(gè)操作準(zhǔn)備的。

讓我們逐行討論代碼。

建議:在兩塊屏幕上打開本文,這樣你就可以一邊查看代碼,一邊閱讀文章了。我寫作下文的時(shí)候基本上就是這么做的。

01行:導(dǎo)入numpy。numpy是一個(gè)線性代數(shù)庫。這是我們唯一的依賴。

04行:這是我們的“非線性”。非線性可以有多種選擇,這里我們選用的是sigmoid. sigmoid函數(shù)將任何值映射到0到1之間的值。我們使用sigmoid將數(shù)字轉(zhuǎn)換為概率。sigmoid函數(shù)還有其他一些有利于訓(xùn)練神經(jīng)網(wǎng)絡(luò)的性質(zhì)。

基于Numpy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò):反向傳播

05行:注意這個(gè)函數(shù)同時(shí)可以生成sigmoid的導(dǎo)數(shù)(當(dāng)deriv=True時(shí))。sigmoid函數(shù)有一個(gè)非常棒的特性是它的輸出可以用來創(chuàng)建它的導(dǎo)數(shù)。如果sigmoid的輸出是變量out的話,它的導(dǎo)數(shù)是out * (1 - out),非常高效。

如果你不熟悉導(dǎo)數(shù),只需把它想象成sigmoid函數(shù)在給定的點(diǎn)上的斜率(如上圖所示,不同點(diǎn)的斜率不同)。想要了解更多關(guān)于導(dǎo)數(shù)的知識,可以參考Khan Academy的導(dǎo)數(shù)教程。

10行:初始化輸入數(shù)據(jù)集為numpy矩陣。每行是一個(gè)“訓(xùn)練樣本”。每列對應(yīng)一個(gè)輸入節(jié)點(diǎn)。因此,我們有3個(gè)輸入節(jié)點(diǎn)和4個(gè)訓(xùn)練樣本。

16行:初始化輸出數(shù)據(jù)集。這里,我水平地生成了數(shù)據(jù)集(1行4列),以節(jié)省字符。.T是轉(zhuǎn)置函數(shù)。轉(zhuǎn)置之后,y矩陣有4行1列。和輸入一樣,每行是一個(gè)訓(xùn)練樣本,每列(僅有一列)是一個(gè)輸出節(jié)點(diǎn)。所以,我們的網(wǎng)絡(luò)有3個(gè)輸入和1個(gè)輸出。

20行:設(shè)置隨機(jī)數(shù)種子是一個(gè)很好的做法。數(shù)字仍然是隨機(jī)分布的,但它們在每次訓(xùn)練中將以完全一致的方式隨機(jī)分布。這更便于觀察你的改動對網(wǎng)絡(luò)的影響。

23行:這是神經(jīng)網(wǎng)絡(luò)的權(quán)重矩陣。它命名為syn0,意味著它是“突觸(synapse)零”。由于我們的網(wǎng)絡(luò)只有兩層(輸入和輸出),我們只需要一個(gè)權(quán)重矩陣就可以連接兩者。它的維度是(3, 1),因?yàn)槲覀冇?個(gè)輸入和1個(gè)輸出。另一種看待它的方式是l0的尺寸是3,l1的尺寸是1. 我們需要將l0中的每個(gè)節(jié)點(diǎn)連接到l1中的每個(gè)節(jié)點(diǎn),因而我們需要一個(gè)維度(3, 1)的矩陣。

同時(shí)注意,隨機(jī)初始化時(shí)的均值為零。權(quán)重初始化有不少理論。就目前而言,可以簡單地把這一做法(權(quán)重初始化均值為零)看成是最佳實(shí)踐。

另外需要注意的是,“神經(jīng)網(wǎng)絡(luò)”實(shí)際上就是這個(gè)矩陣。我們有神經(jīng)網(wǎng)絡(luò)層l0和l1,但它們其實(shí)是基于數(shù)據(jù)集創(chuàng)建的短暫值。我們并不保存它們。所有的學(xué)習(xí)所得都儲存在syn0矩陣中。

25行:網(wǎng)絡(luò)訓(xùn)練代碼從這里開始。這是一個(gè)“迭代”訓(xùn)練代碼的for循環(huán),優(yōu)化網(wǎng)絡(luò)以擬合數(shù)據(jù)集。

28行:第一層網(wǎng)絡(luò)l1直接就是數(shù)據(jù)。因此我們在這里明確聲明這一點(diǎn)。還記得X包含4個(gè)訓(xùn)練樣本(行)嗎?在這一實(shí)現(xiàn)中,我們將同時(shí)處理所有樣本。這被稱為“全batch”(full batch)訓(xùn)練。因此,我們有4個(gè)不同的l0行,但是如有必要,我們可以將它看成一個(gè)單獨(dú)的訓(xùn)練樣本。在這里這些沒有區(qū)別。(如果需要,我們可以加載1000甚至10000行數(shù)據(jù),而不用修改任何代碼)。

29行:這是我們的預(yù)測步驟。基本上,我們首先讓網(wǎng)絡(luò)“嘗試”基于輸入預(yù)測輸出。我們接著研究它的表現(xiàn),從而加以調(diào)整,讓它在下一個(gè)迭代中表現(xiàn)更好。

這一行包含兩小步。首先矩陣l0和syn0相乘。接著將輸出傳給sigmoid函數(shù)。算下維度:

  1. (4x3) dot (3x1) = (4x1)

矩陣乘法是有序的,滿足等式兩邊的維度必須一致。因此最終生成的矩陣的行數(shù)等于第一個(gè)矩陣的行數(shù),列數(shù)等于第二個(gè)矩陣的列數(shù)。

由于我們載入了4個(gè)訓(xùn)練樣本,我們最終對正確答案做了4次猜測,一個(gè)(4 x 1)矩陣。每個(gè)輸出對應(yīng)與網(wǎng)絡(luò)對給定輸入的猜測。也許讀到這里你能很直觀地理解為什么我們之前說如有必要可以載入任意數(shù)目的訓(xùn)練樣本,因?yàn)榫仃嚦朔ㄈ匀豢梢怨ぷ鳌?/p>

32行:好了,l1根據(jù)每個(gè)輸入作出了“猜測”。我們可以通過從猜測(l1)中減去真實(shí)答案(y)來看看它的表現(xiàn)如何。l1_error只是一個(gè)由正數(shù)和負(fù)數(shù)組成的向量,反映了網(wǎng)絡(luò)離正確還差多少。

36行:現(xiàn)在是關(guān)鍵時(shí)刻!這是整個(gè)模型的奧秘所在!這一行里發(fā)生了很多事情,所以讓我們進(jìn)一步把它分成兩部分。

第一部分:導(dǎo)數(shù)

  1. nonlin(l1,True)

如果l1表示下圖中的三點(diǎn),那么上面的代碼生成了下圖曲線的斜率。注意,像x=2.0這樣很高的值(綠點(diǎn))和像x=-1.0這樣很低的值(紫點(diǎn))具有相對平緩的斜率。x=0(藍(lán)點(diǎn))處的斜率最高。這起到了非常重要的作用。同時(shí)注意所有的導(dǎo)數(shù)都在0和1之間。

基于Numpy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò):反向傳播

整個(gè)語句:誤差加權(quán)導(dǎo)數(shù)

  1. l1_delta = l1_error * nonlin(l1,True)

“誤差加權(quán)導(dǎo)數(shù)”有數(shù)學(xué)上更精確的說法,但我覺得這個(gè)名字捕捉到了背后的直覺。l1_error是一個(gè)(4,1)矩陣。nonlin(l1, True)返回一個(gè)(4,1)矩陣。我們將它們逐元素相乘。這返回一個(gè)(4,1)矩陣l1_delta。

當(dāng)我們將“斜率”乘以錯(cuò)誤時(shí),我們降低高信度預(yù)測的錯(cuò)誤。再看一遍sigmoid圖像!如果斜率實(shí)在很平緩(接近0),那么這個(gè)網(wǎng)絡(luò)或者具有一個(gè)非常高的值,或者具有一個(gè)非常低的值。這意味著網(wǎng)絡(luò)十分自信。然而,如果網(wǎng)絡(luò)猜測的值接近(x=0, y=0.5),那么它不是那么自信。我們更劇烈地更新那些缺乏信心的預(yù)測,同時(shí)傾向于通過乘以一個(gè)接近零的數(shù)字保留那些自信的預(yù)測。

行39:一切就緒,我們可以更新網(wǎng)絡(luò)了!讓我們看下單個(gè)訓(xùn)練樣本。

基于Numpy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò):反向傳播

譯者注:上圖左側(cè)標(biāo)注L1、L2分別應(yīng)為L0、L1

對這個(gè)樣本而言,我們已經(jīng)準(zhǔn)備好更新權(quán)重了。讓我們更新最左邊的權(quán)重(9.5)。

  1. weight_update = input_value * l1_delta

對最左邊的權(quán)重而言,這將是1.0 * L1_delta。推測起來,這會非常輕微地增加9.5. 為什么只增加一點(diǎn)點(diǎn)?好吧,預(yù)測已經(jīng)相當(dāng)自信了,而且預(yù)測的結(jié)果也基本正確。低誤差和低斜率意味著非常小的更新??紤]所有3個(gè)權(quán)重。這3個(gè)權(quán)重都將略微增加。

譯者注:上圖左側(cè)標(biāo)注L1、L2分別應(yīng)為L0、L1

然而,因?yàn)槲覀兪褂谩叭玝atch”配置,我們將對所有4個(gè)訓(xùn)練樣本執(zhí)行上述操作。因此,這個(gè)過程更像上圖所示。所以,第39行做了什么?它為每個(gè)訓(xùn)練樣本的每個(gè)權(quán)重計(jì)算權(quán)重更新,累加起來,然后更新權(quán)重,這些都是在一行之內(nèi)完成的。探索矩陣乘法,你將看到它是如何做到的!

奧秘

所以,既然我們已經(jīng)了解網(wǎng)絡(luò)是如何更新的,讓我們回過頭來看一下訓(xùn)練數(shù)據(jù)然后反思一下。當(dāng)輸入和輸出都是1的時(shí)候,我們增加兩者之間的權(quán)重。當(dāng)輸入是1、輸出是0時(shí),我們減少兩者之間的權(quán)重。

基于Numpy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò):反向傳播

因此,在上表的4個(gè)訓(xùn)練樣本中,第一個(gè)輸入與輸出之間的權(quán)重將持續(xù)增加或保持不變,而其他兩個(gè)權(quán)重將發(fā)現(xiàn)自己在不同的樣本上一會兒增加,一會兒下降(因而無法取得進(jìn)展)。這一現(xiàn)象導(dǎo)致我們的網(wǎng)絡(luò)基于輸入和輸出之間的相關(guān)性進(jìn)行學(xué)習(xí)。

二、稍微加大難度

基于Numpy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò):反向傳播

考慮基于三個(gè)輸入欄預(yù)測輸出欄。妙在沒有一列和輸出是相關(guān)的。每列有50%的機(jī)會預(yù)測1,50%的機(jī)會預(yù)測0.

那么,模式是什么呢?看起來結(jié)果完全和第三列無關(guān),這一列的值永遠(yuǎn)是1. 然而,第1列和第2列組合起來看比較清楚。如果第1列和第2列有一列是1(但兩列不同為1?。?,那么輸出是1. 這是我們的模式。

這被認(rèn)為是一個(gè)“非線性”模式,因?yàn)檩斎牒洼敵鲋g沒有直接的一一對應(yīng)關(guān)系。相反,存在輸入的組合和輸出的一一對應(yīng)關(guān)系,也就是第1列和第2列。

不管你信不信,圖像識別是一個(gè)類似的問題。如果有100張尺寸相同的煙斗和自行車的圖像,沒有任何單獨(dú)的像素位置和自行車或煙斗的存在性直接相關(guān)。從純統(tǒng)計(jì)學(xué)角度看,像素可能是隨機(jī)的。然而,特定的像素組合不是隨機(jī)的,也就是說,像素的組合形成了自行車或煙斗的圖像。

我們的策略

為了將我們的像素組合成和輸出具有一一對應(yīng)關(guān)系的東西,我們需要增加一個(gè)網(wǎng)絡(luò)層。我們的第一層網(wǎng)絡(luò)將組合輸入,第二層網(wǎng)絡(luò)以第一層網(wǎng)絡(luò)的輸出作為輸入,并將其輸入映射到輸出。在我們跳到實(shí)現(xiàn)之前,先看下這個(gè)表格。

基于Numpy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò):反向傳播

如果我們隨機(jī)初始化權(quán)重,我們將得到如上表所示的l1的隱藏狀態(tài)值。注意到?jīng)]有?隱藏權(quán)重的第二項(xiàng)(第二個(gè)隱藏節(jié)點(diǎn))與輸出已經(jīng)有隱約的相關(guān)性!它并不完美,但確實(shí)存在。信不信由你,這是神經(jīng)網(wǎng)絡(luò)訓(xùn)練中很重要的一部分。(一個(gè)有爭議的觀點(diǎn)認(rèn)為這是神經(jīng)網(wǎng)絡(luò)訓(xùn)練的唯一方式。)下面的訓(xùn)練將放大這一相關(guān)性。它將同時(shí)更新syn1和syn0,更新syn1以便將隱藏權(quán)重映射到輸出,更新syn0以便更好地基于輸入產(chǎn)生權(quán)重!

注意:這個(gè)增加更多網(wǎng)絡(luò)層以建模關(guān)系的更多組合的領(lǐng)域稱為“深度學(xué)習(xí)”,得名自建模時(shí)采用的越來越深的網(wǎng)絡(luò)層。

三層神經(jīng)網(wǎng)絡(luò)

  1. importnumpyasnp

  2. defnonlin(x,deriv=False):

  3. if(deriv==True):

  4. returnx*(1-x)

  5. return1/(1+np.exp(-x))

  6. X = np.array([[0,0,1],

  7. [0,1,1],

  8. [1,0,1],

  9. [1,1,1]])

  10. y = np.array([[0],

  11. [1],

  12. [1],

  13. [0]])

  14. np.random.seed(1)

  15. # 隨機(jī)初始化權(quán)重(均值0)

  16. syn0 =2*np.random.random((3,4)) -1

  17. syn1 =2*np.random.random((4,1)) -1

  18. forjinxrange(60000):

  19. # 前向傳播,層0、1、2

  20. l0 = X

  21. l1 = nonlin(np.dot(l0,syn0))

  22. l2 = nonlin(np.dot(l1,syn1))

  23. # 離目標(biāo)值還差多少?

  24. l2_error = y - l2

  25. if(j%10000) ==0:

  26. print"Error:"+ str(np.mean(np.abs(l2_error)))

  27. # 目標(biāo)值在哪個(gè)方向?

  28. # 我們很確定嗎?如果確定,不要改變太多。

  29. l2_delta = l2_error*nonlin(l2,deriv=True)

  30. # 根據(jù)權(quán)重 ,每個(gè)l1值對l2誤差的貢獻(xiàn)有多大?

  31. l1_error = l2_delta.dot(syn1.T)

  32. # 目標(biāo)l1在哪個(gè)方向?

  33. # 我們很確定嗎?如果確定,不要改變太多。

  34. l1_delta = l1_error * nonlin(l1,deriv=True)

  35. syn1 += l1.T.dot(l2_delta)

  36. syn0 += l0.T.dot(l1_delta)

  1. Error:0.496410031903

  2. Error:0.00858452565325

  3. Error:0.00578945986251

  4. Error:0.00462917677677

  5. Error:0.00395876528027

  6. Error:0.00351012256786

基于Numpy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò):反向傳播

建議:在兩塊屏幕上打開本文,這樣你就可以一邊查看代碼,一邊閱讀文章了。我寫作下文的時(shí)候基本上就是這么做的。

所有的一切看起來應(yīng)該很相似!這其實(shí)就是將2個(gè)之前的實(shí)現(xiàn)堆疊在一起。l1的輸出是l2的輸入。唯一不同的是第43行。

行43:使用l2的“信度加權(quán)誤差”來確立l1的誤差。為了做到這一點(diǎn),它簡單地將權(quán)重間的誤差從l2傳給l1. 你可以把它的結(jié)果叫作“貢獻(xiàn)加權(quán)誤差”,因?yàn)槲覀儗W(xué)習(xí)l1中的每個(gè)節(jié)點(diǎn)對l2中的誤差的“貢獻(xiàn)”有多少。這一步驟稱為“反向傳播”,算法也是因此得名的。我們接著更新syn0,正如我們在雙層實(shí)現(xiàn)中所做的那樣。

三、結(jié)語和以后的工作

我的建議

如果你對神經(jīng)網(wǎng)絡(luò)的態(tài)度是嚴(yán)肅的,那我有一個(gè)建議。嘗試基于回憶重建這個(gè)網(wǎng)絡(luò)。我知道這也許聽起來有點(diǎn)瘋狂,但它切切實(shí)實(shí)很有幫助。如果你希望能夠根據(jù)最新的學(xué)術(shù)論文創(chuàng)建任意的神經(jīng)網(wǎng)絡(luò)架構(gòu),或者閱讀和理解不同架構(gòu)的代碼樣例,我認(rèn)為這是一個(gè)殺手級練習(xí)。即使你使用Torch、Caffe、Theano之類的框架,我仍然認(rèn)為這是有用的。我在進(jìn)行這一練習(xí)之前和神經(jīng)網(wǎng)絡(luò)打過好多年交道,這個(gè)練習(xí)是我在這一領(lǐng)域所做的最好的投資(而且它花不了多久)。

以后的工作

這個(gè)玩具例子仍然需要一些掛件才能真正解決當(dāng)前最先進(jìn)的架構(gòu)。如果你打算進(jìn)一步改進(jìn)你的網(wǎng)絡(luò),下面是一些值得了解的概念。(也許我以后的文章會涉及其中部分內(nèi)容。)

  • Alpha

  • Bias Units(偏置單元)

  • Mini-Batches

  • Delta Trimming

  • Parameterized Layer Sizes(參數(shù)化的層尺寸)

  • Regularization(正則化)

  • Dropout

  • Momentum(動量)

  • Batch Normalization

  • GPU兼容性

  • 其他酷炫特性


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:基于Numpy實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò):反向傳播

文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    使用NumPy實(shí)現(xiàn)前饋神經(jīng)網(wǎng)絡(luò)

    要使用NumPy實(shí)現(xiàn)一個(gè)前饋神經(jīng)網(wǎng)絡(luò)(Feedforward Neural Network),我們需要從基礎(chǔ)開始構(gòu)建,包括初始化網(wǎng)絡(luò)參數(shù)、定義激活函數(shù)及其導(dǎo)數(shù)、
    的頭像 發(fā)表于 07-11 16:30 ?1286次閱讀

    bp神經(jīng)網(wǎng)絡(luò)反向傳播神經(jīng)網(wǎng)絡(luò)區(qū)別在哪

    反向傳播神經(jīng)網(wǎng)絡(luò)(Backpropagation Neural Network,簡稱BP神經(jīng)網(wǎng)絡(luò))是一種多層前饋神經(jīng)網(wǎng)絡(luò),它通過
    的頭像 發(fā)表于 07-04 09:51 ?259次閱讀

    神經(jīng)網(wǎng)絡(luò)反向傳播算法的優(yōu)缺點(diǎn)有哪些

    神經(jīng)網(wǎng)絡(luò)反向傳播算法(Backpropagation Algorithm)是一種廣泛應(yīng)用于深度學(xué)習(xí)和機(jī)器學(xué)習(xí)領(lǐng)域的優(yōu)化算法,用于訓(xùn)練多層前饋神經(jīng)網(wǎng)絡(luò)。本文將介紹
    的頭像 發(fā)表于 07-03 11:24 ?324次閱讀

    神經(jīng)網(wǎng)絡(luò)反向傳播算法的作用是什么

    神經(jīng)網(wǎng)絡(luò)反向傳播算法(Backpropagation)是一種用于訓(xùn)練人工神經(jīng)網(wǎng)絡(luò)的算法,它通過計(jì)算損失函數(shù)關(guān)于網(wǎng)絡(luò)參數(shù)的梯度來更新
    的頭像 發(fā)表于 07-03 11:17 ?548次閱讀

    神經(jīng)網(wǎng)絡(luò)反向傳播算法的原理、數(shù)學(xué)推導(dǎo)及實(shí)現(xiàn)步驟

    神經(jīng)網(wǎng)絡(luò)反向傳播算法(Backpropagation Algorithm)是一種用于訓(xùn)練多層神經(jīng)網(wǎng)絡(luò)的算法,其基本原理是通過梯度下降法來最小化損失函數(shù),從而找到
    的頭像 發(fā)表于 07-03 11:16 ?405次閱讀

    神經(jīng)網(wǎng)絡(luò)前向傳播反向傳播神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中的作用

    神經(jīng)網(wǎng)絡(luò)是一種強(qiáng)大的機(jī)器學(xué)習(xí)模型,它通過模擬人腦神經(jīng)元的連接方式來處理復(fù)雜的數(shù)據(jù)。神經(jīng)網(wǎng)絡(luò)的核心是前向傳播反向
    的頭像 發(fā)表于 07-03 11:11 ?413次閱讀

    反向傳播神經(jīng)網(wǎng)絡(luò)建模基本原理

    反向傳播神經(jīng)網(wǎng)絡(luò)(Backpropagation Neural Network,簡稱BP神經(jīng)網(wǎng)絡(luò))是一種多層前饋神經(jīng)網(wǎng)絡(luò),通過
    的頭像 發(fā)表于 07-03 11:08 ?287次閱讀

    反向傳播神經(jīng)網(wǎng)絡(luò)概念是什么

    反向傳播神經(jīng)網(wǎng)絡(luò)(Backpropagation Neural Network,簡稱BP神經(jīng)網(wǎng)絡(luò))是一種多層前饋神經(jīng)網(wǎng)絡(luò),它通過
    的頭像 發(fā)表于 07-03 11:06 ?337次閱讀

    反向傳播神經(jīng)網(wǎng)絡(luò)優(yōu)點(diǎn)和缺點(diǎn)有哪些

    反向傳播神經(jīng)網(wǎng)絡(luò)(Backpropagation Neural Network,簡稱BP神經(jīng)網(wǎng)絡(luò))是一種多層前饋神經(jīng)網(wǎng)絡(luò),通過
    的頭像 發(fā)表于 07-03 11:05 ?314次閱讀

    反向傳播神經(jīng)網(wǎng)絡(luò)分為多少層

    反向傳播神經(jīng)網(wǎng)絡(luò)(Backpropagation Neural Network,簡稱BP神經(jīng)網(wǎng)絡(luò))是一種多層前饋神經(jīng)網(wǎng)絡(luò),它通過
    的頭像 發(fā)表于 07-03 11:02 ?298次閱讀

    反向傳播神經(jīng)網(wǎng)絡(luò)和bp神經(jīng)網(wǎng)絡(luò)的區(qū)別

    反向傳播神經(jīng)網(wǎng)絡(luò)(Backpropagation Neural Network,簡稱BP神經(jīng)網(wǎng)絡(luò))是一種多層前饋神經(jīng)網(wǎng)絡(luò),它通過
    的頭像 發(fā)表于 07-03 11:00 ?365次閱讀

    神經(jīng)網(wǎng)絡(luò)前向傳播反向傳播區(qū)別

    神經(jīng)網(wǎng)絡(luò)是一種強(qiáng)大的機(jī)器學(xué)習(xí)模型,廣泛應(yīng)用于各種領(lǐng)域,如圖像識別、語音識別、自然語言處理等。神經(jīng)網(wǎng)絡(luò)的核心是前向傳播反向傳播算法。本文將詳
    的頭像 發(fā)表于 07-02 14:18 ?351次閱讀

    神經(jīng)網(wǎng)絡(luò)反向傳播算法原理是什么

    介紹反向傳播算法的原理、數(shù)學(xué)基礎(chǔ)、實(shí)現(xiàn)步驟和應(yīng)用場景。 神經(jīng)網(wǎng)絡(luò)簡介 神經(jīng)網(wǎng)絡(luò)是一種受人腦啟發(fā)的計(jì)算模型,由大量的
    的頭像 發(fā)表于 07-02 14:16 ?252次閱讀

    反向傳播神經(jīng)網(wǎng)絡(luò)模型的特點(diǎn)

    反向傳播神經(jīng)網(wǎng)絡(luò)(Backpropagation Neural Network,簡稱BP神經(jīng)網(wǎng)絡(luò))是一種多層前饋神經(jīng)網(wǎng)絡(luò),它通過
    的頭像 發(fā)表于 07-02 14:14 ?225次閱讀

    反向傳播神經(jīng)網(wǎng)絡(luò)建模的基本原理

    反向傳播神經(jīng)網(wǎng)絡(luò)(Backpropagation Neural Network,簡稱BP神經(jīng)網(wǎng)絡(luò))是一種多層前饋神經(jīng)網(wǎng)絡(luò),通過
    的頭像 發(fā)表于 07-02 14:05 ?183次閱讀