• 文章總列表
  • 統計分析
    • R SAS All
      R

      [R]散佈圖與相…

      2019-12-31

      R

      [R]Logis…

      2019-10-31

      R

      [SAS][R]…

      2019-09-27

      R

      [R]Chi-s…

      2019-09-19

      SAS

      [SAS] Ma…

      2026-09-08

      SAS

      [SAS] Ma…

      2026-01-21

      SAS

      [SAS]傾向分…

      2020-10-28

      SAS

      [SAS]Log…

      2020-06-10

      統計分析

      [SAS] Ma…

      2026-09-08

      統計分析

      [SAS] Ma…

      2026-01-21

      統計分析

      什麼是meta-…

      2024-11-05

      統計分析

      Test-ret…

      2024-06-07

  • SAS
    • SAS

      [SAS] Ma…

      2026-09-08

      SAS

      [SAS] Ma…

      2026-01-21

      SAS

      [SAS]傾向分…

      2020-10-28

      SAS

      [SAS]Log…

      2020-06-10

      SAS

      [SAS]迴歸分…

      2020-02-28

  • R
    • R

      [R]散佈圖與相…

      2019-12-31

      R

      [R]Logis…

      2019-10-31

      R

      [SAS][R]…

      2019-09-27

      R

      [R]Chi-s…

      2019-09-19

      R

      [SAS][R]…

      2019-07-08

  • 機器學習
    • 機器學習

      Unsuperv…

      2021-07-22

      機器學習

      Unsuperv…

      2021-07-12

      機器學習

      Unsuperv…

      2021-05-20

      機器學習

      Unsuperv…

      2021-05-12

      機器學習

      Matrix F…

      2021-04-30

  • 閱讀筆記
    • 閱讀筆記

      [閱讀心得 #2…

      2025-02-05

      閱讀筆記

      [閱讀心得#20…

      2024-10-25

      閱讀筆記

      [閱讀心得#19…

      2024-08-16

      閱讀筆記

      [閱讀心得#18…

      2024-05-10

      閱讀筆記

      [閱讀心得#17…

      2022-01-22

Wenwu's blog
wenwu's blog
  • 請我喝珍奶

Popular Posts

[R]散佈圖...

2019-12-31

[SAS]L...

2020-06-10

[SAS][...

2019-07-08

[R]Log...

2019-10-31

[SAS] ...

2020-01-22

[SAS]線...

2020-02-26

[SAS]存...

2019-12-18

[SAS]迴...

2020-02-28
機器學習

機器學習自學筆記06: Logistic regression

by wenwu 2020-05-22

機器學習自學筆記06: Logistic regression

前一篇講到Classification 分類, 今天就要來講Logistic regression ! 我們就從machine learning 的三個步驟開始吧!


Three Steps of machine learning

  • step 1: Function set
    這裡使用的function set 就是 Logistic regression! 
    wi: weight , b: bias , σ(z): sigmoid function 
    xi: input , P(C1|x): output (是一個機率)
  • step 2: Goodness of a function
    假設我們有一組training data: x1, x2,x3 … xN,並且知道它們的類別(C1, C2) 假設這筆training data 是從我們的function 所定義的posterior probability 所產生的,而w和b就決定了這個posterior probability ,所以就可以計算這組(w,b)產生N筆 training data 的機率。利用最大估計法,最好的參數就是使likelihood 值最大的最佳解。

經過一番整理之後,我們可以將要minimize的對象寫成下面的形式

這裡的X^n ,表示第一個樣本點,y^n表示第n個樣本點的class標籤,最終這個summation的形式,裡面其實是兩個Bernouli distribution的cross entropy(交叉熵),把f(X^n) & y^n 都當成Bernoulli distribution,兩者的cross entropy, 就是我們要minimize 的對象。

cross entropy的含意就是這兩個distribution 有多近,如果 p和 q 兩個distribution 一模一樣的話,那他們的 cross entropy 就是0。這裡的 f(X^n)就是function 的 output ,y^n 表示預期的target,因此 cross entropy 實際上表達的是希望這個function 的 output 和他的 target 越接近越好。

最後,我們要找的參數實際上就是 :

  • step 3: find the best function
    實際上就是去找到使 loss function(也就是cross entropy) 最小的那組 w* & b*,這裡用gradient descent 的方法進行運算就行了
    這裡sigma function 的微分可以直接作為公式記下來: ∂σ(z)/∂z = σ(z)(1-σ(z)) ,sigma 和他的微分的圖像如下:

偏微之後,可以得到的式子如下,表示gradient descent 每次update 只需要做:

代表現在我們的update 取決於三件事情:

  1. learning rate η,是自己設定的
  2. xi: 來自data
  3. y^n-f(x^n) ,代表function的 output與理想的target的差異大小
    如果離目標越遠,update 的步伐就要越大

Logistic Regression vs Linear Regression

在第二篇自學筆記中,有提到使用Linear regression的model 套用在 Machine Learning 的三個步驟。現在來比較Logistic regression 和 Linear regression 的不同。

  • compare step 1 
    Logistic regression 是把每一個feature xi 加權相加,加上bias ,再通過sigma function,當作function 的output 
    因為Logistic 的output 是通過sigma function 產生的,因此一定是介於0~1之間;而linear regression 的output 可以是任何值
  • compare step 2
    Logistic regression 中,我們定義的loss function,即要去minimize 的對象,是所有樣本的output和實際target 在 Bernoulli distribution 下的 cross entropy總和
    在Linear regression 中,loss function 的定義相對比較簡單,就是單純的function 的output 和實際target 在數值上的平方和的均值
  • compare step3
    Logistic regression 和 Linear regression 的wi update的方式是一模一樣的,唯一不一樣的是Logistic regression 的target 和output 都必須在0~1之間,而linear regression 的target 和output 的範圍可以是任意值

如果Logistic regression 的 loss function 使用square error?

假設現在第 n 個點的目標是class 1 (y^n=1),此時如果function 的 output f(x^n)=1的話,表示已經離target 非常接近,f(x^n)-y^n = 0,而 ∂L/∂w 就會變成0 ; 假設y^n=1 ,且f(x^n)=0 ,兩項相減=1,表示距離target很遙遠,而這時∂L/∂w也=0

如果我們把參數的變化對total loss 作圖的話,loss function 選擇 cross entropy or square error ,參數的變化跟loss 的變化情況如下圖顯示: (黑色的是cross entropy ,紅色是 square error)

假設中心點是我們的目標。可以發現cross entropy 比較有起伏一點,而square error 則相反。
Cross entropy在距離目標遠時,微分值大,參數update 的變化量也大,跨出去的步伐也大,就會比較快找到我們的目標。
若使用Square error 的話,有可能一開始就卡住了,不容易找到目標。

所以儘管square error 可以使用,但是會非~ 常~ 慢 ~~


Discriminative vs Generative

logistic regression 的方法,我們把它稱之為 Discriminative ;
之前用gaussian 來描述posterior probability 這件事,我們稱之為 Generative

實際上他們兩個使用的model(function) 是一樣的。
Logistic regression可以用gradient descent 的方法直接把b 和 w 找出來;如果用Generative model 的話,我們要先去算 u1\u2\Σ ,然後算出b 和 w

而兩個方法找出的b 和 w是不一樣的。就算我們的function set 是同一個,但是做了不同的假設,所以同樣training data 找出的參數會是不異樣的

在Logistic regression 中,我們沒有做任何實質性假設,沒有對probability distribution 有任何描述,只是單純的找b 和 w
而在Generative model 裡面,我們對probability distribution有實際性的假設。之前是假設Gaussian,甚至假設在相互獨立的前提下是否可以是naive bayes ,根據這些假設我們最終才找到b 和 w

哪一個假設的結果是較好的呢? 下圖是兩個的結果

實際上Discriminative 的方法常常會比Generative 的方法表現的較好,下面舉一個例子:

toy exmaple

假設總共有兩個class ,training data 如下: 每一筆 data 有兩個feature , 總共有13筆data

如果現在有一組testing data ,兩個feature 都是1 ,憑直覺來說他肯定是class1 ,但是若用naive bayes 的方法,得到的結果如何呢?

通過naive bayes 的結果竟然這筆testing data 屬於class 2 的可能性更大,這跟我們的直覺相反。
對naive bayes 來說,他是不考慮不同dimension之間的correlation ,naive bayes 認為在dimension相互獨立的前提下,class 2 沒有sample 出都是1 的 data , 因為sample 的數量不夠多,如果sample 夠多,他認為class 2 觀察到都是1的data 可能性會比class 1要大

因為naive bayes 認為從class 2 中找到樣本點 x 的機率是 x 中第一個feature 出現的機率與第二個feature 出現的機率的乘積 : P(x|C2)=P(x1=1|C2) * P(x2=1|C2) ;但是直覺告訴自己,兩個feature 之間肯定有某種關聯,P(x|C2)不能夠這麼輕易的被拆分成兩個獨立的機率乘積,也就是: Naive bayes 自做聰明的多設了一些條件

所以Discriminative model 和Generative model 的差別就在於 : 
Discriminative model 是完全不做任何假設的
Generative model則假設你的data來自某個機率模型

Generative model 做的事情就是腦補,他會自己去想像一些事情,於是與我們天然的想法不太一樣。就像在toy example 裡,我們做了naive bayes 這樣一個假設(事實上我們並不知道這兩個feature 是否相互獨立),於是naive bayes 會在class 2 裡並沒有出現兩個feature 都是1的樣本點的前提下,自己去腦補這樣的點

通常腦補不是一件好事,因為你給你的data強加了一些他沒有告訴你的屬性,但是! 在data 很少的情況下,腦補也是有用的。

discriminative model並不是在所有的情況下都可以贏過generative model 
discriminative model 是十分依賴data的,而 generative model 可以在data數量不足或資料本身的label有一些問題時,對資料做假設,反而能將資料不足的問題降低

Discriminative vs Generative 兩種方法的比較

關於分類的問題(主要二元分類),我們一般有兩種方法處理問題: 
Discriminative & Generative ,注意到分類的model都是從bayes 出發的 :

  1. Discriminative
    不會做任何假設,因此無法通過假定的probability distribution 得到P(x|Ci)的表達是,因此使用的是(2),直接利用cross entropy 和 gradient descent 結合maximum likelihood 得到最佳的b & w 解,以確定model 的具體形式 
    Discriminative的優點在於: 在data 充足的情況下,他訓練出來的model的準確率一般是比generative model 來得高
  2. Generative model
    Generative model 會假設一個帶參數的probability contribute ,利用這個假設的機率分布函數帶入(1)中去計算P(x|Ci)&P(x|Cj) ,結合maximun likelihood 估計法最終得到最樣的參數以確定這個Model 的具體形式
    Generative 的好處是: 它對data的依賴並沒有像Discriminative這麼嚴重,在data數量少 或是data本身就存在noise的情況下受到影響會更小,它還可以做到prior 部分與class-dependent 部分分開處裡,如果可以借助其他的方式提高prior model 的準確率,對整一個model是有所幫助的。

Multi-class Classification

softmax

之前都提到二元分類的情況,這裡討論多元的分類問題,其原理的推倒過程與二元分類基本一致

假設有三個class : C1、C2、C3,每一個class 都有自己的weight 和 bias ,這裡w1、w2、w3代表三個vector ,而b1、b2、b3分別代表三個const,input x 也是一個vector (zi=wi*x+bi ,i=1、2、3)

softmax 的意思是對最大值做強化,因為在做第一步的時候,對 z 取 exponential 會使最大和最小值得差距拉得更開,也就是強化大的值

我們把z1、z2、z3丟進一個softmax 的function , softmax 做得事情是這樣三步

  • 取exponential ,得到exp(z1)、exp(z2)、exp(z3)
  • 把三個exponential 相加,得到total sum
  • 將total sum 分別除去這三項

原來的output z 可以是任何值,但是做完softmax ,你的output會限制住,output yi 的值一定是介於0~1之間,並且相加為一。以上圖為例,yi表示input x 屬於第 i 個 class 的機率,比如屬於C1的機率是 y1=0.88,屬於C2的機率是 y2=0.12,屬於C3的機率是 y3=0

而softmax 的output,就是拿來當z 的posterior probability

multi-class classification 的過程 :

在input x 經過三個是式子分別生成z1、z2、z3,經過softmax 轉化成output y1、y2、y3,他們分別是這三個class 的posterior probability ,因為 Σy = 1 所以可以直接將y當作是probability contribution 。
我們在training 的時候還需要有一個target , 因為是三個class ,output 是三維的,對應的target也是三維的,為了滿足cross entropy 的條件,target y 也必須是 probability distribution,這裡我們不能使用1、2、3 作為class 的區分,為了保證所有class 之間的關係是一樣的,這裡使用類似於one-hot 編碼的方式 (下圖底下)

這時候就可以計算一下output y和 target y 之間的 cross entropy (= Σyi lnyi ),同二元分類一樣,多元酚類問題也是通過maximum likelihood 得到最終的 cross entropy 表達式,這裡不再贅述。


Limitation of Logistic Regression

Logistic regression 其實有很強的限制,比如說下面的data,若要用logistic regression 分類,其實是做不到的。因為logistic regression 的boundary 就是一條直線,但是在這個平面上怎麼分都無法將兩個class 分開


Feature Transformation

如果堅持要用logistic regression 的話,有一招就做 Feature transformation ,原本的feature 分布不好劃用,那經過轉化之後,找一個比較好的feature space ,讓logistic regression能夠處理
假設新的x1′ 是原本的點到 [ 0, 0] 的距離,x2′ 是原本的點到 [ 1, 1] 的距離,重新映射之後如下圖右側(紅色兩點重疊),此時就可以用Logistic regression 來分類

但麻煩的是,我們並不知道怎麼做feature transformation,如果在這上面花費太多時間就得不償失了,於是我們會希望這個 Transformation是機器自己產生的,怎麼讓機器自己產生呢? 我們可以讓很多 Logistic regression cascade (連接)起來

我們讓一個input x 的兩個feature x1、x2 經過兩個logistic regression的 transform ,得到新的feature x1’、x2′ ,在這個新的feature space 上, class 1 和 class 2 是可以用一條直線分開的,那麼最後只要再接上另外一個logistic regression 的 model ,根據最新的feature ,就可以將 class 1 和 class 2分類

因此這整個流程是,先用n個 logistic regression 做feature Transformation(n 為每個樣本點的feature數量) ,生成 n 個新的feature,最後再用一個logistic regression做分類

下圖是二維feature 的例子,分別表示四個點經過transformation之後的 x1’、x2’,在新的feature space 中可以通過最後logistic regression分類

注意,這個的Logistic Regression只是一條直線,它指的是“屬於這類”或“不屬於這類”這兩種情況,因此最後的這個Logistic Regression是跟要檢測的目標類相關的,當只是二元分類的時候,最後只需要一個Logistic Regression即可,當面對多元分類問題,需要一到多個Logistic Regression來劃出多條直線劃分所有的類


Powerful Cascading Logistic Regression

通過上面的例子,我們發現,多個 Logistic Regression連接起来会產生powerful的效果,我們把每一個 Logistic Regression叫做一個 neuron(神經元),把這個Logistic Regression串起來所形成的 network,就叫做Neural Network,就是類神經網路,這個東西 就是Deep Learning!

筆記參考 :https://github.com/Sakura-gh/ML-notes/blob/master/ML-notes-pdf/7_Logistic%20Regression.pdf

2020-05-22 0 comment
0 FacebookTwitterPinterestEmail
機器學習

機器學習自學筆記05: Classification | Probabilistic Generative Model

by wenwu 2020-04-30

機器學習自學筆記05: Classification | Probabilistic Generative Model

今日的課程來自於: https://youtu.be/CXgbekl66jc
參考筆記:https://github.com/Sakura-gh/ML-notes/blob/master/1_Introduction.md

Classification 概念描述

分類的目標就是要找到一個function,當我們將數值輸入後,輸出可以分類。以寶可夢為例,我們已經知道寶可夢有18種屬性,我們期望可以找到一個function,當我們將某一支寶可夢輸入後,可以知道他的屬性。

如何將寶可夢輸入呢? 需要將每個寶可夢數值化。

特性數值化:用一組數字來描述一隻寶可夢的特性。比方說它有多強(total strong)、它的生命值(HP)、它的攻擊力(Attack)、它的防禦力(Defense)、它的特殊攻擊力(Special Attack)、它的特殊攻擊的防禦力(Special defend)、它的速度(Speed)。所以我們可以將每個寶可夢用以上七種特性來描述。


Classification as Regression?

我們可以使用迴歸分析分類嗎?

假設我們要使用regression 來做classification,在training 時可以假設class 1 的輸出是1;class 2 的輸出是2;當我們使用testing時,regression 的輸出是一個數值,當他接近1 的時候分類為class 1 ,接近-1時分類為class 2

但是這樣做會發生什麼問題?

先講解左圖的例子,假設我們資料的分布如左圖,regression train 出來的model (綠線)可以完美的幫我們分類資料屬性(這是最好的情況)

但是若遇到右圖的例子,在右下角有一群data會影響到model,從右圖中可以看出綠色的線是最好的model 分界線。但是!!! 因為使用綠線的model時,會將右下角的資料做regressiong時output會>1 ,而這些大於1 的點對綠線的model 來說都是error ! 
所以使用這組資料所training 的model 會是紫色的model ,因為它會”減少” 右下角data所帶來的error

而我們看圖就知道綠色的model是最好的,但是我們無法保證每次資料的性質都在分界線的兩端。所以不建議使用regression 使用在 classification 上面

另外,若是遇到多元分類的問題,我們將class 1 當作 1 ;class 2 當作 2 ;class 3當作 3 。這樣的標籤會使regression 以為 class 1 與 class 2 比較相近,而class 1 和 class 3 比較遠,但是這些組別之間並沒有這些關係,所以用regression 沒有辦法得到好的結果。


Ideal Alternatives ( 從新定義loss function)

理想的方法是這樣: 我們要找的 function f(x) 裡面會有另一個 function g(x) ,當我們的input x輸入之後,如果 g(x) > 0 ,那 f(x)的輸出就是 class 1 ;反之,若是g(x) < 0 ,則 f(x)的輸出就是 class 2 。

有發現其實跟regression的方法很像,只是用了不同的套術嗎?

針對 regression 的loss function 來說,因為regression 的loss function 是用output 與”真值” 的平方和 作為標準的,為了解決這個問題,我們只需要從新定義一個loss function 即可!

可以看到上圖的loss function ,新的loss 將加總model 在所有training data 上次預測的錯誤次數,(δ=1,若training data 預測出來與”真值”不同時;反之為0)

然而這個方法沒有辦法微分,所以無法用gradient descent 的方法解決。當然可以用SVM、perceptron來解決,但是今天介紹用別的方法來解決。


Solution: Generative model (生成模型)

假設今天我們有兩個class ,class1 and class2 。若是我們要計算 x 屬於 C1 的機率(=P(C1|x)),那我們就要知道下面四個紅色圈起來的機率,分別是 P(
C1)、P(C2)、P(x|C1)、P(x|C2) 。

要如何知道這四個機率,我們從training data 來估測這四個機率,這個想法叫做generative model 。為甚麼叫做generative model 呢? 因為有這個model 的話,就可以拿它來generate 生成x ;換句話說,如果我們可以計算出每一個x的機率,就可以用這個distribution分布來生成x,sample x 出來。

而P(C1)、P(C2) 這兩個機率比較好算的 (這兩個機率稱為Prior)。

假設我們有140隻寶可夢做training data ,79隻為水系,另外61隻為一般系。那training data中,出現水系(class 1)的機率=P(C1)=79/140=0.56,出現一般系(class 2)的機率=P(C2)=61/140=0.44

那要怎麼得到 P(x|C1)、P(x|C2) ?

假設今天來了一隻新的海龜,但是先前的水系寶可夢中並沒有海龜,所以我挑出一隻海龜的機率為0 。
可以想像,水系的神奇寶貝是從某個機率分布出來的,假設這個分布為gaussioan distribution(高斯分布)。而從gaussian sample出海龜的機率不會等於 0。


Gaussian Distribution

下圖中為gaussian distribution,他的input 就是x ,它的 output 就是這一隻寶可夢, 輸入x 從這一個 distribution 裡面被sample 出來的機率。

這個機率的分布由兩個東西決定,分別是mean μ 和 variance Σ 。
不同的mean μ 和 variance Σ,可以決定機率分布的樣子。下面的圖有不同的mean μ,但有相同的variance Σ。

估測μ 和 Σ 的方式,就是用最大概似估計法(maximum likelihood)
要解出μ 和 Σ,就是假設這個gaussian可以生出所有79個點,而生出這79個點的機率就是每一點出現的機率相乘,下圖中最下方有likelihood 的函數。我們要找到他的解,就要找到這個likelihood 的最佳解,就是極大值。
所以對likelihood分別偏微,解出微分是0的點,就可以找到最終的估測值。

其實最佳的μ 和 Σ ,其實就是這組data 的期望值和變異數。
最後我們可以求得 μ¹、 Σ¹、 μ²、Σ² 。

有了μ¹、 Σ¹、 μ²、Σ² 這四個值,我們就可以帶入gaussian ,並且可以求得 P(C1)、P(C2)、P(x|C1)、P(x|C2)。

接下來我們只要輸入一個x, 如果 P(C1|x) > 0.5 ,我們就將他歸類在 水系神奇寶貝了 (class 1 )


Result

左上圖中,橫軸是defense ,縱軸是SP Defense,藍色的點是水系的寶可夢的分佈,紅色的點是一般系的寶可夢的分佈,對圖中的每一個點都計算出它是class 1的機率,這個機率預測用顏色來表示,如果某點在紅色區域,表示它是水系寶可夢的機率比較大;如果該點在其他顏色的區域,表示它是一般系寶可夢的機率較大。

因為我們做的是分類問題,因此令機率> 0.5的點為class1 ,機率<0.5的點為class 2 ,也就是右上⻆的圖中的紅色和藍色兩塊區域
再把testting data上得到的結果視化出來,即右下⻆的圖,發現分的不是太好,正確率才是47%

我們之前用的只是Defense和SP Defense這兩個參數,在二維空間上得到的效果不太好,但實際上一開始就提到了寶可夢總共是有6個features的,也許在二維空間上它們是重疊在一起的,但是在六維空間上看它們也許會分得很好,每一個寶可夢都是六維空間中的一個點,於是我們的μ是個6-dim的 vector, 則是Σ個6*6的matrix,發現得到的準確率也才64%

這個分類器表現得很糟糕,是否有辦法將它改進的更好?


Modifying Model

之前使用的Model是不常見的,你不會看到每一個gaussian都有自己的mean 和variance 。比較常見的做法是不同的class 可以使用同一個 covariance matrix

variance 和輸入的 feature size 的平方是成正比的。
所以當feature 的數量很大時,Σ 大小的增長是可以非常快的

在這種情況下,若是給不同的covariance matrix , 會導致model的參數太多;參數多會導致 model 的 variance 過大,因而出現 overfitting ,因此對不同的class 使用同一個 covariance matrix,可以有效減少參數

共用同一個covariance matrix,要怎麼選呢 ? 
Σ 可以直接 使用原本 Σ¹ 和 Σ²的加權

可以看到使用同一個covariance matrix 之後,我們預測的boundary 是一條直線;這樣的model我們也可以稱之為linear model 。

考慮所有的feature,並共用相同的covariance matrix ,原本54%正確率提高為73% ,顯然是有分對東西。但是為什麼做到這樣子,我們很難分析,因為這是高維空間中發生的事情,我們很難知道boundary到底是怎麼切的,這就是machine learing 他fancy的地方,人沒有辦法知道怎麼做,但是machine 可以幫我們做出來。


Three steps of classification

現在來回顧一下classification的三個步驟,與machine learning 是一樣的

  1. define a function set (model) 
    這些req​​uired probability P(C) 和probability distribution P(x|C)就是model的參數,選擇不同的Probability distribution(比如不同的分佈函數,或者是不同參數的Gaussian distribution),就會得到不同的function,把這些不同參數的Gaussian distribution集合起來,就是一個model,如果不適用高斯函數而選擇其他分佈函數,又是一個新的model了
    當這個posterior Probability P(C|x)>0.5 的話,就 output class 1,反之就為 class 2
  2. goodness of function
    對於Gaussian distribution這個model來說,我們要評價的是決定這個高斯函數形狀的mean和variance 這兩個參數的好壞,而maximum likelihood L(μ,Σ)的輸出值,就評價了這組參數的好壞
  3. pick the best function
    找到的那個最好的function,就是使L(μ,Σ)值最大的那组參數,實際上就是所有樣本的mean和variance

找到一個 probability distribution 他可以最大化產生data 的 likelihood

2020-04-30 1 comment
0 FacebookTwitterPinterestEmail
機器學習

機器學習自學筆記04: Gradient Descent

by wenwu 2020-04-20

機器學習自學筆記04: Gradient Descent

今日的課程來自於: https://youtu.be/yKKNr-QKz2Q
參考筆記: https://github.com/Sakura-gh/ML-notes/blob/master/ML-notes-pdf/5_Gradient%20Descent.pdf

Tip 1 : Tuning your learning rates

gradient descent 過程中,影響结果的一個很關鍵的因素就是 learning rate的大小

  • 如果learning rate剛剛好,就可以像下圖中紅色線段一樣順利地到達到loss的最小值
  • 如果learning rate太小的话,像下圖中的藍色線段,雖然最後能夠走到local minimal的地方,但是它可能會走得非常慢,以至於你無法接受
  • 如果learning rate太大,像下圖中的綠色線段,它的步伐太快了,它永遠没有辦法走到特别低的地方,可能永遠在這個“山谷”的口上震盪而無法走下去
  • 如果learning rate非常大,就會像下圖中的黃色線段,一瞬間就飛出去了,结果會造成update参數以后,loss反而會越来越大(這一點在上次的demo中有體會到,當lr過大的時候,每次更新loss反而會變大)

當參數超過3個時,可以將loss function 隨著每個參數的變化視化出來。
可以將每次update 次數作為唯一的一個參數,將Loss 隨著update的增加而變化的趨勢給視化出來

把不同的 learning rate 下,loss每次 update 的變化線畫出來,這樣就可以提醒我們該如何調整learning rate 的大小,直到出現穩定的曲線。


Adaptive Learning rates

顯然每次都手動調整learning rate 很麻煩,因此我們需要有一些自動調整learning rate的方法 
最基本、最簡單的大原則是: learning rate 通常是隨著參數的update 越來越小的

因為在起始點的時候,通常是離最低點是比較遠的,這時候步伐就要跨大一點;而經過幾次更新以後,會比較靠近目標,這時候就應該減小learning rate ,讓它能夠收斂在最低點的地方

舉例:假設到了第t次更新,此時 formula 01
這種方法使所有參數以同樣的方式同樣的learning rate 進行更新,而最好的狀況是每個參數都給他不同的learning rate去更新


Adagrad ( adaptive的其中一種方法)

Divide the learning rate of each parameter by the root mean square of its previous derivatives ( 每個參數的learning rate 都把他除上,之前算出來的微分值得 root mean square)

Adagrad就是將不同參數的learning rate分開考慮的一種算法(adagrad算法update到後面速度會越來越慢,當然這只是adaptive算法中最簡單的一種)

  • 每個參數都分開討論
  • w是function 的某個參數
  • t 代表為第t次的update
  • g^t 為Loss對w偏微分的值
  • σ^t 過去所有微分值得root mean square

Adagrad 他的參數update 其實整體而言是越來越慢的(因為她有加上time depend)


Adagrad 的 contradiction 解釋

Adagrad 的表達式裡面有一件很矛盾的事情:

我們在做gradient descent 的時候,希望的是當梯度值及微分值 g^t 越大的時候(此時斜率越大,還沒有接近最低點)更新的步伐要更大一些,但是Adagrad 的表達式中,分母表示梯度越大步伐越大,分子卻表示梯度越大步伐越小,兩者似乎相互矛盾。

在一些paper 是這樣解釋的: Adagrad 要考慮的是,這個gradient 的反差有多大,假設t=4時,g⁴ 與前面的gradient 反差特別大,那麼g^t 與 下面那像的反差就會比較大,他們的商會將反差的效果體現出來。

造成反差效果,就是gradient 。
gradient 越大,離最低點越遠。在多個參數的情況下是不一定成立的。

做 gradient descent 時,參數update取決於兩件事: 
1. Learning rate 2. Gradient


Tip 2 : Stochastic Gradient Descent

隨機梯度下降的方法可以讓訓練更快速(看一個example 就update 一個參數)。
只考慮一個example 對這個example 的 y 的估計值再減掉他正確答案,再平方,不summation 所有的example 。
Loss function 只考慮一個example。

Gradient Descent vs Stochastic Gradient Descent

  • 傳統的gradient descent 的思路是看完所有的樣本點之後再設立loss function ,然後去update 參數 。
  • stochastic gradient descent 的作法是,看到一個樣本點就update一次,因此他的Loss function 不適所有樣本點的error平方和,而是這個隨機樣本點的error平方。

Stochastic Gradient Descent 與傳統的Gradient Descent 的效果對比如下:

Tip 3 : Feature Scaling (特徵縮放)

特徵縮放,當多個特徵的分布範圍很不一樣時,最好將這些不同的feature的範圍縮放成一樣

可以看到上圖的公式,假設X1 的值都很小,但是X2的時都很大。此時去化Loss 的error surface ,如果對w1和w2 都做一個同樣的變動Δw ,那麼w1的變化對y的影響是比較小的,而w2的變化對y的影響是比較大。

左邊的error surface表示,w1對y的影響比較小,所以w1對loss是有比較小的偏微分的,因此在w1的方向上圖像是比較平滑的; w2對y的影響比較大,所以w2對loss的影響比較大,因此在w2的方向上圖像是比較sharp的

如果x1和x2的值,它們的比例是接近的,那麼w1和w2對loss就會有差不多的影響力,loss的圖像接近於圓形,那由此對gradient descent有什麼好處呢?

對gradient decent的幫助

之前我們做的demo已經表明了,對於這種長橢圓形的錯誤表面,如果不使用Adagrad之類的方法,是很難搞定它的,因為在像w1和w2這樣不同的參數方向上,會需要不同的learning rate ,用相同的lr很難達到最低點。

如果有scale的話,loss在參數w1,w2平面上的投影就是一個正圓形,更新參數會比較容易

而且gradient descent的每次更新並不都是向著最低點走的,每次update的方向是順著等高線的方向(梯度 gradient 下降的方向),而不是徑直走向最低點;但是當經過對input的scale使損耗的投影是一個正圓的話,不管在這個區域的哪一個點,它都會向著圓心走。因此功能縮放對參數更新的效率是有幫助的。

如何做feature scaling

假設有R 個example (上標 i 表示第 i 個樣本點) , x¹ ,x² , x³….. x^r ….. x ^R ,每一筆example 它裡面都有一組feature (下標 j 表示該樣本點的第j個特徵)
對每一個demension i ,都去算出他的平均值以及標準差
對第r個 example 的第 i 個 component ,減掉均值,除以標準差

事實上就是將每一個參數都歸一化成標準常態分布。


Gradient descent 的理論基礎

Taylor Series :
Let h(x) be any function infinitely differentiable around x=x0

從泰勒展開式推導出gradient descent

對於loss 圖像上的某一個點 (a,b) ,如果我們想要找這個點附近loss最小的點,就可以用泰勒展開式思考

假設用一個 red circle 設定點的範圍,這個圓足夠小以滿足泰勒展開的精度,那麼此時我們的loss function 就可以化簡為 :

觀察圖形可知,當向量(θ1-a ,θ2-b) 與向量(u,v)反向 ,且剛好達到red circle 的邊緣時 ( 用 η 去控制向量的長度) ,L(θ) 最小

這就是gradient descent在數學上的推導,注意它的重要前提是,給定的那個紅色圈圈的範圍要足夠小,這樣泰勒展開給我們的近似才會更精確,而η的值是與圓的半徑成正比的,因此理論上learning rate要無窮小才能夠保證每次gradient descent在update參數之後的loss會越來越小,於是當learning
rate沒有設置好,泰勒近似不成立,就有可能使gradient descent過程中的loss沒有越來越小

當然泰勒展開可以使用二階、三階乃至更高階的展開,但這樣會使得運算量大大增加,反而降低了運行效率


Gradient descent 的限制

之前已經討論過,gradient descent有一個問題是它會停在local minima的地方就停止update了
事實上還有一個問題是,微分值是0的地方並不是只有local minima,settle point的微分值也是0
以上都是理論上的探討,到了實踐的時候,其實當gradient的值接近於0的時候,我們就已經把它停下
來了,但是微分值很小,不見得就是很接近local minima,也有可能像下圖一樣在一個高原的地方

總和以上,gradient descent的限制是,它在gradient即微分值接近於0的地方就會停下來,而這個地方不一定是global minima,它可能是local minima,可能是saddle point鞍點,甚至可能是一個loss很高的plateau平緩高原

2020-04-20 0 comment
0 FacebookTwitterPinterestEmail
機器學習

機器學習自學筆記03: Where does the error come from? 認識error 的來源,並且知道如何調整model

by wenwu 2020-03-31

機器學習自學筆記03: Where does the error come from? 認識error 的來源,並且知道如何調整model

今日的課程來自於: https://youtu.be/D_S6y0Jm6dQ

當我們在做機器學習時,使用不同的function set(model) 會得到不同的error,而且越複雜的model不一定在testing會有比較低的error

今天要探討這些error 來自什麼地方,並且如何判斷是哪一種error,並且知道error的來源,就能夠挑選適當的方法來improve model

兩個 Error 的主要來源 : bias & variance


Estimator

理論上,在預測寶可夢CP值中,會有一個最佳的function: f̂(基本上就是寶可夢公司設定的函數)而我們的目標就是從training data 中訓練資料,並且找到最佳的函數 f* (希望他可以很靠近 f̂)

所以f* 就是 f̂的估計量 ( f* is an estimator of f̂ ) 
我們在求f*當然會希望越接近f̂越好,而兩者的差距就是error 
而這error 因兩者導致 1. bias 2.variance

bias and variance of estimator

假設今天我們有一組data X ,data X 的 平均數是: μ,變異數是: σ² 
(E(x)=μ , Var(x)=σ²)

要如何估算μ & σ²
我們生一組 sample 有 N 筆 data ,m為這組sample的平均,但是他不等於μ,但是如果取很多個m,並且取他的期望值就等於μ 。因為我們用m來估計μ ,且m這個估計值是不偏的 (E(m)= μ) 。

在計算而 variance 是 bias 的 ( Var(m)=σ²/N ) ,並且會因為sample size 的大小決定m的變異數。如果今天N比較少,m就會比較分散 ; 如果今天的N比較多,m 就會比較集中。

而估算變異數,先用前面的辦法估算m, 在計算(x^n-m)²的平均值(=S²),但是E(S²)≠σ² ,因為他是biased。 如果N越大的話,σ² 跟 s² 估測之間的差距就會變小。


bias vs variance:

假設我們的靶心是 f̂ ,就是我們目標要找到的函數。
而f*是我們求出來的解;f bar 是所有解的期望值(E(f*)=f bar)。

從右下角的圖可以看到,f̂和 f bar 的距離是bias ,f*和 f bar 的距離是variance。


Parallel Universes

假設在不同的宇宙中,我都去抓十隻寶可夢,抓到的都是不一樣的寶可夢
假設我們用同樣的model ,但是你給他的data 不一樣,那每個function 的f* 就是不一樣。

我們將100個不同宇宙的 f* 都找出來,使用不同的model 來比較

model 較簡單,這一百個model 印出來也會比較集中,也就是variance 較小
model 較複雜,可以發現model印出來已經散開了,也就是variance 比較大

比較簡單的model,他受到不同data 的影像是比較小的
當你給的這個model他的複雜度越來越高的時候,它的variance就會越來越大


Bias

如果是一個大的bias ,我們將所有的 f*平均起來,得到的 f bar 與 f̂ 是有距離的
如果是一個小的bias,將所有的f*平均起來,它的平均值與靶心是接近的

怎麼量bias ?
黑色的曲線: 真實的function f̂
紅色是曲線: 5000次實驗的f* 
藍色是曲線: 5000次實驗f* 的平均(f bar)

黑色線與紅色線之間就是bias 。

可以看到下面的圖比較,左邊是一次式(較簡單的函數),右邊是五次式(複雜的函數)。
如果是簡單的model,它就有比較大的bias 
如果是一個複雜的model,雖然每次找出來的f* 都不一樣,它就有比較小的bias

Why ? 怎麼解釋呢 ? 

如果是簡單的model,它的space 是比較小的。在這個小的範圍裡,它可能根本不包含你的target,所以怎麼樣sample 平均起來都與target 有一段距離。
如果是複雜的model,它的space是比較大的,它比較有可能包含我們的target。但是可能因為給的training data 不夠,所以每次的f*都不一樣,但是平均起來得到的 f bar會在 target 附近,雖然他的variance比較大,但是平均起來的bias會比較小。


Underfitting vs Overfitting

當error 來自 bias 很大,則稱為Underfitting
當error 來自 variance 很大,則稱為Overfitting


怎麼判斷發生Underfitting or Overfitting

Underfitting

如果你的model 沒有辦法fit 你的training 的example ,那麼代表bias 是大的。
假設如果只有幾筆data,而model連這幾筆都沒有fit到,代表bias是大的,這就是underfitting。

Overfitting

如果在training data上得到小的error,但是在testing data 上卻得到一個大的error,代表你的model 的variance比較大,也就是overfitting。

Bias 大 的解決方法

重新設計model , 因為bias 大,表示現在使用的model根本沒有包含你的target。(可以加入更多的feature)

Variance 大的解決方法

  1. More data
    增加收集的data,是有效控制variance的方法,並且不會增加bias。 
    如果不能收到其他資料,可以generate 假的data。
  2. Regularization
    在loss function裡面新增一個term(或增加weight),希望我們的曲線越平滑越好。但是可能增加bias,因為我們調整了function space ,變成只包含比較平滑的曲線,就無法包含f̂,就會使bias 增加。
    所以做regularization的時候,要調整regularization的weight,在variance與bias 之間取得平衡。

Model Selection

在挑選Model時,會在bias 和 variance 之間作一些取捨,我們當然希望bias 小,variance 也小,這樣會使testing data 的error 最小

而在挑選model時,我們當然會挑選testing data 的error 最小的那一項。但是真實的 (private) testing error 通常會比 (problic) testing error 大。testing set 的 error 無法反映到真實的狀況中。

Cross validation

有一個方法可以解決,就是cross validation,我們將training data 分成兩個部分,training set & validation set 。 同樣先用training data 找出最好的function f*,再用validation set 的結果來選擇model。這樣public testing error 就能真實反映在 private error 。

如果覺得資料太少,可以選好模型之後,就將所有的training data 使用在training data ,之後public testing 的 error 一樣能真實反映在 private error 。
通常我們看到testing 後的結果都會想要回去動手腳,但是不建議。因為這樣就會將public testing set 的 bias 考慮進去了,所以會導致在public testing set 上所看到的 error 無法反映在真實狀況中。

N-fold Cross validation

如果在分training set 時分的不好,validation set 出現bias 時怎麼辦? 這時候可以用 N-fold cross validation。

基本上N-fold cross validation,就是將training data 分成 n 組,再輪流當validation set 。最後將每一個model 計算 average error ,就能夠選擇model ,並將training data 合併,使用選好的model 從新training ,在去test 在你的testing set 中。

那原則上就是,如果你少去在意你在 public (testing)set得到的error,就是少去根據它調整你的 model 的話,你往往會在 private set上面得到的差距和 testing set 是比較小的。

2020-03-31 0 comment
0 FacebookTwitterPinterestEmail
機器學習

機器學習自學筆記02: Regression: Case Study for ML

by wenwu 2020-03-27
今日的課程來自於: https://youtu.be/CXgbekl66jc
參考筆記:https://github.com/Sakura-gh/ML-notes/blob/master/1_Introduction.md

這堂課老師用現有數據預測寶可夢的進化後CP值

Scenario: 根據已有的 data 來確定 scenario,我們的 data是 labeled,使用Supervised Learning

Task: 根據我們想要 function 的輸出類型決定 task ,我們預期得到是寶可夢進化後的 cp值,是一個 scalar ,因此使用的是 Regression

Model: 模型的選擇很多,這邊使用 Linear model


回顧一下machine learning 的三個步驟

  1. define a set of function
    定義一個function set (A set of function=Model)
  2. goodness of function
    讓machine可以衡量這個function 好不好
  3. pick the best function
    有一個好的演算法可以挑出最好的function

machine learning 的三個步驟

Step1: Model (function set )

如何挑選一個function 的模型呢? 基本上沒有明確的思路,只能憑經驗嘗試,而這邊使用linear model 。

Linear Model 線性模型

y 代表進化後的cp 值,Xcp 為進化前的cp值,w和b代表未知的參數。
y=b+w * Xcp 這個抽象的是式子就叫做model,是以上這些具體化的function 的集合,即function set 。
實際上這是一種 Linear Model ,但只考慮了寶可夢進化前的cp值,因而我們可以將其擴展為:

Xi: an attribute of input X (Xi is also called feature ,即特徵值)
Wi: weight of xi 
b: bias


Step2: Goodness of Function

參數說明:
x^i: 用上標表示一個完整的object的編號,i表示第i隻可夢(下標表示該object中的component)
y^i: 用 y 表示一個實際觀察到object輸出,上標 i 表示第 i 個 object
(因為打字的關係無法表示清楚,可以參考筆記)

Loss function 損失函數

Loss function 是 一個評估函數,就是一個function 的function,Loss function 實際上就是在衡量一組參數的好壞。

前面的model是自主挑選的,這裡的loss function 也是,最常用的方法就是採用方差和的形式來衡量model的好壞。

input : a function 
output: how bad/good it is

如果 L(f) 越大,說明該function表現得越不好;L(f)越小,說明該function 表現得越好。


Loss function 可視化

下圖是loss function 的可視化,圖中每一個點都代表一組(w,b),也就是對應著一個function;而該點的顏色對應著loss function的結果 L(w,b),顏色越紅表示loss function的值越大,表現的效果越不好 ; 越藍表示loss function 的值越大,表現的效果越好。


Step3: Pick the Best Function

我们已經確定了loss function,他可以衡量我們的model裡面每一個function的好壞,接下来我们要做的事情就是,從這個function set裡面,挑選一個最好的function

將 formulation/equation 寫下的樣子如下:

也就是那個使L(f)=L(w,b)=Loss 最小的 f 或(w,b),就是我們要找的f * 或(w*,b*)

利用線性代數的知識,可以解得這個 closed-form solution,但這裡採用的是一種更為普遍的方法 — — gradient descent(梯度下降法)


Gradient Descent 梯度下降

上面的例子比較簡單,用線性代數的方法可以解;而gradient descent 的方法應用更廣,只要 L(f) 是可微分的,gradient descent 都可以拿來處理這個 f ,找到表現最好的parameters 。

  • 單個參數的問題

假設現在的Loss function 為 L(w) 並且是可微的,我們的目標就是找到能讓 L(w) 最小的 w* ,實際上就是尋找切線L斜率為0的 global minima 最小值發生的點(需要小心local minima 斜率也是0)

  1. 首先隨機選取初始值 w0
  2. 計算 L 在 w=w0 的微分值 dL/dw,就是該點的切線斜率
  3. 如果微分的值為正,就往左找;如果微分的值為負,就往右邊找解。
    w的變化量step size 的大小取決於兩件事
    1. 微分值有多大,如果微分值(斜率)越大表示現在在一個月陡峭的地方,那要移動的距離就越大,反之越小
    2. learning rate(學習率) : η 。 每次踏出的step size 不只取決於現在的斜率,還取決於這個事前就設定好的 η (learning rate)。如果η (learning rate) 比較大,那每踏出一步的時候,參數w更新的幅度就大。
    如果η (learning rate) 設置的大,機器學習的速度也會比較快,但是如果太大,可能就會跳過最合適的global minima 的點。
  4. 每次參數更新的大小是 η * dL/dw ,每次更新的式子如下:

當我們找到微分為0的時候,就會停止了,所以通過gredient descent 找出來的solution 其實並不是最佳解 global minima

幸運的是, 在Linear regression上,是沒有local minima的,因此可以使用gradient descent 。

  • 兩個參數的問題

兩個參數的gradient descent 和一個參數的gradient descent 的步驟一樣。

  1. 首先設定兩個參數的初始值 w0 & b0
  2. 然後分別計算 ( w0,b0 ) 這個點上 L( w0,b0) 對 w 和b 的偏微分
    ∂L/∂w & ∂L/∂b
  3. 更新參數,當迭代跳出時,( wi,bi ) 應為極小值點

實際上,L 的gradient 就是微積分中的那個梯度的概念,即

注意 : 兩個的η (learning rate) 必須保持一致,這樣每次更新座標的step size 是等比例縮放的,保證座標前進的方向始終和梯度下降的方向一致,否則座標前進的方向會發生偏移。


gradient descent 的缺點 :

gradient descent 有一個令人擔心的地方,就是gradient descent 找到 微分等於零的地方,只是local minima ,並不是global minima。
如果今天我們的 Loss function 是坑坑巴巴的,那麼就很難找到global minima,而我們初始值得設立,也會影響到是否能夠找到global minima。

但是在Linear regression 裡,loss function 基本上是convex 的,他是一個凸函數。所以不管初始值在哪裡,根據gradient descent都能夠找到同一組參數。


Overfitting

現在具體對L作w&b的偏微分

根據gradient descent ,我們得到 b=-188.4, w=2.7

我們需要有一套評估系統來評價我們得到的預測值與實際值得誤差,將training data的誤差相加=31.9 , testing data 的誤差相加=35.0

training data 的誤差比 testing data 的誤差較小,也符合常識。

上圖可以發現,有些點不完全適用於我們找得function ,我們該如何重新設計model ,是否有更好的function呢?

以下嘗試不同微度的 function : 分別有二次式到五次式(圖片只放了三次式到五次式)

在gradient descent可以找到best function的前提下(多次式为Non-linear model,存在local optimal局部最佳解,gradient descent不一定能找到global minima),function所包含的項的次數越高,越複雜,error在training data上的表現就會越來越小;但是,我们關心的不是model在 training data上的error 表現,而是model在testing data上的error表現。

可以發現在二次式&三次式 training data 和testing data 的error 越來越小,但是到了四次式&五次式時,training data的error 越來越小 ,但是testing data 的error 卻爆掉了,通常被稱為overfitting。

因此Model 不是越複雜越好,而是選擇一個最合適的model,在本例中,三次式是最適合的model。


物種Xs的影響

之前我們的model只考量了寶可夢進化前的cp值。顯然這是不對的,除了cp值外,還受到物種Xs的影響,因此我們重新設計model

並且將model 寫成一式。


HP值Xhp\height Xh\ weight Xw的影響

考量所有可能有影響的參數,設計出這個最複雜的model

算出來的training error=1.9,但是 testing data=102.3 ! 
這麼複雜的model 很大的機率會發生overfitting


Regularization 解決 overfitting

regularization可以使曲線變得更加smooth,training data上的error變大,但是 testing data上的error變小。

其實regularization就是重新定義step2的時候,重新redesign loss function

原來的loss function 只考慮的prediction的error;而regularization則是在原來的loss function加上了一項λ Σ(wi)² , 這就是法這個model裡面所有的wi 的平方和用 λ 加權。(原先的Loss function是考慮 error,而λ Σ(wi)² 則是考慮smooth )

我們當然希望Loss function可以越小越好。同時,我們也期待參數wi越小 甚至接近於0,就能使function較平滑。如果我們有一個較平滑的function,那當今天我們輸入(input)有變化時,output的變化就不會太大。
也就是說,當wi 越接近0時,輸出對輸入就不會這麼敏感。

那位甚麼剛剛沒有提到bias 這項呢? bias 的大小對function的平滑程度是沒有關係的,因為調整bias只會使function上下移動而已,所以並沒有加入bias 。


如何選擇 λ 值,以取得最好的值

λ值越大,在loss function 中 考慮smooth那一項(λ Σ(wi)²) 的影響力就越大,而我們的function 就越平滑。
從下圖可知,當λ 越大時,training data 上得到的error 就會越大, 因為當λ 越大的時候,我們就越傾向於考慮w的值,而越少考慮error的大小。
但是有趣的是,雖然在training data 上得到的error越大,但是testing data 的error 可能會比較小。

下圖中,当λ从0到100變大的时候,training error不段變大,testing error反而不段變小;但是當λ太大的时候(>100),在testing data上的error就會越來越大

我們喜歡比叫平滑的function,因為它對noise不那麼sensitive;但是我們又不喜歡太平滑的function,因為它就失去了對data擬合的能力;而function的平滑程度,就需要通過调整λ來決定。就像下圖中,當λ=100时,在testing data上的error最小,因此我们選擇 λ=100 。

2020-03-27 0 comment
0 FacebookTwitterPinterestEmail
機器學習

機器學習的情境 Scenario

by wenwu 2020-03-20

機器學習的情境 Scenario
李宏毅老師開放式課程 機器學習01

最近開始聽了李宏毅老師的線上課程 機器學習,為了督促自己能夠好好的學習,開始認真寫筆記。
所以這份筆記並沒有適合的族群,只是督促自己可以好好學習吸收到東西,不要看完線上課程之後,就全部忘光光(笑)。
如果不嫌棄的話,歡迎觀看,如果有任何寫錯的地方,也歡迎指教。
今日的課程來自於: https://youtu.be/CXgbekl66jc
參考筆記:https://github.com/Sakura-gh/ML-notes/blob/master/1_Introduction.md

人工智慧 vs 機器學習

人工智慧 Artificial Intelligence 早在1950年代就有了。人工智慧就是希望電腦和人類一樣聰明。但是在當時並沒有辦法做到。1980 年代以後,有了機器學習的方法。就是讓機器有學習的能力。

人工智慧是我們想要達到的目標
機器學習是想要達成目標的手段
其中,深度學習是機器學習的一種方法。

Hand-crafted rules vs Machine Learning

生物的本能: 假設河狸天生會築水壩。若使用程式語言來描述的話就是 :

if  ”聽到流水聲”  then  "河狸就會開始築堤防" until "聽不到水流聲"

而機器的本能和生物的本能很像,假設今天有一個chat-bot 不用learning or ML ,只能設定規則。

if  "聽到turn off"  then  "關掉音樂"

如果你對機器說: ”Please turn off the music” 或是 ”Can you turn off the music, please? ” 機器就會自動關掉音樂。
但是聽到” Please don’t turn off the music” ,他還是會把音樂關掉。

hand-crafted rules 的弱點:

  • 沒有辦法考慮到所有的可能性,非常的僵化。
  • 無法超越創造者

我們可以用血汗的方式,寫出數以萬計的規則,但只是讓機器看起來"好像"很聰明,但是只要手上有data ,就能夠發展機器學習。(AI不是成千成萬的 if)

Machine Learning = Looking for a Function from Data 
根據我們提供給機器的資料,他能夠尋找出我們要的function

  • speech Recognition
  • Image Recognition
  • Playing Go
  • Dialogue System

機器學習的三個步驟

  1. define a set of function
    訂出一個function set (A set of function=Model)
  2. goodness of function
    讓machine可以衡量這個function 好不好
    訓練資料(讓機器知道好的資料的輸入和輸出長怎麼樣?)
  3. pick the best function
    有一個好的演算法可以挑出最好的function

Learning Map

下圖中,同樣的顏色指的是同一個類型的事情

  • Scenario : 藍色方塊指的是scenario,即學習的情境。通常學習的情境是我們沒有辦法控制的,比如做reinforcement Learning是因為我們沒有data、沒有辦法來做supervised Learning的情況下才去做的。如果有data,supervised Learning當然比reinforcement Learning要好;因此手上有什麼樣的data,就決定你使用什麼樣的scenario。
  • Task : 紅色方塊指的是task,即要解決的問題。你要解的問題,隨著你要找的function的output的不同,有輸出scalar的regression、有輸出options的classification、有輸出structured object的structured Learning…
  • Method : 綠色的方塊指的是model,即用來解決問題的模型(function set)。在這些task裡面有不同的model,也就是說,同樣的task,我們可以用不同的方法來解它,比如linear model、Non-linear model(deep Learning、SVM、decision tree、K-NN…)

以下會在針對這三個部分解釋


機器學習的情境 Scenario

  1. Supervised Learning (監督式學習)
    通常最常用到的方法就是Supervised Learning (監督式學習),但是監督式學習需要大量的資料,使用training data 來找到一個合適的function,讓我們知道輸出和輸入的關係是什麼。
    通常使用監督式學習時,我們會告訴機器所有的正確答案,所以需要大量的標記(label),而缺點是需要大量的人工。
  2. Semi-supervised Learning (半監督式學習)
    當我們手上只有少量的已經標記(labeled)的data,同時又有大量的未標機(unlabeled)data,而這些資料僅限於已標記的種類之內(如要區別貓跟狗的function,未標記的照片僅限於貓和狗的照片)。
    在Semi-supervised Learning (半監督式學習)的技術中,沒有標記的data,對機器學習也是有幫助的。
  3. Transfer Learning(遷移學習)
    與Semi-supervised Learning (半監督式學習)相同,但是我們的未標記(labeled)data不限於已標記的種類。
    Transfer Learning(遷移學習)要解決的問題是,與一堆不相關的data可以帶來甚麼樣的幫助。
  4. Unsupervised Learning(無監督式學習)
    Unsupervised Learning(無監督式學習)顧名思義就是在不提供任何label的情況下,希望機器學習能夠無師自通。也就是說我們給機器大量的輸入,卻不提供輸出,看看在這種情況下機器能夠學到什麼。
  5. Reinforcement Learning(增強式學習)
    在監督式學習中,我們會告訴機器所有的正確答案,並且手把手的教機器也就是Learning from teacher。但是在Reinforcement Learning(增強式學習)中,我們沒有告訴機器正確的答案是什麼,機器只會得到最終的結果是好或不好,這較符合人類真正學習的情境,有別於監督式學習,增強式學習是Learning from critics。
    舉例 : 監督式學習會手把手教導,如果有人說”Hello”,就要回”Hi”,聽到”Bye bye”就回答 “Good bye”。
    而增強式學習會讓機器直接和客人對話,如果客人生氣把電話掛掉的話,機器只能知道這樣做錯了,他並不知道自己錯在哪裡。利用評價來學習。

機器要解決的問題 Task

  1. Regression(迴歸)
    regression 輸出是一個連續數值(scalar)。比如我們想要預測PM2.5,我們現有的資料為前一天的PM2.5,而輸出的則是隔日的PM2.5的數值。
  2. Classification(分類)
    Classification 有分成兩類,一種是Binary Classification(二元分類),另一種Multi-class classification(多元分類)。
  3. Structured Learning(結構化學習)
    Structured Learning(結構化學習)不同於前面兩者,指輸出的是有結構性的東西。像是語音辨識,對機器來說輸入的是一段聲音信號,而輸出的是一個句子。

機器用來解決問題的模型 Model

機器學習的第一個步驟,就是挑選一個function set ,也就是Model 。而在不同的情境&要解決的問題下,可以使用相同的Model。Model又分成很多種 :

  • Linear Model(線性模型)
  • Non-linear Model(非線性模型)
    (deep learning\SVM model\decision tree\K-NN)

2020-03-20 0 comment
0 FacebookTwitterPinterestEmail
Load More Posts

近期文章

  • [SAS] Macro Language 2: 內建macro,使用 SQL/DATA step 建立Macro variable
  • [SAS] Macro Language 基礎內容
  • ccClub 讀書會推薦,免費學python
  • [閱讀心得 #21]你願意,人生就會值得
  • 理想生活,該長怎麼樣子?

近期留言

  • 「S kevin」於〈[SAS] Macro Language 2: 內建macro,使用 SQL/DATA step 建立Macro variable〉發佈留言
  • 「S kevin」於〈[SAS] Macro Language 基礎內容〉發佈留言
  • 「peter」於〈多益330 → 多益785 多益成績棕色到藍色證書〉發佈留言
  • 「wenwu」於〈[SAS]存活分析(2) COX regression model〉發佈留言
  • 「joey53111」於〈Statistical Programmer在CRO工作一年的心得〉發佈留言

免費訂閱

不定期更新文章,點一下追蹤就能夠收到最新文章!

一起加入其他 20 位訂閱者的行列

Statistics

  • 20,135
  • 729,881
  • 74
R 線上課程參考

@2019 - All Right Reserved. Designed and Developed by PenciDesign

Wenwu's blog
  • 文章總列表
  • 統計分析
    • R SAS All
      R

      [R]散佈圖與相…

      2019-12-31

      R

      [R]Logis…

      2019-10-31

      R

      [SAS][R]…

      2019-09-27

      R

      [R]Chi-s…

      2019-09-19

      SAS

      [SAS] Ma…

      2026-09-08

      SAS

      [SAS] Ma…

      2026-01-21

      SAS

      [SAS]傾向分…

      2020-10-28

      SAS

      [SAS]Log…

      2020-06-10

      統計分析

      [SAS] Ma…

      2026-09-08

      統計分析

      [SAS] Ma…

      2026-01-21

      統計分析

      什麼是meta-…

      2024-11-05

      統計分析

      Test-ret…

      2024-06-07

  • SAS
    • SAS

      [SAS] Ma…

      2026-09-08

      SAS

      [SAS] Ma…

      2026-01-21

      SAS

      [SAS]傾向分…

      2020-10-28

      SAS

      [SAS]Log…

      2020-06-10

      SAS

      [SAS]迴歸分…

      2020-02-28

  • R
    • R

      [R]散佈圖與相…

      2019-12-31

      R

      [R]Logis…

      2019-10-31

      R

      [SAS][R]…

      2019-09-27

      R

      [R]Chi-s…

      2019-09-19

      R

      [SAS][R]…

      2019-07-08

  • 機器學習
    • 機器學習

      Unsuperv…

      2021-07-22

      機器學習

      Unsuperv…

      2021-07-12

      機器學習

      Unsuperv…

      2021-05-20

      機器學習

      Unsuperv…

      2021-05-12

      機器學習

      Matrix F…

      2021-04-30

  • 閱讀筆記
    • 閱讀筆記

      [閱讀心得 #2…

      2025-02-05

      閱讀筆記

      [閱讀心得#20…

      2024-10-25

      閱讀筆記

      [閱讀心得#19…

      2024-08-16

      閱讀筆記

      [閱讀心得#18…

      2024-05-10

      閱讀筆記

      [閱讀心得#17…

      2022-01-22