前饋神經網絡
首先我先尋找了知乎中的一個介紹進行學習:https://www.zhihu.com/question/22553761/answer/126474394
來自知乎學者YJango的回答:https://www.zhihu.com/people/YJango,以及其它文章,如果有侵權可以聯系删除。
前饋神經網絡是在輸入層和輸出層之間還存在一些線性模型,并且在這兩個線性模型後都加入一個ReLU的非線性函數(又叫激活函數,保持小于0,則輸出0),稱為隐藏層(hidden layers),隐藏層可以增加很多個(線性模型+非線性函數)的組合。隐藏層的次元和層數可以任意選擇,越多則拟合能力越強。再最後輸出到輸出層(将次元調整到輸出次元,也可以加非線性函數)。
基礎:
每層神經網絡的數學了解:用線性變換跟随着非線性變化,将輸入空間投向另一個空間。
每層神經網絡的實體了解:通過現有的不同物質的組合形成新物質。
線性可分視角:神經網絡的學習就是學習如何利用矩陣的線性變換加激活函數的非線性變換,将原始輸入空間投向線性可分/稀疏的空間去分類/回歸。 增加節點數:增加次元,即增加線性轉換能力。 增加層數:增加激活函數的次數,即增加非線性轉換次數。
特别說明:二維情景:平面的四個象限也是線性可分。但下圖的紅藍兩條線就無法找到一超平面去分割。

神經網絡的解決方法依舊是轉換到另外一個空間下,用的是所說的5種空間變換操作。比如下圖就是經過放大、平移、旋轉、扭曲原二維空間後,在三維空間下就可以成功找到一個超平面分割紅藍兩線 (同SVM的思路一樣)。
我的了解是:線上性分割時,有時候我們找不到一個超平面去分割,是以需要不斷的改變(進行一層的轉換)形成一個新的空間,再進行直接的分割。
在自然界是有分子組成舞台,是以我們可以進行圖像識别或者人臉識别,由像素組成菱角再組成五官最後到不同的人臉。每一層代表不同的不同的物質層面 (如分子層)。而每層的W存儲着如何組合上一層的物質進而形成新物質。
物質組成視角:神經網絡的學習過程就是學習物質組成方式的過程。增加節點數:增加同一層物質的種類,比如118個元素的原子層就有118個節點。 增加層數:增加更多層級,比如分子層,原子層,器官層,并通過判斷更抽象的概念來識别物體。
神經網絡的訓練
知道了神經網絡的學習過程就是學習控制着空間變換方式(物質組成方式)的權重矩陣後,接下來的問題就是如何學習每一層的權重矩陣W。
我們要我們的輸出要接近預測值,就可以通過比較目前網絡的預測值和我們真正想要的目标值,再根據兩者的差異情況來更新每一層的權重矩陣(比如,如果網絡的預測值高了,就調整權重讓它預測低一些,不斷調整,直到能夠預測出目标值)。是以就需要先定義“如何比較預測值和目标值的差異”,這便是損失函數或目标函數(loss function or objective function),用于衡量預測值和目标值的差異的方程。
所用的方法是梯度下降(Gradient descent):通過使loss值向目前點對應梯度的反方向不斷移動,來降低loss。一次移動多少是由學習速率(learning rate)來控制的。
但梯度下降有兩個難題:局部極小值和梯度的計算。
在局部極小值時我們要跳出這個區域,進而得到一個全局最優值。所提出的方法有:調節步伐:調節學習速率,使每一次的更新“步伐”不同。優化起點:合理初始化權重(weights initialization)、預訓練網絡(pre-train),使網絡獲得一個較好的“起始點”。【由于本人研究課題為進化算法與深度學習的應用,是以我認為可以使用優秀的優化算法進行優化權重,當然這個方面已經有很多人做過了】
梯度的計算:該如何快速計算梯度?如何更新隐藏層的權重?
解決方法是:計算圖:反向傳播算法。【有的優化算法是和反向傳播算法進行結合,來提高梯度的計算速度:文章題目
Evolving Deep Neural Networks via Cooperative Coevolution With Backpropagation 】 反向傳播算法是求梯度的一種方法。如同快速傅裡葉變換(FFT)的貢獻。而計算圖的概念又使梯度的計算更加合理友善。 流程圖:
收集訓練集(train data):也就是同時有input以及對應label的資料。每個資料叫做訓練樣本(sample)。label也叫target,也是機器學習中最貴的部分。上圖表示的是我的資料庫。假設input本别是x的次元是39,label的次元是48。 設計網絡結構(architecture):确定層數、每一隐藏層的節點數和激活函數,以及輸出層的激活函數和損失函數。上圖用的是兩層隐藏層(最後一層是輸出層)。隐藏層所用激活函數a( )是ReLu,輸出層的激活函數是線性linear(也可看成是沒有激活函數)。隐藏層都是1000節點。損失函數L( )是用于比較距離MSE:mean((output - target)^2)。MSE越小表示預測效果越好。訓練過程就是不斷減小MSE的過程。 資料預處理(preprocessing):将所有樣本的input和label處理成能夠使用神經網絡的資料,label的值域符合激活函數的值域。并簡單優化資料以便讓訓練易于收斂。比如中心化(mean subtraction)、歸一化(normlization)、主成分分析(PCA)、白化(whitening)。 權重初始化(weights initialization):W在訓練前不能為空,要初始化才能夠計算loss進而來降低。 訓練網絡(training):訓練過程就是用訓練資料的input經過網絡計算出output,再和label計算出loss,再計算出gradients(梯度)來更新weights的過程。 這裡就把這篇回答看完了,有了一些了解,但還需要動手實踐。