<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)絡及理解反向傳播

          共 3053字,需瀏覽 7分鐘

           ·

          2021-12-10 06:15

          點擊上方小白學視覺”,選擇加"星標"或“置頂

          重磅干貨,第一時間送達


          一、人工神經(jīng)網(wǎng)絡簡述


          下面開始說神經(jīng)網(wǎng)絡。注意,當我們說N層神經(jīng)網(wǎng)絡的時候,我們沒有把輸入層算入(因為輸入層只是輸入數(shù)據(jù))。因此,單層的神經(jīng)網(wǎng)絡就是沒有隱層的(輸入直接映射到輸出)。而對于輸出層,也和神經(jīng)網(wǎng)絡中其他層不同,輸出層的神經(jīng)元一般是不會有激活函數(shù)的(或者也可以認為它們有一個線性相等的激活函數(shù))。這是因為最后的輸出層大多用于表示分類評分值,因此是任意值的實數(shù),然后用softmax得到分類值,或者直接某種實數(shù)值的目標數(shù)(比如在回歸中)。對于各種激活函數(shù)之后會寫。????

          全連接層及其網(wǎng)絡

          對于普通神經(jīng)網(wǎng)絡,最普通的層的類型是全連接層(fully-connected layer)。全連接層中的神經(jīng)元與其前后兩層的神經(jīng)元是完全成對連接的,但是在同一個全連接層內(nèi)的神經(jīng)元之間沒有連接。下面是兩個神經(jīng)網(wǎng)絡的圖例,都使用的全連接層:

          左邊是一個2層神經(jīng)網(wǎng)絡,隱層由4個神經(jīng)元(也可稱為單元(unit))組成,輸出層由2個神經(jīng)元組成。右邊是一個3層神經(jīng)網(wǎng)絡,兩個含4個神經(jīng)元的隱層。

          注意:層與層之間的神經(jīng)元是全連接的,但是層內(nèi)的神經(jīng)元不連接。

          其中,用來度量神經(jīng)網(wǎng)絡的尺寸的標準主要有兩個:一個是神經(jīng)元的個數(shù),另一個是參數(shù)的個數(shù),用上面圖示的兩個網(wǎng)絡舉例:

          • 第一個網(wǎng)絡有4+2=6個神經(jīng)元(輸入層不算),[3x4]+[4x2]=20個權(quán)重,還有4+2=6個偏置,共26個可學習的參數(shù)。

          • 第二個網(wǎng)絡有4+4+1=9個神經(jīng)元,[3x4]+[4x4]+[4x1]=32個權(quán)重,4+4+1=9個偏置,共41個可學習的參數(shù)。

          值得注意的是:現(xiàn)代神經(jīng)網(wǎng)絡能包含約1億個參數(shù),可由10-20層構(gòu)成(這就是深度學習)。但那么多參數(shù)是很容易學不來的,所以在卷積神經(jīng)網(wǎng)絡中,會使用參數(shù)共享和局部鏈接的方式來減少參數(shù),效果也更加的好。更多知識,后面講卷積神經(jīng)網(wǎng)絡的時候會講到。


          二、反向傳播鏈式法則簡單理解


          首先,反向傳播的數(shù)學原理是“求導的鏈式法則” :

          然后舉個簡單的例子說明鏈式求導:

          我們以求e=(a+b)*(b+1)的偏導為例。它的復合關系畫出圖可以表示如下:

          在圖中,引入了中間變量c,d。為了求出a=2, b=1時,e的梯度,我們可以先利用偏導數(shù)的定義求出不同層之間相鄰節(jié)點的偏導關系,如下圖所示。

          利用鏈式法則我們知道:

          鏈式法則在上圖中的意義是什么呢?其實不難發(fā)現(xiàn),的值等于從a到e的路徑上的偏導值的乘積,而的值等于從b到e的路徑1(b-c-e)上的偏導值的乘積加上路徑2(b-d-e)上的偏導值的乘積。也就是說,對于上層節(jié)點p和下層節(jié)點q,要求得,需要找到從q節(jié)點到p節(jié)點的所有路徑,并且對每條路徑,求得該路徑上的所有偏導數(shù)之乘積,然后將所有路徑的 “乘積” 累加起來才能得到的值。

          但是,這就有一個比較大的問題,就是這樣做是十分冗余的,很多路徑被重復訪問。比如上圖中,a-c-e和b-c-e就都走了路徑c-e。對于權(quán)值動則數(shù)萬的深度模型中的神經(jīng)網(wǎng)絡,這樣的冗余所導致的計算量是相當大的。

          同樣是利用鏈式法則,BP算法則機智地避開了這種冗余,它對于每一個路徑只訪問一次就能求頂點對所有下層節(jié)點的偏導值。(注意,這里他和普通鏈式求導計算方式不同的地方)

          具體做法如下:正如反向傳播(BP)算法的名字說的那樣,BP算法是反向(自上往下)來尋找路徑的。從最上層的節(jié)點e開始,初始值為1,以層為單位進行處理。對于e的下一層的所有子節(jié)點,將1乘以e到某個節(jié)點路徑上的偏導值,并將結(jié)果“堆放”在該子節(jié)點中。等e所在的層按照這樣傳播完畢后,第二層的每一個節(jié)點都“堆放"些值,然后我們針對每個節(jié)點,把它里面所有“堆放”的值求和,就得到了頂點e對該節(jié)點的偏導。然后將這些第二層的節(jié)點各自作為起始頂點,初始值設為頂點e對它們的偏導值,以"層"為單位重復上述傳播過程,即可求出頂點e對每一層節(jié)點的偏導數(shù)。

          加深理解做法:以上圖為例,節(jié)點c接受e發(fā)送的1*2并堆放起來,節(jié)點d接受e發(fā)送的1*3并堆放起來,至此第二層完畢,求出各節(jié)點總堆放量并繼續(xù)向下一層發(fā)送。節(jié)點c向a發(fā)送2*1并對堆放起來,節(jié)點c向b發(fā)送2*1并堆放起來,節(jié)點d向b發(fā)送3*1并堆放起來,至此第三層完畢,節(jié)點a堆放起來的量為2,節(jié)點b堆放起來的量為2*1+3*1=5, 即頂點e對b的偏導數(shù)為5.

          以上例子部分參考知乎胡逸夫回答:如何直觀地解釋 back propagation 算法?


          三、神經(jīng)網(wǎng)絡中的反向傳播


          上面講述的是在簡化情況在的BP,下面講述在神經(jīng)網(wǎng)絡中的反向傳播,這里以簡單的多層感知機為例:

          如上圖,我們先定義一個三層人工神經(jīng)網(wǎng)絡,layer1至layer3分別是輸入層、隱藏層和輸出層。首先定義說明一些變量:

          然后,為了簡單起見,我們定義代價函數(shù)為均方差損失函數(shù)(當然,現(xiàn)在很多不是用這個損失函數(shù),至于為什么,會在下面一篇文章講述):

          然后,更為了簡單來算,我們以一個輸入樣本為例進行說明,此時代價函數(shù)表示為:

          • 計算最后一層神經(jīng)網(wǎng)絡產(chǎn)生的錯誤:

          其中,表示Hadamard乘積,用于矩陣或向量之間點對點的乘法運算(注意這里的維數(shù)應該相同),推導如下:

          • 由后往前,計算每一層神經(jīng)網(wǎng)絡產(chǎn)生的錯誤,注意這里是反向回傳錯誤的體現(xiàn)(這一步的推導最為關鍵)

          所以我們得到:

          這一步極為關鍵,需要前后換序、轉(zhuǎn)置等操作,進行維度的適應,當然,知乎也有對這種做法的講解:維數(shù)相容原則在反向傳播的應用,可以一看
          • 然后,我們應用錯誤計算權(quán)重的梯度

          所以得到:

          • 最后,我們計算偏置的梯度

          最終得到:

          整理一下整體過程如下:

          對于訓練集中的每個樣本x,設置輸入層(Input layer)對應的激活值

          • 前向傳播:

          計算正向輸出值
          • 反向傳播:

          計算輸出層產(chǎn)生的錯誤:
          反向傳播錯誤:
          得到梯度,并用sgd等優(yōu)化算法更新權(quán)重參數(shù)
          得到梯度,并用sgd等優(yōu)化算法更新偏置參數(shù)
          下載1:OpenCV-Contrib擴展模塊中文版教程
          在「小白學視覺」公眾號后臺回復:擴展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴展模塊教程中文版,涵蓋擴展模塊安裝、SFM算法、立體視覺、目標跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

          下載2:Python視覺實戰(zhàn)項目52講
          小白學視覺公眾號后臺回復:Python視覺實戰(zhàn)項目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學校計算機視覺。

          下載3:OpenCV實戰(zhàn)項目20講
          小白學視覺公眾號后臺回復:OpenCV實戰(zhàn)項目20講,即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學習進階。

          交流群


          歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~


          瀏覽 48
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  日韩无码一区二区三 | 中国黄色录像 | 久久澡狠l澡欧美老妇 | 亚洲精品另类 | 乱伦性爱视频 |