神經網絡最基本的知識可以參考神經網絡基本知識,基本的東西說的很好了,然后這里講一下神經網絡中的參數的求解方法。

注意前一次的各單元不需要與后一層的偏置節點連線,因為偏置節點不需要有輸入也不需要sigmoid函數得到激活值,或者認為激活值始終是1.
一些變量解釋:
標上“
”的圓圈被稱為偏置節點,也就是截距項.
本例神經網絡有參數
,其中
(下面的式子中用到)是第
層第
單元與第
層第
單元之間的聯接參數(其實就是連接線上的權重,注意標號順序),
是第
層第
單元的偏置項。
用
表示第
層的節點數(偏置單元不計在內)
用
表示第
層第
單元的激活值(輸出值)。當
時,
,也就是樣本輸入值的第
個特征。
用
表示第
層各單元對第
層第
單元進行輸入加權和(包括偏置單元),比如,
,所以
,這里的f(.)就是激活函數,一般是sigmoid函數
。
表示最后的輸出量,如果網絡最終輸出是一個值,那么
就是一個標量,如果最終輸出不止一個值(樣本的label y也是一個矢量),那么
就是一個矢量。
對於上圖:我們有
把這些公式利用向量變成另一中公式形式(激活函數
也擴展為用向量(分量的形式)來表示,即
)為:
這也就是我們把wij定義成上面那樣的元素,這樣直接根據wij的標號排成一個矩陣,而不用再變換或轉置之類的了。
假設w和b已知的話,我們根據上兩行的迭代公式不停的迭代就得到了神經網絡里各個單元的激活值
。
上面的計算步驟叫作前向傳播。
因為我們w和b是不知道的,我們還得要通過訓練學習到這些參數,那么我們怎么訓練得到那?我們知道一些訓練樣本
(注意這里里
不一定是一個標量,而是
),我們仍然使用梯度下降法來通過迭代得到收斂后的模型參數值。
我們在每一次迭代中,假設w和b是已知的,然后通過一次前向傳播得到模型中激活值
。
我們根據每一次迭代中模型最后輸出的
跟樣本的標記
做差平方(如果都是矢量的話,做差平方是向量里的各個元素分別對應做差然后平方和),然后求出所有樣本的這些誤差平方和。然后得到每一次迭代的cost function (含L2正則項):
雖然這里每一個神經元類似於logistic回歸模型,但是這里cost function中沒用似然函數方法,還是利用的均方誤差。其實這兩種方法得到的結果是一樣的(還記得利用似然函數求得的公式跟均方誤差公式一樣么)。類似的,在L2正則項中,參數不包括偏置參數,也就是常數項那些參數。
模型中如果使用的激活函數是sigmoid函數,那么這個模型最后輸出層里的每個節點輸出的值都在(0,1)之間,那么樣本的標記向量
里的元素就要求在(0,1)之間,所以我們首先要用某種方法轉變樣本的標記范圍(類似標准化,如果模型的激活函數使用的是tanh函數,那么這里就是采用的標准化轉變樣本標記值)(譯者注:也就是
),以保證其范圍為(0,1)之間。
我們有了cost function,接下來我們就需要最小化這個function,我們使用梯度下降法,也就是這倆公式:
……………………………………………………………………………………………………………………………………………………...(1)
但是我們這時候不能直接對cost function對每一個參數進行求偏導,因為這些參數都是相互關聯的,沒辦法找到顯式的偏導。我們只能曲線救國。我們怎么求偏導呢?我們使用反向傳播算法求得,具體是這樣的:
我們不是一下對整個
操作,而是每一個樣本和通過模型得到的
做差平方,視為小
,也就是
,我們每一次處理一個樣本的cost function,使用反向傳播算法來計算
和
,一旦我們求出每個樣本的該偏導數,就可以推導出整體代價函數
的偏導數:
………………………………………………………………………………………………………..(2)
下面接着說我們怎么求每一個樣本的
和
。
給定一個樣例
,我們首先進行“前向傳導”運算,計算出網絡中所有的激活值,包括
的輸出值。
這時候我們不把單個的
看成輸入量,而是把每一個單元的所有
和
疊加和
看成輸入,於是我們看成
對
求偏導。
求出的偏導分別叫每個單元的“殘差”
,具體如下:
(1)最后一層(輸出層)單元的殘差:

我們通過前向傳播算法求出了網絡中所有的激活值
,這個
也是可以求出來的,比如當
是sigmoid函數,那么
,所以這個殘差
就求出來了。
就是這個cost function J(W,b;x,y)對
求導。
(2)接下來我們求
的各個層單元的殘差:
倒數第三個到倒數第二個公式 只有k=i的時候求導存在,wij是個系數,所以這一步也很好理解。

將上式中的
與
的關系替換為
與
的關系,就可以得到
這時候每個單元的殘差就求出來了,接下來計算我們需要的偏導數,計算公式如下:
求出每個樣本cost function的各個偏導后,我們就能根據公式(2)求出所有整個cost function的各個偏導了。那么再根據公式(1),我們就求出了這一次梯度下降法迭代后的參數,然后我們不停的迭代,最終就找到了參數的收斂值。這里需要強調的是,一開始要將參數進行隨機初始化,不是全部置為
。如果所有參數都用相同的值作為初始值,那么所有隱藏層單元最終會得到與輸入值有關的、相同的函數(也就是說,對於所有
,
都會取相同的值,那么對於任何輸入
都會有:
)。隨機初始化的目的是使對稱失效。為了求解神經網絡,我們需要將每一個參數
和
初始化為一個很小的、接近零的隨機值(比如說,使用正態分布
生成的隨機值,其中
設置為
)








