• 文章總列表
  • 統計分析
    • 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
機器學習

Semi-supervised Learning (半監督式學習)

by wenwu 2021-03-03

Semi-supervised Learning (半監督式學習)

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

所謂的半監督式學習,就是我們有部分的資料是沒有label的,這也接近我們實務上操作的資料
通常遇到的情況,是沒有label的資料遠大於有label的資料。(我們從不缺data,缺的是有label的data,就像可以拍很多照片,但他們是沒有標籤的)

Semi-supervised Learning 可以分成兩種情況:

  • Transductive Learning: unlabeled data is the testing data 
    使用testing data 的 feature,但是不使用testing data的label
  • Inductive Learning: unlabeled data is not the testing data
    就是完全不考慮testing data

要選擇使用哪一種方法,取決於是否已經有testing set

Semi-supervised Learning 的使用unable data往往伴隨著假設,而假設的合理與否,決定了結果的好壞程度


Outline

  1. Semi-supervised Learning for Generative Model
  2. Low-density Separation Assumption
  3. Smoothness Assumption
  4. Better Representation

Semi-supervised Learning for Generative Model

在監督學習中,我們討論過機率生成模型了,所以可以算出class 1 & class 2 的分佈分別為何,再根據貝氏公式得到新的x 的類別。不過在半監督學習中,unlabeled data會影響最終的決定,劃分兩個class的decision boundary也會隨之變化,(會影響posterior probability,也會影響decision boundary)

因此,在計算上就會有些調整(x^u為unlabeled data)

  • 先初始化一組參數: θ = {P(C1),P(C2),u¹,u², ∑}
  • Step 1: 利用初始model計算每一筆unlabeled data x^u 屬於 class 1 的機率Pθ(C1|x^u)
  • Step 2: update model 
    因為考慮unlabeled data,分子還要加上所有unlabeled data屬於class 1 機率和
  • 平均數則要增加機率對於x^u求和在歸一化的結果即可
  • 剩下的參數同理,接下來就有一組新的參數θ’,於是就回到step 1 →step 2→step1
  • 理論上這個方法是可以收斂的,並且一開始的θ會影響收斂的結果,類似於gradient descent
  • 上述的step1 就是EM algorithm裡的E ,step2 為M

以上的推導基於的基本思想是,把未標記的數據看成是可以劃分的,一部分屬於C1,一部分屬於C2
也就是C1的先驗概率乘上C1這個class產生的概率+C2的先驗機率乘上C2這個類別產生的機率
實際上我們在利用極大似然函數更新參數的時候,就利用了該分段的結果:


Low-density separation Assumption

接下來介紹一種新的方法,它基於的假設是Low-density separation
通俗來講,就是這個世界是非黑即白的,在兩個class的交界處data的密度(density)是很低的,它們之間會有一道明顯的鴻溝,此時unlabeled data(下圖綠色的點)就是幫助你在原本正確的基礎上挑一條更好的boundary

Self Training

low-density separation最具代表性也最簡單的方法是self training

  • 先從labeled data去訓練一個model f*,訓練方式沒有限制
  • 然後用f*該去對unlabeled data打上label, ,也叫作pseudo label
  • 從unlabeled data中拿出一些data加到labeled data裡,至於data的選取需要你自己設計算法來挑選
  • 回頭再去訓練,循環即可

注:該方法對Regression是不適用的

實際上,該方法與之前提到的generative model還是挺像的,區別在於:

  • Self Training使用的是hard label:假設一筆data強制屬於某個class
  • Generative Model使用的是soft label:假設一筆data可以按照概率劃分,不同部分屬於不同class

可以看到,在neural network裡使用soft label是沒有用的,因為把原始的model裡的某個點丟回去重新訓練,得到的依舊是同一組參數,實際上low density separation就是通過強制分類來提升分類效果的方法

Entropy-based Regularization

該方法是low-density separation的進階版,你可能會覺得hard label這種直接強制性打標籤的方式有些太武斷了,而entropy-based regularization則做了相應的改進: y^u=f*_θ*(x^u),其中y^u是一個概率分布(distribution)

由於我們不知道unlabeled data 的label到底是什麼,但如果通過entropy-based regularization得到的分佈集中在某個class上的話,那這個model就是好的,而如果分佈是比較分散的,那這個model就是不好的,如下圖所示:

接下來的問題是,如何用數值的方法來evaluate distribution的集中(好壞)與否,要用到的方法叫entropy,一個distribution的entropy可以告訴你它的集中程度:

對上圖中的第1、2種情況,算出的E(y^u)=0,而第3種情況,算出的E(y^u)=ln(5),可見entropy越大,distribution就越分散,entropy越小,distribution就越集中
因此我們的目標是在labeled data上分類要正確,在unlabeled data上,output的entropy要越小越好,此時就要修改loss function

  • 對labeled data來說,它的output要跟正確的label越接近越好,用cross entropy表示如下:
  • 對unlabeled data來說,要使得該distribution(也就是output)的entropy越小越好:
  • 兩項綜合起來,可以用weight來加權,以決定哪個部分更為重要一些

可以發現該式長得很像regularization,這也就是entropy regularization的名稱由來

semi-supervised SVM

SVM要做的是,給你兩個class的data,去找一個boundary:

  • 要有最大的margin,讓這兩個class分的越開越好
  • 要有最小的分類錯誤

對unlabeled data窮舉所有可能的label,下圖中列舉了三種可能的情況;然後對每一種可能的結果都去算SVM,再找出可以讓margin最大,同時又minimize error的那種情況,下圖中是用黑色方框標註的情況

當然這麼做會存在一個問題,對於n筆unlabeled data,意味著即使在二元分類裡也有種可能的情況,數據量大的時候,幾乎難以窮舉完畢,上面給出的paper提出了一種approximate的方法,基本精神是:一開始你先得到一些label,然後每次改一筆unlabeled data的label,看看可不可以讓你的objective function變大,如果變大就去改變該label。


Smoothness Assumption

concepts

smoothness assumption的基本精神就是將兩個點可以在樣本高密度集中分布的區域有一條可連結的路徑,即connected by a high density path

精準的定義是:

  • x的分布是不均勻的(有些地方集中,有些又分散)
  • 如果x¹ 和 x² 在一個high density region 上很接近的話,那麼 ŷ¹ 和 ŷ² 就是相同的

假設下圖是data的分布,x¹, x², x³ 是其中的三筆data,如果單純的看x的相似度,顯然x²和 x³ 的距離比較近一些,但對於smoothness assumption 來說,x¹ 和 x² 是處於同一個區域的,他們之間有一條相連的路徑

digits detection

以手寫數字識別為例,對於最右側的2和3以及最左側的2,顯然最右側的2和3在pixel上相似度更高一些;但如果把所有連續變化的2都放進來,就會產生一種“不直接相連的相似”,根據Smoothness Assumption的理論,由於2之間有連續過渡的形態,因此第一個2和最後一個2是比較像的,而最右側2
和3之間由於沒有過渡的data,因此它們是比較不像的

人臉的過渡數據也同理

file classification

Smoothness Assumption在文件分類上是非常有用的

假設對天文學(astronomy)和旅行(travel)的文章進行分類,它們各自有專屬的詞彙,此時如果 unlabeled data與label data的詞彙是相同或重合(overlap)的,那麼就很容易分類;但在真實的情況下,unlabeled data和labeled data之間可能沒有任何重複的words,因為世界上的詞彙太多了,
sparse的分佈很難會使overlap發生

但如果unlabeled data足夠多,就會以一種相似傳遞的形式,建立起文檔之間相似的橋樑

Graph-based Approach

之前講的是比較直覺的做法,接下來引入Graph Structure來表達connected by a high density path這件事

我們把所有的data points都建成一個graph,有時候建立vertex之間的關係是比較容易的,比如網頁之間的鏈接關係、論文之間的引用關係;但有時候需要你自己去尋找vertex之間的關係

graph的好壞,對結果起著至關重要的影響,而如何build graph卻是一件heuristic的事情,需要憑著經驗和直覺來做

  • 首先定義兩個object 之間的相似度 s(x^i, x^j)
    如果是基於pixel的相似度,performance可能會不太好;建議使用autoencoder提取出來的feature來計算相似度,得到的performance會好一些
  • 算完相似度後,就可以建graph了,方式有很多種:
    k nearest neighbor:假設k=3,則每個point與相似度最接近的3個點相連
    e-neighborhood:每個point與相似度超過某個特定threshold e的點相連
  • 除此之外,還可以給Edge特定的weight,讓它與相似度s(x^i, x^j)成正比
    1. 建議用RBM function來確定相似度,這裡均為vector,計算它們的Euclidean Distance(歐幾里得距離),加上參數後再去exponential
    2. 至於加exponential,經驗上來說通常是可以幫助提升performance的,在這裡只有當x^i, x^j非常接近的時候,singularity才會大;只要距離稍微遠一點,singularity就會下降得很快,變得很小
    3. 使用exponential的RBM function可以做到只有非常近的兩個點才能相連,稍微遠一點就無法相連的效果,避免了下圖中跨區域相連的情況

graph-based approach的基本精神是,在graph上已經有一些labeled data,那麼跟它們相連的point,屬於同一類的概率就會上升,每一筆data都會去影響它的鄰居,而graph帶來的最重要的好處是,這個影響是會隨著edges傳遞出去的,即使有些點並沒有真的跟labeled data相連,也可以被傳遞到相應的屬性

比如下圖中,如果graph建的足夠好,那麼兩個被分別label為藍色和紅色的點就可以傳遞完兩張完整的圖;從中我們也可以看出,如果想要讓這種方法生效,收集到的data一定要足夠多,否則可能傳遞到一半,graph就斷掉了,information的傳遞就失效了

介紹完瞭如何定性使用graph,接下來介紹一下如何定量使用graph

定量的使用方式是定義label的smoothness,下圖中,edge上的數字是weight, x^i 表達data, y^i 表示data的label,計算smoothness的方式為:

我們期望smooth的值越小越好

當然上面的式子還可以化簡,如果把labeled data和unlabeled data的y組成一個(R+U)-dim vector,即 y=[… y^i … y^j]^T

於是smooth可以改寫為:

其中L為(R+U)×(R+U) matrix,成為Graph Laplacian, 定義為L=D-W

  • W:把data point兩兩之間weight的關係建成matrix,代表了x^i與x^j之間的weight值
  • D:把W的每一個row上的值加起來放在該行對應的diagonal上即可,比如5=2+3,3=2+1,…

對S=y^TLy 來說,y是label,是neural network的output,取決於neural network的parameters,因此要在原來僅針對labeled data的loss function中加上這一項,得到:

λS實際上也是一個 regularization term
訓練目標:

  • labeled data的cross entropy越小越好(neural network的output跟真正的label越接近越好)
  • smooth S越小越好(neural network的output,不管是labeled還是unlabeled,都要符合Smoothness Assumption的假設)

具體訓練的時候,不一定只局限於neural network的output要smooth,可以對中間任意一個hidden layer加上smooth的限制


Better Representation

Better Representation的精神是,去蕪存菁,化繁為簡

我們觀察到的世界是比較複雜的,而在它的背後其實是有一些比較簡單的東西,在操控著這個複雜的世界,所以只要你能夠看透這個世界的假象,直指它的核心的話,就可以讓training變得比較容易

舉一個例子,在神鵰俠侶中,楊過要在三招之內剪掉樊一翁的鬍子,雖然鬍子的變化是比較複雜的,但頭的變化是有限的,楊過看透了這一件事情就可以把鬍子剪掉。在這個例子中,樊一翁的鬍子就是original representation,而他的頭就是你要找的better representation

算法具體思路和內容到unsupervised learning的時候再介紹

2021-03-03 0 comment
0 FacebookTwitterPinterestEmail
閱讀筆記

[閱讀心得#3]為什麼我們這樣生活,那樣工作 The Power of Habit

by wenwu 2021-02-21

為什麼我們這樣生活,那樣工作 The Power of Habit

一開始看到這本書不是很清楚內容在講什麼?但是英文的書名就非常的清楚,這是一本說到習慣的書。剛好去年底的時候讀了原子習慣,書中有很多的內容與實行方法都與原子習慣一致,但我更喜歡這本書,書中不只提到我們個人該怎麼改變習慣,更提到習慣該如何應用到“成功組織”或是”社會習慣“。

並且這本書使用很多例子來幫助我們理解每一個建立習慣的方法,讀起來有點像一本我很喜歡的書「20世代,你的人生是不是卡住了 The Defining Decade」。我還懷疑是不是同個作者或是譯者,回去確認了一下。


個人的習慣

習慣的好處這裡就不提了,有兩點很重要。第一是「提示訊號」、第二是「獎賞」。比如:我們在收到手機訊息的時候接受到”提示“,而就自然的點開郵件,這個過程就給了我們”獎賞“。但是不是每件事情都這麼簡單,

  1. 找到簡單又醒目的提示訊息
  2. 清楚界定的獎酬內容
  3. 渴望

大量研究顯示,只有提示和獎酬尚不足以讓新習慣持之以恆,還必須讓大腦對獎酬有所期待 — 渴望腦內啡分泌或建立成就感

除了提示跟獎賞之外,我們也需要有渴望,一旦有了渴望,習慣迴路就會轉個不停。習慣會啟動神經的渴望反應。只要讓提示和獎賞有所交集或產生聯想,腦子就會淺意識形成渴望,啟動習慣迴路轉個不停。

就像是在台北車站地下街聞到咖啡麵包的香味,就忍不著跑去買一個咖啡麵包來吃(有沒有很有畫面)。

最後一點,這本書跟原子習慣最不一樣的,就是提到「相信」。許多人建立新習慣(像是戒酒、戒菸等等)之後,再次發生重大的事情舊習又回來的。

若要永久改變習慣,就得相信改變不是遙不可及。

研究人員發現『相信與否』才是戒酒成敗的主因。人一旦學會相信一件事,這個修為與習慣會擴及到人生其他面向,包誇相信自己能改變。調整過的習慣迴路能否永久定型,取決於信任。


習慣不止是用在個體身上

在企業中、球隊裡,習慣也大大影響著。像是星巴克給員工一本本子,請他們“想像”遇到客人投訴時的反應,並且『紀錄』起來。當真實遇到這種情況後,星巴克的員工就不會這麼焦慮,因為他們已經“想像”過這種情況,而且知道怎麼處裡。而社會運動同樣也會用到習慣

社會運動三階段

  1. 社會運動會出現,是因為友誼的社會習慣以及親近友人間的『強連結』
  2. 社會運動會擴大,是因為社群習慣以及把鄰居、親族綁在一起的『弱連結』
  3. 社會運動能持久,則是因為運動領袖給參與者新的習慣,讓他們擁有新的身份認同,以及認為自己是一分子的參與感

習慣不止是用在我們個人身上的,在群體中我們也深深的被習慣影響。1964年,許多人參加密西西比夏日計畫,這個計畫致力讓南部黑人取得投票權,參加這個運動是有風險的,為何有人簽了名有確實參與?而部分的人卻沒有。願因是因為社會習慣,或更明確一點說,因為強弱連結的力量一起作用。最後參與計畫的學生被社群牽絆,他們親密的有人與點頭知交都預期他們會搭上巴士。那些退出的人也被社群羈絆,然而是不一樣的社群:社會壓力與習慣不會迫使他們前往密西西比的社群


讀完這本書之後發現其實有非常多的習慣影響著我們,如果想知道習慣怎麼影響我們,快點去看這本書吧 為什麼我們這樣生活,那樣工作 The Power of Habit

2021-02-21 0 comment
0 FacebookTwitterPinterestEmail
閱讀筆記

[閱讀心得#2]歡迎來到志祺七七

by wenwu 2021-02-01

[閱讀心得#2]歡迎來到志祺七七

沒想到這個月都要過完了,我現在才打2021年第一篇文章
話說,最難的部分就是開始,現在不開始,就不知道何時才會動手了

去年我給自己的目標是打25篇的文章,文章的內容大多都是軟體的統計分析教學,或是機器學習的自學內容。
今年給我自己的目標依舊是25篇文章,但是希望能多寫一點不同的內容,也增加自己的讀書量。每次看著床邊一本一本讀到一半的書,都覺得心痛,這些書被我買回家時,不是都抱著期待雀躍的心情嗎?怎麼讀一半就放棄了

我相信輸出的效果是大於輸入的,若是沒有輸出,怎麼會有輸入呢?

所以今年的目標是一個月一本書,並且要有輸出,在這裡和大家分享


2021的第一本就是“歡迎來到志祺七七”,去年雙11買的書。十一月底到我家,為了趕上一月的心得輸出,今天才讀完 ><

那為什麼買了這本書回家呢?起初認識志祺是在阿滴的頻道,很多youtuber開始經營時,都有影片合作。開始訂閱之後發現,志祺七七的頻道什麼都有,很多時事分析相關的影片,我也越來越常點開他們的影片。

之後也知道志祺創辦的圖文不符、簡訊設計真的厲害到不行。不只得過紅點設計獎,許多紅遍台灣的設計(或是我有看過的)都是從他們家出來的

這本“歡迎來到志祺七七”,很適合我這個想了解這之中秘密的粉絲,想知道要怎麼樣才能跟志祺一樣厲害!!


歡迎來到志祺七七

本書分成三個部分「從建立和自己的關係開始」、「你和工作的關係」、「你和社會/世界的關係」,我想…了解自己的定位是很重要的,認識自己也是一件我們容易輕忽,卻非常重要的事情


從建立和自己的關係開始

從這本書裡面可以看出來,志祺在讀高中的時候就是一個很厲害的人。對什麼有興趣,就可以帶動人群,贏什麼獎回來。

不過也沒這麼簡單就是了,過程中很容易遇到困難。像是都更案的文章,在網路上引來很多的批評,很容易一遇到這樣的環境就失去了自己

「如果我真的希望事情會變好,那我們能做的,就是堅持下去。除了讓自己的聲音被聽見,也要在整段溝通的過程中,努力學習聆聽、交流、回應。雖然也會遇到負面的狀況,但這就是整個社會溝通的常態」

「我」一個人不行,但「我們」可以

最後一段有提到“夢想”,我們的夢想是什麼很重要嗎?還是要在工作中找到熱情的最小元素


你和工作的關係

書中提到圖文不符創辦的過程我覺得滿有趣的,一開始只是因為有想分享的理念,就找了成祥一起創業。一開始只有四個人,除了接案之外,也利用1/5~1/4的產能,製作團隊覺得對當時社會來說,很重要的題目。

隨後團隊不段的擴大,從四人的小團隊變成五十人,志祺的在公司的定位也不一樣了。志祺說自己是斜槓單幹王,但是在團隊中的定位也漸漸模糊,有些事情好像自己來做就可以了,何必放手給其他同事,但是漸漸的斜槓單幹王卻成為阻礙。有時後未經過周密思慮的接案,也成為公司的累贅。原以為有賺錢卻發現經營的細節需要調整。

在第二段提到蠻多公司的內部營運以及及管理。溝通往往都最重要的,需要顧慮到夥伴的身心理才能有良好的合作。


你和社會/世界的關係

最後一段提到的內容很廣,如何在與世界中,學習與社會,表達自己並且找到平衡。這之中提到的作品都蠻有趣的,像是:歡樂無法黨、公部門的設計文案… 。

不論是創業,還是社會參與,一開始的起點都是自己,「當我做了一些自認為能為社會帶來力量的行動,我並不求這些東西會帶來什麼回報,因為我相信的是:當我們大家一起提升的時候,有一天這份「好」會從我們回到我身上,因為「我」就是「我們」。」


結語

志祺用來成功的定義來幫助我們思考,到底什麼東西是我們真正想要的。許多時候我們都羨慕別人能夠達到許多人生的目標以及成就,但這真的是我們真心想要的嗎?還是只是喜歡這些有名份的東西。

推薦

整本書就像是志祺走來的成長過程,每一篇都是對自己所提出的疑問以及解答。向大家推薦這本書,有許多的過程都非常有趣,我只稍微提到書中的內容,推薦大家買回家看!歡迎來到志祺七七


最後放上2019年底在博恩夜夜秀與志祺得合照🥰

謝謝你的書,讓我們更認識志祺還有創業的心路歷程

2021-02-01 0 comment
0 FacebookTwitterPinterestEmail
機器學習

Why Deep?

by wenwu 2020-12-18

Why Deep?

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

今天要討論的是為什麼需要做deep learning 呢? Deep就比較好嗎?

我們都知道deep learning 在很多問題上的表現都是比較好的,越deep的network他的表現也就越好

那位甚麼呢? 很值觀的解釋,因為層數多、參數也多,model也越複雜,bias也越小,而使用大量的data可以降低variance,效果當然就會更好

有人可能覺得因為用大量的data去train 一個複雜的model,效果當然會好。但後面要解釋其實deep learning 不代表就有大量的data才能train好,少量的data也可以train好deep learning


Fat+short model vs Thin+tall model

我們來比較一下兩個不同的model,一個又矮又胖的model,他可能只有一層,可是卻有很多參數。另外一個是又高又瘦的Model,也就是deep learning。

要如何比較呢? 如何讓兩個看起來不一樣的model有公平的比較? 我們要讓他們的參數是一樣多的。

在公平的比較之下,得到的結果如下:

左側是瘦長的model,右側是一層的。當左邊有5層的時候,他們達到公平的條件,可以看到左邊的效果是比較好的,就算右邊的參數到16K,他的效果也沒有右邊2*2K的叫果好,為什麼呢?

有人以為deep learning 是因為data很多,model很大,用暴力展壓後就有好的結果。但可以從上面得知,deep learning 顯然是在結構上有某種優勢,不然無法解釋在同樣參數卻有比較好的結果


Modularization

DNN結構上很大的優勢就是Modularization(模組化),他是用結構化的架構

shallow network,是把所有的程序都寫在同一個主要的函數中,而DNN是將整個任務分成一個個小任務,每個任務又可以不斷細分下去,以形成Modularization。

假設我們現在要分四類:長髮女生、短髮女生、長髮男生、短髮男生。

按照shallow network的想法,我們就用一個model分四類,不過長髮男生的資料可能很少,detect長髮男生的效果就比較差

但是我們利用modularization的想法,使用deep learning 的架構,我們可以訓練一個model 作為分類器,就可以完成所有的任務,我們可以把整個任務分成兩個子任務: 第一分類是男女,第二分類是長髮或短髮。

你會發現,經過層層layer的任務分解,其實每一個Classifier要做的事情都是比較簡單的,而因為這種分層的、模組化的方式充分利用了data,並提供了信息利用的效率,所以只要用比較少的training data就可以把結果train好

由於deep learning的deep就是在做modularization這件事,所以它需要的training data反而是比較少的,這可能會跟你的認知相反,AI=big data+deep learning,但deep learning其實是為了解決less data的問題才提出的

並且在做deep learning 的時候,怎麼做模組化這件事情是machine自動學習的


Complex task

那deep learning還有什麼好處呢?

有時候我們會遇到非常複雜的task:

  • 有時候非常像的input,它會有很不一樣的output
    如在做圖像辨識的時候,下圖這個白色的狗跟北極熊其實看起來是很像的,但是你的machine要有能力知道,看到左邊這張圖要output狗,看到右邊這張圖要output北極熊
  • 有時候看起來很不⼀樣的input,output其實是一樣的
    比如下面這兩個方向上看到的火車,橫看成嶺側成峰,儘管看到的很不一樣,但是你的machine要有能力知道這兩個都是同一種東西

如果你的network只有一層的話,就只能做簡單的transform,沒有辦法把一樣的東西變得很不一樣,把不一樣的東西變得很像;如果要實現這些,就需要做很多層次的轉換。

這邊以MNIST手寫數字識別為例,展示一下DNN中,在高維空間上對這些Complex Task的處理能力

如果把28*28個pixel組成的vector投影到二維平面上就像左上⻆所示,你會發現4跟9的pixel機乎是疊在一起的,因為4跟9很像,都是一個圈圈再加一條線,所以如果你光看input的pixel的話,4跟9機乎是疊在一起的,你機乎沒有辦法把它分開
但是,等到第二個、第三個layer的output,你會發現4、7、9逐漸就被分開了,所以使用deep learning的deep,這也是其中一個理由

為甚麼要使用deep learning 的原因寫到這邊,課程中老師還有講解語音辨識等等的範例,需要參考可以去聽聽看

2020-12-18 0 comment
0 FacebookTwitterPinterestEmail
機器學習

Tips for Deep Learning-如果Testing data 的效果不好怎麼辦?

by wenwu 2020-12-16

Tips for Deep Learning-如果Testing data 的效果不好怎麼辦?

今日的課程來自於: https://youtu.be/5BJDJd-dzzg

上一篇提到:如果Testing data 的效果不好怎麼辦?
今天要討論的是當testing data的效果不好該如何調整?

方法有兩種:

  1. Early Stopping
  2. Regularization
  3. Dropout

Early Stopping

第一個方法很簡單,就是提前結束。通常當我們的learning rate 調的比較好,訓練下來 loss 會越來越低,但是有可能training data上的loss 逐漸變小十,在testing data上反而上升了

假設我們知道testing data的loss變化,我們就可以設定在loss最小的時候提前結束。


Regularization

regularization就是在原來的loss function上額外增加一個term,比如我們要minimize的loss function原先應該是square error或cross entropy,那在做Regularization的時候,就在後面加一個Regularization的term

L2 regularization

regularization term可以是參數的L2 norm(L2正規化),所謂的L2 norm,就是把model參數集θ裡的每一個參數都取平方然後求和,這件事被稱作L2 regularization,即

你會發現我們新加的regularization term λ/2‖θ‖₂ 有一個1/2,由於我們是要對loss function求微分的,而新加的regularization term是參數wi的平方和,對平方求微分會多出來一個係數2,我們的1/2就是用來和這個2相消的

L2 regularization具體工作流程如下:

如果把這個推導出來的式子和原式作比較,你會發現參數在每次update之前,都會乘上一個 (1-ηλ),而 η和λ通常會被設為一個很小的值,因此通常是一個接近於1的值,比如0.99;也就是說,regularization做的事情是,每次update參數wi之前,不分青紅皂白就先對原來的乘個0.99,這意味著,隨著update次數增加,參數會越來越接近於0

Q: 你可能會問,要是所有的參數都越來越靠近0,那最後豈不是通通變成0,得到的network還有什麼用?

A:其實不會出現最後所有參數變成0的情況,因為通過微分得到的η∂L/∂wi這一項是會和前面(1-ηλ)w^t_i 這一項取得平衡
使用L2 regularization 可以讓weight每次都變得小一點,這就叫做Weight Decay(權重衰退)

L1 regularization

除了L2 regularization中使用平方項作為new term之外,還可以使用L1 regularization,把平方項換成每一個參數的絕對值,即

Q: 你的第一個問題可能是,絕對值無法微分阿,該怎麼處裡?

A: 實際上絕對值就是一個V字形的函數,在V的左邊微分值是-1,在V的右邊微分值是1,只有在0的地方是不能微分的,那真的走到0的時候就胡亂給它一個值,比如0,就ok了

如果w是正的,那微分出來就是+1,如果w是負的,那微分出來就是-1,所以這邊寫了一個w的sign function,它的意思是說,如果w是正數的話,這個function output就是+1,w是負數的話,這個 function output就是-1

L1 regularization的工作流程如下:

這個式子告訴我們,每次update的時候,不管三七二十一都要減去一個ηλ sgn(w^t_i),如果w是正的,sgn是+1,就會變成減一個positive的值讓你的參數變大;如果w是負的,sgn是-1,就會變成加一個值,讓你的參數變小;總之就是讓它們的絕對值減小至接近於0

L1 v.s. L2

我們來比較一下L1 與L2 的update過程:

L1 和 L2 ,雖然他們同樣是讓參數的絕對值變小,但他們做的事情其實略有不同:

  • L1 使參數絕對值變小的方法是每次update減掉一個固定的值
  • L2 使參數絕對值變小的方法是每次update乘上一個小於1的固定值

因此,當參數w的絕對值比較小的時候,L2會讓w下降得更快,而L1每次update只讓w減去一個固定的值,train完以後可能還會有很多比較大的參數;當參數w的絕對值比較小的時候,L2的下降速度就會變得很慢,train出來的參數平均都是比較小的,而L1每次下降一個固定的value,train出來的參數是比較sparse的,這些參數有很多是接近0的值,也會有很大的值

在之前所講的CNN的task裡,用L1做出來的效果是比較合適的,是比較sparse的

Weight Decay

之前提到了Weight Decay,那實際上我們在大腦裡面也會做Weight Decay
下圖分別描述了,剛出生的時候,嬰兒的神經是比較稀疏的;6歲的時候,就會有很多很多的神經;但是到14歲的時候,神經間的連接又減少了,所以neural network也會跟我們人有一些很類似的事情,如果有一些weight你都沒有去update它,那它每次都會越來越小,最後就接近0然後不見了

這跟人腦的運作,是有異曲同工之妙


Dropout

最後一個方法就是dropout了

Dropout只適用於testing 效果不好的時候,因為Dropout要做的就是讓你在training data上的結果變差,但是testing set 的效果變好neuron都有p%的機率被丟掉,如果某個neuron被丟掉的話,跟他相連的weight也都要被丟掉

Dropout在training 上如何使用?

在training 的時侯,每次update參數之前,我們對每一個neuron(也包誇input layer的”neuron”)做sampling(抽樣),每個neuron都有p%的機率被丟掉,如果某個neuron被丟掉的話,跟他相連的weight也都要被丟掉

實際上就是每次update參數之前都通過抽樣只保留network中的一部份neuron來訓練

做完sampling之後,network structure 就會變得比較細長了,然後你再去train這細長的network

(每次update參數之前都要做一遍sampling,所以每次update參數的時候,拿來training 的network structure都是不一樣的;你可能會覺得這個方法跟之前的Maxout很像,但實際上,Maxout是每一筆data對應的network structure不同,而Dropout是每一次update的network structure都是不同的,每一次minibatch對映著一次update,而一個minibatch裡含有多筆data)

在dropout的時候training 的效果會變差,因為某些neuron在training 的時候莫名其妙消失,但是dropout會使testing 的結果變好,這就是我們的目的

Dropout在testing 上如何使用?

使用dropout做testing的時候需要注意兩件事情:

  1. testing 的時候不做dropout,所有的neuron都要被用到
  2. 假設在training 的時候,dropout rate 是p%,從training data中被learn出來的所有weight都要乘上(1-p)%才能被當作testing 的weight使用

為什麼training 和testing 使用的weight是不一樣的呢?

假設現在的dropout rate 是50% ,那在training 的時候,你總是期望每次update之前會丟掉一半的neuron,就像下圖左側所示,在這種情況下你learn好一組weight參數,然後去testing

但是testing 的時候是沒有dropout的,所以如果testing 使用的是和training 同一組weight,那左側得到的output z 和右側得到的ouput z’ ,他們的值會相差兩倍,即 z’ ≈ 2z, 這樣會導致testing 的結果與training 的結果並不match,最終的效果會變差

那這個時候,你就需要把右側testing 中所有的weight乘上0.5,然後做normalization,這樣 z 就會等於 z’ ,使得testing的結果和training 的結果是一致的

Dropout is a kind of ensemble

在文獻上有很多不同的觀點來解釋為什麼dropout會work,其中一種比較令人信服的解釋是:dropout是一種終極的ensemble的方法

ensemble精神的解釋
ensemble的方法在比賽的時候經常預覽得到,它的意思是說,我們有一個很大的training set,那你每次都只從這個training set裡面sample一部分的數據出來,像下圖一樣,取出了set1,set2,set3,set4

我們之前在講bias 和variance的trade off 的時候說過,打靶有兩種情況:

  1. 一種是因為bias大導致打不準(參數過少)
  2. 另一種是因為variance大而導致打不準(參數過多)

假設我們今天有一個很複雜的model,他往往是bias比較準,但是variance很大的情況,如果你有很多個笨重複雜的model,雖然它們的variance都很大,但是平均起來,往往就會很準

所以ensemble做的事情,就是利用這個特性,我們從原本的training data裡面sample出很多subset,然後train很多個model,每一個model的sturcture甚至都可以不一樣;在testing 的時候,丟了一筆testing data 進來,使他通過所有的model,得到一大推的結果,然後把這些結果平均起來當作最後的output(平均起來bias 就會很小)

如果你的model很複雜,這一招往往是很有用的,那著名的random forest(隨機森林)也是實踐這個精神的一個方法,也就是如果你用一個decision tree,它就會很弱,也很容易overfitting,而如果採用random forest,它就沒有那麼容易overfitting

為什麼dropout是一個終極的ensemble方法呢?

在training network的時候,每次拿一個minibatch出來就做一次update,而根據dropout的特性,每次update之前都要對所有的neuron進型sample,因此每一個minibatch所訓練的network都是不同的

假設我們有M個neuron,每個neuron都有可能drop或不drop,所以總共可能的network數量有2^M個;所以當你在做dropout的時候,相當於是在用很多個minibatch分別去訓練很多個network(一個minibatch一般設置為100筆data),由於update次數是有限的,所以做了幾次update,就相當於train
了幾個不同的network,最多可以訓練到 2^M 個network

每個network都只用一個minibatch的data來train,可能會讓人感到不安,才個batch才100筆data,怎麼train一個network呢?其實沒有關係,因為這些不同的network之間的參數是shared,也就是說,
雖然一個network只能用一個minibatch來train,但同一個weight可以在不同的network裡被不同的minibatch train,所以同一個weight實際上是被所有沒有丟掉它的network一起share的,它是拿所有這些network的minibatch合起來一起train的結果 ( 做dropout= 做一大把的network structure)

實際操作ensemble的做法

那按照ensemble這個方法的邏輯,在testing的時候,你把那train好的一大把network通通拿出來,然後把手上這一筆testing data丟到這把network裡面去,每個network都給你吐出一個結果來,然後你把
所有的結果平均起來 ,就是最後的output

但是在實際操作上,如下圖左側所示,這一把network實在太多了,你沒有辦法每一個network都丟一個input進去,再把它們的output平均起來,這樣運算量太大了

所以dropout最神奇的地方是,當你並沒有把這些network分開考慮,而是用一個完整的network,這個network的weight是用之前那一把network train出來的對應weight乘上(1-p%),然後再把手上這筆
testing data丟進這個完整的network,得到的output跟network分開考慮的ensemble的output,是驚人的相近

也就是說下圖左側ensemble的做法和右側dropout的做法,得到的結果是approximate(近似)的

舉例說明dropout和ensemble的關係

這裡用一個例子來解釋:

我們train一個下圖右上⻆所示的簡單的network,它只有一個neuron,activation function是linear的,並且不考慮bias,這個network經過dropout訓練以後得到的參數分別為w1、w2,那給它input x1、x2,得到的output就是 z=w1x1+w2x2

如果我們今天要做ensemble的話,theoretically就是像下圖這麼做,每一個neuron都有可能被drop或不drop,這裡只有兩個input的neuron,所以我們一共可以得到2²=4種network

我們⼿上這筆testing data 丟到這四個network中,分別得到4個output:w1x1+w2x2 、w1x1、w2x2、0,然後根據ensemble的精神,把這四個network的output通通都average起來,得到的結果是 1/2(w1x1+w2x2)

那根據dropout的想法,我們把從training中得到的參數w1、w2乘上(1–50%),作為testing network裡的參數,也就是 w1′ , w2′ = (1–50%)(w1,w2)=0.5w1 , 0.5 w2

這邊想要呈現的是,在這個最簡單的case裡面,用不同的network structure做ensemble這件事情,跟我們用一整個network,並且把weight乘上一個值而不做ensemble所得到的output,其實是一樣的

值得注意的是,只有是linear的network,才會得到上述的等價關係,如果network是非linear的,ensemble和dropout是不equivalent的;但是,dropout最後一個很神奇的地方是,雖然在non-linear的情況下,它是跟ensemble不相等的,但最後的結果還是會work

如果network很接近linear的話,dropout所得到的performance會比較好,而ReLU和Maxout的 network相對來說是比較接近於linear的,所以我們通常會把含有ReLU或Maxout的network與Dropout配合起來使用

2020-12-16 0 comment
0 FacebookTwitterPinterestEmail
機器學習

Tips for Deep Learning-如果Training data 的效果不好怎麼辦?

by wenwu 2020-12-07

Tips for Deep Learning-如果Training data 的效果不好怎麼辦?

今日的課程來自於: https://youtu.be/5BJDJd-dzzg

在作training data & testing data 時,我們最在意的就是模型的效果好不好? 
如果效果不好,就需要找出問題解決。今天要討論的是當training data的效果不好該如何調整?

方法有兩種:

  1. New activation function
  2. Adaptive learning rate

New activation function

如果你今天的training結果不好,很有可能是因為你的network架構設計得不好。舉例來說,可能你用的activation function是對training比較不利的,那你就嘗試著換一些新的activation function,也許可以帶來比較好的結果。

1980年代使用的activation function 是sigmoid function。 如果我們用sigmoid function ,你會發現deeper does not imply better。 下圖是training data 的accuracy ,在第七層之後accuracy 開始往下掉了,這並不是overfitting (overfitting 是training data效果好,但是testing data效果不好) ,原因是因為Vanishing Gradient(梯度消失)


Vanishing Gradient(梯度消失)

Vanishing Gradient(梯度消失)就是當network越深的時候,在靠近input的地方,這些參數的gradient(即對最後loss function的微分)是比較小的;而靠近output的地方,他對loss 的微分值會是比較大的

因此當設定同樣的learing rate的時候,靠近input的地方,他參數的update是很慢的;而靠近output的地方,他參數的update是比較快的

所以在靠近input的地方,參數幾乎還是random的時候,output就已經根據這些random的結果找到了一個local minimal,然後就收斂了

要如何解釋這件事呢? 假設我們在參數作小小的變化,看看隊cost的影響有多大;我們在某一個參數後加上Δw,即使Δw的值很大,但是經過一個sigmoid function 就會被縮小一次,所以newwork越深,對cost的影響越小

要如何解決這個問題呢? 其實改一下activation function就可以解決了


ReLU

現在較常使用的activation function叫做Rectified Linear Unit (ReLU;整體線性單元函數;修正線性單元);該函數的圖形如下,z 為 input,a 為output,如果 input > 0 then output=input ;如果 input < 0 then output=0

ReLU 2的優點如下:

  1. 跟sigmoid 相比,ReLU的運算快很多
  2. ReLU的想法結合了生物上的觀察(Pemgel 的paper)
  3. 無窮多bias不同的sigmoid function 疊加的結果變成ReLU
  4. ReLU可以處理Vanishing gradient的問題(最重要的優點)

handle Vanishing gradient problem

下面是ReLU 的neural network,以ReLU作為activation function的neuron,他的output不是等於0,就是等於input

當output=input的時候,這個activation function就是linear的;而output=0的neuron對整個network是沒有任何作用的,因此可以把它們從network中拿掉

拿掉的output=0的neuron如圖下,整個network變成一個瘦長的linear network,linear 的好處是,output=input,不會像sigmoid function一樣使input 產生的影響力遞減

Q1 : 我們之所以使用deep learning,就是因為想要一個non-linear、比較複雜的 function而使用ReLU不就會讓它變成一個linear function嗎?這樣得到的function不是會變得很弱嗎?

A1: 其實使用ReLU之後的network整體來說還是non-linear的,如果你對input有小小的改變,不改變neuron的operation region的話,那network就是一個linear function;但是,如果你對input作比較大network整體上就變成了non-linear function

Q2: 我們對loss function做gradient descent,要求neural network是可以做微分的,但ReLU是一個分段函數,它是不能微分的(至少在z=0這個點是不可微的),那該怎麼辦呢?

A2: 在實際操作上,當region的範圍處於z>0時,微分值gradient就是1;當region的範圍處於z<0時,微分值gradient就是0;當z為0時,就不要管它,相當於把它從network裡面拿掉


ReLU-variant

其實ReLU還存在一定的問題,比如當input<0的時候,output=0,此時微分值gradient也為0,你就沒有辦法去update參數了,所以我們應該讓input<0的時候,微分後還能有一點點的值,比如令a=0.01z,這個東西就叫做Leaky ReLU

既然a可以等於0.01z,那這個z的係數可不可以是0.07、0.08之類呢?所以就有人提出了Parametric ReLU,也就是令a= αz,其中並不是固定的值,而是network的一個參數,它可以通過trainingdata學出來,甚至每個neuron都可以有不同的值
這個時候又有人想,為什麼一定要是ReLU這樣子呢,activation function可不可以有別的樣子呢?所以後來有了一個更進階的想法,叫做Maxout network


Maxout

Maxout讓network自動去學習他的activation function,那Maxout network就可以自動學出ReLU,也可以學出其他的activation function,這一切都是由training data 來決定的

假設現在有input x1,x2,它們乘上幾組不同的weight分別得到5,7,-1,1,這些值本來是不同neuron的input,他們要通過activation function 變成neuron的output;但在Maxout network裡,我們事先決定好將某幾個”neuron”的input分成一個group,比如5,7分為一個group,然後在這個group裡選取一個最大值

這個過程,就好像在一個layer 上做Max pooling 一樣,他原來的network不同之處在於,他把原來幾個neuron的input按一定規則組成了一個group,然後並沒有使他們通過activation function,而是選取其中的最大值當作這幾個”neuron”的output

當然,實際上原來的”neuron”早就已經不存在了,這幾個被合併的”neuron”應當被看作是一個新的neuron,這個新的neuron的input是原來幾個”neuron”的input組成的vector,output則取input最大值,並非由activation function產生

在實際操作上,幾個element被分為一個group這件事情是由你自己決定的,他就是network structure 裡一個需要被調的參數,不一定要跟上圖一樣兩個分為一組

property

Maxout可以實現任何piecewise linear convex actvation function(分段線性凸激活函數),其中這個activation function 被分為多少段,取決於你把多少個element z 放到一個group裡,下圖分別是2個element一組和3個element一組的activation function的不同形狀

How to train Maxout

接下來我們要面對的是,怎麼去train一個Maxout network,如何解決Max不能微分的問題
假設在下面的Maxout network中,紅框圈起來的部分為每個neuron的output

其實Max operation 就是linear 的operation ,只是他緊接在前面這個group裡的某一個element上,因此我們可以把那些並沒有被Max連接到的element通通拿掉,從而得到一個比較細長的Linear network

實際上我們真正訓練的並不是一個含有max函數的network,而是一個化簡後如下圖的linear nerwork;當我們還沒有真正開始訓練模型的時候,此時這個network含有max函數無法微分,但是只要真的丟進去了一筆data,network就會馬上根據這筆data確定具體的形狀,此時max函數的問題已經被實際數據給解決了,所以我們完全可以根據這筆training data使用Backpropagation的方法去訓練被network留下來的參數

所以我們擔心max函數無法微分,他只是理論上的問題;在具體的實踐上,我們完全可以根據data把max 函數轉化為具體的函數,再對這個轉化的thiner linear network進行微分

沒被train的element怎麼辦?(但在實作上,他不是一個問題) 
每個linear network的structure 都是由input的那一筆data來決定的,當你input不同data的時候,得到的nerwork structure 是不同的,留在network裡面的參數也是不同的,由於我們有很多很多比training data,所以network的structure再訓練中不斷的變換,所以最後每一個weight都會被train到

所以,我們回到Max Pooling的問題上來,由於Max Pooling跟Maxout是一模一樣的operation,既然如何訓練Maxout的問題可以被解決,那訓練Max Pooling又有什麼困難呢?

Max Pooling有關max函數的微分問題採用跟Maxout一樣的方案即可解決,至此我們已經解決了CNN部分的第一個問題


Adaptive learning rate

第二個能夠解決training data效果不好的就是: adaptive learning rate,這個部分主要講述的是關於recipe of deep learning 中adaptive learning rate的一些理論

review-adagrad

我們之前已經了解adagrad的做法,讓每一個參數都有不同的learning rate

Adagrad 的精神是,假設我們考慮兩個參數w1,w2,如果在w1這個方向上,平常的gradient都比較小,那他是比較平坦的,於是就給他大的learning rate;反過來說,在w2這個方向上,平常的gradient都比較大,那他是比較陡峭的,就給他比較小的learning rate

但是實際上遇到的問題,遠比adagrad所能解決的問題要來的複雜,我們之前做Linear Regression的時候,我們做optimization的對象,也就是loss function,它是convex的形狀;但實際上我們在做deep learning的時候,這個loss function可以是任何形狀


RMSProp

learning rate

loss function可以是任何形狀,對convex loss function來說,在每個方向上它會一直保持平坦或陡峭的狀態,所以你只需要針對平坦的情況設置較大的learning rate,對陡峭的情況設置較小的learning rate即可

但是在下圖所示的情況中,即使是在同一個方向上(如w1方向),loss function也有可能一會而平坦一會兒陡峭,所以你要隨時根據gradient的大小來快速地調整learning rate

所以真正要處理deep learning的問題,用Adagrad可能是不夠的,你需要更dynamic的調整learning rate的方法,所以產生了Adagrad的進階版 — — RMSProp

How to do RMSProp

RMSProp的做法如下:

我們的learning rate依舊設置為一個固定的值 除掉一個變化的σ值 ,這個σ等於上一個σ和當前梯度的加權方均根(特別的是,在第一個時間點, σ^0就是第一個算出來的gradient值g⁰),即:

這裡的σ值是可以自由調整的,RMSProp跟Adagrad不同之處在於,Adagrad的分母是對過程中所有的gradient取平方和開根號,也就是說Adagrad考慮的是整個過程平均的gradient信息;而RMSProp雖然也是對所有的gradient進行平方和開根號,但是它用一個σ來調整對不同gradient的使用程度,比如你
把α的值設的小一點,意思就是你更傾向於相信新的gradient所告訴你的error surface的平滑或陡峭程度,而比較無視於舊的gradient所提供給你的information

所以當你坐RMSProp的時候一樣是在算gradient的root mean square,但是你可以給現在已經看到的gradient 比較大的weight,給過去看到的gradient比較小的weight,來調整對gradient信息的使用程度


Momentum

optimization-local minima?

除了learning rate的問題之外,大家最怕的就是卡在local minimum、saddle point或是plateau的地方,很多人都會擔心deep learning 這麼複雜的model可能非常容易被卡住了

其實Yann LeCun在07年的時候,就提出一個蠻特別的說法,他說你不要太擔心local minima的問題,因為一旦出現local minima,它就必須在每一個dimension都是下圖中這種山谷的低谷形狀,假設
山谷的低谷出現的概率為p,由於我們的network有非常非常多的參數,這裡假設有1000個參數,每一個參數都要位於山谷的低谷之處,這件事發生的機率為p¹⁰⁰⁰,當你的network越複雜,參數越多,這件事發生的概率就越低

所以在一個很大的neural network裡面,其實並沒有那麼多的local minima,搞不好它看起來其實是很平滑的,所以當你走到一個你覺得是local minima的地方被卡住了,那它八成就是global minima,或
者是很接近global minima的地方

Where is Momentum from

假設我們用物理的方法來看找極值。假設有一個球從左上滾下來,當他滾到plateau的地方、local minima的地方,但是由於慣性他還會持續往前走一段路,假設前方有個坡,這個球就很有可能翻過山坡,走到比local minima 還要好的地方

所以我們要做的就是把慣性加到gradient descent裡面,這件事情就叫做Momentum

How to do Momentum

當我們在gradient descent 裡加上Momentum的時候,每一次update的方向,不再只考慮gradient的方向,還要考慮上次update的方向,那這裡我們就用一個變量去記錄前一個時間點update的方向

隨機選一個初始值θ⁰,初始化v⁰,接下來計算θ⁰處的gradient,然後我們要移動的方向是由前一個時間點的移動方向v⁰和gradient的反方向來決定的,即

λ也是手動調整參數。接下來我們第二個時間點要走的方向v²,它是由第一個時間點移動的方向v¹和gradient的反方向 ▽L(θ¹)共同決定的; λ_v是圖中的綠色虛線,它代表由於上一次的慣性想要繼續走的方向;η▽L(θ) 是
圖中的紅色虛線,它代表這次gradient告訴你所要移動的方向;它們的失量和就是這一次真實移動的方向,為藍色實線

gradient告訴我們走紅色虛線的方向,慣性告訴我們走綠色虛線的方向,合起來就是走藍色的方向
我們還可以用另一種方法來理解Momentum這件事,其實你在每一個時間點移動的步伐,包括大小和方向,就是過去所有gradient的加權和

具體推導如下圖所示,第一個時間點移動的步伐v¹是θ⁰處的gradient加權,第二個時間點移動的步伐v²是θ⁰和θ¹處的gradient加權和…以此類推;由於λ的值小於1,因此該加權意味著越是之前的gradient,它的權重就越小,也就是說,你更在意的是現在的gradient,但是過去的所有gradient也要對你現在
update的方向有一定程度的影響力,這就是Momentum


Adam

其實RMSProp 加上Momentum,就可以得到Adam

根據下面的paper來快速瞄素一下Adam的algorithm:

  1. 先初始化 m_0 = 0 , m_0就是Momentum中,前一個時間點的movement
  2. 再初始化 v_0=0 ,v_0就是RMSProp裡計算gradient的root mean square 的 σ
  3. 最後初始化t=0,t用來表示時間點
  4. 先算出gradient g_t

5. 再根據過去要走的方向m_(t-1)和gradient g_t,算出現在要走的方向m_t — Momentum

6. 然後根據前一個時間點v_(t-1) 和gradient g_t的平方,算一下放在分母的v_t __RMSProp

7. 接下來做了一個原來RMSProp和Momentum裡沒有的東西,就是bias correction ,它使 m_t 和 v_t 都除上一個值,這個值本來比較小,然後越來越接近1

8. 最後做update,把 Momentum建議你的方向 m_t 乘上learning rate α,再除掉RMSProp normalize 後建議的learning rate 分母,然後得到update的方向

好了,今天講training data效果不好的解決方法,下一篇就是testing data效果不好的解決方法

2020-12-07 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,085
  • 729,831
  • 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