<!-- {%hackmd P1zwO06RSL-yYA-Op_7upw %} --> # 4_2~4_2_4 [TOC] ## 4.2 反向求導 ### 補充:正向求導 - 對每一個參數進行微小的擾動( f'(x)=$lim_{h->0} \frac {f(x+h)-f(x)}{h}$ ),以計算整個神經網路的損失 - 缺點: 當規模較大時(層數多、每層神經元多)計算的負擔太大 - eg: 2層神經網路(mnist為例) - sample_size=28\*28pixels, batch=500, 中間層100神經元, output_layer:10神經元: - 參數個數: - 書上: 784x100+100+100*10+10=79510 - 書上說的2層神經網路,指的是中間層+輸出層。中間層的權重W是一個784*100的矩陣,輸出值有100個。輸出層的權重是100*10的矩陣,輸出值有10個。所以總參數是784*100+100+100*10+10=79510 - 更新一次須進行的運算次數:2\*70510次 正向計算 - 僅2層就這樣,當層數變多後此方法效率過低,不可行 :::info 正向求導須對每一個參數分別進行,運算負荷過大 ::: ## 4.2.1 正向計算反向求導 - 將每一層視為一個function - 正向計算(求值): - x -->g(x)-->f(g(x))-->k(h(g(x)))=f(x) - 反向計算(求導): - f'(h) = k'(h) --> f'(g) = k'(h)h'(g) --> f'(x)=k'(h)h'(g)g'(x) - 對不同層進行計算時,不用一再的重複計算,效率較高 ## 4.2.2 計算圖 把變數和函數的關係用流程圖表示 node:變數(node內可以保存其他變數) edge: 運算動作 >  [name=https://samaelchen.github.io/deep_learning_step2/] [time=2023_9_16] :::info 方便直覺的表示計算流程 :+1: ::: 現在多數套件背後都會實做計算圖,儲存變數,方便計算 ## 4.2.3 損失函數關於輸出的梯度 結論先說: 損失關於輸出(Z)的梯度 $\frac {1}{m}(F-Y)$ ### 1. 二分類交叉熵損失函數關於輸出的梯度   ### 2. 均方差損失函數關於輸出的梯度 多樣本(batch)-->輸出向量 和 目標向量的 歐幾里德距離的平方(均方差)作為誤差 ### 3. 多分類交叉熵損失函數關於輸出的梯度 類似二分類交叉熵 ## 4.2.4 2層神經網路的反向求導 都是數學推導,詳見書上 p.4-48~4-54 ### 1. 單樣本的反向求導 ### 2. 反向求導的多樣本向量化表示
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up