1. 程式人生 > >深度學習必備基礎知識

深度學習必備基礎知識

 線性分類器                                

1.線性分類器得分函式

CIFAR-10:一共有10個類別,幾千張圖片的分類任務

給你一張圖片,然後得出每個類別的分數是多少,結果是一個得分向量score-vector

我們把[32,32,3]的圖片看成x,線性分類器就是給出權重W,得到10個得分

簡單一點,我們把32*32*3的矩陣拉成一個3072*1的向量,最後我們想得到10維的得分向量,那麼我們的權重W就得是10*3072的矩陣,相乘後得到10*1的向量

  f是一個函式,它所做的事情非常簡單,就是就輸入矩陣對映成為得分向量,決定這個得分函式的就是W,我們希望得到最合適的一組W。

  識別影象---其實就是分類問題 

圖片識別是計算機視覺的核心任務
每個圖片是由畫素組成的
200*200*3=12000個畫素值(特徵)

單通道:灰度值【0~255】
一個畫素點只有一個值

三通道:RGB
一個畫素點有三個值組成

  影象數字化三要素:長度,寬度,通道數

  給你一張圖片,也就是一個矩陣,讓你完成一個任務,識別影象中的內容找出分類,一共有10個類別幾千張圖片

  把你輸入的矩陣x,通過f,對映為一個得分向量

  把影象做一個reshape,將其拉成一個一維3072*1的向量。

 

  為了得到一個10*1的矩陣(向量),要配給W一個10*3072,所以10*3072 與 3072*1 相乘,得到一個10*1的列向量,就認為是一個10維的得分向量

  例項:

 

 

我們輸入一個影象,拉伸後成為1維,為了方便,簡單為4*1的向量,得分向量為3個分類,3*1,於是我們的W就要是一個3*4的矩陣,線性分類器嘛,有偏置項b(wile增加靈活性),最後我們得到y=W*x+b的線性函式(得分函式,y就是得分向量)。

上面的W在dog類別中得分最高,這顯然不是我們想要的,我們想要的是在正確的類別上有較高的得分,在錯誤的類別得分較低,所以我們要做的是修正這個W,使我們輸入一張圖片後,在正確的類別上得分最高。

2、線性分類器的理解---空間劃分

  Wx+b是空間的點

 

上面的例子中,有3個類別,我們可以把W的第一行+b看做是決定第一個類別的最終得分,W的第二行+b決定第二個類別的分數,以此類推,我們三個不同的W和b其實就是對於空間中進行了劃分,相當於三個直線(確切說是超平面,)然後我們輸入不同的x,其實就是空間中的不同區域。

線性分類器的理解---模板匹配(模板指的是W中的某一行)

 

 

W的每一行可以看做是其中一個類別的模板

每類得分,實際上是畫素點和模板匹配度

模板匹配的方式是內積運算

沒有b的情況:

注意哈:有些寫成了y=wx,沒有偏置項b,可能是這樣處理的---將偏置項的值裝到了W矩陣的最後一列,然後在x向量中增加一個1,也就是:

3、損失函式 LossFunction/CostFunction--衡量吻合程度

給定W,可以由畫素對映到類目得分

可以調節引數(權重)W,使得對映的結果和實際類別吻合

損失函式是用來衡量吻合程度的。

損失函式1:hinge loss支援向量機SVM損失

給你一套試卷,要求你在正確題目的得分要比其他任何錯誤題目的得分要高出來一個值Δ,你要是所有的都高出了Δ,好,不動,要是沒有高出,那就加一個懲罰值(你缺的多少就懲罰多少)

具體:

對於訓練集上第i張圖片資料xi

在W下會有一個得分結果向量f(xi,W)

第j類的得分為f(xi,W)j

則在該樣本上損失我們由下列公式計算得到

現在我們由三個類別,而得分函式計算某張圖片的得分為f(xi,W)= [13,-7,11],而實際的結果是第一類yi=0,假設Δ=10(在正確的類別上的得分比錯誤上的類別高出至少10分),上面的公式把錯誤類別(j不等於yi)都遍歷一遍,求值加和:

 

 

  我們看一下這種情況:

f(x,w1)=1*1+1*0+1*0+1*0=1

f(x,w2)=1*0.25*4 = 1

我們發現不同的權重結果竟然相同,那麼這種情況下我們應該選擇哪種引數呢?或者說哪個引數更好呢?其實我們可以猜到,第二種效果更好,因為他考慮到了所有的x,第一種的話他只考慮到了第一個引數,這樣的話很容易出現過擬合的情況,即訓練集上效果非常好,但測試集上效果卻不好。因此第二種更好,但是有沒有一種什麼方法讓我們把第二種挑出來呢?當然是有的,那就是加入一個正則化懲罰項

  L(W1)的正則化懲罰 = 1^2+0^2 + 0+0=1

  L(w2)的正則化懲罰 = (1/4)^2 +  (1/4)^2 +  (1/4)^2  + (1/4)^2  = 1/4

  這樣w2的正則化懲罰就會更小,w1的懲罰會更大,我們就會更認可w2,總體損失函式就會更小,我們就會選擇w2了。

  最後除以N是因為要避免樣本個數對結果的影響,樣本個數對於模型的好壞是沒有影響的。

softMax(歸一化的分類概率)

損失函式2:cross-entropy(交叉熵)

做一個歸一化,在A、B、C、D四個選項中選擇他們的概率有多高,我自己有一份標準答案(概率向量),評估你得到的概率和我的標準答案(概率)之間的距離

對於訓練集中的第i張圖片資料xi

在W下會有一個得分結果向量fyi

則損失函式記做:

 

   

其輸入值是一個向量,向量中元素為任意實數的
評分值
輸出一個向量,其中每個元素值在0到1之間,且
所有元素之和為1

實際工程中計算的方法是

 

 

因為e的指數次方是得分,如果太高的話容易溢位

其實softmax損失就是將之前的得分換成了概率。

softmax例項

 

2種損失函式的對比

 

SVM的隨機函式有一個缺點,當錯誤類別和正確類別的得分非常接近時,比如說正好相差△,那麼損失函式結果為0,但其實分類結果並不好,但是softmax的話對於每一個分類結果都會對值進行e次冪,這樣差距就會放大很多,在經過softmax概率變換,就會得到最優的結果。softmax分類器是一種永不知滿足的分類器。

 

最優化

 

矩陣相乘W*x+b得到了得分向量,然後我們首先是hingeloss(SVM),就是算正確類別的得分要比錯誤類別的得分高出一個Δ,然後高了沒問題,沒高就補充缺少的分數,交叉熵損失就是將得分向量轉化為了概率(轉換公式),然後做一個歸一化,我自己有一個標準答案,然後評估你的概率和標準答案之間的距離。注意點,交叉熵損失要對目標值one-hot編碼。

4.最優化和梯度下降

當我們通過分類器獲得一個預測值,我們會求得一組引數,那麼我們怎麼知道這個引數時好是壞呢?這就引入了損失函式,損失函式越小說明預測值和真實值越接近。但是,我們知道了如何評判引數的好壞,我們應該如何得到最優引數解呢?我們知道,一次求解肯定是不夠的,能得到最優引數的概率微乎其微,所以我們就要通過多次迭代求得最優解。這使就引出了梯度下降,梯度下降是一種通過迭代多次求解引數的方式。我們可以理解成計算機是一個蒙著眼睛的人,他要尋找山坡的最低點,而最低點就是最優解,使得損失函式最小的值。

 

  因為我們的目標是得到最優解,因此我們要告訴計算機最優解是什麼樣子的,或者說告訴它你走那個方向是正確的。這個方向就是我們對引數進行求導的結果,我們知道導數的幾何意義就是某個函式在這個點的切線的斜率,因此,根據這個特性,我們可以知道梯度下降的方向,知道方向以後,還有一個問題,就是我應該走多快呢?或者說一步走多遠呢?我們可以想象,步子太大的話可能會越過最低點,到達另一個山頭。因此,通常情況下,我們會選擇一個小的學習率,慢慢的尋找最優解。

  通過測試我們也可以知道,學習率對於結果有很大的影響。

反向傳播

 

 

 

 

 

 正向傳播鏈式法則

 

 

 

 神經網路就是一系列反向傳播的過程。