1.簡單人工神經元模型----M-P模型
1 #簡單神經網絡 m-p 模型 2 #模型說明,對於輸入矩陣 X = [x1 x2 ... xn], 有對應權重矩陣 W=[w1 w2 ... wn] W'=np.transpose(W) 3 #對於 f = f(X·W') ,給定閾值θ 4 # 當 X·W' > θ , f = 1, 5 # 當 X·W' < θ , f = 0, 6 import numpy as np 7 x = 10 * np.random.rand(5) #先隨機生成 5 個 0--1 的種子,之后 *10,即種子大小為 0--10 8 print('x = ',x) 9 10 w = np.transpose(np.random.rand(5)) # w 為權重矩陣,先生成 1*5 矩陣,之后轉置 11 print('w = ',w) 12 13 θ= 5 14 15 f1 = x.dot(w) - θ 16 17 print('x.dot(w) - θ = ',f1) 18 19 if f1 > 0: 20 f = 1 21 else: 22 f = 0 23 24 print('f = ',f)
2.感知機模型
與M-P模型相似,但是感知機模型初衷是為了完成數據分類的問題
感知機的數學表達式如下: f(x) = sign( w·x + b) 其中sign(x)為符號函數
化簡后可以表示為
從幾何意義上來看,二分類感知機能夠將兩類數據進行分類。
感知機的優點是很容易處理線性可分問題,缺點是不能處理異或問題,即非線性問題。因而出現了多層感知機來處理非線性問題。
多層感知機與感知機的區別在於,輸入層和輸出層之間加入了 n 個隱藏層 ( n >= 1),同時多層感知機具備了一種后向傳播能力。
3.圖像的目標識別和語義分割
對於同一幅圖片,比如下圖:
名詞解釋:
目標識別:對於我們輸入的圖像,計算機能夠識別出我們此處的皮卡丘並給他打上矩形框並且標上標簽名
語義分割:而語義分割則更多的在於分割圖像,它將圖片中皮卡丘的輪廓描繪出並且與圖片中的其他分隔開
4.監督學習與無監督學習
名詞解釋:
監督學習:舉個例子,現在有一堆蘋果和一堆梨,需要計算機識別。監督學習就是開始的時候計算機不知道什么是蘋果什么是梨,於是我們拿一堆蘋果和一堆梨去讓計算機學習,多輪訓練之后計算機已經能夠分辨二者后,機器會形成自己的判斷並且能夠給以蘋果和梨不同的特征描繪。
- 回歸問題
回歸主要使用監督學習的方法,讓我們搭建的模型在通過訓練后建立起一個連續的線性映射關系。
通俗的說,就是我們應用已有的數據對我們的初始模型不斷的訓練,使得模型自身不斷擬合和修正,最終得到的模型能夠較好的預測我們新輸入的數據。 - 分類問題
分類問題與回歸問題類似,但是不同點在於他最后得到的是一個離散的映射關系。
無監督學習:還是上面的例子,初始時計算機也並不知道什么是蘋果什么是梨,但是我們也不給他訓練讓他自己判斷,計算機根據二者的不同點自己分類總結,並且優化每一次判斷的參數,最后能夠自己將蘋果和梨分開。這更貼近我們理解的“人工智能”。
兩者利弊:
監督學習需要我們花費大量時間和輸入原始數據,但是得到的模型結果更符合我們訓練模型的初衷。
無監督學習能夠自己尋找數據之間隱藏的特征和關系,更加具有創造性,有時能挖掘到意想不到的特性,但是最終的結果有不可控性,可能往壞的方向發展。
5.欠擬合與過擬合
欠擬合:如其名,欠擬合就是指擬合的程度太低。如最左邊圖(Underfitted),對於輸入的數據最后擬合出的結果並不能表現出數據的變化情況和映射關系。
優點:對噪聲不敏感
缺點:對已有數據的匹配性很差
改進措施:
- 增加特征項:大多數過擬合是因為沒有把握住數據的主要特征,所以通過加入更多的特征項可以使得模型具有更好的泛化能力
- 構造復雜的多項式:一次函數是一條曲線,二次函數是一條拋物線,次數越高線條越靈活
- 減少正則化參數:正則化參數用來防止過擬合現象。
過擬合:擬合程度過高,如最右圖(Overfitted),對於數據最后擬合出的結果太過於遷就數據本身而喪失了主要的映射趨勢
優點:對已有數據匹配度很高
缺點:對噪聲極度敏感
改進措施:
- 增大訓練的數據量:大多數情況下是由於我們用於模型訓練的數據量太小,搭建的模型過度捕獲了數據的有限特征,從而導致了過擬合現象。再增加訓練的數據量之后,模型自然就能捕獲更多的數據特征,從而使得模型不會過度依賴於數據的個別特征。
- 采用正則化方法:正則化一般指在目標函數之后加上范數,用來防止模型過擬合。常用的正則化方法有L0正則、L1正則、L2正則
- Dropout方法:在神經網絡模型進行前向傳播的過程中,隨機選取和丟棄指定層次之間的部分神經連接。由於這個過程是隨機的,因而會有效防止過擬合的發生。
6.后向傳播
后向傳播實質上就是函數映射結果對每個參數求偏導,最后將偏導結果作為微調值。通過不斷的微調使得模型的參數最優化。
例如 f = (x+y) * z 其中 x = 2 、y = 5 、z = 3 那么 f 對 x , y , z 的偏導分別為 3、3、7.
舉一個更復雜網絡的后向傳播例子:
其中 x0 = 1、x1=1、b=-1、w0=0.5、w1=-0.5
則 x0 = 1的后向傳播微調值為 f(x) 對 x0 的偏導0.125,x1 = 1的后向傳播微調值為 f(x) 對 x1的偏導 0.125
7、損失和優化
損失用來度量模型的預測值和真實值之間的差距。損失越大,說明預測值和實際值偏差大,模型預測不准確,反之亦然。
對模型優化的最終目的是盡可能地在不過擬合的情況下降低損失值。
常用損失函數如下:
1.均方差誤差 Mean Square Error (MSE)
2.均方根誤差 Root Mean Square Error (RMSE)
3.平均絕對誤差 Mean Absolute Error (MAE)
常用優化函數如下:
- 全局梯度下降
全局梯度下降,訓練樣本總數為 n , j=0,1,...,n θ是學習速度,J(θ)是損失函數
學習速率用於控制梯度更新的快慢。如果學習速率過快,參數的更新跨度就會變大,極容易出現局部最優和抖動;如果學習速率過慢,梯度更新的迭代次數就會增加,參數優化所需要的時間也會變長。
全局梯度下降有一個很大的問題:模型的訓練依賴於整個訓練集,所以增加了計算損失值的時間成本和模型訓練過程中的復雜度,而參與訓練的數據量越大,這個問題就越明顯。
- 批量梯度下降
批量梯度下降就是將整個參與訓練的數據集划分為若干個大小差不多的訓練數據集,然后每次用一個批量的數據來對模型進行訓練,並以這個批量計算得到的損失值為基准,來對模型中的全部參數進行梯度更新,默認這個批量只使用一次,直到所有批量全都使用完畢。
批量梯度下降的優點是計算損失函數的時間成本和模型訓練的復雜度將會大大降低;但是缺點在於很容易導致優化函數的最終結果是局部最優解。
- 隨機梯度下降
隨機梯度下降是通過隨機的方式,從整個參與訓練的數據集中,選擇一部分來參與模型的訓練,所以只要我們隨機選取的數據集大小合適,就不用擔心計算損失函數的時間成本和模型訓練的復雜度,而且與整個參預訓練的數據集的大小沒有關系。
隨機梯度下降很好的提升了訓練速度,但是會在模型的參數優化過程中出現抖動的情況,原因在於我們選取參預訓練的數據集是隨機的,所以模型收到隨即訓練數據集中噪聲數據的影響,又因為有隨機的因素,所以也容易導致模型最終得到局部最優解。
- Adam
Adam自適應時刻估計法是一種比較智能的優化函數方法,它通過讓每個參數獲得自適應的學習率,來達到優化質量和速度的雙重提升。
For instance,一開始進行模型參數訓練的時候,損失值比較大,則此時需要使用較大的學習速率讓模型參數進行較大的梯度更新,但是到了后期我們的損失值已經趨向於最小了,這時就需要使用較小的學習速率吧來讓模型參數進行較小的參數更新。。
Adam學習速率好、收斂速率快,是一種比較好的優化函數。
8、激活函數
激活函數類似一個遞歸定義,假如激活函數是取輸入值和 0 比較的最大值,那么,對於單層神經網絡, f(x) = max(W·X + b , 0),那么同樣的,對於雙層神經網絡,f(x) = max(W2·max(W1·X + b1 , 0)+b2,0)
因此我們可以看出,如果不引入激活函數,那么不管我們有多少層神經網絡,最后的輸出都一樣會是一個線性函數,而引入激活函數使得我們的模型有了非線性因素。
常用的非線性激活函數如下:
- Sigmoid
Sigmoid函數的激活輸出過程與生物神經網絡工作機理十分相似,但是Sigmoid作為激活函數的缺點在於會導致模型的梯度消失,因為SigMoid的導數取值區間為[0,0.25]。根據鏈式法則,如果每層神經網絡的輸出節點都用Sigmoid作為激活函數,則每一層都要乘一次Sigmoid的導數值,即便每次都乘以最大的0.25,模型到了一定深度,梯度還是會消失。
其次Sigmoid函數值恆大於0,使得模型在優化的過程中收斂速度變慢。因為深度神經網絡模型的訓練和參數優化往往需要消耗大量的時間,所以會導致時間成本過高。因此計算數據時,盡量使用零中新數據,也要盡量保證計算得到的輸出結果是零中心數據。
- tanh
tanh的輸出結果是零中心數據,所以解決了模型優化過程中收斂速度變慢的問題。但是tanh的導數取值范圍是0~1,仍然不夠大,因此后向傳播的過程中,仍然會出現梯度消失的情況。
- ReLU Rectified Linear Unit 修正線性單元
ReLU,修正線性單元,是目前在深度神經網絡模型中使用率最高的激活函數,他的收斂速度非常快,其計算效率遠遠高於Sigmoid和tanh,但是ReLU也存在着輸出不是零中心數據的問題,這可能導致某些神經元永遠得不到激活,並且這些神經元的參數永遠得不到更新。這一般是由於模型參數在初始化時使用了全正或全負的值,或者在后向傳播過程中設置的學習速率太快而導致.解決辦法可以是對模型使用更高級的初始化方法比如Xavier,以及設置合理的后向傳播學習速率,推薦使用自適應的算法如Adam。
ReLU也在被不斷地改進,現在已經有很多ReLU的改進版本,例如Leaky-ReLU、R-ReLU等。
9、GPU與CPU
CPU(Central Processing Unit,中央處理器)與GPU(Graphics Processing Unit圖像處理器)用處不同。CPU是一台計算機的處理核心,主要負責計算機的控制命令處理和核心運算輸出,GPU是一台主機的現實處理核心,主要負責對計算機中的圖形和圖像的處理與運算。差異主要如下:
- 核心數。GPU比CPU有更多的核心數量,但是CPU中單個核心相較於GPU中的單個核心,擁有更快速、高效的算力。
- 應用場景。CPU為計算而生,而GPU側重於並行計算。由於圖像由矩陣和張量存儲,而矩陣和張量的運算其實質上是一種並行運算,因而在圖像處理上,GPU的的處理速度高於CPU。
每天進步一小點,加油!共勉