• <strike id="fdgpu"><input id="fdgpu"></input></strike>
    <label id="fdgpu"></label>
    <s id="fdgpu"><code id="fdgpu"></code></s>

  • <label id="fdgpu"></label>
  • <span id="fdgpu"><u id="fdgpu"></u></span>

    <s id="fdgpu"><sub id="fdgpu"></sub></s>
    您當(dāng)前的位置是:  首頁 > 新聞 > 專家觀點(diǎn) >
     首頁 > 新聞 > 專家觀點(diǎn) >

    李理:自動(dòng)梯度求解 反向傳播算法的另外一種視角

    2016-12-14 16:19:09   作者:   來源:CTI論壇   評(píng)論:0  點(diǎn)擊:


      本系列文章面向深度學(xué)習(xí)研發(fā)者,希望通過ImageCaptionGeneration,一個(gè)有意思的具體任務(wù),深入淺出地介紹深度學(xué)習(xí)的知識(shí)。本系列文章涉及到很多深度學(xué)習(xí)流行的模型,如CNN,RNN/LSTM,Attention等。本文為第四篇。
      作者:李理
      目前就職于環(huán)信,即時(shí)通訊云平臺(tái)和全媒體智能客服平臺(tái),在環(huán)信從事智能客服和智能機(jī)器人相關(guān)工作,致力于用深度學(xué)習(xí)來提高智能機(jī)器人的性能。
      相關(guān)文章:
      前面我們講過了反向傳播算法的詳細(xì)推導(dǎo)過程,大家可能會(huì)覺得有些復(fù)雜。事實(shí)上其實(shí)就是鏈?zhǔn)角髮?dǎo)法則的應(yīng)用。今天我們將會(huì)繼續(xù)討論這個(gè)問題,不過是從Computational Graphs的角度,也就是我們之前說過的自動(dòng)求導(dǎo)(Automatic Differentiationor Reverse-mode Differentiation)。并且通過CS231n的Assignment2來學(xué)習(xí)使用這種方法,通過這種方法來實(shí)現(xiàn)一個(gè)多層的神經(jīng)網(wǎng)絡(luò)。
      Calculus on Computational Graphs:Backpropagation
      首先我們介紹一篇博客文章:https://colah.github.io/posts/2015-08-Backprop/基本是翻譯過來,不過部分地方是我自己的理解,建議讀者結(jié)合這篇文章一起閱讀。
      簡(jiǎn)介
      反向傳播算法是神經(jīng)網(wǎng)絡(luò)的核心算法,不過這個(gè)算法在不同的領(lǐng)域被多次”發(fā)現(xiàn)“過,因此有不同的名稱。
      計(jì)算圖(Computational Graphs)
      考慮一個(gè)簡(jiǎn)單的函數(shù)e=(a+b)∗(b+1)e=(a+b)∗(b+1)。這個(gè)函數(shù)有兩個(gè)操作(函數(shù)),加法和乘法。為了指代方便,我們引入兩個(gè)中間變量,c和d。
      c=a+b
      d=b+1
      e=c*d
      下面我們把它畫成一個(gè)計(jì)算圖,每一個(gè)操作是圖中一個(gè)節(jié)點(diǎn),最基本的變量a和b也是一個(gè)節(jié)點(diǎn)。每個(gè)節(jié)點(diǎn)和它的輸入變量直接有一條邊。比如d的輸入變量是b,那么d和b直接就有一條邊。
      任何一個(gè)顯示定義的函數(shù)(隱函數(shù)不行,不過我們定義的神經(jīng)網(wǎng)絡(luò)肯定不會(huì)通過隱函數(shù)來定義)都可以分解為一個(gè)有向無環(huán)圖(樹),其中葉子節(jié)點(diǎn)是最基本的無依賴的自變量,而中間節(jié)點(diǎn)是我們引入的中間變量,而樹根就是我們的函數(shù)。比如上面的例子,計(jì)算圖如下所示:
    \
      給定每一個(gè)自變量的值,我們可以計(jì)算最終的函數(shù)值,對(duì)應(yīng)與神經(jīng)網(wǎng)絡(luò)就是feedforward計(jì)算。具體用”算法“怎么計(jì)算呢?首先因?yàn)橛?jì)算圖是一個(gè)有向無環(huán)圖,因此我們可以拓?fù)渑判颍仁侨~子節(jié)點(diǎn)a和b,他們的值已經(jīng)給定,然后刪除a和b出發(fā)的邊,然后c和d沒有任何未知依賴,可以計(jì)算,最后計(jì)算e。計(jì)算過程如下圖:
    \
      計(jì)算圖的導(dǎo)數(shù)計(jì)算
      首先我們可以計(jì)算每條邊上的導(dǎo)數(shù),也就是邊的終點(diǎn)對(duì)起點(diǎn)的導(dǎo)數(shù),而且導(dǎo)數(shù)是在起點(diǎn)的取前向計(jì)算值時(shí)的導(dǎo)數(shù),具體過程如圖所示:
    \
      有些邊的導(dǎo)數(shù)不依賴于輸入的值,比如:
    \
      但是還有很多邊的導(dǎo)數(shù)是依賴于輸入值的,比如:
    \
      因?yàn)樵?ldquo;前向”計(jì)算的過程中,每個(gè)節(jié)點(diǎn)的值都計(jì)算出來了,所以邊的計(jì)算很簡(jiǎn)單,也不需要按照什么的順序。
      不過我們一般比較感興趣的是最終函數(shù)對(duì)某個(gè)自變量的導(dǎo)數(shù),比如
    \
      根據(jù)鏈?zhǔn)椒▌t,只要找到這兩個(gè)節(jié)點(diǎn)的所有路徑,然后把路徑的邊乘起來就得到這條邊的值,然后把所有邊加起來就可以了。
      比如上面的例子b到e有兩條路徑:b->c->e和b->d->e,所以
    \
      如果用“鏈?zhǔn)?rdquo;法則來寫就是
    \
      路徑反過來而已。
      使用上面的方法,我們可以計(jì)算任何一個(gè)點(diǎn)(上面的變量)對(duì)另外一個(gè)點(diǎn)(上面的變量)的導(dǎo)數(shù)。不過我們一般的情況是計(jì)算樹根對(duì)所有葉子的導(dǎo)數(shù),當(dāng)然我們可以使用上面的算法一個(gè)一個(gè)計(jì)算,但是這樣會(huì)有很多重復(fù)的計(jì)算。
      比如a->e的路徑是a->c->e,b->e有一條邊是b->c->e,其中c->e是重復(fù)的【這個(gè)例子不太好,我們可以想像c->e是一條很長(zhǎng)的路徑】,每次都重復(fù)計(jì)算c->e這個(gè)“子”路徑是多余的。我們可以從后往前計(jì)算,也就是每個(gè)節(jié)點(diǎn)都是存放樹根變量(這個(gè)例子是e)對(duì)當(dāng)前節(jié)點(diǎn)的導(dǎo)數(shù)(其實(shí)也就是樹根到當(dāng)前節(jié)點(diǎn)的所有路徑的和)。
      反向?qū)?shù)計(jì)算
    \
      計(jì)算流程文字描述如下:
      首先還是對(duì)這個(gè)圖進(jìn)行拓?fù)渑判颍贿^是反過來。
      首先是
    \
      這個(gè)沒什么好說的。
      然后計(jì)算
    \
      然后計(jì)算
    \
      然后計(jì)算
    \
      計(jì)算
    \
      前向?qū)?shù)計(jì)算
      如果我們需要計(jì)算每一個(gè)變量對(duì)某一個(gè)變量的導(dǎo)數(shù),就可以使用前向計(jì)算的方法。不過我們的神經(jīng)網(wǎng)絡(luò)都是相反——計(jì)算某個(gè)一個(gè)變量(一般是損失函數(shù))對(duì)所有變量的導(dǎo)數(shù),所以這里就不詳細(xì)介紹了。
      至此,本系列文章的第四部分告一段落。在接下來的文章中,作者將為大家詳細(xì)講述關(guān)于Optimization、常見的深度學(xué)習(xí)框架/工具的使用方法、使用自動(dòng)求導(dǎo)來實(shí)現(xiàn)多層神經(jīng)網(wǎng)絡(luò)等內(nèi)容,敬請(qǐng)期待。

    專題

    亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 曲水县| 城市| 和田县| 扶沟县| 三台县| 息烽县| 屯门区| 黔江区| 焉耆| 乐至县| 化州市| 夏河县| 柏乡县| 西藏| 双牌县| 抚松县| 宣恩县| 青岛市| 松江区| 扎兰屯市| 紫金县| 衡阳县| 尼木县| 三亚市| 清流县| 桂林市| 柘城县| 乐安县| 安徽省| 塘沽区| 宜君县| 启东市| 搜索| 张家港市| 通海县| 柞水县| 博乐市| 滦平县| 温泉县| 祥云县| 敦化市| http://444 http://444 http://444 http://444 http://444 http://444