作者:SUNIL RAY 編譯:Bot 編者按:當(dāng)你面對(duì)一個(gè)新概念時(shí),你會(huì)怎么學(xué)習(xí)和實(shí)踐它,?是耗費(fèi)大量時(shí)間學(xué)習(xí)整個(gè)理論,,掌握背后的算法、數(shù)學(xué),、假設(shè),、局限再親身實(shí)踐,還是從最簡(jiǎn)單的基礎(chǔ)開(kāi)始,,通過(guò)具體項(xiàng)目解決一個(gè)個(gè)難題來(lái)提高你對(duì)它的整體把握,?在這系列文章中,論智將采用第二種方法和讀者一起從頭理解機(jī)器學(xué)習(xí),。 “從零學(xué)習(xí)”系列第一篇從Python和R理解和編碼神經(jīng)網(wǎng)絡(luò)來(lái)自Analytics Vidhya博主,、印度資深數(shù)據(jù)科學(xué)開(kāi)發(fā)人員SUNIL RAY。 本文將圍繞神經(jīng)網(wǎng)絡(luò)構(gòu)建的基礎(chǔ)知識(shí)展開(kāi),,并集中討論網(wǎng)絡(luò)的應(yīng)用方式,,用Python和R語(yǔ)言實(shí)戰(zhàn)編碼。 目錄
神經(jīng)網(wǎng)絡(luò)的基本工作原理 如果你是一名開(kāi)發(fā)者,,或曾參與過(guò)編程項(xiàng)目,,你一定知道如何在代碼中找bug。通過(guò)改變輸入和環(huán)境,,你可以用相應(yīng)的各種輸出測(cè)試bug位置,,因?yàn)檩敵龅母淖兤鋵?shí)是一個(gè)提示,它能告訴你應(yīng)該去檢查哪個(gè)模塊,,甚至是哪一行,。一旦你找到正確的那個(gè)它,,并反復(fù)調(diào)試,你總會(huì)得到理想的結(jié)果,。 神經(jīng)網(wǎng)絡(luò)其實(shí)也一樣,。它通常需要幾個(gè)輸入,在經(jīng)過(guò)多個(gè)隱藏層中神經(jīng)元的處理后,,它會(huì)在輸出層返回結(jié)果,,這個(gè)過(guò)程就是神經(jīng)網(wǎng)絡(luò)的“前向傳播”。 得到輸出后,,接下來(lái)我們要做的就是用神經(jīng)網(wǎng)絡(luò)的輸出和實(shí)際結(jié)果做對(duì)比,。由于每一個(gè)神經(jīng)元都可能增加最終輸出的誤差,所以我們要盡可能減少這個(gè)損耗(loss),,使輸出更接近實(shí)際值,。那該怎么減少loss呢? 在神經(jīng)網(wǎng)絡(luò)中,,一種常用的做法是降低那些容易導(dǎo)致更多l(xiāng)oss的神經(jīng)元的權(quán)重/權(quán)值,。因?yàn)檫@個(gè)過(guò)程需要返回神經(jīng)元并找出錯(cuò)誤所在,所以它也被稱(chēng)為“反向傳播”,。 為了在減少誤差的同時(shí)進(jìn)行更少量的迭代,,神經(jīng)網(wǎng)絡(luò)也會(huì)使用一種名為“梯度下降”(Gradient Descent)的算法。這是一種基礎(chǔ)的優(yōu)化算法,,能幫助開(kāi)發(fā)者快速高效地完成各種任務(wù),。 雖然這樣的表述太過(guò)簡(jiǎn)單粗淺,但其實(shí)這就是神經(jīng)網(wǎng)絡(luò)的基本工作原理,。簡(jiǎn)單的理解有助于你用簡(jiǎn)單的方式去做一些基礎(chǔ)實(shí)現(xiàn),。 多層感知器及其基礎(chǔ)知識(shí) 就像原子理論中物質(zhì)是由一個(gè)個(gè)離散單元原子所構(gòu)成的那樣,神經(jīng)網(wǎng)絡(luò)的最基本單位是感知器(Perceptron),。那么,,感知器是什么? 對(duì)于這個(gè)問(wèn)題,,我們可以這么理解:感知器就是一種接收多個(gè)輸入并產(chǎn)生一個(gè)輸出的東西,。如下圖所示: 感知器 示例中的它有3個(gè)輸入,卻只有一個(gè)輸出,,由此我們產(chǎn)生的下一個(gè)合乎邏輯的問(wèn)題就是輸入和輸出之間的對(duì)應(yīng)關(guān)系是什么,。讓我們先從一些基本方法入手,再慢慢上升到更復(fù)雜的方法,。 以下是我列舉的3種創(chuàng)建輸入輸出對(duì)應(yīng)關(guān)系的方法: 直接組合輸入并根據(jù)閾值計(jì)算輸出,。例如,我們?cè)O(shè)x1=0,x2=1,,x3=1,,閾值為0。如果x1+x2+x3>0,,則輸出1,;反之,輸出0,??梢钥吹剑谶@個(gè)情景下上圖的最終輸出是1,。 接下來(lái),,讓我們?yōu)楦鬏斎胩砑訖?quán)值。例如,,我們?cè)O(shè)x1、x2,、x3三個(gè)輸入的權(quán)重分別為w1,、w2、w3,,其中w1=2,,w2=3,w3=4,。為了計(jì)算輸出,,我們需要將輸入乘以它們各自的權(quán)值,即2x1+3x2+4x3,,再和閾值比較,。可以發(fā)現(xiàn),,x3對(duì)輸出的影響比x1,、x2更大。 接下來(lái),,讓我們添加bias(偏置,,有時(shí)也稱(chēng)閾值,但和上文閾值有區(qū)別),。每個(gè)感知器都有一個(gè)bias,,它其實(shí)也是一種加權(quán)方式,可以反映感知器的靈活性,。bias在某種程度上相當(dāng)于線(xiàn)性方程y=ax+b中的常數(shù)b,,可以讓函數(shù)上下移動(dòng)。如果b=0,那分類(lèi)線(xiàn)就要經(jīng)過(guò)原點(diǎn)(0,,0),,這樣神經(jīng)網(wǎng)絡(luò)的fit范圍會(huì)非常受限。例如,,如果一個(gè)感知器有兩個(gè)輸入,,它就需要3個(gè)權(quán)值,兩個(gè)對(duì)應(yīng)給輸入,,一個(gè)給bias,。在這個(gè)情景下,上圖輸入的線(xiàn)性形式就是w1x1+ w2x2+ w3x3+1×b,。 但是,,這樣做之后每一層的輸出還是上層輸入的線(xiàn)性變換,這就有點(diǎn)無(wú)聊,。于是人們想到把感知器發(fā)展成一種現(xiàn)在稱(chēng)之為神經(jīng)元的東西,,它能將非線(xiàn)性變換(激活函數(shù))用于輸入和loss。 什么是激活函數(shù)(activation function),? 激活函數(shù)是把加權(quán)輸入(w1x1+ w2x2+ w3x3+1×b)的和作為自變量,,然后讓神經(jīng)元得出輸出值。 在上式中,,我們將bias權(quán)值1表示為x,,將b表示為w. 輸入—加權(quán)—求和—作為實(shí)參被激活函數(shù)計(jì)算—輸出 它主要用于進(jìn)行非線(xiàn)性變換,使我們能擬合非線(xiàn)性假設(shè),、估計(jì)復(fù)雜函數(shù),,常用的函數(shù)有:Sigmoid、Tanh和ReLu,。 前向傳播,、反向傳播和Epoch 到目前為止,我們已經(jīng)由輸入計(jì)算獲得了輸出,,這個(gè)過(guò)程就是“前向傳播”(Forward Propagation),。但是,如果產(chǎn)出的估計(jì)值和實(shí)際值誤差太大怎么辦,?其實(shí),,神經(jīng)網(wǎng)絡(luò)的工作過(guò)程可以被看作是一個(gè)試錯(cuò)的過(guò)程,我們能根據(jù)輸出值的錯(cuò)誤更新之前的bias和權(quán)值,,這個(gè)回溯的行為就是“反向傳播”(Back Propagation),。 反向傳播算法(BP算法)是一種通過(guò)權(quán)衡輸出層的loss或錯(cuò)誤,將其傳回網(wǎng)絡(luò)來(lái)發(fā)生作用的算法,。它的目的是重新調(diào)整各項(xiàng)權(quán)重來(lái)使每個(gè)神經(jīng)元產(chǎn)生的loss最小化,,而要實(shí)現(xiàn)這一點(diǎn),,我們要做的第一步就是基于最終輸出計(jì)算每個(gè)節(jié)點(diǎn)之的梯度(導(dǎo)數(shù))。具體的數(shù)學(xué)過(guò)程我們會(huì)在最后一節(jié)“反向傳播算法的數(shù)學(xué)原理”中詳細(xì)探討,。 而這個(gè)由前向傳播和反向傳播構(gòu)成的一輪迭代就是我們常說(shuō)的一個(gè)訓(xùn)練迭代,,也就是Epoch。 多層感知器 現(xiàn)在,,讓我們繼續(xù)回到例子,,把注意力放到多層感知器上。截至目前,,我們看到的只有一個(gè)由3個(gè)輸入節(jié)點(diǎn)x1,、x2、x3構(gòu)成的單一輸入層,,以及一個(gè)只包含單個(gè)神經(jīng)元的輸出層,。誠(chéng)然,如果是解決線(xiàn)性問(wèn)題,,單層網(wǎng)絡(luò)確實(shí)能做到這一步,,但如果要學(xué)習(xí)非線(xiàn)性函數(shù),那我們就需要一個(gè)多層感知器(MLP),,即在輸入層和輸出層之間插入一個(gè)隱藏層,。如下圖所示: 圖片中的綠色部分表示隱藏層,雖然上圖只有一個(gè),,但事實(shí)上,這樣一個(gè)網(wǎng)絡(luò)可以包含多個(gè)隱藏層,。同時(shí),,需要注意的一點(diǎn)是,MLP至少由三層節(jié)點(diǎn)組成,,并且所有層都是完全連接的,,即每一層中(除輸入層和輸出層)的每一個(gè)節(jié)點(diǎn)都要連接到前/后層中的每個(gè)節(jié)點(diǎn)。 理解了這一點(diǎn),,我們就能進(jìn)入下一個(gè)主題,,即神經(jīng)網(wǎng)絡(luò)優(yōu)化算法(誤差最小化)。在這里,,我們主要介紹最簡(jiǎn)單的梯度下降,。 批量梯度下降和隨機(jī)梯度下降 梯度下降一般有三種形式:批量梯度下降法(Batch Gradient Descent)隨機(jī)梯度下降法(Stochastic Gradient Descent)和小批量梯度下降法(Mini-Batch Gradient Descent)。由于本文為入門(mén)向,,我們就先來(lái)了解滿(mǎn)批量梯度下降法(Full BGD)和隨機(jī)梯度下降法(SGD),。 這兩種梯度下降形式使用的是同一種更新算法,它們通過(guò)更新MLP的權(quán)值來(lái)達(dá)到優(yōu)化網(wǎng)絡(luò)的目的,。不同的是,,滿(mǎn)批量梯度下降法通過(guò)反復(fù)更新權(quán)值來(lái)使誤差降低,它的每一次更新都要用到所有訓(xùn)練數(shù)據(jù),這在數(shù)據(jù)量龐大時(shí)會(huì)耗費(fèi)太多時(shí)間,。而隨機(jī)梯度下降法則只抽取一個(gè)或多個(gè)樣本(非所有數(shù)據(jù))來(lái)迭代更新一次,,較之前者,它在耗時(shí)上有不小的優(yōu)勢(shì),。 讓我們來(lái)舉個(gè)例子:假設(shè)現(xiàn)在我們有一個(gè)包含10個(gè)數(shù)據(jù)點(diǎn)的數(shù)據(jù)集,,它有w1、w2兩個(gè)權(quán)值,。
神經(jīng)網(wǎng)絡(luò)構(gòu)建過(guò)程詳解 在這一節(jié)中,讓我們來(lái)看看神經(jīng)網(wǎng)絡(luò)(MLP包含隱藏層,,類(lèi)似上圖架構(gòu))的具體構(gòu)建方法,。 如上圖所示,我們的神經(jīng)網(wǎng)絡(luò)共有3層,,它的思路可以被大致概括為: 第0步 確定輸入和輸出 我們定義:
第1步 用一個(gè)隨機(jī)值初始化網(wǎng)絡(luò)的權(quán)值和bias(只在開(kāi)始時(shí)使用,,下一次迭代我們會(huì)用更新后的值) 我們定義:
第2步 將輸入矩陣和權(quán)值的矩陣點(diǎn)乘積分配給輸入和隱藏層之間的邊緣,再加上隱藏層的bias形成相應(yīng)輸出,,這個(gè)過(guò)程被稱(chēng)作線(xiàn)性變換 hiddenlayerinput = matrixdotproduct(X,,wh)+bh 第3步 引入激活函數(shù)(Sigmoid)執(zhí)行非線(xiàn)性變換,Sigmoid輸出1/(1+exp(-x)) hiddenlayeractivations = sigmoid(hiddenlayer_input) 第4步 對(duì)隱藏層進(jìn)行線(xiàn)性變換(在原矩陣點(diǎn)乘積的基礎(chǔ)上乘以新權(quán)值矩陣并加上輸出層bias),,使用激活函數(shù),,并預(yù)測(cè)輸出 outputlayerinput = matrixdotproduct (hiddenlayeractivations × wout ) + bout output = sigmoid(outputlayer_input) 以上步驟即為“前向傳播”。 第5步 將預(yù)測(cè)值與實(shí)際值相比較,,并計(jì)算誤差E(Actual-Predicted)的梯度,,它是一個(gè)平方誤差函數(shù)((y-t)^2)/2(衡量期望誤差的一個(gè)常見(jiàn)做法是采用平方誤差測(cè)度) E=y–output 第6步 計(jì)算隱藏層和輸出層神經(jīng)元的斜率/梯度(對(duì)每個(gè)神經(jīng)元每一層的非線(xiàn)性激活函數(shù)x求導(dǎo)),Sigmoid的梯度會(huì)返回為x(1–x) slopeoutputlayer = derivativessigmoid(output) slopehiddenlayer = derivativessigmoid(hiddenlayer_activations) 第7步 用誤差E的梯度和輸出層激活函數(shù)梯度計(jì)算輸出層的變化因子(delta) doutput = E × slopeoutput_layer 第8步 這時(shí),,誤差E已經(jīng)回到神經(jīng)網(wǎng)絡(luò)中,,也就是在隱藏層中,。為了計(jì)算它的梯度,我們需要用到輸出變化因子delta中的點(diǎn)和隱藏層輸出層之間的權(quán)重參數(shù) Errorathiddenlayer = matrixdotproduct(doutput,,wout.Transpose) 第9步 計(jì)算隱藏層的變化因子(delta),,將得到的誤差和隱藏層激活函數(shù)導(dǎo)數(shù)相乘 dhiddenlayer = Errorathiddenlayer × slopehiddenlayer 第10步 更新輸出層和隱藏層的權(quán)值:可以用訓(xùn)練樣本的誤差更新權(quán)值
第11步 更新輸出層和隱藏層的bias:神經(jīng)網(wǎng)絡(luò)中的bias可以由神經(jīng)元中的累積誤差求導(dǎo)更新
即:
我們稱(chēng)5—11為“反向傳播”。 我們把一個(gè)前向傳播和一個(gè)反向傳播的迭代成為一個(gè)訓(xùn)練周期,。正如我在前文中提到的,,如果我們?cè)龠M(jìn)行訓(xùn)練,那更新后的權(quán)值和bias就會(huì)用于新一次前向傳播,。 神經(jīng)網(wǎng)絡(luò)構(gòu)建過(guò)程的可視化 我會(huì)在這一節(jié)中用圖表形式重新介紹上一節(jié)的內(nèi)容,,以幫助入門(mén)者更好地了解神經(jīng)網(wǎng)絡(luò)(MLP)的工作方法。 注意:
第0步 讀取輸入和輸出 第1步 用隨機(jī)值初始化權(quán)值和bias 第2步 計(jì)算隱藏層輸入 hiddenlayerinput = matrixdotproduct(X,wh)+ bh 第3步 對(duì)隱藏層的線(xiàn)性輸入執(zhí)行非線(xiàn)性變換(激活函數(shù)) hiddenlayeractivations = sigmoid(hiddenlayer_input) 第4步 在輸出層對(duì)已經(jīng)執(zhí)行了線(xiàn)性,、非線(xiàn)性變換的隱藏層使用激活函數(shù) outputlayerinput = matrixdotproduct(hiddenlayeractivations × wout)+ bout output = sigmoid(outputlayer_input) 第5步 計(jì)算輸出層誤差E的梯度 E = y-output 第6步 計(jì)算輸出層和隱藏層的梯度 Slopeoutputlayer= derivativessigmoid(output) Slopehiddenlayer = derivativessigmoid(hiddenlayer_activations) 第7步 計(jì)算輸出層的delta doutput = E × slopeoutput_layer*lr 第8步 計(jì)算隱藏層的誤差 Errorathiddenlayer = matrixdotproduct(doutput, wout.Transpose) 第9步 計(jì)算隱藏層的delta dhiddenlayer = Errorathiddenlayer × slopehiddenlayer 第10步 更新輸出層和隱藏層的權(quán)值 wout = wout + matrixdotproduct(hiddenlayeractivations.Transpose, doutput)×learningrate wh = wh+ matrixdotproduct(X.Transpose,dhiddenlayer)×learning_rate 第11步 更新輸出層和隱藏層的bias bh = bh + sum(dhiddenlayer, axis=0) ×learningrate bout = bout + sum(doutput, axis=0)×learningrate 如何用Numpy實(shí)現(xiàn)NN(Python) 如何用R語(yǔ)言實(shí)現(xiàn)NN 反向傳播算法的數(shù)學(xué)原理(選讀) 設(shè)Wi為輸入層與隱藏層之間的權(quán)值,,Wh為隱藏層和輸出層之間的權(quán)值。 h=σ(u)= σ (WiX),,其中h是u的函數(shù),,u是Wi和x的函數(shù)。這里我們將激活函數(shù)表示為σ,。 Y=σ(u')=σ(Whh),,其中Y是u'的函數(shù),,u'是Wh和h的函數(shù),。 利用上述等式,我們可以計(jì)算偏導(dǎo)數(shù),。 我們需要計(jì)算?E/?Wi和?E/?Wh,,其中前者是改變輸入層、隱藏層之間權(quán)值造成的誤差(E)的變化,,后者是改變隱藏層,、輸出層之間權(quán)值造成的誤差(E)的變化。 為了得出這兩個(gè)偏導(dǎo)數(shù),,我們需要用到鏈?zhǔn)椒▌t,,因?yàn)镋是Y的函數(shù),,Y是u'的函數(shù),而u'是Wi的函數(shù),。 讓我們結(jié)合它們的關(guān)系來(lái)計(jì)算梯度: ?E/?Wh = (?E/?Y).( ?Y/?u’).( ?u’/?Wh)……(1) 已知誤差E=((Y-t)^2)/2,,可得(?E/?Y)= (Y-t)。 由于激活函數(shù)σ求導(dǎo)后的形式是σ(1-σ),,因此 (?Y/?u’)= ?( σ(u’)/ ?u’= σ(u’)(1-σ(u’)) 但是因?yàn)棣?u’)=Y,,所以 (?Y/?u’)=Y(1-Y) 現(xiàn)在我們就能得到( ?u’/?Wh)= ?( Whh)/ ?Wh = h 把這個(gè)等式帶入式(1)可得 ?E/?Wh = (Y-t). Y(1-Y).h 現(xiàn)在我們已經(jīng)得出了隱藏層和輸出層之間的梯度,是時(shí)候該計(jì)算輸入層和隱藏層之間的梯度了,。 ?E/?Wi =(?E/?h). (?h/?u).( ?u/?Wi) 但是,,(?E/?h) = (?E/?Y).( ?Y/?u’).( ?u’/?h)也同樣成立,將這個(gè)式子帶入上式后,, ?E/?Wi =[(?E/?Y).( ?Y/?u’).( ?u’/?h)]. (?h/?u).( ?u/?Wi)……(2) 可能會(huì)有人有一位,,為什么我們要先計(jì)算隱藏層和輸出層之間的梯度呢?這個(gè)問(wèn)題的解答就在式(2)中,。我們可以發(fā)現(xiàn),,由于之前我們已經(jīng)先計(jì)算了?E/?Y和?Y/?u’,在進(jìn)行之后的計(jì)算時(shí),,我們無(wú)需進(jìn)行大量重復(fù)計(jì)算,,這大大節(jié)約了資源占用和計(jì)算時(shí)間,提高了整體效率,。這也是這個(gè)算法被稱(chēng)為反向傳播算法的原因,。 解下來(lái)讓我們計(jì)算式(2)中的未知導(dǎo)數(shù)。 ?u’/?h = ?(Whh)/ ?h = Wh ?h/?u = ?( σ(u)/ ?u= σ(u)(1- σ(u)) 因?yàn)棣?u)=h,,所以 (?Y/?u)=h(1-h) 我們可以得到?u/?Wi = ?(WiX)/ ?Wi = X 將它代入式(2)我們可得梯度 ?E/?Wi = [(Y-t). Y(1-Y).Wh].h(1-h).X 既然我們已經(jīng)計(jì)算得到兩個(gè)梯度,,那神經(jīng)網(wǎng)絡(luò)的權(quán)值就可以更新為 Wh = Wh + η . ?E/?Wh Wi = Wi + η . ?E/?Wi 其中η表示學(xué)習(xí)率。 這里我們可以再一次回到這個(gè)算法的命名上,。通過(guò)對(duì)比?E/?Wh和?E/?Wi的最終形式我們可以發(fā)現(xiàn),,預(yù)測(cè)值和實(shí)際值的誤差(Y-t)在權(quán)值更新的過(guò)程中被作為了輸入層。 那這些數(shù)學(xué)計(jì)算是怎么和代碼對(duì)應(yīng)的呢,? 論智補(bǔ)充 本文以神經(jīng)網(wǎng)絡(luò)中最基礎(chǔ)的兩層神經(jīng)網(wǎng)絡(luò)作為講解對(duì)象,,雖然內(nèi)容已經(jīng)很翔實(shí),但為了更形象地解釋輸入,、輸出,、權(quán)值、bias等概念在圖中的位置,,論智君在文末為讀者做一些基礎(chǔ)知識(shí)補(bǔ)充,。 上圖是一個(gè)簡(jiǎn)單的兩層神經(jīng)網(wǎng)絡(luò),它由一些圓形和向量組成,,其中的圓圈就是我們說(shuō)的神經(jīng)元,,有時(shí)也稱(chēng)單元(unit)和節(jié)點(diǎn)(node),,它主要起到計(jì)算和儲(chǔ)存作用,因此其實(shí)發(fā)揮重要作用的是圖中的各條帶箭頭的線(xiàn),。 文章中涉及大量“輸入層隱藏層之間的權(quán)值”“隱藏層輸出層之間的權(quán)值”的表述,,這些都可以從圖片中獲得直觀(guān)感受。而我們反復(fù)提起的偏置項(xiàng)bias在上圖中也有所展示,。理論上,,bias是個(gè)儲(chǔ)存值永遠(yuǎn)為1的單元,它出現(xiàn)在除了輸入層之外的所有層,,與后一層的所有節(jié)點(diǎn)都有連接,。神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖一般不會(huì)把它明確畫(huà)出來(lái),但我們應(yīng)該知道它是存在的,。 本文把多處神經(jīng)網(wǎng)絡(luò)都注釋為MLP,,并詳細(xì)介紹了多層感知器的設(shè)計(jì)演變。需要注意的是,,MLP曾經(jīng)就指代神經(jīng)網(wǎng)絡(luò),,但是它表示的是兩層神經(jīng)網(wǎng)絡(luò),即包含一個(gè)輸入層,、隱藏層,、輸出層的神經(jīng)網(wǎng)絡(luò),一般不能被用來(lái)表示層數(shù)非常深的神經(jīng)網(wǎng)絡(luò),。 論智也沿用了損失的英文原型loss,,區(qū)別于error誤差。另外會(huì)有人把loss譯為殘差,、代價(jià),,尤其是在談及l(fā)oss function的時(shí)候,它們其實(shí)是一種東西,。 最后再提一點(diǎn)閾值和參數(shù),。文章在介紹bias時(shí)用了它的英文單詞,沒(méi)有用它的譯名偏置項(xiàng),、閾值,,這是為了防止誤讀,尤其是閾值,,它容易與案例中的約束條件混淆,。事實(shí)上,,bias作為閾值最生動(dòng)的體現(xiàn)是在圖像上,,它能限制曲線(xiàn)的峰值區(qū)間,具體可以Google相關(guān)圖片,。而本文盡量避免了“參數(shù)”這個(gè)詞的使用,,因?yàn)橐话愣?,神?jīng)網(wǎng)絡(luò)參數(shù)就是指訓(xùn)練得到的權(quán)值和bias,把這個(gè)概念用于任何一方都是不合理的,,它和其他機(jī)器學(xué)習(xí)方法中的參數(shù)也不是一個(gè)概念,,在閱讀其他原創(chuàng)、翻譯內(nèi)容時(shí),,希望讀者能擦亮雙眼,。 原文地址:www.analyticsvidhya.com/blog/2017/05/neural-network-from-scratch-in-python-and-r/ |
|