機器學習公開課筆記第四周,神經網路

2022-03-17 11:03:22 字數 4447 閱讀 7662

當我們用非線性假設函式n元k次方程表達邏輯回歸特徵值,我們的演算法的效率將是\( o\left ( n^ \right ) \)

當特徵數n和k過大時,邏輯回歸的演算法效率將會非常低,神經網路演算法就是為了解決非線性邏輯回歸演算法而誕生的

神經網路演算法**於模擬人類大腦神經,同一種神經放在不同的大腦區域可以學習各種能力,如聽覺,知覺,視覺等等

邏輯運算的神經網路

當遇到多類回歸時,輸出層的節點個數變為類別數

二,如何理解神經網路

\(j(\theta) = - \frac \sum_^m \sum_^k \left[ y^_k \ \log (h_\theta (x^))_k + (1 - y^_k)\ \log (1 - h_\theta(x^)_k)\right] + \frac\sum_^ \sum_^ \sum_^ ( \theta_^)^2 \)

求使代價函式 \( j(\theta) \)最小的\(\theta\)

既然代價函式和每個\(\theta\)都有關,和邏輯回歸就很類似,就可用解決邏輯回歸的梯度下降法解決,

1,那也就是初始化\(\theta\)

2,求出關於每個代價函式\(j(\theta)\)關於每個\(\theta\)的偏導\( \frac^} \)

3,\(\theta_^\)減去\( \frac^} \)

4,重複1-3步直到\( \frac^} \) 近似為0

假設有如下神經網路圖,輸入層2個節點,隱藏層只有3節點, 輸出層3節點

在神經網路中,計算\(h_(x)\)的叫作前向傳播演算法,計算\( \frac^} \)叫作後向傳播演算法

由鏈式求導法則得\( \frac^} = \frac(x)} \frac(x)}^} \)

我們先不考慮正則法,只考慮一組資料,那麼此時 

\( \frac(x)} = \frac^k \  \left[ y_k \log (h_\theta (x))_k + (1 - y_k) \log (1 - h_\theta(x)_k)\right] }(x)} = -\sum_^k \frac = \sum_^k [\frac + \frac ] = \sum_^k [\frac]\)

接著要求\( \frac(x)}^}\),必須先求出 \( h_(x)\) 和\(\theta_^\)的關係

先用前向傳導法計算該神經網路,計算過程如下

\( a^ = x\)

\(z^ = \theta^ a^\)

\(a^ = g(z^)\)

\(z^ = \theta^ a^ \)

\(h_(x) = a^ = g(z^)\)

由前向傳導演算法可知,當l不同時,計算方法公式會不同,先計算l=2

\( \sum_^ \frac(x)_k}^} = \sum_^ [\frac(x)_k}} \frac}^}] = \sum_^ \frac)}} \frac^ a_^ + \theta_^ a_^ + \theta_^ a_^ + \theta_^ a_^]}^} = (1 -  g(z_i^))g(z_i^)a_j^  \)

當k ≠ i 時, \( \frac^ a_^ + \theta_^ a_^ + \theta_^ a_^ + \theta_^ a_^]}^} = 0\)

合併之後\( \frac^} =  \sum_^ [\frac(x)_k} \frac(x)_k}} \frac}^}] = \sum_^k [\frac \frac)}} \frac^ a_^ + \theta_^ a_^ + \theta_^ a_^ + \theta_^ a_^]}^}] = \sum_^k [\frac) - y_k}) (1 - g(z_k^))}(1 -  g(z_k^))g(z_k^) \frac^ a_^ + \theta_^ a_^ + \theta_^ a_^ + \theta_^ a_^]}^} ] = (g(z_i^) - y_i)a_j^ \)

設\( \delta^ = \frac} \)

那麼\(\delta_^ = \frac^} = (g(z_i^) - y_i)a_j^ = (a_i^ - y_i)a_j^\)

\(\delta^\)的第i行第j列\(\delta_^\)由 \(a^ - y\)的第i個數和\(a^\)的第j個數相乘得到,那麼\(\delta^ = (a^ - y) * (a^)^t\)  (*表示矩陣相乘)

接下來計算\( \frac^} \)

為了避免重複計算,設\(\delta^ = a^ - y\)

\(\frac^1} = \frac}\frac}}\frac}} \frac}} \frac}^1} = \sum_^[\frac}\frac}}\frac}} \frac}} \frac}^1}] = \sum_^[(a_k^-y_k)\frac^ a_^ + \theta_^ a_^ + \theta_^ a_^ + \theta_^ a_^]}^} \frac^}^} \frac^}^1}] = \sum_^[(a_k^-y_k)(\theta_^) g(z_i^)(1 - g(z_i^))a_j^] = g(z_i^)(1 - g(z_i^))a_j^ \sum_^[(a_k^-y_k)(\theta_^)] = g(z_i^)(1 - g(z_i^))a_j^ [((\theta^)^t)_ * \delta^] = [((\theta^)^t)_ * (\delta^)]g(z_i^)(1 - g(z_i^))a_j^\) 

\(\delta_^ = (((\theta^)^t)_ * \delta^)g(z_i^)(1 - g(z_i^))a_j^ = (((\theta^)^t)_ * \delta^)a_i^(1 - a_i^)a_j^\)

\(\delta^\)的第i行第j列\(\delta_^\)由 \([((\theta^)^t) *\delta^]a^(1 - a^)\)的第i個數和\(a^\)的第j個數相乘得到

為了避免重複計算,設\(\delta^ =((\theta^)^t * \delta^)a^(1 - a^) \)

\(\delta^ =  \delta^ *  (a^)^t \)

如果還有\(\delta^\),

觀察\(\delta^\)的推導過程,發現\(\frac}} \frac}^1}\)不受k取值的影響

\(\delta_^ = \frac^}=\sum_^[\frac}\frac}}\frac}} \frac}} \frac}} \frac}}\frac}^}] =  \delta^ \frac}} \frac}}\frac}^} = (((\theta^)^t)_ * \delta^)a_i^(1 - a_i^)a_j^ \) 

.....(推導過程和\(\delta^\)類似,在此不贅述)

\(\delta^ =  \delta^ *  (a^)^t \)

我們還可以加上梯度檢查(gradient checking)來驗證\(\frac \partial ^} j(\theta)\)的計算方法是否正確

所謂的梯度檢查用導數的定義計算導數

\(\theta^=\theta + \begin 0\\ 0\\ ...\\ \epsilon \\ ...\\ 0 \end \) ,\(\theta^=\theta - \begin 0\\ 0\\ ...\\ \epsilon \\ ...\\ 0 \end \)

一般先找一組資料分別執行一遍前向後向傳播演算法和偏導定義演算法,如果近似相等,那麼神經網路演算法演算法沒寫錯,就可以執行神經網路演算法了

總結:執行一遍梯度檢查演算法和前向後向傳播演算法,檢查前向後向有沒有寫錯

for i = 1 to iteration(梯度下降次數下降次數一般大於10000)

1 對於每組訓練資料 t =1 to m:

1),令\( a^ = x(t) \)

2),運用前向傳導方法計算\(a^ (l = 2,3...l)\)

3),令\( \delta^ = a^ - y(t) \)

4),運用後向傳導方法計算\(\delta^,\delta^.....\delta^\),\(\delta^ =((\theta^)^t * \delta^)a^(1 - a^) \)

5),\(\delta_^ =  \delta_^ + \delta_^ a_j^ \rightarrow  \delta^ =  \delta^ + \delta^ *  (a^)^t \)

2, 加上正則化

\(d^_ := \dfrac\left(\delta^_ + \lambda\theta^_\right)  (j \neq 0)\)

\(d^_ := \dfrac \delta^_ (j = 0)\)

3,\(\frac \partial ^} j(\theta) = d^_\)

4,\(\theta_^ = \theta_^ - d^_\)

機器學習公開課筆記第五週之機器學習系統設計

以設計垃圾郵件分類器為例,當我們設計機器學習演算法時,先在24小時內設計出乙個簡單的演算法,跑一遍訓練資料,再根據資料的反饋結果 高偏差,高方差,或對某一類資料誤判比例過高等等 調整我們的演算法,反覆迭代優化 一,提取特徵 從大量垃圾郵件訓練資料中找出出現頻率最高的10,000到50,000個單詞,...

機器學習公開課筆記第五週之優化機器學習演算法

一,提高機器學習演算法準確度的方法 當我們的機器學習演算法不能準確 我們測試資料時,我們可以嘗試通過以下方法提高我們機器學習的演算法準確度 1 獲得更多的訓練樣例 2 減少特徵數 3 增加特徵數 4 增加多項式特徵 5 增大或減小 lambda 二,評估機器學習模型 如果只是單獨的使用乙個訓練集,我...

機器學習第四周

好,下面來總結一下學習內容。一開始就講了non linear hypothesis 非線性估計 這是當資料無法用簡單的線性模型處理的時候採用的方法,然後andrew就開始講神經網路了,這一周的內容沒有很詳細,就是大概地讓你知道一下神經網路,產生乙個初步的印象。還是先來把用到的符號交代了吧。符號含義 ...