iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0
AI & Data

Deep Learning 從零開始到放棄的 30 天 PyTorch 數字辨識模型系列 第 7

Day-06 Classification

  • 昨天聊完如果要做資料 Regression(預測)的話,要給予基本的 Model + Data,並且利用 Loss function(損失函數)來檢查現在的 function 的糟糕程度,並利用 Gradient Descent 更新 Model 來模擬窮舉的概念達到找到最佳函數的效果
  • 那如果是分類問題的話,會有幾個疑問
    • 分類問題會在什麼時候出現?
    • 要怎麼做分類?
  • 讓我們一個一個看下去

分類問題會在什麼時候出現?

  • 其實我們的生活中一直都在做分類,可以說分類問題是人類每天最常在做的事情,我們今天去上班上學,如何分辨你的同學同事誰是誰,如何決定考卷答案是 A 是 B,這些都是決策分類
  • 所以我們也希望機器的 Classification(分類)可以做什麼,
    • 判斷 yes/no 問題
    • 分辨不同的動物
    • 分辨人臉
    • 等等等等
  • 那今天我們就拿天氣分類來舉例吧~

天氣分類問題

  • 假設一天的天氣有分成三種,分別是晴天、陰天、雨天,所以相較於 Regression 輸出是一個實數(預測結果),Classification 的 Output 就會分別是晴天、陰天、雨天三種結果
  • 那我們回顧一下機器學習的流程,給 Model(function set) -> Goodness of function -> Find the best function
  • 那我們說過 Goodness of function 可以利用 Loss function 來檢查當前 function 的錯誤程度,然後在最後輸出 best function,在 Regression loss function 可以直接用 Estimation error(估計誤差),然後更新參數用 Gradient Descent,那分類問題呢?

Loss Function

  • 在 Regression 中,我們的 Loss function 會是預期的答案減去我們計算出來的答案的差異量,但是 Classification 這邊並沒有答案差異這件事情,要怎麼辦呢?
  • 其實很簡單,我們平常怎麼知道自己的判斷力好不好?也就是看我們判斷的成功率對吧?
  • 所以我們可以利用不符合的答案數量來當作回答狀況的好壞,所以我們可以改寫我們的 Loss function 成 https://chart.googleapis.com/chart?cht=tx&chl=%24L(f)%20%3D%20%5Csum%5Climits_%7Bn%7D%20%5Cdelta(f(x%5En)%20%5Cne%20%5Chat%7By%7D%5En)%24

Best function

  • 從上面的 Loss function 我們可以發現我們用判斷答錯的數量來判斷我們 function 的好壞,並且拿到的式子 https://chart.googleapis.com/chart?cht=tx&chl=%24L(f)%20%3D%20%5Csum%5Climits_%7Bn%7D%20%5Cdelta(f(x%5En)%20%5Cne%20%5Chat%7By%7D%5En)%24,那就開始算 Gradient D...
    • 等等等等,筆者你不是說過 Gradient Descent 一定要是可微分式子嗎?上面的 loss function 最好可以微分啦!
    • 挖,被你發現了,所以這裡當然不會是 Gradient Descent 啦~
  • 想必細心一些的讀者都已經發現了,在這邊很明顯不能用 Gradient Descent 去最佳化我們 Model 的參數,那有沒有別的方法可以解決這邊最佳化的問題嗎?難不成真的要開始窮舉了 QQ?
  • 其實是有的,例如 Perceptron Learning Algorithm(PLA), Support Vector Machine(SVM) 等等,那直接說明 PLA 或是 SVM 會很不直觀,因此我們換個方式解釋

如何做"分類"

  • 回到最一開始的問題,我到底要怎麼分類,不管問題是什麼,我們總得先搞個方式去分類資料,那到底要怎麼去分類他們?我們用個簡單的小機率問題分類來讓大家理解

基礎機率小問題

  • 我們先假設一個情境,今天我們的世界只有晴天 & 雨天兩種天氣,因此我們的工作就是判斷明天是晴天 OR 明天是雨天兩種問題
  • 那我們再來假設一下,我們判斷兩種問題的資料也很簡單,就是溫度&濕度兩個變數,所以如果要把資料畫成圖

    • 這筆資料的狀況是有 30 筆晴天資料 30 筆與天資料去做繪圖
  • 我們可以發現有兩種資料分布在空間中的狀況是有重疊的也有分離的部分,但是我們從肉眼中可以比較好的去判斷資料狀況
  • 那如果我們想要分開資料,在肉眼辨識下我們大致上會怎麼去切分?應該會依照這樣切分

  • 那到底,我們現在理論上應該怎麼判斷這些資料誰屬於誰?很簡單,那就是用機率來看,什麼意思?
  • 我們把紅線的左邊右邊分成兩個區塊來看,可以變成下面這張圖片

  • 我們現在有兩個盒子,盒子一跟盒子二,這兩個盒子都有紅色球球跟綠色球球,今天如果我們拿到了一顆紅色的球球,我們只知道這個紅色球球是從這兩個盒子裡面拿到的,請問他是從盒子一拿出來的機率是多少?從盒子二拿出來的機率是多少?
  • 這是一個非常簡單的問題,我要算從第一個盒子取出紅色球的機率,就會是取第一個盒子的機率乘上第一個盒子裡面紅色球被拿到的機率去除與兩個盒子拿到紅色球的機率https://chart.googleapis.com/chart?cht=tx&chl=%24%24P(C_1%7CRed)%20%3D%20%7BP(Red%7CC_1)P(C_1)%20%5Cover%20P(Red%7CC_1)P(C_1)%20%2B%20P(Red%7CC_2)P(C_2)%7D%24%24
  • 那這個跟分類有什麼關係?我們假設今天我們把盒子改成類別,然後給定一個 x,這個 x 是我們要分類的對象,也就是要分成 class1 或是 class2,那我們這時候先來算這個 x 出現在 class1 跟 class2 中的機率是多少,也就是我從這兩個 class 中抽取到 x 的機率,那式子會變成怎樣?
    • Class1 https://chart.googleapis.com/chart?cht=tx&chl=%24%24P(C_1%7Cx)%20%3D%20%7BP(x%7CC_1)P(C_1)%20%5Cover%20P(x%7CC_1)P(C_1)%20%2B%20P(x%7CC_2)P(C_2)%7D%24%24
    • Class2 https://chart.googleapis.com/chart?cht=tx&chl=%24%24P(C_2%7Cx)%20%3D%20%7BP(x%7CC_2)P(C_2)%20%5Cover%20P(x%7CC_1)P(C_1)%20%2B%20P(x%7CC_2)P(C_2)%7D%24%24
  • 那其實這樣就解決問題了,為甚麼,因為我們可以很簡單的知道這個天氣狀況到底比較偏向哪一種形況,他到底是晴天的機率比較大,還是雨天的機率比較大
  • 那這邊我們等於需要去取得四個變數,分別就是 https://chart.googleapis.com/chart?cht=tx&chl=%24P(C_1)%24, https://chart.googleapis.com/chart?cht=tx&chl=%24P(x%7CC_1)%24, https://chart.googleapis.com/chart?cht=tx&chl=%24P(C_2)%24, https://chart.googleapis.com/chart?cht=tx&chl=%24P(x%7CC_2)%24,我們只要有這四個變數,我們就能夠計算出任意一個 x 進來之後,他於兩個 cases 機率了,而現在這個做法叫做一個 Generative Model(生成模型),因為我只要能夠有這個模型,我就能生成所有資料點的 Distribution(分布),來判斷資料狀況。
  • 那這個時候會有一個新的問題,如果我今天加上去一筆全新的天氣資料,那它發生的機率是多少?總不會是 0 吧?因為雖然他沒在訓練資料裡面,但是怎麼看他都像是一筆實際存在的晴天資料阿

  • 我們原本的資料其實在資料點上面是有呈現一個分布狀態的,假設這些資料點是從一個 Gaussian density distribution(高斯密度分佈)去標記出來的,那我們現在有一個新的資料點出現時,他在這個分布上出現的機率就不會是 0

高斯分布

  • 我們在這邊就不特別解釋高斯分布是什麼了,有興趣的人可以自己查一下資料
  • 反正就是我們會有高斯分布的狀況,然後會有一個基於 https://chart.googleapis.com/chart?cht=tx&chl=%24%5Cmu%24 還有 https://chart.googleapis.com/chart?cht=tx&chl=%24%5CSigma%24 的公式 https://chart.googleapis.com/chart?cht=tx&chl=%24%24f(x%7C%5Cmu%2C%5CSigma)%3D%7B1%20%5Cover%20(2%5Cpi)%5E%7BD%2F2%7D%7D%20%7B1%20%5Cover%20%7C%5CSigma%7C%5E%7B1%2F2%7D%7D%20%5Cexp%20%5C%7B-%20%7B1%20%5Cover%202%7D(x%20-%20%5Cmu)%5ET%20%5CSigma%5E%7B-1%7D%20(x-%5Cmu)%5C%7D%20%24%24 計算任意 x 於高斯分布中的分布狀況
  • 所以我們現在就是要找到好的 https://chart.googleapis.com/chart?cht=tx&chl=%24%5Cmu%24 跟好的 https://chart.googleapis.com/chart?cht=tx&chl=%24%5CSigma%24

趕快幫大家做個小統整

  • 想必看到這裡,大家都已經昏了,我們趕快幫大家做個整理
  • 我們重新聚焦一下重點,就是我們現在要想辦法把資料做分類
  • 那如何分類,這裡我們做的事情是去計算資料點出現的在不同 cases 間的機率,也就是剛剛看到的 https://chart.googleapis.com/chart?cht=tx&chl=%24%24P(C_1%7Cx)%20%3D%20%7BP(x%7CC_1)P(C_1)%20%5Cover%20P(x%7CC_1)P(C_1)%20%2B%20P(x%7CC_2)P(C_2)%7D%24%24 公式,然後我們就可以自己定下例如只要這個機率大於 50% 就屬於 case1 之類的規則,但是這邊會有四個變數要控制,就是 https://chart.googleapis.com/chart?cht=tx&chl=%24P(C_1)%24, https://chart.googleapis.com/chart?cht=tx&chl=%24P(x%7CC_1)%24, https://chart.googleapis.com/chart?cht=tx&chl=%24P(C_2)%24, https://chart.googleapis.com/chart?cht=tx&chl=%24P(x%7CC_2)%24
  • https://chart.googleapis.com/chart?cht=tx&chl=%24P(C_1)%24, https://chart.googleapis.com/chart?cht=tx&chl=%24P(x%7CC_1)%24, https://chart.googleapis.com/chart?cht=tx&chl=%24P(C_2)%24, https://chart.googleapis.com/chart?cht=tx&chl=%24P(x%7CC_2)%24 這四個變數要怎麼生成,重點要先把 https://chart.googleapis.com/chart?cht=tx&chl=%24P(C_1)%24, https://chart.googleapis.com/chart?cht=tx&chl=%24P(C_2)%24 兩個機率確認,而這個機率怎麼確認,就是利用高斯分布來確認現在訓練的資料組裡面,的分布機率狀態
  • 所以概念上就是我只要能搞好高斯分布,我就能得到兩群出現的機率,就可以間接得到類別中後驗機率,然後就能夠計算它的機率了
  • 因此到這裡,我們會發現如何找到正確的高斯分布,變成了重中之重,我們現在在操作的 Model(機率公式)的好壞(第二步 goodness function) 會因為高斯分布的 https://chart.googleapis.com/chart?cht=tx&chl=%24%5Cmu%24, https://chart.googleapis.com/chart?cht=tx&chl=%24%5CSigma%24 而影響了,所以我們現在求的最佳,就是高斯分布的 https://chart.googleapis.com/chart?cht=tx&chl=%24%5Cmu%24https://chart.googleapis.com/chart?cht=tx&chl=%24%5CSigma%24
  • 那怎麼找 https://chart.googleapis.com/chart?cht=tx&chl=%24%5Cmu%24https://chart.googleapis.com/chart?cht=tx&chl=%24%5CSigma%24 呢?

likelihood function(概率函數)

  • 我們一樣回到剛剛的分布圖

  • 圖上的兩個紅圈圈分別代表著兩個不同的高斯分布中心,那我們可以很明顯知道這兩個高斯分布去計算對於晴天的分布狀況會很明顯地不一樣,比較偏中間的那個高斯分布的可能性會比比較偏左下的那個可能性機率低
  • 所以我們其實就可以去算 likelihood 的狀況
    • likelihood 越高理論上我們的高斯分布越好,也就是 https://chart.googleapis.com/chart?cht=tx&chl=%24%5Cmu%24https://chart.googleapis.com/chart?cht=tx&chl=%24%5CSigma%24 參數較好
    • likelihood 低的則代表分布的位置較不好,也就是 https://chart.googleapis.com/chart?cht=tx&chl=%24%5Cmu%24https://chart.googleapis.com/chart?cht=tx&chl=%24%5CSigma%24 參數較不好
  • 所以我們來看一下 likelihood function 長怎樣,https://chart.googleapis.com/chart?cht=tx&chl=%24L(%5Cmu%2C%20%5CSigma)%20%3D%20f(x%5E1%7C%5Cmu%2C%5CSigma)%20*%20f(x%5E2%7C%5Cmu%2C%5CSigma)%20*%20f(x%5E3%7C%5Cmu%2C%5CSigma)%20*%20...%20*%20f(x%5En%7C%5Cmu%2C%5CSigma)%24 (請注意這邊的 https://chart.googleapis.com/chart?cht=tx&chl=%24L%24 不是 loss function),也就是當下高思對所有點的高斯機率全部相乘,就是現在的高斯的 likelihood

Maximum likelihood

  • 那這邊找最佳的 https://chart.googleapis.com/chart?cht=tx&chl=%24%5Cmu%24https://chart.googleapis.com/chart?cht=tx&chl=%24%5CSigma%24 其實有概念的話,

    • https://chart.googleapis.com/chart?cht=tx&chl=%24%5Cmu%5E*%20%3D%20%7B1%20%5Cover%2030%7D%20%5Csum%5Climits_%7Bn%20%3D%201%7D%5E%7B30%7Dx%5En%24 也就是所有點平均(也就是資料集中心點)
    • https://chart.googleapis.com/chart?cht=tx&chl=%24%5CSigma%5E*%20%3D%20%7B1%20%5Cover%2030%7D%20%5Csum%5Climits_%7Bn%20%3D%201%7D%5E%7B30%7D(x%5En%20-%20%5Cmu%5E*)(x%5En%20-%20%5Cmu%5E*)%5ET%24
  • 我們這樣就可以解決分類問題了

每日小結

  • 分類問題其實並沒有跟預測問題不同,概念上都嚴格遵守先有 Model -> 去檢查、驗證、更新 function 參數 -> 找到最佳參數
  • 那在分類的問題上,我們可以簡化的用出現在哪邊的機率來做判斷,就肉眼上來判斷,我們要分類朋友群,也是把一坨一坨聚在一起的人分類在一起,也就是他們出現在這個區塊的機率狀況給分析出來,機器也不例外
  • 那為了能夠分辨區塊,我們會需要利用高斯分布來確保資料分布狀況,而高斯分布所影響到的正事我們分類資料算出來的機率,因此取得最佳的分布參數,也就解決了分布問題
  • 今天提到的數學概念如果有任何疑問,都可以參考
  • 那到這裡我們也有基本的機器學習概念了,我們明天來看看一個神奇的名字欺騙術,Logistic Regression

上一篇
Day-05 Easy Regression Example
下一篇
Day-07 Logistic Regression 介紹
系列文
Deep Learning 從零開始到放棄的 30 天 PyTorch 數字辨識模型31

尚未有邦友留言

立即登入留言