深度學習基礎

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)爲符號函數網絡

化簡後能夠表示爲dom

 

 

 從幾何意義上來看,二分類感知機可以將兩類數據進行分類。函數

感知機的優勢是很容易處理線性可分問題,缺點是不能處理異或問題,即非線性問題。於是出現了多層感知機來處理非線性問題。學習

多層感知機與感知機的區別在於,輸入層和輸出層之間加入了 n 個隱藏層 ( n >= 1),同時多層感知機具有了一種後向傳播能力。優化

3.圖像的目標識別和語義分割

對於同一幅圖片,好比下圖:人工智能

 

 

名詞解釋:

目標識別:對於咱們輸入的圖像,計算機可以識別出咱們此處的皮卡丘並給他打上矩形框而且標上標籤名spa

語義分割:而語義分割則更多的在於分割圖像,它將圖片中皮卡丘的輪廓描繪出而且與圖片中的其餘分隔開3d

4.監督學習與無監督學習

名詞解釋:

監督學習:舉個例子,如今有一堆蘋果和一堆梨,須要計算機識別。監督學習就是開始的時候計算機不知道什麼是蘋果什麼是梨,因而咱們拿一堆蘋果和一堆梨去讓計算機學習,多輪訓練以後計算機已經可以分辨兩者後,機器會造成本身的判斷而且可以給以蘋果和梨不一樣的特徵描繪。code

  • 迴歸問題
    迴歸主要使用監督學習的方法,讓咱們搭建的模型在經過訓練後創建起一個連續的線性映射關係。
    通俗的說,就是咱們應用已有的數據對咱們的初始模型不斷的訓練,使得模型自身不斷擬合和修正,最終獲得的模型可以較好的預測咱們新輸入的數據。
  • 分類問題
    分類問題與迴歸問題相似,可是不一樣點在於他最後獲得的是一個離散的映射關係。

無監督學習:仍是上面的例子,初始時計算機也並不知道什麼是蘋果什麼是梨,可是咱們也不給他訓練讓他本身判斷,計算機根據兩者的不一樣點本身分類總結,而且優化每一次判斷的參數,最後可以本身將蘋果和梨分開。這更貼近咱們理解的「人工智能」。

二者利弊:

  監督學習須要咱們花費大量時間和輸入原始數據,可是獲得的模型結果更符合咱們訓練模型的初衷。

  無監督學習可以本身尋找數據之間隱藏的特徵和關係,更加具備創造性,有時能挖掘到意想不到的特性,可是最終的結果有不可控性,可能往壞的方向發展。

5.欠擬合與過擬合

 

 

 

欠擬合:如其名,欠擬合就是指擬合的程度過低。如最左邊圖(Underfitted),對於輸入的數據最後擬合出的結果並不能表現出數據的變化狀況和映射關係。

優勢:對噪聲不敏感

缺點:對已有數據的匹配性不好

改進措施:

  • 增長特徵項:大多數過擬合是由於沒有把握住數據的主要特徵,因此經過加入更多的特徵項可使得模型具備更好的泛化能力
  • 構造複雜的多項式:一次函數是一條曲線,二次函數是一條拋物線,次數越高線條越靈活
  • 減小正則化參數:正則化參數用來防止過擬合現象。

過擬合:擬合程度太高,如最右圖(Overfitted),對於數據最後擬合出的結果太過於遷就數據自己而喪失了主要的映射趨勢

優勢:對已有數據匹配度很高

缺點:對噪聲極度敏感

 改進措施:

  • 增大訓練的數據量:大多數狀況下是因爲咱們用於模型訓練的數據量過小,搭建的模型過分捕獲了數據的有限特徵,從而致使了過擬合現象。再增長訓練的數據量以後,模型天然就能捕獲更多的數據特徵,從而使得模型不會過分依賴於數據的個別特徵。
  • 採用正則化方法:正則化通常指在目標函數以後加上範數,用來防止模型過擬合。經常使用的正則化方法有L0正則、L1正則、L2正則
  • Dropout方法:在神經網絡模型進行前向傳播的過程當中,隨機選取和丟棄指定層次之間的部分神經鏈接。因爲這個過程是隨機的,於是會有效防止過擬合的發生。

6.後向傳播

 後向傳播實質上就是函數映射結果對每一個參數求偏導,最後將偏導結果做爲微調值。經過不斷的微調使得模型的參數最優化。

例如 f = (x+y) * z    其中 x = 2 、y = 5 、z = 3 那麼 f 對 x , y , z 的偏導分別爲 三、三、7.

舉一個更復雜網絡的後向傳播例子:

 

 

 

 其中 x0 = 一、x1=一、b=-一、w0=0.五、w1=-0.5

則 x0 = 1的後向傳播微調值爲 f(x) 對 x0 的偏導0.125,x1 = 1的後向傳播微調值爲 f(x) 對 x1的偏導 0.125

 七、損失和優化

損失用來度量模型的預測值和真實值之間的差距。損失越大,說明預測值和實際值誤差大,模型預測不許確,反之亦然。

對模型優化的最終目的是儘量地在不過擬合的狀況降低低損失值。

經常使用損失函數以下:

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學習速率好、收斂速率快,是一種比較好的優化函數。

八、激活函數

激活函數相似一個遞歸定義,假如激活函數是取輸入值和 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等。

九、GPU與CPU

CPU(Central Processing Unit,中央處理器)與GPU(Graphics Processing Unit圖像處理器)用處不一樣。CPU是一臺計算機的處理核心,主要負責計算機的控制命令處理和核心運算輸出,GPU是一臺主機的現實處理核心,主要負責對計算機中的圖形和圖像的處理與運算。差別主要以下:

  1. 核心數。GPU比CPU有更多的核心數量,可是CPU中單個核心相較於GPU中的單個核心,擁有更快速、高效的算力。
  2. 應用場景。CPU爲計算而生,而GPU側重於並行計算。因爲圖像由矩陣和張量存儲,而矩陣和張量的運算其實質上是一種並行運算,於是在圖像處理上,GPU的的處理速度高於CPU。

 

天天進步一小點,加油!共勉

相關文章
相關標籤/搜索