1. 程式人生 > >如何從頭設計一個神經網路庫

如何從頭設計一個神經網路庫

本系列教程分為兩部分

  • 1 設計一個神經網路庫的基本架構設計
  • 2 每個組建的具體實現細節

1 神經網路庫的基本架構設計

為了專案程式碼的可擴充套件性,我們選取面向物件的編碼方式。我們設計的基本架構主要包括幾個主要模組

  • 1.神經網路基本元件( N e u
    r a l N e t w o r k
    ):主要用於支援神經網路執行的完整流程,其中包括新增網路層,訓練網路模型,預測等主要方法。
  • 2 .層元件(
    L a y e r s ):主要實現神經網路不同元件層:比如說全連線層(
    D e n s e
    ),卷積網路層( R N N ),卷積層( C o n v 2 D ),批正則化層( B N ),池化層( P o o l i n g L a y e r ), D r o p o u t 層,啟用函式層( A c t i v a t i o n )。層元件主要由層的前向傳播,反向傳播兩個過程組成。
  • 3.啟用函式元件。主要實現神經網路中不同啟用函式:比如說 S i g m o i d R e l u 。啟用函式元件主要有函式的定義以及函式一階導的定義組成。
  • 4 損失函式元件。主要實現神經網路中的不同的損失函式:比如說對於迴歸問題的平方損失函式,對於分類問題的交叉熵損失函式。損失函式元件主要由函式定義以及函式一階導定義組成
  • 5 優化器元件。主要實現神經網路中不同的優化方法:比如說隨機梯度下降法,動量梯度下降法,以及 A d a m 等等。優化器元件主要有更新引數方法組成。

圖形化的解釋
這裡寫圖片描述

2 每個組建的具體實現細節

1.神經網路基本元件

主要用於支援神經網路執行的完整流程,其中包括新增網路層,訓練網路模型,預測等主要方法。

2.層元件

(1) D e n s e
前向傳播: W X + b

反向傳播:

  1. 首先接收損失函式對於該層輸出的導數 δ (可以作為引數傳進來),
  2. 然後通過鏈式求導法則, W = δ Z W X = δ Z X
  3. 更新引數權重,並且回傳 X

(2) R N N
這裡寫圖片描述
前向傳播:
for  t  from  1  to  T

  1. s i n t = X t U T + s t 1 W T
  2. s t = A c t i v a t i o n ( s i n t )
  3. o t = s t V T

反向傳播:

  1. 首先接收損失函式對於該層輸出的導數 δ (可以作為引數傳進來),形狀是(batch_size,timesteps,input_dim)
  2. 對於每個步長t從1到T,首先計算垂直方向的梯度 V = V + δ t T o t V , s i n t = δ t T o t s t s t s i n t X t = s i n t