1. 程式人生 > >為什麼在神經網路裡面使用梯度下降法對模型的權值矩陣進行調整

為什麼在神經網路裡面使用梯度下降法對模型的權值矩陣進行調整

我們都知道,神經網路是先將模型引數的調整問題轉換為一個求某個損失函式的極小值問題,然後通過梯度下降演算法讓引數選擇合適的值使得該損失函式取得極小值。那麼為什麼梯度下降演算法可以完成這個任務呢?

假設一個模型的損失函式為C(θ)C(\theta),其中θ\theta 是模型待確定的引數,它包含各層的權值矩陣WiW^{i},各層的偏置向量bib^{i}等等。那麼如何取得一個合適的θ\theta^{'},使得C(θ)C(\theta^{'})小於任何的C(θ)C(\theta)

OK. 假設C(θ)C(\theta)

(θ) 關於θ\theta 的函式影象為: 在這裡插入圖片描述 假設,我們通過某種隨機方式選中一個起點θ0\theta_{0},我們現在來看如何基於這個起點一步步地尋找到極小值點。根據泰勒公式,C(θ)C(\theta)θ0\theta_{0}處的一階展開為: C(θ)C(θ0)(θθ0)+C(θ0)C(\theta)\approx C'(\theta_{0})*(\theta -\theta_{0})+C(\theta_{0}) 其中θ\thetaθ0\theta_{0}領域的某個點。 我們的目標是為了使得C(θ)C(\theta)
更小,於是我們需要採取某種策略,在θ0\theta_{0}的基礎上構造出另外一個點θ1\theta_{1},使得C(θ1)<=C(θ0)C(\theta_{1})<=C(\theta_{0})。 因為:C(θ1)C(θ0)(θ1θ0))+C(θ0)C(\theta_{1}) \approx C'(\theta_{0})*(\theta_{1}-\theta_{0}))+C(\theta_{0}) 所以:C(θ1)C(θ0)=C(θ0)(θ1θ0)+C(
θ0)C(θ0)=C(θ0)(θ1θ0)C(\theta_{1})-C(\theta_{0})=C'(\theta_{0})*(\theta_{1}-\theta_{0})+C(\theta_{0})-C(\theta_{0})=C'(\theta_{0})*(\theta_{1} -\theta_{0})
為了C(θ1)<=C(θ0)C(\theta_{1})<=C(\theta_{0}),那麼就得有:C(θ0)(θ1θ0)<=0C'(\theta_{0})*(\theta_{1} -\theta_{0})<=0 那麼我們如何構造一個θ1\theta_{1}滿足上面的不等式呢? 一種很容易的想到的構造方式為:kC(θ0)2<=0-kC'(\theta_{0})^{2} <=0,於是我們主要想辦法使得(θ1θ0)=kC(θ0)\theta_{1}-\theta_{0})=-kC'(\theta_{0})就可以啦, 此時,θ1=θ0kC(θ0)\theta_{1}=\theta_{0}-kC'(\theta_{0}) OK,這就找到某種策略,在基於θ0\theta_{0}的基礎上構造出另外一個點θ1=θ0kC(θ0)\theta_{1}=\theta_{0}-kC'(\theta_{0}),使得目標函式的值更小。 這個就是梯度下降演算法的原理,而這個k就是所謂的學習速率,一般我們把k寫成η\eta

而且 從這個原理中,我們可以知道θ1\theta_{1}需要是θ0\theta_{0}領域中的某個點,因此ηC(θ0)\eta C'(\theta_{0})不能太大,否則近似等式不成立。