日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

谈谈自动微分(Automatic Differentiation)

發布時間:2024/10/8 编程问答 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 谈谈自动微分(Automatic Differentiation) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?作者 | JermyLu

學校 | 中國科學院大學

研究方向 | 自然語言處理與芯片驗證




引言

眾所周知,Tensorflow、Pytorch 這樣的深度學習框架能夠火起來,與其包含自動微分機制有著密不可分的聯系,畢竟早期 Pytorch≈Numpy+AutoGrad,而 AutoGrad 的基礎就是自動微分機制。

常見的梯度求解方法包括:數值微分(Numerical Differentiation)、符號微分(Symbolic Differentiation)和自動微分(Automatic Differentiation)。


數值微分

在數學中,求解梯度?=?求解函數偏導數,而導數是用極限來定義的,如下所示:

其中, 表示參數 的一個很小的變化量,上式是導數的雙邊定義形式。如果函數 是初等函數,則可使用求導法則得到其導數。如果不能得到函數導數的解析式,則必須使用數值微分方法求解該函數在某個點的導數。

數值微分方法簡單,但計算量巨大,而且會造成截斷誤差(Truncation Error)和舍入誤差(Round-off Error)。

當用數值微分方法求解梯度時,需要用極限即無窮過程求解。然而,無窮過程在計算機中是不存在的,計算機需要將無窮過程求解截斷為有限過程求解。例如,導數定義中 是一個無窮過程,在實際計算中 (不能等于 0,等于 0 就不存在變化量了),而可能令 ,這就帶來了截斷誤差。

舍入誤差是指運算得到的精確值無法被計算機存儲,只能以近似值代替產生的差異。例如,當實數 超過了雙精度浮點數可以表示的范圍之后,計算機無法精確表示 ,而只能以其近似值 代替,就產生了舍入誤差。因此,數值微分方法不適用于神經網絡梯度反向傳播。


符號微分

符號微分是通過建立符號表達式求解微分的方式,即借助符號表達式和求導公式,推導出目標函數關于自變量的微分表達式,最后代入數值即可得到微分結果。例如,對于表達式 ,其微分表達式 ,然后將具體數值 和 代入,即可得到 。

使用符號微分方法時,必須將目標函數轉為一個完整的數學表達式,這個過程中會出現表達式膨脹(Expression Swell)的問題,大大增加系統存儲和處理表達式的負擔。

例如 ,則

在深層神經網絡模型中,神經元數量和參數量極大,完整的損失函數的表達式會非常冗長(比示例復雜的多得多,長的多得多),不易存儲和管理;再者,完整寫出損失函數的微分表達式也是一項龐大的工作量;最重要的一點,在神經網絡的梯度反向傳播過程中,只需要微分的(中間)結果值,而不是微分表達式。因此,符號微分方法也不適用于神經網絡梯度反向傳播。


自動微分

自動微分是一種“原子化”的符號微分,其將一個復雜的數學運算過程分解為一系列簡單的基本算子,如對數函數、三角函數等,然后對這些基本算子進行符號微分得到中間結果,再應用于整個函數。

首先,我們了解一下鏈式法則。

單變量函數鏈式法則:

若 是 的函數, 是 的函數, 是 的函數,則 。

多變量函數鏈式法則:

若 是 的函數, 都是 的函數,則 , 類似。

接下來,我們以三層全連接層神經網絡為例,解釋自動微分機制。

定義:輸入層輸出為 ;隱層輸出為 ;輸出層輸出為 ;標簽為 ,損失函數使用 范式,即 ;隱層激活函數為 記為 ,輸出層激活函數為 記為 。

因此:令 ,則 ;令 ,則 ,為了方便起見,不考慮偏置項。

這個三層神經網絡中,參數只包含 和 ,而梯度反傳參數更新,更新的就是 和 。因此,梯度計算的目標是 與 。

反向傳播是由輸出層開始計算梯度,之后逆向傳播到每一層網絡,直至到達輸入層。

輸出層發生的計算為 ,即輸出層的輸入 先經過線性變換右乘 轉換為中間狀態 ,之后 經過 激活函數變為 。最后, 和 計算得到損失函數值 。

該部分網絡的前向計算中,上述過程的計算次序為 ,而反向計算中節點訪問次序與之相反。

1. 計算 ,即計算損失函數 關于網絡輸出結果 的梯度,并將梯度向前傳遞。

2. 計算 記為 , 即 函數相對于其輸入 的梯度,并將梯度向前傳遞。

3. 得到 之后,下一步的目標是計算 與 。

  • ? ;

  • ? ;

  • 梯度 需要繼續向前一層傳遞,用于計算其他變量的梯度;梯度 會作為參數 的梯度計算結果,用于模型參數的更新。

  • 接下來,我們來分析隱藏層發生的計算 ,其中 分別表示隱藏層的輸出、中間結果、輸入和參數。該部分網絡的前向計算中,上述過程的計算次序為 ,而反向計算中節點訪問次序與之相反。

    1. 計算 , 已知,而 即 激活函數相對于其輸入 的梯度,有 ,即可獲得該梯度記為 ,并向前傳遞。

    2. 得到 之后,下一步計算 與 :

  • ?? ;

  • ?梯度 需要繼續向前一層傳遞,用于計算其他變量的梯度;梯度 會作為參數 的梯度計算結果,用于模型參數的更新。

  • 綜合輸出層和隱藏層的反向傳播方法,再根據神經網絡有向計算圖的拓撲結構,逆向訪問每一個節點執行上述梯度計算過程即可得到神經網絡中任意位置和任意參數的梯度信息。


    總結

    鏈式法則+反向傳播+有向圖拓撲結構,構成了自動微分機制的基礎。

    更多閱讀

    #投 稿?通 道#

    ?讓你的文字被更多人看到?

    如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。

    總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。?

    PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學術熱點剖析科研心得競賽經驗講解等。我們的目的只有一個,讓知識真正流動起來。

    📝?稿件基本要求:

    ? 文章確系個人原創作品,未曾在公開渠道發表,如為其他平臺已發表或待發表的文章,請明確標注?

    ? 稿件建議以?markdown?格式撰寫,文中配圖以附件形式發送,要求圖片清晰,無版權問題

    ? PaperWeekly 尊重原作者署名權,并將為每篇被采納的原創首發稿件,提供業內具有競爭力稿酬,具體依據文章閱讀量和文章質量階梯制結算

    📬?投稿通道:

    ? 投稿郵箱:hr@paperweekly.site?

    ? 來稿請備注即時聯系方式(微信),以便我們在稿件選用的第一時間聯系作者

    ? 您也可以直接添加小編微信(pwbot02)快速投稿,備注:姓名-投稿

    △長按添加PaperWeekly小編

    🔍

    現在,在「知乎」也能找到我們了

    進入知乎首頁搜索「PaperWeekly」

    點擊「關注」訂閱我們的專欄吧

    ·

    總結

    以上是生活随笔為你收集整理的谈谈自动微分(Automatic Differentiation)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。