1. 程式人生 > >梯度下降法更新權值理論

梯度下降法更新權值理論

使用3層的神經網路(包含輸入層和輸出層)來演示是如何工作的。

網路:input 3個節點;hidden 3個節點;output 3個節點

引數:input:矩陣I是3*1的矩陣;W_{input\, hidden}為3*3的矩陣;W_{hidden\, output}為3*3的矩陣;output:矩陣為3*1的矩陣

計算hidden層節點的矩陣:X_{hidden} = W_{input\: hidden}\cdot I                         O_{hidden} = sigmoid(X_{hidden})

計算output層節點的輸出:X_{}{output} = W_{hidden\:output}\cdot O_{hidden}                  O_{output} = sigmoid(X_{output})

如何根據梯度下降法來調節權重:

                                                           New\, w_{j\cdot k} = Old\, w_{j\cdot k} - \alpha \cdot \frac{\varphi E}{\varphi w_{j\cdot k}}     

其中: New\, W_{j\cdot k}是更新後的權重; Old\, W_{j\cdot k}

是更新前的權重;\alpha是學習率;\frac{\varphi E}{\varphi w_{j\cdot k}}是斜率代表誤差值和權重的比值

                                                         \alpha \cdot \frac{\varphi E}{\varphi w_{j\cdot k}} = \alpha \cdot E_{k}\cdot O_{k}(1 - O_{k})\cdot O_{j }^{\tau} 

其中:E_{k}是output層第k個節點的誤差值,E_{k} = t_{k} - o_{k},t_{k}是目標值,O_{k}是實際值

          O_{k}是output層輸出的實際值

          O_{j }^{\tau}是前一層的輸出的轉置

誤差與權重的比值(也叫梯度)推導

  • 誤差值 = 目標值 - 實際值,有下面三種選擇
  • 誤差值 = 目標值 - 實際值
  • 誤差值 = |目標值 - 實際值|
  • 誤差值 = (目標值 - 實際值)的平方,一般我們選擇這個,因為使用平方誤差,我們可以很容易的使用代數計算出梯度下降的斜率;誤差函式平滑連續,這使得梯度下降法很好的發揮了作用-沒有間斷,也沒有突然地跳躍;越接近最小值,梯度越小這意味著,如果我們使用了這個函式調節步長,超調的風險就會變得較小。

                            \frac{\varphi E}{\varphi w_{j\cdot k}} = \frac{\varphi \sum _{n}(t_{n} - o_{n})^{2}}{\varphi w_{j\cdot k}}      E_{k}是output層第k個節點的誤差值,E_{k} = t_{k} - o_{k},t_{k}是目標值,O_{k}是實際值

由於節點的輸出只取決於所連線的連結,就是取決於連結權重,這意味著誤差函式根本就不需要對所有輸出節點求和,便得到下式:                                  \frac{\varphi E}{\varphi w_{j\cdot k}} = \frac{\varphi \left ( t_{k} - o_{k} \right )^{2}}{\varphi w_{j\cdot k}} = -2\left ( t_{k} - o_{k} \right ) \cdot \frac{\varphi o_{k}}{\varphi w_{j\cdot k}}             t_{k}是一個常數

其中:o_{k} = \frac{1}{1 + e^{-\sum_{3}^{j=1}\left ( w_{j\cdot k} \cdot \frac{1}{1+e^{-\sum_{3}^{i=1}\left ( w_{i\cdot j} \cdot x_{i} \right )}}\right )}} = sigmoid\left ( \Sigma_{j} \cdot o_{j} \cdot w_{j\cdot k} \right )       也就是3層神經網路的輸出值

                                        \frac{\varphi sigmoid\left ( x \right )}{\varphi x} = sigmoid\left ( x \right )\left ( 1-sigmoid\left ( x \right ) \right )

\frac{\varphi E}{\varphi w_{j\cdot k}} = \frac{\varphi \left ( t_{k} - o_{k} \right )^{2}}{\varphi w_{j\cdot k}} = -2\left ( t_{k} - o_{k} \right ) \cdot \frac{\varphi o_{k}}{\varphi w_{j\cdot k}} = -2\left ( t_{k} - o_{k} \right ) \cdot \frac{\varphi sigmoid\left ( \Sigma_{j} \cdot w_{j\cdot k} \cdot o_{j}\right )}{\varphi w_{j\cdot k}} = -2\left ( t_{k} - o_{k} \right ) \cdot sigmoid\left ( \Sigma_{j} \cdot w_{j\cdot k} \cdot o_{j} \right )\left ( 1- sigmoid(\Sigma_{j} \cdot w_{j\cdot k} \cdot o_{j} \right)) \cdot \frac{\varphi \left ( \Sigma_{j} \cdot w_{j\cdot k} \cdot o_{j} \right )}{\varphi w_{j\cdot k}}

所以:

\fn_phv \frac{\varphi E}{\varphi w_{j\cdot k}} = = -2\left ( t_{k} - o_{k} \right ) \cdot sigmoid\left ( \Sigma_{j} \cdot w_{j\cdot k} \cdot o_{j} \right )\left ( 1- sigmoid\left ( \Sigma_{j} \cdot w_{j\cdot k} \cdot o_{j} \right) \right ) \cdot o_{j} = E_{k} \cdot o_{k}\left ( 1 - o_{k} \right ) \cdot o_{j }^{\tau}