• 文章總列表
  • 統計分析
    • 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-01-21

      SAS

      [SAS]傾向分…

      2020-10-28

      SAS

      [SAS]Log…

      2020-06-10

      SAS

      [SAS]迴歸分…

      2020-02-28

      統計分析

      [SAS] Ma…

      2026-01-21

      統計分析

      什麼是meta-…

      2024-11-05

      統計分析

      Test-ret…

      2024-06-07

      統計分析

      [SAS]傾向分…

      2020-10-28

  • SAS
    • SAS

      [SAS] Ma…

      2026-01-21

      SAS

      [SAS]傾向分…

      2020-10-28

      SAS

      [SAS]Log…

      2020-06-10

      SAS

      [SAS]迴歸分…

      2020-02-28

      SAS

      [SAS]線性迴…

      2020-02-26

  • 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
閱讀筆記

[閱讀心得#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
閱讀筆記

[閱讀心得#1]原子習慣

by wenwu 2020-11-03

每天都進步1%,一年後你會進步37倍
每天都退步1%,一年後你會弱化到趨近於0 
你的一點小改變,將會產生複利效應,如滾雪球般,帶來豐碩的人生成果

原子習慣是最近的暢銷書,還來不及買一本回家,就從朋友身上得到一本(真是太感謝了

書裡提到很多非常實用的習慣養成,這本書非常值得買回去一看再看

以下擷取書中我喜歡的內容和大家分享

原子習慣


書中提到習慣的四階段模型:

提示、渴望、回應、獎賞

簡單的心理學方法,使四個步驟會誘使你養成習慣


提示 : 讓提示顯而易見

生活中有很多微不足道的習慣我們無法察覺:像是手機響了,我們自然而然會接電話。上完廁所,我們自然會關燈。

做完(目前的習慣)之後,我會執行(新的習慣。)

關鍵在於把想要的行為跟每天已經在做的事情綁在一起,就很容易養成新的習慣。比如,吃完晚餐,將直接將碗盤放進洗衣機。
如果要讓提示顯而易見,可以將新行為放入例行事務中。像是早上整理床鋪後放一本書在床頭,這樣晚上時就會有一本書在床上等你


渴望 : 讓習慣有吸引力

極度容易養成習慣的行為─吃垃圾食物、打電動、瀏覽社群媒體─都與較高濃度的多巴胺有關。我們必須讓習慣變得有吸引力,因為一開始激勵我們採取行動的,是對獎賞的預期。

運用誘惑綑綁,將[想要]的行為與[需要]的行為配對。

比如你很想看netflix,卻一整個禮拜沒有運動,可以逼自己只能在跑步機上追劇,這樣就會使你增加跑步的慾望。

另外,我們的生活圈會深深影響我們的習慣。最有效的方法就是加入一個把你想要的行為視為常態的文化之中。


回應 : 讓行動輕而易舉

很多時候我們都知道建立習慣的好處,卻遲遲無法開始。我們可能一直停在”規劃”的階段,卻一直沒有”行動”。

書中的例子提到,要精通一項習慣,關鍵是由重複開始,而非完美。
習慣的養成取決於頻率,而非時間
只要一直重複一個習慣,所有人都能夠變成專家。

創照出一個讓正確的事情盡可能輕而易舉的環境。
在看youtube或netflix時,最難停下的原因就是自動撥放系統,有時候我們連一個手指頭都不用動,新的一集又開始,就越來越難停止。
假若要想成習慣,為了以後方便,把環境預備好。
比如: 每次洗完澡後就清理浴室,事先準備好運動服裝,好在下班後直接去運動。
或者運用[兩分鐘法則],[每晚的就寢閱讀]變成[讀一頁],[做30分鐘瑜珈]變成[拿出瑜珈墊],並且可以階段性的改變習慣。
成為晨型人,第一階段,每天晚上十點前到家。第二階段,每天晚上十點前關掉所有電子裝置。第三階段,每晚十點前躺到床上(閱讀或更另一半聊天)。第四階段,每天晚上十點前熄燈。第五階段,每天清晨六點起床。


獎賞:讓獎賞令人滿足

第四步驟是我最喜歡的步驟,也就是讓習慣變成一種獎賞,讓獎賞令人滿足。當我們得到獎賞後就更容易養成習慣。
像是: 使薄荷口味的牙膏,讓刷牙後有口氣清新的感覺,創造正面的刷牙經驗。帶來獎賞的行為會被重複,帶來懲罰的行為會被避免。

如何每天堅持好習慣,最好的方法就是紀錄。習慣追蹤器幫我們養成習慣。
習慣追蹤器:

  1. 好處一,習慣追蹤顯而易見。
  2. 好處二,習慣追蹤有吸引力。
  3. 好處三,習慣追蹤令人滿足。

習慣追蹤器會幫助我們持續追蹤習慣,但是不是讓我們被這些紀錄而綁住。
[當測量成了目標,就不再是個好的測量方式]測量只有在引導你、祝你看清全局,而不是消耗你心神的時候,才對你有用。


如果喜歡這本書真的很值得買回家收藏。我今天就練習看完一本書買上寫閱讀心得,好好養成讀書且有輸出的生活
原子習慣

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

近期文章

  • [SAS] Macro Language 基礎內容
  • ccClub 讀書會推薦,免費學python
  • [閱讀心得 #21]你願意,人生就會值得
  • 理想生活,該長怎麼樣子?
  • 多益330 → 多益785 多益成績棕色到藍色證書

近期留言

  • 「peter」於〈多益330 → 多益785 多益成績棕色到藍色證書〉發佈留言
  • 「wenwu」於〈[SAS]存活分析(2) COX regression model〉發佈留言
  • 「joey53111」於〈Statistical Programmer在CRO工作一年的心得〉發佈留言
  • 「丁柏仁」於〈Statistical Programmer在CRO工作一年的心得〉發佈留言
  • 「peter」於〈Statistical Programmer在CRO工作一年的心得〉發佈留言

免費訂閱

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

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

Statistics

  • 11,181
  • 592,864
  • 73
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-01-21

      SAS

      [SAS]傾向分…

      2020-10-28

      SAS

      [SAS]Log…

      2020-06-10

      SAS

      [SAS]迴歸分…

      2020-02-28

      統計分析

      [SAS] Ma…

      2026-01-21

      統計分析

      什麼是meta-…

      2024-11-05

      統計分析

      Test-ret…

      2024-06-07

      統計分析

      [SAS]傾向分…

      2020-10-28

  • SAS
    • SAS

      [SAS] Ma…

      2026-01-21

      SAS

      [SAS]傾向分…

      2020-10-28

      SAS

      [SAS]Log…

      2020-06-10

      SAS

      [SAS]迴歸分…

      2020-02-28

      SAS

      [SAS]線性迴…

      2020-02-26

  • 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