<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)

          共 4113字,需瀏覽 9分鐘

           ·

          2020-10-01 20:48

          ?深度學(xué)習(xí)

          Author:louwill

          From:深度學(xué)習(xí)筆記


          深度學(xué)習(xí)作為當(dāng)前機(jī)器學(xué)習(xí)一個(gè)最熱門的發(fā)展方向,仍然保持著傳統(tǒng)機(jī)器學(xué)習(xí)方法的理念與特征,從監(jiān)督學(xué)習(xí)的角度看,深度學(xué)習(xí)與機(jī)器學(xué)習(xí)并無(wú)本質(zhì)上的差異。隱藏層使得感知機(jī)能夠發(fā)展為擬合萬(wàn)物的神經(jīng)網(wǎng)絡(luò)模型,而反向傳播算法則是整個(gè)神經(jīng)網(wǎng)絡(luò)訓(xùn)練的核心要義。
          ?
          機(jī)器學(xué)習(xí)與深度學(xué)習(xí)的關(guān)系
          要學(xué)習(xí)深度學(xué)習(xí),恐怕不得不先溫習(xí)一下機(jī)器學(xué)習(xí),搞清楚二者之間的關(guān)系。

          簡(jiǎn)單來(lái)說(shuō),機(jī)器學(xué)習(xí)就是從歷史數(shù)據(jù)中探索和訓(xùn)練出數(shù)據(jù)的普遍規(guī)律,將其歸納為相應(yīng)的數(shù)學(xué)模型,并對(duì)未知的數(shù)據(jù)進(jìn)行預(yù)測(cè)的過(guò)程。至于在這個(gè)過(guò)程中我們碰到的各種各樣的問(wèn)題,比如數(shù)據(jù)質(zhì)量、模型評(píng)價(jià)標(biāo)準(zhǔn)、訓(xùn)練優(yōu)化方法、過(guò)擬合等一系列關(guān)乎機(jī)器學(xué)習(xí)模型生死的問(wèn)題,在這里不做具體展開(kāi),大家可以去補(bǔ)習(xí)相關(guān)的機(jī)器學(xué)習(xí)知識(shí)。

          在機(jī)器學(xué)習(xí)中,有很多相當(dāng)成熟的模型和算法。其中有一種很厲害的模型,那就是人工神經(jīng)網(wǎng)絡(luò)。這種模型從早期的感知機(jī)發(fā)展而來(lái),對(duì)任何函數(shù)都有較好的擬合性,但自上個(gè)世紀(jì)90年代一直到2012年深度學(xué)習(xí)集中爆發(fā)前夕,神經(jīng)網(wǎng)絡(luò)受制于計(jì)算資源的限制和較差的可解釋性,一直處于發(fā)展的低谷階段。之后大數(shù)據(jù)興起,計(jì)算資源也迅速跟上,加之2012年ImageNet競(jìng)賽冠軍采用的AlexNet卷積神經(jīng)網(wǎng)絡(luò)一舉將圖像分類的Top5錯(cuò)誤率降至16.4%,震驚了當(dāng)時(shí)的學(xué)界和業(yè)界。從此之后,原本處于研究邊緣狀態(tài)的神經(jīng)網(wǎng)絡(luò)又迅速火熱了起來(lái),深度學(xué)習(xí)也逐漸占據(jù)了計(jì)算機(jī)視覺(jué)的主導(dǎo)地位。

          注意:這里有必要解釋一下模型和算法的概念,通常我們所說(shuō)的像支持向量機(jī)(Support Vector Machine,以下簡(jiǎn)稱SVM)之類的所謂機(jī)器學(xué)習(xí)十大算法其實(shí)不應(yīng)該稱之為算法,更應(yīng)該稱之為模型。機(jī)器學(xué)習(xí)算法應(yīng)該是在給定模型和訓(xùn)練策略的情況下采取的優(yōu)化算法,比如梯度下降、牛頓法等。當(dāng)然,一般情況下將機(jī)器學(xué)習(xí)中的模型和算法概念混在一起并沒(méi)有十分不妥之處,畢竟模型中本身就包含著計(jì)算規(guī)則的意思。

          講了這么多,無(wú)非就是想讓大家知道,以神經(jīng)網(wǎng)絡(luò)為核心的深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的一個(gè)領(lǐng)域分支,所以深度學(xué)習(xí)在其本質(zhì)上也必須遵循機(jī)器學(xué)習(xí)的基本要義和法則。在傳統(tǒng)的機(jī)器學(xué)習(xí)中,我們需要訓(xùn)練的是結(jié)構(gòu)化的數(shù)值數(shù)據(jù),比如預(yù)測(cè)銷售量、預(yù)測(cè)某人是否按時(shí)還款,等等。但在深度學(xué)習(xí)中,其訓(xùn)練輸入就不再是常規(guī)的數(shù)值數(shù)據(jù)了,它可能是一張圖片、一段語(yǔ)言、一段對(duì)話語(yǔ)音或一段視頻。深度學(xué)習(xí)要做的就是輸入一張狗的圖片到神經(jīng)網(wǎng)絡(luò)里,它的輸出是狗或者dog這樣的標(biāo)簽,輸入一段語(yǔ)音,它輸出的是比如“你好”這樣的文本。綜上所述可以看出,機(jī)器學(xué)習(xí)(深度學(xué)習(xí))的核心任務(wù)就是找(訓(xùn)練)一個(gè)模型,它能夠?qū)⑤斎朕D(zhuǎn)化為正確的輸出。
          ?
          感知機(jī)與神經(jīng)網(wǎng)絡(luò)
          深度學(xué)習(xí)看起來(lái)就像是一個(gè)黑箱機(jī)制,輸入各種非結(jié)構(gòu)化的數(shù)據(jù)之后出來(lái)預(yù)測(cè)結(jié)果,比如輸入一段語(yǔ)音,輸出為“Hello, World!”這樣的文本;輸入一張狗的圖像,輸出為“狗”這樣的標(biāo)簽;輸入一副棋盤和當(dāng)前的局勢(shì),輸出為下一步的走棋方式;輸入“你好!”這樣一句中文,輸出為“Hi!”這樣一句英文,等等。我們很難對(duì)輸入與輸出之間的模型轉(zhuǎn)化過(guò)程給出一個(gè)合理的解釋。在實(shí)際工作中,調(diào)用像 TensorFlow 這樣優(yōu)秀的深度學(xué)習(xí)框架能夠幫助我們快速搭建起一個(gè)深度學(xué)習(xí)項(xiàng)目,但在學(xué)習(xí)深度學(xué)習(xí)的時(shí)候,不建議大家一開(kāi)始就上手各種深度學(xué)習(xí)框架,希望大家能和我們一道,在把基本原理搞清楚之后利用Python自己手動(dòng)去編寫模型和實(shí)現(xiàn)算法細(xì)節(jié)。

          為了學(xué)習(xí)深度學(xué)習(xí)和各種結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò),我們需要從頭開(kāi)始。感知機(jī)作為神經(jīng)網(wǎng)絡(luò)和支持向量機(jī)的理論基礎(chǔ),一定要清楚其中的模型細(xì)節(jié)。簡(jiǎn)單來(lái)說(shuō),感知機(jī)就是一個(gè)旨在建立一個(gè)線性超平面對(duì)線性可分的數(shù)據(jù)集進(jìn)行分類的線性模型。其基本結(jié)構(gòu)如圖1所示。
          圖1 感知機(jī)模型
          ?
          圖1從左到右為感知機(jī)模型的計(jì)算執(zhí)行方向,模型接受了三個(gè)輸入,將輸入與權(quán)值參數(shù)進(jìn)行加權(quán)求和并經(jīng)過(guò)Sigmoid函數(shù)進(jìn)行激活,將激活結(jié)果作為輸出。這便是感知機(jī)執(zhí)行前向計(jì)算的基本過(guò)程。這樣就行了嗎?當(dāng)然不行。剛剛我們只解釋了模型,對(duì)策略和算法并未解釋。當(dāng)我們執(zhí)行完前向計(jì)算得到輸出之后,模型需要根據(jù)你的輸出和實(shí)際的輸出按照損失函數(shù)計(jì)算當(dāng)前損失,計(jì)算損失函數(shù)關(guān)于權(quán)值和偏置的梯度,然后根據(jù)梯度下降法更新權(quán)值和偏置,經(jīng)過(guò)不斷的迭代調(diào)整權(quán)值和偏置使得損失最小,這便是完整的單層感知機(jī)的訓(xùn)練過(guò)程。圖2所示是輸入為圖像的感知機(jī)計(jì)算過(guò)程。
          ?
          圖2?基于感知機(jī)的圖像識(shí)別過(guò)程
          ?
          前面講的是單層感知機(jī),單層感知機(jī)包含兩層神經(jīng)元,即輸入與輸出神經(jīng)元,可以非常容易地實(shí)現(xiàn)邏輯與、邏輯或和邏輯非等線性可分情形,但是單層感知機(jī)的學(xué)習(xí)能力是非常有限的,對(duì)于像異或問(wèn)題這樣的線性不可分情形,單層感知機(jī)就搞不定了(所謂線性不可分,即對(duì)于輸入訓(xùn)練數(shù)據(jù),不存在一個(gè)線性超平面能夠?qū)⑵溥M(jìn)行線性分類)。其學(xué)習(xí)過(guò)程會(huì)出現(xiàn)一定程度的振蕩,權(quán)值參數(shù)難以穩(wěn)定下來(lái),最終不能求得合適的解,異或問(wèn)題如圖3 c圖所示。
          ?
          圖3 異或問(wèn)題
          ?
          對(duì)于線性不可分的情況,在感知機(jī)基礎(chǔ)上一般有兩個(gè)解決方向,一個(gè)是著名的SVM,旨在通過(guò)核函數(shù)映射來(lái)處理非線性的情況,而另一種就是神經(jīng)網(wǎng)絡(luò)模型。這里的神經(jīng)網(wǎng)絡(luò)模型也叫作多層感知機(jī)(Muti-Layer Perception,以下簡(jiǎn)稱MLP),與單層的感知機(jī)在結(jié)構(gòu)上的區(qū)別主要在于MLP多了若干隱藏層,這使得神經(jīng)網(wǎng)絡(luò)能夠處理非線性問(wèn)題。

          一個(gè)單隱層的神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu),如圖4所示。
          ?
          圖4?多層感知機(jī)
          ?
          可以看到,相較于兩層神經(jīng)元的單層感知機(jī),多層感知機(jī)中間多了一個(gè)隱藏層。何為隱藏層?就是在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過(guò)程中我們只能觀察到輸入和輸出層的數(shù)據(jù),對(duì)于中間的隱藏層的數(shù)據(jù)變化我們是看不見(jiàn)的,因而在深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Networks,以下簡(jiǎn)稱DNN)中,對(duì)于中間看不見(jiàn)又難以對(duì)其效果進(jìn)行合理解釋的隱藏層稱之為“黑箱子”。

          含隱藏層的神經(jīng)網(wǎng)絡(luò)是如何訓(xùn)練的呢?與感知機(jī)一樣,神經(jīng)網(wǎng)絡(luò)的訓(xùn)練依然包含前向計(jì)算和反向傳播兩個(gè)主要過(guò)程。當(dāng)然,單層感知機(jī)沒(méi)有反向傳播這個(gè)概念,而是直接建立損失函數(shù)對(duì)權(quán)值和偏置參數(shù)進(jìn)行梯度優(yōu)化。前向計(jì)算簡(jiǎn)單來(lái)說(shuō),就是權(quán)值偏置與輸入的線性加權(quán)和激活操作,在隱藏層上有個(gè)嵌套的過(guò)程。這里我們重點(diǎn)講反向傳播算法(Error Back Propagation,也叫誤差逆?zhèn)鞑ィ?,作為神?jīng)網(wǎng)絡(luò)的訓(xùn)練算法,反向傳播算法可謂是目前最成功的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)算法。我們通常說(shuō)的BP神經(jīng)網(wǎng)絡(luò)就是指應(yīng)用反向傳播算法進(jìn)行訓(xùn)練的神經(jīng)網(wǎng)絡(luò)模型。

          那么,反向傳播算法的工作機(jī)制究竟是怎樣的呢?這里需要大家復(fù)習(xí)一下在大學(xué)課本階段學(xué)習(xí)的微積分知識(shí)。下面以一個(gè)兩層(即單隱層)網(wǎng)絡(luò)為例,也就是圖5中的網(wǎng)絡(luò)結(jié)構(gòu),給大家詳細(xì)推導(dǎo)一下反向傳播的基本過(guò)程。

          假設(shè)輸入層為x,輸入層與隱藏層之間的權(quán)值和偏置分別為w1和b1,線性加權(quán)計(jì)算結(jié)果為z1=w1x+b1,采用sigmoid激活函數(shù),激活輸出為a1=σ(z1)。而隱藏層到輸出層的權(quán)值和偏置分別為w2和b2,線性加權(quán)計(jì)算結(jié)果為z2=w2x+b2,激活輸出為a2=σ(z2)。所以這個(gè)兩層網(wǎng)絡(luò)的前向計(jì)算過(guò)程為x-z1-a1-z2-a2。


          可以看出,反向傳播的直觀理解就是將前向計(jì)算過(guò)程反過(guò)來(lái),但必須是梯度計(jì)算的方向反過(guò)來(lái),假設(shè)我們這里采用如下的交叉熵?fù)p失函數(shù)。? ? ? ? ? ? ? ? ? ? ? ? ???????????????????????????
          反向傳播是基于梯度下降策略的,主要是以目標(biāo)參數(shù)的負(fù)梯度方向?qū)?shù)進(jìn)行更新,所以基于損失函數(shù)對(duì)前向計(jì)算過(guò)程中各個(gè)變量進(jìn)行梯度計(jì)算就非常必要了。將前向計(jì)算過(guò)程反過(guò)來(lái),那基于損失函數(shù)的梯度計(jì)算順序就是da2-dz2-dw2-db2-da1-dw1-db1。我們從輸出a2開(kāi)始進(jìn)行反向推導(dǎo),輸出層激活輸出為a2,那首先計(jì)算損失函數(shù)L(y,a)關(guān)于a2的微分da2,影響a2輸出的是誰(shuí)呢?由前向傳播可知a2是由z2經(jīng)激活函數(shù)激活計(jì)算而來(lái)的,所以計(jì)算損失函數(shù)關(guān)于z2的導(dǎo)數(shù)dz2必須經(jīng)由a2進(jìn)行復(fù)合函數(shù)求導(dǎo),即微積分上常說(shuō)的鏈?zhǔn)角髮?dǎo)法則。然后繼續(xù)往前推,影響z2的又是哪些變量呢?由前向計(jì)算可知影響的有w2、a1和b2,繼續(xù)按照鏈?zhǔn)角髮?dǎo)法則進(jìn)行求導(dǎo)即可。最終以交叉熵?fù)p失函數(shù)為代表的兩層神經(jīng)網(wǎng)絡(luò)的反向傳播向量化求導(dǎo)計(jì)算公式如下所示。

          注意:鏈?zhǔn)角髮?dǎo)法則對(duì)復(fù)合函數(shù)進(jìn)行求導(dǎo)的一種計(jì)算方法,復(fù)合函數(shù)的導(dǎo)數(shù)將是構(gòu)成復(fù)合這有限個(gè)函數(shù)在相應(yīng)點(diǎn)的導(dǎo)數(shù)的乘積,就像鏈子一樣一環(huán)套一環(huán),故稱鏈?zhǔn)椒▌t。

          在有了梯度計(jì)算結(jié)果之后,我們便可根據(jù)權(quán)值更新公式對(duì)權(quán)值和偏置參數(shù)進(jìn)行更新了,具體計(jì)算公式如下,其中為學(xué)習(xí)率,是個(gè)超參數(shù),需要我們?cè)谟?xùn)練時(shí)手動(dòng)指定,當(dāng)然也可以對(duì)其進(jìn)行調(diào)參以取得最優(yōu)超參數(shù)。?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

          ?
          以上便是BP神經(jīng)網(wǎng)絡(luò)模型和算法的基本工作流程,如圖5所示。總結(jié)起來(lái)就是前向計(jì)算得到輸出,反向傳播調(diào)整參數(shù),最后以得到損失最小時(shí)的參數(shù)為最優(yōu)學(xué)習(xí)參數(shù)。
          ?
          圖5?前向計(jì)算與反向傳播
          ?
          經(jīng)過(guò)近十幾年的發(fā)展,神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)已經(jīng)從普通的全連接網(wǎng)絡(luò)發(fā)展到卷積神經(jīng)網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)、自編碼器、生成式對(duì)抗網(wǎng)絡(luò)和圖神經(jīng)網(wǎng)絡(luò)等各種各樣的結(jié)構(gòu),但BP算法一直是神經(jīng)網(wǎng)絡(luò)一個(gè)經(jīng)典和高效的尋優(yōu)工具。

          通過(guò)本節(jié)內(nèi)容來(lái)看,訓(xùn)練一個(gè)BP神經(jīng)網(wǎng)絡(luò)并非難事,我們有足夠優(yōu)秀的深度學(xué)習(xí)計(jì)算框架,讀者通過(guò)幾行代碼就可以搭建起一個(gè)全連接網(wǎng)絡(luò)。但是,為了掌握神經(jīng)網(wǎng)絡(luò)的基本思維范式和鍛煉實(shí)際的編碼能力,希望讀者朋友們能夠利用Python在不調(diào)用任何算法包的情況下根據(jù)算法原理手動(dòng)實(shí)現(xiàn)一遍神經(jīng)網(wǎng)絡(luò)模型。

          往期精彩:

          【原創(chuàng)首發(fā)】機(jī)器學(xué)習(xí)公式推導(dǎo)與代碼實(shí)現(xiàn)30講.pdf

          【原創(chuàng)首發(fā)】深度學(xué)習(xí)語(yǔ)義分割理論與實(shí)戰(zhàn)指南.pdf


          喜歡您就點(diǎn)個(gè)在看!

          瀏覽 94
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲AV免费 | 欧美aaa日韩aaa国产 | 亚洲无码高清在线 | 99在线这里只有精品 | 欧美亚洲色综久久精品国产 |