一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

圍繞神經(jīng)網(wǎng)絡(luò)知識(shí)和網(wǎng)絡(luò)應(yīng)用方式展開Python和R語(yǔ)言實(shí)戰(zhàn)編碼

zhKF_jqr_AI ? 2017-12-28 10:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

編者按:當(dāng)你面對(duì)一個(gè)新概念時(shí),你會(huì)怎么學(xué)習(xí)和實(shí)踐它?是耗費(fèi)大量時(shí)間學(xué)習(xí)整個(gè)理論,掌握背后的算法、數(shù)學(xué)、假設(shè)、局限再親身實(shí)踐,還是從最簡(jiǎn)單的基礎(chǔ)開始,通過具體項(xiàng)目解決一個(gè)個(gè)難題來提高你對(duì)它的整體把握?在這系列文章中,論智將采用第二種方法和讀者一起從頭理解機(jī)器學(xué)習(xí)。

“從零學(xué)習(xí)”系列第一篇從Python和R理解和編碼神經(jīng)網(wǎng)絡(luò)來自Analytics Vidhya博主、印度資深數(shù)據(jù)科學(xué)開發(fā)人員SUNIL RAY。

本文將圍繞神經(jīng)網(wǎng)絡(luò)構(gòu)建的基礎(chǔ)知識(shí)展開,并集中討論網(wǎng)絡(luò)的應(yīng)用方式,用Python和R語(yǔ)言實(shí)戰(zhàn)編碼。

目錄

神經(jīng)網(wǎng)絡(luò)的基本工作原理

多層感知器及其基礎(chǔ)知識(shí)

神經(jīng)網(wǎng)絡(luò)具體步驟詳解

神經(jīng)網(wǎng)絡(luò)工作過程的可視化

如何用Numpy實(shí)現(xiàn)NN(Python)

如何用R語(yǔ)言實(shí)現(xiàn)NN

反向傳播算法的數(shù)學(xué)原理

神經(jīng)網(wǎng)絡(luò)的基本工作原理

如果你是一名開發(fā)者,或曾參與過編程項(xiàng)目,你一定知道如何在代碼中找bug。通過改變輸入和環(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)過多個(gè)隱藏層中神經(jīng)元的處理后,它會(huì)在輸出層返回結(jié)果,這個(gè)過程就是神經(jīng)網(wǎng)絡(luò)的“前向傳播”。

得到輸出后,接下來我們要做的就是用神經(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è)過程需要返回神經(jīng)元并找出錯(cuò)誤所在,所以它也被稱為“反向傳播”。

為了在減少誤差的同時(shí)進(jìn)行更少量的迭代,神經(jīng)網(wǎng)絡(luò)也會(huì)使用一種名為“梯度下降”(Gradient Descent)的算法。這是一種基礎(chǔ)的優(yōu)化算法,能幫助開發(fā)者快速高效地完成各種任務(wù)。

雖然這樣的表述太過簡(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è)問題,我們可以這么理解:感知器就是一種接收多個(gè)輸入并產(chǎn)生一個(gè)輸出的東西。如下圖所示:

1012434158-0.png

感知器

示例中的它有3個(gè)輸入,卻只有一個(gè)輸出,由此我們產(chǎn)生的下一個(gè)合乎邏輯的問題就是輸入和輸出之間的對(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。

接下來,讓我們?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更大。

接下來,讓我們添加bias(偏置,有時(shí)也稱閾值,但和上文閾值有區(qū)別)。每個(gè)感知器都有一個(gè)bias,它其實(shí)也是一種加權(quán)方式,可以反映感知器的靈活性。bias在某種程度上相當(dāng)于線性方程y=ax+b中的常數(shù)b,可以讓函數(shù)上下移動(dòng)。如果b=0,那分類線就要經(jīng)過原點(diǎn)(0,0),這樣神經(jīng)網(wǎng)絡(luò)的fit范圍會(huì)非常受限。例如,如果一個(gè)感知器有兩個(gè)輸入,它就需要3個(gè)權(quán)值,兩個(gè)對(duì)應(yīng)給輸入,一個(gè)給bias。在這個(gè)情景下,上圖輸入的線性形式就是w1x1+ w2x2+ w3x3+1×b。

但是,這樣做之后每一層的輸出還是上層輸入的線性變換,這就有點(diǎn)無聊。于是人們想到把感知器發(fā)展成一種現(xiàn)在稱之為神經(jīng)元的東西,它能將非線性變換(激活函數(shù))用于輸入和loss。

什么是激活函數(shù)(activation function)?

激活函數(shù)是把加權(quán)輸入(w1x1+ w2x2+ w3x3+1×b)的和作為自變量,然后讓神經(jīng)元得出輸出值。

1012433116-1.png

在上式中,我們將bias權(quán)值1表示為x0,將b表示為w0.

1012435S1-2.png

輸入—加權(quán)—求和—作為實(shí)參被激活函數(shù)計(jì)算—輸出

它主要用于進(jìn)行非線性變換,使我們能擬合非線性假設(shè)、估計(jì)復(fù)雜函數(shù),常用的函數(shù)有:Sigmoid、Tanh和ReLu。

前向傳播、反向傳播和Epoch

到目前為止,我們已經(jīng)由輸入計(jì)算獲得了輸出,這個(gè)過程就是“前向傳播”(Forward Propagation)。但是,如果產(chǎn)出的估計(jì)值和實(shí)際值誤差太大怎么辦?其實(shí),神經(jīng)網(wǎng)絡(luò)的工作過程可以被看作是一個(gè)試錯(cuò)的過程,我們能根據(jù)輸出值的錯(cuò)誤更新之前的bias和權(quán)值,這個(gè)回溯的行為就是“反向傳播”(Back Propagation)。

反向傳播算法(BP算法)是一種通過權(quán)衡輸出層的loss或錯(cuò)誤,將其傳回網(wǎng)絡(luò)來發(fā)生作用的算法。它的目的是重新調(diào)整各項(xiàng)權(quán)重來使每個(gè)神經(jīng)元產(chǎn)生的loss最小化,而要實(shí)現(xiàn)這一點(diǎn),我們要做的第一步就是基于最終輸出計(jì)算每個(gè)節(jié)點(diǎn)之的梯度(導(dǎo)數(shù))。具體的數(shù)學(xué)過程我們會(huì)在最后一節(jié)“反向傳播算法的數(shù)學(xué)原理”中詳細(xì)探討。

而這個(gè)由前向傳播和反向傳播構(gòu)成的一輪迭代就是我們常說的一個(gè)訓(xùn)練迭代,也就是Epoch。

多層感知器

現(xiàn)在,讓我們繼續(xù)回到例子,把注意力放到多層感知器上。截至目前,我們看到的只有一個(gè)由3個(gè)輸入節(jié)點(diǎn)x1、x2、x3構(gòu)成的單一輸入層,以及一個(gè)只包含單個(gè)神經(jīng)元的輸出層。誠(chéng)然,如果是解決線性問題,單層網(wǎng)絡(luò)確實(shí)能做到這一步,但如果要學(xué)習(xí)非線性函數(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)。由于本文為入門向,我們就先來了解滿批量梯度下降法(Full BGD)和隨機(jī)梯度下降法(SGD)。

這兩種梯度下降形式使用的是同一種更新算法,它們通過更新MLP的權(quán)值來達(dá)到優(yōu)化網(wǎng)絡(luò)的目的。不同的是,滿批量梯度下降法通過反復(fù)更新權(quán)值來使誤差降低,它的每一次更新都要用到所有訓(xùn)練數(shù)據(jù),這在數(shù)據(jù)量龐大時(shí)會(huì)耗費(fèi)太多時(shí)間。而隨機(jī)梯度下降法則只抽取一個(gè)或多個(gè)樣本(非所有數(shù)據(jù))來迭代更新一次,較之前者,它在耗時(shí)上有不小的優(yōu)勢(shì)。

讓我們來舉個(gè)例子:假設(shè)現(xiàn)在我們有一個(gè)包含10個(gè)數(shù)據(jù)點(diǎn)的數(shù)據(jù)集,它有w1、w2兩個(gè)權(quán)值。

滿批量梯度下降法:你需要用10個(gè)數(shù)據(jù)點(diǎn)來計(jì)算權(quán)值w1的變化情況Δw1,以及權(quán)值w2的變化情況Δw2,之后再更新w1、w2。

隨機(jī)梯度下降法:用1個(gè)數(shù)據(jù)點(diǎn)計(jì)算權(quán)值w1的變化情況Δw1和權(quán)值w2的變化情況Δw2,更新w1、w2并將它們用于第二個(gè)數(shù)據(jù)點(diǎn)的計(jì)算。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    labview BP神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)

    是classes(層級(jí)嗎?),希望有前輩能夠詳細(xì)的幫我講解下這個(gè)范例?。。≈x謝?。。。。ū救艘褜?duì)BP神經(jīng)網(wǎng)絡(luò)的理論知識(shí)有了了解)
    發(fā)表于 02-22 16:08

    【PYNQ-Z2試用體驗(yàn)】神經(jīng)網(wǎng)絡(luò)基礎(chǔ)知識(shí)

    python語(yǔ)言,可以很輕松地實(shí)現(xiàn)復(fù)雜的數(shù)學(xué)運(yùn)算,降低編程難度。下一篇文章,將通過具體代碼,演示基于神經(jīng)網(wǎng)絡(luò)的手寫圖形識(shí)別。
    發(fā)表于 03-03 22:10

    【案例分享】ART神經(jīng)網(wǎng)絡(luò)與SOM神經(jīng)網(wǎng)絡(luò)

    ,同理,閾值越大,則容納的模式類也就越多----------以上純屬個(gè)人理解,如果有錯(cuò)誤歡迎指正。ART比較好地緩解了競(jìng)爭(zhēng)型學(xué)習(xí)中的“可塑性-穩(wěn)定性窘境”,其中可塑性指神經(jīng)網(wǎng)絡(luò)要能夠?qū)W習(xí)新知識(shí),穩(wěn)定性
    發(fā)表于 07-21 04:30

    BP神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)數(shù)學(xué)知識(shí)分享

    一文看懂BP神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)數(shù)學(xué)知識(shí)
    發(fā)表于 06-16 07:14

    如何構(gòu)建神經(jīng)網(wǎng)絡(luò)

    原文鏈接:http://tecdat.cn/?p=5725 神經(jīng)網(wǎng)絡(luò)是一種基于現(xiàn)有數(shù)據(jù)創(chuàng)建預(yù)測(cè)的計(jì)算系統(tǒng)。如何構(gòu)建神經(jīng)網(wǎng)絡(luò)?神經(jīng)網(wǎng)絡(luò)包括:輸入層:根據(jù)現(xiàn)有數(shù)據(jù)獲取輸入的層隱藏層:使用反向傳播優(yōu)化輸入變量權(quán)重的層,以提高模型的預(yù)測(cè)
    發(fā)表于 07-12 08:02

    神經(jīng)網(wǎng)絡(luò)理論到實(shí)踐(2):理解并實(shí)現(xiàn)反向傳播及驗(yàn)證神經(jīng)網(wǎng)絡(luò)是否正確

    專欄中《零神經(jīng)網(wǎng)絡(luò)實(shí)戰(zhàn)》系列持續(xù)更新介紹神經(jīng)元怎么工作,最后使用python從0到1不調(diào)用任何依賴神經(jīng)網(wǎng)絡(luò)框架(不使用tensorflow等
    的頭像 發(fā)表于 12-10 19:27 ?1059次閱讀

    神經(jīng)網(wǎng)絡(luò)基礎(chǔ)知識(shí)

    神經(jīng)網(wǎng)絡(luò)基礎(chǔ)知識(shí)課件免費(fèi)下載。
    發(fā)表于 04-21 09:36 ?6次下載

    什么是神經(jīng)網(wǎng)絡(luò)?什么是卷積神經(jīng)網(wǎng)絡(luò)?

    在介紹卷積神經(jīng)網(wǎng)絡(luò)之前,我們先回顧一下神經(jīng)網(wǎng)絡(luò)的基本知識(shí)。就目前而言,神經(jīng)網(wǎng)絡(luò)是深度學(xué)習(xí)算法的核心,我們所熟知的很多深度學(xué)習(xí)算法的背后其實(shí)都是神經(jīng)網(wǎng)
    的頭像 發(fā)表于 02-23 09:14 ?4356次閱讀

    Python從頭實(shí)現(xiàn)一個(gè)神經(jīng)網(wǎng)絡(luò)來理解神經(jīng)網(wǎng)絡(luò)的原理1

    有個(gè)事情可能會(huì)讓初學(xué)者驚訝:神經(jīng)網(wǎng)絡(luò)模型并不復(fù)雜!『神經(jīng)網(wǎng)絡(luò)』這個(gè)詞讓人覺得很高大上,但實(shí)際上神經(jīng)網(wǎng)絡(luò)算法要比人們想象的簡(jiǎn)單。 這篇文章完全是為新手準(zhǔn)備的。我們會(huì)通過用Python
    的頭像 發(fā)表于 02-27 15:05 ?967次閱讀
    用<b class='flag-5'>Python</b>從頭實(shí)現(xiàn)一個(gè)<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>來理解<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的原理1

    Python從頭實(shí)現(xiàn)一個(gè)神經(jīng)網(wǎng)絡(luò)來理解神經(jīng)網(wǎng)絡(luò)的原理2

    有個(gè)事情可能會(huì)讓初學(xué)者驚訝:神經(jīng)網(wǎng)絡(luò)模型并不復(fù)雜!『神經(jīng)網(wǎng)絡(luò)』這個(gè)詞讓人覺得很高大上,但實(shí)際上神經(jīng)網(wǎng)絡(luò)算法要比人們想象的簡(jiǎn)單。 這篇文章完全是為新手準(zhǔn)備的。我們會(huì)通過用Python
    的頭像 發(fā)表于 02-27 15:06 ?856次閱讀
    用<b class='flag-5'>Python</b>從頭實(shí)現(xiàn)一個(gè)<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>來理解<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的原理2

    Python從頭實(shí)現(xiàn)一個(gè)神經(jīng)網(wǎng)絡(luò)來理解神經(jīng)網(wǎng)絡(luò)的原理3

    有個(gè)事情可能會(huì)讓初學(xué)者驚訝:神經(jīng)網(wǎng)絡(luò)模型并不復(fù)雜!『神經(jīng)網(wǎng)絡(luò)』這個(gè)詞讓人覺得很高大上,但實(shí)際上神經(jīng)網(wǎng)絡(luò)算法要比人們想象的簡(jiǎn)單。 這篇文章完全是為新手準(zhǔn)備的。我們會(huì)通過用Python
    的頭像 發(fā)表于 02-27 15:06 ?1016次閱讀
    用<b class='flag-5'>Python</b>從頭實(shí)現(xiàn)一個(gè)<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>來理解<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的原理3

    Python從頭實(shí)現(xiàn)一個(gè)神經(jīng)網(wǎng)絡(luò)來理解神經(jīng)網(wǎng)絡(luò)的原理4

    有個(gè)事情可能會(huì)讓初學(xué)者驚訝:神經(jīng)網(wǎng)絡(luò)模型并不復(fù)雜!『神經(jīng)網(wǎng)絡(luò)』這個(gè)詞讓人覺得很高大上,但實(shí)際上神經(jīng)網(wǎng)絡(luò)算法要比人們想象的簡(jiǎn)單。 這篇文章完全是為新手準(zhǔn)備的。我們會(huì)通過用Python
    的頭像 發(fā)表于 02-27 15:06 ?981次閱讀
    用<b class='flag-5'>Python</b>從頭實(shí)現(xiàn)一個(gè)<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>來理解<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的原理4

    卷積神經(jīng)網(wǎng)絡(luò)python代碼

    卷積神經(jīng)網(wǎng)絡(luò)python代碼 ; 卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡(jiǎn)稱CNN)是一種可以在圖像處理和語(yǔ)音識(shí)別等領(lǐng)域中很好地應(yīng)用的神經(jīng)網(wǎng)絡(luò)。它的原
    的頭像 發(fā)表于 08-21 16:41 ?1314次閱讀

    如何使用Python進(jìn)行神經(jīng)網(wǎng)絡(luò)編程

    。 為什么使用PythonPython是一種廣泛使用的高級(jí)編程語(yǔ)言,以其易讀性和易用性而聞名。Python擁有強(qiáng)大的庫(kù),如TensorFlow、Keras和PyTorch,這些庫(kù)提
    的頭像 發(fā)表于 07-02 09:58 ?774次閱讀

    Python自動(dòng)訓(xùn)練人工神經(jīng)網(wǎng)絡(luò)

    人工神經(jīng)網(wǎng)絡(luò)(ANN)是機(jī)器學(xué)習(xí)中一種重要的模型,它模仿了人腦神經(jīng)元的工作方式,通過多層節(jié)點(diǎn)(神經(jīng)元)之間的連接和權(quán)重調(diào)整來學(xué)習(xí)和解決問題。Pyth
    的頭像 發(fā)表于 07-19 11:54 ?703次閱讀