機器學習就是讓機器能自動找到一個function
主要分成幾大類
通常在數據集當中存在特徵與標籤(label),透過使用 Loss function 判斷現在找到的函數好壞,Loss越小,函數越好。
以 AlpahGo 為例子解說
模型越複雜,在訓練集上的誤差越小,但在測試集上的誤差不一定越小。
因為當模型過於複雜時,越容易被數據影響,可能導致overfitting 的現象。
誤差主要又可分成兩大類
越簡單的 Model , Bias 越大 Variance 越小
越難的 Model , Bias 越小 Variance 越大
Error 可來自 Bias 或 Variance
若 Error 主要來自 Bias 則稱為 underfitting
若 Error 主要來自 Variance 則稱為 overfitting
在機器學習中,通常不能將全部的數據用於訓練模型,否則我們將沒有數據集可以用來評估模型的正確率。
The Validation Set Approach:
將數據集劃分成 Training Set 以及 Validation Set,只用部分的數據訓練模型,剩餘的用來檢驗模型正確性。缺點是依賴於訓練集和測試集的劃分方法。
Gradient Descent 可以降低 loss function 的值,loss function 越小,通常也代表更好的模型。
假設現在的模型 f 中只有一個參數 w ,則 Loss function 為 L(f)=L(w),梯度下降算法如下(若模型有多個參數,按照相同的方法更新各參數即可)
Step1 :初始化參數
Step2 :計算梯度
Step3 : 更新模型參數
w 的變化量取決於梯度和學習率(Learning Rate)的大小:梯度絕對值或學習率越大,則 w 變化量越大,接著反覆迭代 Step2 與 Step3 可以使 Loss function 的值達到局部最小值。
如果模型有多個參數,用 Step2 計算出的各項偏微分更新對應之參數,並且反覆迭代 Step2 與 Step3。
優點:
缺點:
普通梯度下降中(BGD)需要計算所有樣本的Loss值再進行梯度下降,而 SGD 隨機選擇計算一個樣本的 Loss 值,就進行梯度下降
優點:
缺點:
MBGD每次使用一部份的數據更新,是 BGD 和 SGD 的一個折衷。
缺點:
梯度下降的過程中,學習率如果一直是個定值其實不合理,我們應該在初始時學習率較大,找到局部極值時再縮小學習率
比如:
但更好的方法其實是讓每個參數擁有各自的學習率,比如 Adagrad
假設有兩個不同的類別 A 和 B ,要判斷 input 屬於哪種類別,可以將此分類問題看成計算 input 屬於該類別的機率,因此我們將分類問題看成了機率計算的問題。
給定一隻烏龜找他的屬性分類,我們在水系的神奇寶貝訓練集分佈中雖然找不到烏龜的這個點,但這不代表水系中沒有這隻烏龜。
下圖中的藍色點代表訓練集,但訓練集並不代表整體的水系神奇寶貝,因為水系神奇寶貝可能有好幾千隻,但我們的資料只有部份神奇寶貝。
我們假定我們的樣本屬於常態分佈(Gaussian distribution),因此要計算烏龜屬於水系的常態分佈的機率是否高於其他系的機率,是的話則將其歸類在水系。
常態分佈的公式又可被2個參數影響,分別是 Mean(常態分布的中心位置)和 Covariance Matrix(常態分布的離散程度)
我們試圖特定之 Mean 以及 Covariance Matrix 使訓練集特徵機率達到最大的常態分佈(Maximum likelihood)
每個類別的特徵符合一個常態分布,每個常態分布也有不同的Mean 和 Covariance Matrix,通常我們會讓每個類別對應的常態分布共享一個 Covariance Matrix(由各別 Covariance Matrix 對樣本數做加權平均和),這樣可以有效減少模型的參數,緩解 overfitting 的現象。
使用常態分佈以及共用 Covariance Matrix 可以得到一個結論
, sigmoid function
詳細推導的過程請觀看線上影片時長59分以後的部份 Classification
邏輯迴歸是用來處理二分類問題,目標是找到一條直線可以將資料做分類。主要是利用 sigmoid function 將輸出轉換成 0~1 的值,表示可能為這個類別的機率值。而線性迴歸是用來預測一個連續的值,目標是想找一條直線可以逼近真實的資料
假設訓練集如下圖所示,有2個類別 和
從模型 取樣得到訓練集的機率為
我們想求得 , 兩個參數 使得 之機率為最高 , 也就是 ,這也相當於求
其中
因此
當我們使用二進位來表達一個事件的狀態時,假設一個城市有 8 種不同的天氣狀況 , 我們需要使用至少 3 個 bits 來表達狀況 , 假設事件機率是均等的 , 即 。
我們所需要的 bit 數之公式為
從這個公式我們可以發現 ,當事件機率發生越高時,我們所需要的 bit 數越少 ,這代表的是 低機率事件我們需要用更多的 bit 去表示(低機率事件需要更多的資訊量去傳達隱含的資訊)。
Entropy 即為表達事件所需要的平均 bit 數,公式為
Cross-entropy 用意是在觀測預測的機率分佈與實際機率分布的誤差範圍 ,如上面所述,當我們的預測值與實際值差的越多,代表內涵的資訊量愈大,也就是不確定的因素越多, Cross-entropy 會越高,而我們要所要找的是 Cross-Entropy 越低的結果。
這個結論也等價於 loss function 的結論 ,找到預測與實際誤差最小的函數, 所以在分類問題上,我們可以將 Cross-Entropy 當成 loss function。
公式如下:
P : true distribution
Q : predicted distribution
模型 想求得 , 兩個參數 , 使得 之機率為最高的這個問題 等價於
又恰好等價於有兩個 Bernoulli distribution 跟 ,
在 中有 , ,
在 中有 ,
p 跟 q 的 Cross-Entropy
當我們對 (推導過程省略)
梯度更新為 :
更新的步伐跟學習率 ,實際值與預測值之差距以及input 有關係。
如上圖所示 , 當選取的點離目標太遙遠或是很接近時,參數更新速度過於緩慢或是不更新。
下圖為比較兩種不同 Loss fuction 的的曲線圖。
不能把 多種類別的 Classification 問題用 Logistic regression 的方式處理
比如: 數字1 , 2 ,3 分別當作三個不同的 class
機器會以為 3跟2 這兩個類別 比 3跟1 這兩個類別更接近,但實際上有可能根本不存在這種關係。
可以看出 softmax 類似於 normalization , 但 softmax 做的是使值較大的更好被辨識。
binary-class 分類時 使用 sigmoid function
Multi-class 分類時使用 softmax
如下圖所示,假如有2個類別,數據集中有4個樣本,每個樣本有2維特徵,將這4個樣本畫在圖上。
我們無法在當前的圖上使用邏輯回歸找到一條將兩種 class 區分開來的 boundry,那我們可以怎麽辦呢?
我們可以嘗試 Feature Transformation
我們可以把原始的數據/特徵轉換到另外一個空間,在這個新的特徵空間中,找到一條 boundry 將不同類別區隔開。
但並不是每次做 Feature Transformation 都很好找到轉換的方法,我們並不一定知道怎麽進行特徵變換,於是我們想讓機器自己學會進行特徵變換,這可以通過 cascade 多個邏輯回歸模型實現,即把多個邏輯回歸模型連接起來。
我們將上圖中每一個邏輯回歸模型稱做神經元(Neuron),多個Neuron形成一個神經網絡(Neuron network)
有些問題適合用機器學習 , 有些適合用深度學習 ,端看你想處理什麼問題。
給定 Layer層數 , 以及各層 Layer 有幾個 neuron 就相當於決定 function set , 而決定一個好的 function set 很重要。
激活函數可以分為線性激活函數(線性方程控制輸入到輸出的映射,如f(x)=x等)以及非線性激活函數(非線性方程控制輸入到輸出的映射,比如Sigmoid、Tanh、ReLU等)
因為神經網絡中每一層的輸入輸出都是一個線性求和的過程,下一層的輸出只是承接了上一層輸入函數的線性變換,所以如果沒有激活函數,那麽無論你構造的神經網絡多麽複雜,有多少層,最後的輸出都是輸入的線性組合,純粹的線性組合並不能夠解決更為覆雜的問題。而引入激活函數之後,我們會發現常見的激活函數都是非線性的,因此也會給神經元引入非線性元素,使得神經網絡可以逼近其他的任何非線性函數,這樣可以使得神經網絡應用到更多非線性模型中
在深度學習中,一般有兩種問題:
當深度學習中有一個新的方法被提出時,它往往是針對這兩個問題其中之一進行改善。
由於在神經網路中要更新梯度的參數量過於龐大,我們用了一個更有效的梯度下降方式,也就是Backpropagation
如下圖所示,,根據 chain rule 可知 ,其中 為 Forward Pass、 為Backward Pass
由於 ,每個 weight 計算出來的 Forward Pass 值 = 上一層 layer 的輸出值
為Backward Pass,從下圖中我們可以發現 Backward Pass 還跟下一層layer 的 Backward Pass 有關係
仔細區分還可區分成 2種 case
輸出層的 可輕易求得
如果下一層不為 Output layer,則我們遞迴前進直到下一層為 Output layer
當我們從後面往前面算完之後,即可求出
有了 也有了 即可求得我們想要的梯度
常常被用來做圖像處理
常見的圖片性質
圖片經過 convolution layer 然後再進行 max pooling,這個步驟可以進行多次;之後將數據展開(Flatten),再將展開的數據傳進 Fully Connected Feedforward network 得到最後的圖片分類結果
以上圖說明, network 的 input 是一張 6x6 的黑白圖片,所以每個 pixel 可以用 0 or 1 表達
上圖中的 filter 是 3x3 的 size,意味著他在偵測一個 3*3 的 pattern,偵測過程中,並不會去看整張 image,而是只看部份的圖片中的 pixel,並判斷某一個 pattern 有沒有出現
Fliter 其實就是一個 matrix ,matrix 中的每一個 element,就跟 neuron 的 weight 和 bias 一樣 需要通過 training data 學習出來的,而不是人去設計的
所以每個 Fliter 裡面的值是甚麼,要做什麼事情,都是學習出來的成果
從圖片的左上角開始進行 convolution , 每次向右移動一個距離,這個距離就叫做 stride ,由你自己設定,每次filter 停下來的時候就跟對應的 filter size pixel matrix 做一個內積
觀察上圖的 filter 1 ,它的斜對角是 1,1,1,所以這個fliter 的工作就是找出有沒有連續的從左上角到右下角的1,1,1 出現在這個image中, 檢測到的結果已在上左圖用藍色標示出來,此時 fliter 在左上和左下得到最大的值,也就是說該 fliter 所要偵測的 pattern 出現在 image 的左上角和左下角
在一個 convolution 的layer裡面,會有一堆 filter ,每一個 filter 做完會得到一個 4x4 matrix,將所有的 filter 做完之後,就會得到很多個 4*4matrix,將這些matrix 合起來,就叫做 Feature Map
CNN 對不同 scale 的相同 pattern 在處理上存在一定的困難,因為現在每一個 filter size都是一樣的,如果有同一個pattern,它有不同的size,CNN並不能夠自動處理這個問題
比照 fully connected 的 neuron 是必須連接到所有36個 input 上的,但是我們現在只用連接 9 個 input ,因為我們知道要 detect 一個 pattern,不用看整張 image,看 9 個 input pixel 就夠了,所以當我們這麼做的時候,就用了比較少的參數
根據 filter 1,我們得到一個 4x4 的 matrix,根據filter2,你得到另外一個 4x4 的 matrix,接下來,我們要做什麼事呢?
我們把 output 四個分為一組,每一組裡面通過選取平均值或最大值的方式,把原來 4 個value合成一個 value,這件事情相當於在image每相鄰的四塊區域內都挑出一塊來檢測,這種subsampling 的方式就可以讓你的 image 縮小!
做完一次 convolution 加一次 max pooling,我們就把原來 6x6 的image,變成了一個 2x2的 image;至於這個2x2的 image ,它每一個 pixel 的深度,也就是每一個 pixel 用幾個 value 來表示,取決於你有幾個 filter,也就是說filter 數量代表深度多深。
新的比較小的 image,它表示的是不同區域上提取到的特徵,實際上不同的 filter 檢測的是該 image 同一區域上的不同特徵屬性,所以每一層 channel (通道)代表的是一種屬性,一塊區域有一種不同的屬性,就有一層不同的channel,對應的就會有一個不同的filter對其進行 convolution 操作。
在訓練過程中,隨著網絡加深,分布逐漸發生變動,導致整體分布逐漸往激活函數(e.g sigmoid)的飽和區間移動,從而反向傳播時底層出現梯度消失,也就是收斂越來越慢的原因。
而Normalization則是把分布強行拉回到均值為0方差為1的標準正態分布,使得激活輸入值落在非線性函數對輸入比較敏感的區域,這樣輸入的小變化就會導致損失函數較大的變化,避免梯度消失問題產生,加速收斂。
BN 是針對 batch 去做計算 隱式的默認每個 batch 間的分布是大致相同的的,當batch size足夠大時,每個 mini-batch 可以較好地反映真實數據的分布;但是,若batch size較小,每個mini-batch 就無法反映所有數據的真實分布,因此,BN 操作對batch size的選擇有較高的要求。
BN , LN ,IN ,GN 差異請點選此文
使用 Region proposal 抓取可能有物體存在的區塊 (Selective Search) 再送入神經網路中
上述提及的方法皆為 two-stage