基于批量標(biāo)準(zhǔn)化(Batch Normalization)的梯度求解

問題來源:cs231n [Assigment 2 - Batch Normalization]
什么是批量標(biāo)準(zhǔn)化,本篇不再去闡述,這里推薦一篇筆者覺得講的很詳細(xì)的博客:https://blog.csdn.net/qq_41853758/article/details/82930944
在實(shí)際操作中,通過批量標(biāo)準(zhǔn)化,可以極大的提高神經(jīng)網(wǎng)絡(luò)的準(zhǔn)確率訓(xùn)練速度,是提升自己模型的一個(gè)重要方法。本篇將對(duì)批量標(biāo)準(zhǔn)化進(jìn)行推導(dǎo),求得反向傳播梯度。

批量標(biāo)準(zhǔn)化公式:\hat{x}=(x-\mu)\left(\sigma^{2}+\epsilon\right)^{-1 / 2} \tag{1} \label{eq1}

其中\epsilon的作用是防止分母為0。
輸出:y=\gamma \hat{x}+\beta \tag{2}
\gamma\beta都是傳入的參數(shù),可以調(diào)節(jié)輸出范圍。當(dāng)\gamma=\left(\sigma^{2}+\epsilon\right)^{1 / 2},\beta=\mu時(shí),就可以將\hat{x}還原為x
為了推導(dǎo)的準(zhǔn)確性,這里給出更嚴(yán)謹(jǐn)?shù)谋磉_(dá)式:\hat{x_{k l}}=\left(x_{k l}-\mu_{l}\right)\left(\sigma_{l}^{2}+\epsilon\right)^{-1 / 2}
其中:\begin{array}{c}{\mu_{l}= \frac{1}{N} \sum_{p} x_{p l}} , {\sigma_{l}^{2}=\frac{1}{N} \sum_{p}\left(x_{p l}-\mu_{l}\right)^{2}} \end{array},k=1...N,l=1,...,H
這里以上是前向傳播的過程,比較難以理解的是反向傳播過程
即求\frac{d \mathcal{L}}{d \gamma}, \frac{d \mathcal{L}}{d \beta}, \frac{d \mathcal{L}}{d x},我們先嘗試著來求第三項(xiàng)
\frac{d \mathcal{L}}{d x} = \left(\begin{array}{ccc} {\frac{d \mathcal{L}}{d x_{11}}} & {\cdots} & {\frac{d \mathcal{L}}{d x_{1 H}}} \\ {\cdots} & {\frac{d \mathcal{L}}{d x_{k l}}} & {\cdots} \\ {\frac{d \mathcal{L}}{d x_{N 1}}} & {\cdots} & {\frac{d \mathcal{L}}{d x_{N H}}} \end{array}\right)
由公式可知,無法直接求解,而是需要進(jìn)行鏈?zhǔn)角髮?dǎo)\frac{d \mathcal{L}}{d x_{i j}}=\sum_{k, l} \frac{d \mathcal{L}}{d y_{k l}} \frac{d y_{k l}}{d \hat{x}_{k l}} \frac{d \hat{x}_{k l}}{d x_{i j}} \tag{3}
這里,我們假設(shè)\frac{d \mathcal{L}}{d y_{k l}}已知,來求后面兩項(xiàng)
由(2)式可以很容易出第二項(xiàng)為\gamma_{l},比較復(fù)雜的是第三項(xiàng)。
為了簡(jiǎn)化過程,我們將\hat{x_{k l}}的分子分母單獨(dú)拿出來求導(dǎo),然后進(jìn)行整合。
\hat{x}_{k l}=\left(x_{k l}-\mu_{l}\right),則可以求得\frac{d \hat{x}_{k l}}{d x_{i j}}=\delta_{i, k} \delta_{j, l}-\frac{1}{N} \delta_{j, l}其中\delta_{i, k}的含義為,當(dāng)i=k時(shí),\delta取值為1。這個(gè)好理解,矩陣中轉(zhuǎn)化過去的元素\hat{x}_{i j}只有對(duì){x}_{i j}求導(dǎo)的時(shí)候才不為0,第二項(xiàng)根據(jù)均值的公式可以得出。
現(xiàn)在來求分母的導(dǎo)數(shù),令\hat{x}_{{k}l}=\left(\sigma_{l}^{2}+\epsilon\right)^{-1 / 2},則\frac{d \hat{x}_{k l}}{d x_{i j}}=-\frac{1}{2} \frac{d \sigma_{l}^{2}}{d x_{i j}}(\sigma_{l}^{2}+\epsilon)^{-3 / 2}
進(jìn)一步求導(dǎo):\begin{aligned} \frac{d \sigma_{l}^{2}}{d x_{i j}} &=\frac{1}{N} \sum_{p} 2\left(\delta_{i p} \delta_{j l}-\frac{1}{N} \delta_{j l}\right)\left(x_{p l}-\mu_{l}\right) \\ &=\frac{2}{N}\left(x_{i l}-\mu_{l}\right) \delta_{j l}-\frac{2}{N^{2}} \sum_{p} \delta_{j l}\left(x_{p l}-\mu_{l}\right) \\ &=\frac{2}{N}\left(x_{i l}-\mu_{l}\right) \delta_{j l}-\frac{2}{N} \delta_{j l}\left(\frac{1}{N} \sum_{p} x_{p l}-\mu_{l}\right) \\ &=\frac{2}{N}\left(x_{i l}-\mu_{l}\right) \delta_{j l} \end{aligned}

最難的求導(dǎo)部分已經(jīng)完成,剩下的就是整合了,整合的步驟這里省略,只給出結(jié)果。
\hat{x_{k l}}=\left(x_{k l}-\mu_{l}\right)\left(\sigma_{l}^{2}+\epsilon\right)^{-1 / 2},可得:
\frac{d \hat{x}_{k l}}{d x_{i j}}= \left(\delta_{i k} \delta_{j l}-\frac{1}{N} \delta_{j l}\right)\left(\sigma_{l}^{2}+\epsilon\right)^{-1 / 2}-\frac{1}{N}\left(x_{k l}-\mu_{l}\right)\left(x_{i l}-\mu_{l}\right) \delta_{j l}\left(\sigma_{l}^{2}+\epsilon\right)^{-3 / 2 \tag{4}}
(4)帶入(3)結(jié)合第二項(xiàng)為\gamma_{l},整理求得:\frac{d \mathcal{L}}{d x_{i j}}=\frac{1}{N} \gamma_{j}\left(\sigma_{j}^{2}+\epsilon\right)^{-1 / 2}\left(N \frac{d \mathcal{L}}{d y_{i j}}-\sum_{k} \frac{d \mathcal{L}}{d y_{k j}}-\left(x_{i j}-\mu_{j}\right)\left(\sigma_{j}^{2}+\epsilon\right)^{-1} \sum_{k} \frac{d \mathcal{L}}{d y_{k j}}\left(x_{k j}-\mu_{j}\right)\right)
\frac{d \mathcal{L}}{d \beta}, \frac{d \mathcal{L}}{d \gamma}求解的過程更加簡(jiǎn)單,這里給出結(jié)果
\begin{aligned} \frac{d \mathcal{L}}{d y_{j}} &=\sum_{k l} \frac{d \mathcal{L}}{d y_{k l}} \frac{d y_{k l}}{d \gamma_{j}} \\ &=\sum_{k l} \frac{d \mathcal{L}}{d y_{k l}} \hat{x}_{k l} \delta_{l j} \\ &=\sum_{k} \frac{d \mathcal{L}}{d y_{k j}}\left(x_{k j}-\mu_{j}\right)\left(\sigma_{j}^{2}+\epsilon\right)^{-1 / 2} \end{aligned}
\begin{aligned} \frac{d \mathcal{L}}{d \beta_{j}} & = \sum_{k l} \frac{d \mathcal{L}}{d y_{k l}} \frac{d y_{k l}}{d \beta_{j}} \\ &=\sum_{k l} \frac{d \mathcal{L}}{d y_{k l}} \delta_{l j} \\ &=\sum_{k} \frac{d \mathcal{L}}{d y_{k j}} \end{aligned}

參考博客:http://cthorey.github.io./backpropagation/

總結(jié)

這三篇神經(jīng)網(wǎng)絡(luò)部分的知識(shí)大部分是自己以前沒有去深入了解的,為了不讓自己成為一個(gè)“調(diào)包俠”,理解這種底層的數(shù)學(xué)知識(shí)非常重要。日后如果還又類似的問題,會(huì)再發(fā)上來。

下篇預(yù)告:python爬蟲獲取電影排行榜

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容