# 作業一 ## 第一題 計算出dicition regin ![](https://hackmd.io/_uploads/rJ8riciZa.png) ## 第二題 找出共變異數 ## 第三題 Mahalanobis Distance,最後的圖形會形成一個橢圓,藥用matlab畫橢圓 不用寫過程,只要交matlab程式碼即可 類似這樣,不用畫出藍點點,但要加上網格 ![](https://hackmd.io/_uploads/HkGch9oba.png) ## 第四題 有三個可能的分類結果,每個結果有十筆資料,每筆資料有三個feature 計算出min 跟covarience,接著寫程式 a、b小題只要看x2,x3就好 答案寫清楚 附上程式碼 # 作業二 1. Maxinum Likelihood Estimation * 第一小題 * 得到極大值的方法是對theta微分,並檢查其為0的點(可以先取log) * 第二小題檢查結果是否是unbias,若等式不成立即為bias * 期望值=theta時,便是unbias * 期望值無法直接算,故需使用CDF technique 轉換成另一個 function 以計算期望值 * 求CDF -> 微分轉成PDF -> 便可計算期望值 * 不需要寫程式 ![image](https://hackmd.io/_uploads/ryAy-k54p.png) 2. Bayesian * 不用recursive * 第一步求theta的事前機率 * 跟x的機率分布函數做積分,求出答案 * 手算,並要寫程式畫圖 * 一次帶四筆資料 a小題: 計算事前機率 ![image](https://hackmd.io/_uploads/ryHVzkqN6.png) p(D|$\theta$): ![image](https://hackmd.io/_uploads/ByOBQyqVp.png) b小題: ![image](https://hackmd.io/_uploads/SJHFX19Np.png) p($\theta$): 題目給定 分母不用管,計算完分子後再標準化即可 3. 使用PCA降維 * 給三維的資料,三個類別 * 目的是降到二維 * 第一步是求scatter matrix (n=30,因為降維的時候沒分類別) * 第二步求eigan value跟eigan vector * 第三步是將資料點投影到二維 (計算ak) * 使用作業一的程式,將降維後的資料點丟進去,查看分類錯誤率 4. 使用Discriminant Analysis分析 (三類別、三特徵) * 第一小題計算Sw, Sb * 第三小題將三維資料投影至二維平面中並畫出來 * 第四小題用貝氏分類器計算結果(不能用內建的方法計算cov) # 作業三 2. 建構簡單的神經網路解決 XOR problem (訓練時只有四筆資料、兩個類別) * 第一小題計算 $W_{kj}$ ![image](https://hackmd.io/_uploads/Sy8hGurUp.png) * 第二小題計算 $W_{ji}$ * 第三小題將權重隨機初始化,並劃出 cross entropy function 隨著 epoch 遞減的圖 * 第四小題寫出訓練後的權重是多少 * 第五小題帶入許多x1, x2,並計算出對應的 y1, y2,並畫圖 ![image](https://hackmd.io/_uploads/HJyRHuBUT.png) ![image](https://hackmd.io/_uploads/rkeZ4Uur8p.png) # 貝式分類器 ## Introdution 分類器目的是讓"整體"的平均分類錯誤率降到最低 * 定義 ω 代表 state of nature (類別),屬於random variable * 則P(ω)代表某個類別的事前機率(即下次出現某個類別的機率) * 所有類別的事前機率總合為1 * p(x|ω) (class-conditional PDF): 代表ω這個類別基於特徵x的分布情形 (x代表另一種可以用來分類的特徵) * decition rule: 做決定的規則 * 最簡單的規則就是直接選擇出現機率最高的事件作為結果,以最小化錯誤機率 * 或是利用 joint possibility density function 來同時考慮P(ω|x),選事後機率(或是 likelihood * prior)大的作為結果 ### Bayes formula (非常重要) 根據條件機率的定義: p(x,ω)=p(x|ω)P(ω)=P(w|x)p(x),可以推出 ![](https://hackmd.io/_uploads/SkouC28J6.png =40%x) ![](https://hackmd.io/_uploads/SJcZAh8yp.png =50%x) * posterior: 事後機率 * likelihood: 可能性 * prior: 事前機率 * evidence: 證明 補充: 類別的分布是離散的,以 P 表示;而特徵的分布通常是連續的,以 p 表示 故可以得到基本Bayes formula的decition rule為 ![](https://hackmd.io/_uploads/B16xFglla.png =80%x) ## Bayesian Decision Theory 針對原本decition rule,做了一些推廣 * 允許考慮多個特徵;在這種情況下,將 **x** 從純量改成向量(當**x**代表向量時,以粗體表示) * 允許不只兩種的類別 * 允許更多的 action (決策行為),例如不分類,直接拒絕 * 引入loss function的概念 根據Bayes formula延伸 * 定義損失函數 λ( αi | ωj ): 實際是ωj,但判斷結果是αi αi 代表action,代表"將事件分類"這個動作 * λ( αi | ωj ) 又可以簡寫成λij * 定義 condition risk ![](https://hackmd.io/_uploads/Sk6wJpLJ6.png =50%x) 並用condition risk作為包含loss 的decition rule的判斷依據(risk越小越好),來判斷一個action的好壞 舉個例子: α1代表根據ω1做出的行動 α2代表根據ω2做出的行動 則根據上面的公式可計算出risk R(α1|x) = λ11P(ω1|x) + λ12P(ω2|x) R(α2|x) = λ21P(ω1|x) + λ22P(ω2|x) 接著便可以轉換成這種形式 ![](https://hackmd.io/_uploads/ryIwFnLJp.png) 接著根據貝氏定理可以將大P換掉,整理後可以得到這條式子,代表likelyhood ratio ![](https://hackmd.io/_uploads/H1kWqn81p.png =50%x) 不等式左邊是likelyhood ratio,右邊是域值,若大於域值,代表選擇α1 ![](https://hackmd.io/_uploads/B1umx681T.png =60%x) * 縱軸的theta a(紅線部分)便代表域值 ## Minimum Error Rate Classification 假設有一個損失函數定義如下(又稱為zero-one loss function) ![](https://hackmd.io/_uploads/rkYDPp8k6.png =50%x) 則risk可寫成 ![](https://hackmd.io/_uploads/HyAdwpLJp.png =50%x) 若希望risk最小,便要讓P(ωi|x)最大 ### Minimax Criterion 有時候 prior probabilities可能會變動非常大,故我們希望設計一個分類器,讓其不受prior probabilities的影響,並希望**在最糟糕的情況下讓risk最小化** 經過推導後,可得出這條等式 ![](https://hackmd.io/_uploads/ry-q1C8ya.png =80%x) * 等式展現出了事前機率P(ω1)對overall risk R的影響 * 為了在最糟糕的情況下讓risk最小化,只要找到一個dicition rule(決定R1,R2),讓中括號的部分為0,便可使R 不受prior probabilities的影響 * 若真的使中括號的部分為0,則便可得到minimax risk ![](https://hackmd.io/_uploads/r1reZC8ka.png =70%x) ## Neyman-Pearson Criterion * 希望設計一個分類器,在「錯誤的將a分類成b」小於某個constriant的情況下,最大化「分類成功b」的機會 * ex: 在一個國際機場,可能有一項政策規定我們不能將超過0.1%的旅客錯誤分類為恐怖分子。在這種情況下,我們想尋求一個決策規則,以在滿足這個約束條件的前提下,最大化正確檢測到恐怖分子的機會 (constriant<=0.1 ) ## discriminant function及其應用 ### discriminant function(判別函數) * 定義第i個分類結果的discriminant function gi(x) = −R(αi|x) * 若gi(x)是所有discriminant function中最大的,則分類器將會選擇ωi作為分類結果 * 若f()是單調遞增函數,則使用f(gi(x))作為discriminant function時,dicition rule不變 * 因為上述特性,可以將gi(x)任意轉換為其他好處理的function,反正dicition rule不會改變 ![](https://hackmd.io/_uploads/B16qOWxgT.png =70%x) ### decision regions * 圖下方的平面即為decision regions * 而分割不同decision regions的邊界稱為decision boundaries ![](https://hackmd.io/_uploads/SJlBXZelT.png =70%x) ### The Two-Category Case * 專門討論「只有兩種分類結果」的case * 因為只有兩個case,故定義g(x) = g1(x) − g2(x);之後在判斷時,只需要確認g(x)的正負狀態即可 新的decition rule 為: ![](https://hackmd.io/_uploads/B15Edbexp.png =70%x) ## Normal Density ### 單變量 回想關於為標準化的常態分布的相關公式 Density function ![](https://hackmd.io/_uploads/BJ3uTZxeT.png =50%x) 期望值 ![](https://hackmd.io/_uploads/S1IaT-lga.png =50%x) 變異數 ![](https://hackmd.io/_uploads/SJX0pZxep.png =50%x) ### 多變量 Density function ![](https://hackmd.io/_uploads/ByAGt7Fga.png =80%x) * µ: x向量的期望值,即 E(xi)=µi * Σ: d * d大小的共變異數矩陣; ![](https://hackmd.io/_uploads/ByeBdmKxa.png =70%x) 期望值向量 ![](https://hackmd.io/_uploads/ByvWiQFga.png =50%x) 期望值 ![](https://hackmd.io/_uploads/HyUF6mtxT.png =50%x) 變異數矩陣 ![](https://hackmd.io/_uploads/HJripXKxT.png =50%x) 變異數 ![](https://hackmd.io/_uploads/Bkw3amFxa.png =50%x) 畫出來的分布圖如下 (本範例為二維) ![](https://hackmd.io/_uploads/Hy1wCQtxT.png =80%x) * 期望值向量決定了橢圓的中心 * 變異數矩陣決定了橢圓的形狀 * 橢圓長軸跟短軸的方向便是變異數矩陣的eigenvectors * 橢圓長軸跟短軸的長度便是變異數矩陣的eigenvalues 並定義馬式距離(Mahalanobis distance) ![](https://hackmd.io/_uploads/ByodlVFxa.png =40%x),同一個橢圓上的任兩點馬式距離一樣 ### Discriminant Functions for the Normal Density 使用帶有ln的Discriminant Functions,並把 Normal Density代入 ![](https://hackmd.io/_uploads/ryLX0Etx6.png =50%x) 便可得到 ![](https://hackmd.io/_uploads/SJ9-REYlT.png) ex1: 假設 ![](https://hackmd.io/_uploads/Hyx1yrFgp.png =40%x) 代入上面計算gi(x)的公式,並刪掉與i無關的那幾項後可得到 ![](https://hackmd.io/_uploads/BkbDkrtep.png =50%x) (i代表種類,故gi(x) = gj(x)時便是區別"分類結果為i"跟"分類結果為j"的邊界) 最終可化簡成 ![](https://hackmd.io/_uploads/SkMmgrtxT.png =60%x) gi(x) = gj(x)代表decition boundary,根據維度可能是點、線、面等等 當兩個類別事前機率一樣時,decition boundary會恰好落在中間 * dicition boundary為任意高維線性方程式,例如點、線、面等等 * ![](https://hackmd.io/_uploads/BJAWSHYxp.png =50%x) * 兩個類別在一維空間上的機率分布,紅點為decition boundary ![](https://hackmd.io/_uploads/BJVnLSKg6.png =50%x) * 當ω1的事前機率變大,R1區域變大,decition boundary向右移 ![](https://hackmd.io/_uploads/ryprSHtgp.png =40%x) * 兩個類別在二維空間上的機率分布,紅箭頭指向的直線為decition boundary minimum-distance classifier: 選擇距離類別中心點最近的那個類別作為分類結果 ex: 假設 ![](https://hackmd.io/_uploads/r1FtNssZT.png =20%x) (所有類別的共變異數矩陣是相同的,代表橢圓形狀一樣) 在這種情況下,Discriminant function 可以被化簡 ![](https://hackmd.io/_uploads/H1QASjs-a.png =60%x) ln * P(ωi)可被忽略,因為每一項都一樣 * dicition boundary為任意高維線性方程式,例如點、線、面等等 ex: 假設 ![](https://hackmd.io/_uploads/By_JfhoW6.png =20%x) (general case,所有類別的共變異數矩陣都沒有限制條件) 在這種情況下,Discriminant function 沒辦法被繼續化簡 ![](https://hackmd.io/_uploads/B1kwfhiWa.png =50%x) * dicition boundary為hyperquadrics(可以是任意的高維二次曲線,例如雙曲線等等) ## Signal Detection Theory and Operating Characteristics 目的是測出不同的x* 值下,偽陽性跟偽陰性的大小 ![](https://hackmd.io/_uploads/ryN_u2sZT.png =80%x) * true: 偽陽性 * false: 偽陰性 receiver operating characteristic(ROC curve) ![](https://hackmd.io/_uploads/SkeWN02jWa.png) * 橫軸是偽陽性的機率 * 縱軸是真陽性的機率 * d' 是鑑別度,鑑別度越高,越好分類 ![](https://hackmd.io/_uploads/SJZ116jZT.png =50%x) * 鑑別度跟兩個分類的期望值及標準差有關 * 觀察可發現,在偽陽性的機率一樣的情況下,鑑別度越高,真陽性的機率就越高 # 最大可能性與貝氏分類器參數估計 * 只要有prior跟 conditional densities,我們便能用上一張的方法設計出一個準確的分類器 * 然而在實務上,通常只有一些訓練樣本而已,於是需要一種方法,能在不清楚prior跟 conditional densities的情況下設計分類器 ## Maximum-Likelihood Estimation * 假設有c類dataset D1...Dc, Dj = p(x|ωj) * 同一類資料集中的資料是iid(在同一類別中且互相獨立)的 * 定義θj = p(x|ωj)所需的參數,只有Dj才能提供資訊給θj * 例如當p(x|ωj) 屬於常態分佈時,θj便包含了期望值跟變異數 * 間單來說,本章目標便是透過Dj,來求出某類別的參數估計值 * 若只想求出某類別的參數估計值,便可以將上述式子進一步化簡 * p(D|θ) = p(x1|θ) * p(x2|θ) * ... * p(xn|θ) * x1~x10是資料集中的點 * 目標是找到一個θ,使p(D|θ)最大,其中稱p(D|θ)為"Likelihood" * **可以透過微分p(D|θ),找出"斜率=0"的那些點 (可能是local maximum, local minimum, inflection point)**,並驗證哪個是極大值 * 當機率分布函數是geomatric distribution時,有時候取log比較好做 ![](https://hackmd.io/_uploads/BkPJfkSf6.png =70%x) * 舉個例子,紅點代表的是某一類別的資料集 * 本小節的目的便是想嘗試預測出哪一條虛線最貼近當前資料集的分布 * p(D|θ)計算過程可視化後便是黃色實線部分 ![](https://hackmd.io/_uploads/ByC3zyHGp.png =50%x) ### ex: Gaussian Case: Unknown µ 對於一個高維的Gaussian distribution,已知其整體的**Σ**(粗體代表高維度的共變異數矩陣),欲從給定的數筆資料($x_{1},x_{2}...$)估計整體的**µ** ![](https://hackmd.io/_uploads/S1-KjzAzp.png) * 這邊的 $p(x)$ 是 $p(x_{k}|θ)$ 的簡寫 所求便是解這條方程式=0 時的θ ![](https://hackmd.io/_uploads/rJ_33zRMp.png) * 取ln可以消掉e,比較好做 * Π指的是連乘運算,即$p(x_{1}|θ)p * (x_{2}|θ) * ...$ ![](https://hackmd.io/_uploads/H1AgFmRMT.png) ### biased Maximum-Likelihood Estimation本身會產生偏差, ## Bayesian Estimation **概念是透過資料集(D)來預測分佈參數(θ),接著透過θ來預測random variable x的PDF(possibility density funtion)** ![](https://hackmd.io/_uploads/r1qiA7Afa.png) * 我們猜一個p(θ) (θ的事前機率) * 透過 D (data) 修正(訓練)事前機率,得到p(θ|D) (θ的事後機率) * 最終目標是得到p(x|D) (x的機率分布) 根據上述概念,我們可以先計算出 ![image.png](https://hackmd.io/_uploads/Bkc6H8PXa.png) 接著計算所求 ![](https://hackmd.io/_uploads/SkyMgV0f6.png =50%x) ![image.png](https://hackmd.io/_uploads/ByfOJUwQa.png =50%x) * 經過計算之後,可以觀察出 * $σ_{n}^2$代表估計的不確定性。經過資料D = {$x_{1}, ..., x_{n}$} 的修正後,隨著n越大,$σ_{n}^2$會越來越小,代表預測的準確度提升 * $μ_{n}$給定n筆訓練資料後,估計的結果 * 若$σ_{0}^2$很大,代表事前猜測的結果不確定姓很高,故結果會更傾向於相信訓練資料所帶來的結果 * 該結果結合了prior information(初始假設條件所提供的資訊)跟data information(資料提供的資訊) ![image.png](https://hackmd.io/_uploads/HJ0YZIvmp.png =80%x) * 用圖來說明,可以看到隨著提供的資料越來越多(1, 5, 10, 20, 30...),畫出來的圖越高(代表越準確) ### recursive Bayes 該方法適用於需要實時更新訓練資料的情境 基於以下兩個公式推導而成 ![image.png](https://hackmd.io/_uploads/H1BGK8wQ6.png =50%x) * 擁有n-1筆資料估計值( $p(D_{n}|θ)$ ),加上第筆資料()後,便可以得到擁有n筆資料估計值 ![image.png](https://hackmd.io/_uploads/HJVXt8PXa.png =60%x) ex: 假設一開始p(θ) ∼ U(0, 10) 訓練資料分別為D = {4, 7, 2, 8} 根據公式,我們可以推出$p(θ|D_{n})$正比於$p(x_{n}|θ)p(θ|D_{n-1})$ 假設資料x=4先進來 此時已知$p(θ|D_{1})$正比於$p(x_{n}|θ)p(θ|D_{0})$ ![image.png](https://hackmd.io/_uploads/BJvJuww7p.png =80%x) 在 0<θ<4 這個區間中,$p(x_{n}|θ)p(θ|D_{0})$ = 0 * $\frac{1}{10}$ ![image.png](https://hackmd.io/_uploads/HkWApwwXa.png) 在 4<=θ<=10 這個區間中,$p(x_{n}|θ)p(θ|D_{0})$ = $\frac{1}{10}$ * $\frac{1}{θ}$ (因為是正比,故常數可以省略) ![image.png](https://hackmd.io/_uploads/SkwApDwQT.png) 在 θ>10 這個區間中,$p(x_{n}|θ)p(θ|D_{0})$ = $\frac{1}{θ}$ * 0 ![image.png](https://hackmd.io/_uploads/r1jR6vvXa.png) ## Problems of Dimensionality * 特徵越多,分類的結果越精準 * 特徵之間越獨立,分類的結果越精準 * Curse of dimensionality: 實際的狀況下,不斷增加特徵到某個程度後,準確度反而下降 (因為sample的數量跟不上) * 解決方法: 1. 降低特徵維度 2. feature selction ### PCA (譜成分分析) 此方法的樣本點**並沒有類別之分** * 0維 ![image](https://hackmd.io/_uploads/ry_Cfql46.png =50%x) * 假設x1, ..., xn為樣本點 * 希望找到一點x0,使其到其他點的距離最小(J(x0)) ![image](https://hackmd.io/_uploads/rJExXqeVT.png =50%x) * 則x0的公式如下 * x0便是樣本點的"0維"表示 (因為x0是一個點) * 1維 ![image](https://hackmd.io/_uploads/rJTDfsxNT.png) * 將二維資料投影至一維空間 * 需要一個m (0維算出來的那個點) * 需要一個基底向量e(scatter matrix中eigan value最大的eigan vector) * scatter matrix定義 ![image](https://hackmd.io/_uploads/BJwImolEp.png =50%x) * 概念: 透過專注於投影點散布最大的方向(v1),減少了維度 之所以要投影到v1,是因為希望降維後,資料仍能降可能的散開,以提升分辨度 ![image](https://hackmd.io/_uploads/HJ1cEjxVT.png) ## Fisher Linear Discriminant (二維、二個類別) 此方法的樣本點**根據類別有所區分** ![image](https://hackmd.io/_uploads/H1E-SaYVa.png =80%x) * 希望找到一個方向w,使投影后的**不同類別中心點**(sample mean)盡可能越分開越好,而**同個類別的資料**盡量集中 * 以這例子來說,有紅、黑兩個類別,右邊的方向效果較好 列式: 1. 假設我們分別擁有兩個不同類別資料集的sample mean ![image](https://hackmd.io/_uploads/ryVyuaKVa.png =50%x) 2. 計算不同類別資料集投影至w方向後的sample mean ![image](https://hackmd.io/_uploads/ryQXOatNT.png =70%x) 3. 根據Fisher Linear Discriminant analyze * 希望projected means間的距離越大越好 ![image](https://hackmd.io/_uploads/S1guOatNp.png =50%x) * 希望同一類別的差距越小越好 ![image](https://hackmd.io/_uploads/SkSZF6t4p.png =50%x) * 使用total within-class scatter來衡量 ![image](https://hackmd.io/_uploads/HkcBFat4p.png =15%x) 公式: ![image](https://hackmd.io/_uploads/BkaTY6t4p.png =40%x) * 希望找到一個方向w,使J(w)最大化 計算: ![image](https://hackmd.io/_uploads/rkeXKRKNa.png =40%x) * w* 代表只保留方向 範例: 給定類別一的三個點 ![image](https://hackmd.io/_uploads/H1G-20tV6.png =60%x) 類別二的三個點 ![image](https://hackmd.io/_uploads/SJEG3AFEa.png =60%x) ## Multiple Discriminant Analysis 方法與上面類似,公式略做修改即可使用 ![image](https://hackmd.io/_uploads/r1YT6CKVT.png =50%x) * Wi是第i大的eigan value所對應的eigan vector * 將Wi組合起來便是所求(W) # Multilayer Neural Networks * Multilayer Neural Networks能透過輸入的資料學習,並實現非線性分類結果;可以被視為一種分類器 * 可以利用gradient descent(梯度下降)透過backpropagation algorithm (反向傳播演算法)來對模型進行訓練 * 不可避免的問題 * 層數(parameter)過多時,需要提升訓練所需的資料量,否則泛化的效果會變差 * 層數(parameter)過少時,會導致模型沒辦法解決複雜的問題 * 可以透過 Regularization 降低模型的複雜度,以解決 overfitting 的問題 ![image](https://hackmd.io/_uploads/rJgrCZbXHT.png) * 本圖適用於兩類的分類問題,每筆資料有兩個 feature * input 的數量對應至特徵數量 * output 的數量對應至類別數量,相當於discriminant function ## Feedforward Operation 針對每個神經元,計算出net$_{j}$ = (x$_{0} * w_{j0}$) + x$_{1} * w_{j1}$ + x$_{2} * w_{j2}$ + ... ![image](https://hackmd.io/_uploads/r1l3ubQST.png =50%x) * x$_{0} * w_{j0}$ 是偏移量,用等價的方式寫成神經元,以簡化計算 * 本範例是全連接層,有兩個feature x1, x2 * f() 稱為activation function,目的是要讓模型達成"非線性"的分類效果 ## Back Propagation Algorithm * 在監督式學習中,負責修正權重的演算法,使輸出結果盡可能的接近標準答案 * 定義 training error 代表"每個輸出分別與答案的平方差"的和 * 透過求 loss function 的一次微分 (梯度下降的方向),來找出權重應該如何修正才能使 loss function 最小化 公式: ![image](https://hackmd.io/_uploads/SJ5kMB2Sa.png =50%x) * 計算 training error 的公式 * c: 輸出神經元數量 * $t_{k}$: 正確答案 * $z_{k}$: 模型輸出 ![image](https://hackmd.io/_uploads/HJDsT4nSa.png =20%x) * 計算梯度應該要下降多少的公式 * η: learning_rate * $\frac{∂J}{∂W}$: 梯度下降的方向 ![image](https://hackmd.io/_uploads/H1x36VnBT.png =50%x) * 更新梯度的公式 簡單的範例: ![image](https://hackmd.io/_uploads/S1NboN2ST.png) * x0: 隨機的初始值 * learning_rate: 向最小值移動(收斂)的速度 * dy/dx: 梯度下降的方向 * 目標是不斷往梯度的反方向移動 * 可以看到經過數個 iteration 後,x 的值逐漸靠近最小值 ### 神經層的權重更新方式細節 本範例假設 Criterion Function 為 ![image](https://hackmd.io/_uploads/S1VKFMYda.png =30%x) ![image](https://hackmd.io/_uploads/BJG_G8hrT.png) * $W_{ji}$ : 隱藏層至隱藏層的權重 * $δ_j$ : sensitivity for 隱藏層 * 負責作為更新 $W_{ji}$ 的參數 * 跟 training error 成正比,故 training error 越大,$W_{ji}$ 的修正量就越大 * 修正量與 $(t_{k}-z_{k})$ 成正比 * $W_{kj}$ : 隱藏層至輸出層的權重 * $δ_k$ : sensitivity for 輸出層 * 負責作為更新 $W_{kj}$ 的參數 * 跟下一層的 sensitivity 有關 * η: learning rate 注意: 權重在初始化時通常會設成一個非0的隨機初始值 (當權種全部初始化成0時,無法透過 update rule 更新權重) ## 訓練的流程控制 監督式學習的訓練包含兩個步驟: 1. 將訓練資料集丟進模型中 2. 更新模型的權重 一個 epoch 代表將所有訓練資料集丟入模型中訓練一次 訓練的流程控制分成三種: 1. Stochastic training: 隨機挑選某筆訓練資料集中的資料來訓練模型,並及時更新權重;不斷重複直到誤差在可接受範圍之間 2. Batch training: 將全部的資料集丟進模型,並分別**累計修正量**;全部資料都丟過後,再一次更新權重,這樣做一輪為一個 epoch (一個 epoch 更新一次權重) * 另外一種變形是 mini batch: 將部分的資料集丟進模型後變更新權重一次 * 缺點: 較慢 4. On-line trainging: 每筆訓練資料集中的資料只會被拿來使用一次,故這種訓練方式沒有 epoch 的概念 ## 資料集區分 1. 訓練資料集: 用來實際訓練模型 2. 驗證資料集: 決定甚麼時候訓練結束 (之所以不用測試資料集決定訓練結束的時間,是因為測試資料集應該完全獨立於模型的訓練過程) 3. 測試資料集: 做最終的 performance 衡量 觀念釐清: 1. 驗證資料集的 error rate 通常比 訓練資料集的 error rate 高 2. 訓練應該停止在驗證資料集最小值發生的時候;當驗證資料集隨著 epoch 越多不降反升的時候,代表可能發生 overfitting 的情況 ## 其他提升 Back Propagation Algorithm 的實作方法 ### Activation Function 挑選原則 1. 挑選非線性函數,以解決非線性的分類結果 2. 函數輸出具有最大及最小值的限制 (可選) 3. 是連續且平滑的函數,因為要連續才可微分 ## Criterion Function (loss function) ### 平方誤差法 ![image](https://hackmd.io/_uploads/ryflk3RI6.png =50%x) * $t_{i}$: 正確答案 * $z_{i}$: 模型輸出 * M: 輸出層節點數量 ### 分類交叉商 ![image](https://hackmd.io/_uploads/rJTLe3RIT.png =50%x) * 由於這個 Criterion Function 對誤差較敏感,故效果通常比平方誤差法還好 * 通常搭配 softmax 這個 activation function 來使用 當答案為 1 時, loss function 的圖 ![image](https://hackmd.io/_uploads/B1nPG2CLT.png =50%x) 當答案為 0 時, loss function 的圖 ![image](https://hackmd.io/_uploads/rJIqGnR86.png =50%x) ## 模型訓練小技巧 ### Activation Function 1. 應該要為非線性函數,以處理複雜的問題 2. 應該要為連續的函數,以方便微分 常見 Activation Function ![image](https://hackmd.io/_uploads/S1Syrn08T.png =70%x) ![image](https://hackmd.io/_uploads/ByJzBhALT.png =70%x) ### Scaling Input 技巧 * 假設我們設計了一個基於重量、長度來對魚進行分類的網絡,然而重量的數值卻遠大於長度,這樣會導致模型偏好於只使用重量進行分類 * 解決方法: 將兩個特徵標準化,平均值設成0,標準差射程一致 ### 多類別的 Target Values 技巧 將答案轉成 one-hot 的型態,可以使模型產生高效的學習 (正確的類別設成1,非正確的設成0) ex: 四個類別的答案可能為 ### Manufacturing Data 透過旋轉、放大、裁切、平移、增加雜訊等簡單的圖像處理方式製造更多訓練用資料 ### Initialize Weights 為了使模型的每個權重都能被均勻地被訓練,使用 uniform distribution 來生成權重 輸入至隱藏層權重的生成範圍 (d 是輸入神經元的數量) ![image](https://hackmd.io/_uploads/BJdeF6A8p.png =40%x) 隱藏至輸出層權重的生成範圍 (nH 是輸入神經元的數量) ![image](https://hackmd.io/_uploads/HJ3cYpR86.png =40%x) ### Momentum * 在 error surface 中,可能會遇到一些梯度為 0 的平面,導致模型無法再被進一步優化 * 實作方法: 在更新權重時,除了加上本次反向傳播演算法的修正量之外,還加上"上一次的修正量" ![image](https://hackmd.io/_uploads/Bksr360I6.png) * $W_{bp}(m)$: 反向傳播演算法的修正量 * $W(m)$: 上一次的修正量 * α: 兩者的比例 ### Weight Decay 在大多數情況下,適當的讓每個權重都按照一個衰減率進行衰減,能減少模型過度擬合的情況 ### Deep Learning * 指的是擁有數十層神經網路的模型架構