机器学习笔记六之神经网络的学习
本節目錄:
1 代價函數
假設神經網絡的訓練樣本有𝑚個,每個包含一組輸入𝑥和一組輸出信號𝑦,𝐿表示神經網
絡層數,𝑆𝐼表示每層的 neuron 個數(𝑆𝑙表示輸出層神經元個數),𝑆𝐿代表最后一層中處理單元
的個數。
將神經網絡的分類定義為兩種情況:二類分類和多類分類,
二類分類:𝑆𝐿 = 0, 𝑦 = 0 𝑜𝑟 1表示哪一類;
𝐾類分類:𝑆𝐿 = 𝑘, 𝑦𝑖 = 1表示分到第 i 類;(𝑘 > 2)。
在神經網絡中,有很多輸出變量,
訓練集中的因變量也是同樣維度的一個向量,因此我們的代價函數為:
通過代價函數觀察算法預測的結果與真實情況的誤差有多大。
對于每一行特征,我們都會給出K個預測,基本上,我們可以利用循環,對每一行特征都預測K個不同結果,然后利用循環在K個預測中選擇可能性最高的一個,將其與y中的實際數據進行比較。
正則化的那一項只是排除了每一層𝜃0后,每一層的𝜃 矩陣的和。最里層的循環𝑗循環所
有的行(由𝑠𝑙 +1 層的激活單元數決定),循環𝑖則循環所有的列,由該層(𝑠𝑙層)的激活單
元數所決定。即:?𝜃(𝑥)與真實值之間的距離為每個樣本-每個類輸出的加和,對參數進行
regularization 的 bias 項處理所有參數的平方和。
2 反向傳播算法
在計算神經網絡預測結果的時候我們采用了一種正向傳播方法,我們從第一層開始正向一層一層進行計算,直到最后一層的?𝜃(𝑥)。
為了計算代價函數的偏導數
,我們需要采用一種反向傳播算法,也就是首先計算最后一層的誤差,然后再一層一層反向求出各層的誤差,直到倒數第二層。 以一個例子來說明反向傳播算法。
如果我們考慮正則化處理,并且我們的訓練集是一個特征矩陣而非向量。在上面的特殊
情況中,我們需要計算每一層的誤差單元來計算代價函數的偏導數。在更為一般的情況中,
我們同樣需要計算每一層的誤差單元,但是我們需要為整個訓練集計算誤差單元,此時的誤
差單元也是一個矩陣,我們用𝛥𝑖𝑗(𝑙)來表示這個誤差矩陣。第 𝑙 層的第 𝑖 個激活單元受到第 𝑗
個參數影響而導致的誤差。
3 反向傳播算法的理解
為了更好地理解反向傳播算法,我們先來研究一下前向傳播的原理:
對于每一個輸出單元
忽略正則部分只考慮代價函數:
-
把參數從矩陣展開成向量
5 梯度檢驗
有時神經網絡使用梯度下降時,可能會存在一些不易察覺的錯誤,雖然代價是不斷減小的,但最終的結果可能并不是最優的。為了避免這種情況,我們采取一種叫做梯度的數值檢驗,通過估計梯度值來檢驗我們計算的導數值是否符合要求。
對梯度的估計采用的方法是在代價函數上沿著切線的方向選擇離兩個非常近的點然后
計算兩個點的平均值用以估計梯度。即對于某個特定的 𝜃,我們計算出在 𝜃-𝜀 處和 𝜃+𝜀 的
代價值(𝜀是一個非常小的值,通常選取 0.001),然后求兩個代價的平均,用以估計在 𝜃
處的代價值。
6 隨機初始化
7 小結:
使用神經網絡時的步驟: -
網絡結構:第一件要做的事是選擇網絡結構,即決定選擇多少層以及決定每層分別有多少個單元。
-
第一層的單元數即我們訓練集的特征數量。
-
最后一層的單元數是我們訓練集結果的類的數量。
-
如果隱藏層數大于 1,確保每個隱藏層的單元個數相同,通常情況下隱藏層單元的個數越多越好。
我們真正要決定的是隱藏層的層數和每個中間層的單元數。
訓練神經網絡:
總結
以上是生活随笔為你收集整理的机器学习笔记六之神经网络的学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TypeError: cannot co
- 下一篇: 【转】C++ this指针(直戳本质)