2016年8月30日 星期二

Deep learning 知識整理

自從AlphaGo在與南韓棋士李世石的圍棋對戰中取得了4勝ㄧ敗的好成績

背後的深度學習 (Deep Learning) 技術成為最近相當火紅的名詞

淺談Alpha Go所涉及的深度學習技術 ( Alpha GO 刊登在 Nature 上的論文 )

於是在這邊嘗試著用淺顯的語言試圖描述這個技術

以下的文章是目前看過講述深度學習最詳盡的文章



配合影片


一天搞懂深度學習 by 李宏毅教授


Wiki上寫得有點模糊,引述其中最重要研究里程碑的部分 

深度神經網路是一種具備至少一個隱層的神經網路。與淺層神經網路類似,深度神經網路也能夠為複雜非線性系統提供建模,但多出的層次為模型提供了更高的抽象層次,因而提高了模型的能力。深度神經網路通常都是前饋神經網路,但也有語言建模等方面的研究將其拓展到遞迴神經網路[43]卷積深度神經網路(Covolutional Neuron Networks, CNN)在電腦視覺領域得到了成功的應用[44]。此後,卷積神經網路也作為聽覺模型被使用在自動語音識別領域,較以往的方法獲得了更優的結果[45]

簡單來說 Deep learning 是具備至少一個隱藏層(hidden layer) 半監督式的機器學習方法 (註1)

可以使用捲積式神經網絡( Convolution Neural Network, CNN )做為實現工具 

至於什麼是CNN呢 ? 下面有一個簡短的影片對CNN的介紹 : 


下面三張圖是 CNN 的示意圖

一起合併起來看算是很容易理解

基本上使用了捲積式神經網絡的技術

能夠在有了特定影像的輸入後,用來做下ㄧ步分類的動作


但是,這邊就需要知道為什麼需要進行 Convolution 與 Pooling (即Subsampling)

Convolution 做的事情是把特徵從影像中提取出來 (至於為什麼,需要翻閱論文來解答)

Pooling(池化) 則是因為需要分類 convolution 的時候產生過多的特徵,不但數量龐大,也容易發生過度擬合(overfitting)的現象。因此,池化是來進行特徵統計的動作,讓它們轉變成比較低維度的資料,也避免過度擬合現象

透過前述的方法對機器學習演算法進行訓練

我們能夠獲得一個具備有學習能力且高可性度預測能力的系統

(尚待補完)

註1 : 机器学习算法汇总:人工神经网络、深度学习及其它



2016年8月23日 星期二

[學習筆記9] 機器學習基石 - Feasibility of Learning :: Connection to Learning

前面老師提到了從罐子裡抽取彈珠的例子

我們可以將它類比到機器學習領域的知識

如下圖呈現的

x是指手上有的彈珠,大寫的X則是指資料的集合

我們目前並不知道我們的假設模型 h(x) 與我們想要達成的目標 f(x)差距多少

先把資料抓出來之後,檢查看看手上的資料跟正不正確

假設的 h 跟 目標f 相符不相符

如果不符合,則把彈珠漆成橘色 (Label成橘色)

如果符合,則把彈珠漆成綠色 (Label成綠色)

並檢查 h 在 D 這組資料上的表現到底有多好

看看有幾筆 h(x) 跟 yn不相同

如果相符合的程度很

就可以用這個來預測未知的橘色彈珠的出現機率mu (下圖左邊第一行)

可以得到ㄧ個大概接近(PAC)的預測模型 

(但是別忘了,手上取樣的資料未必能夠代表其他尚未被取樣出來資料)


現在,我們開始把原本的模型變得更完備 (補充 : 讓我想到線性控制系統中的知識,我們可以用手邊目前得到資訊,設計ㄧ個估測器預測下ㄧ步系統的走向)

我們有ㄧ個未知的資料分佈機率 P(不需要知道),虛線的部分代表未知的部分

由P來衡量右上角的 "?"發生了什麼事情

從H裡面取ㄧ個h出來出來

透過我們手上有的資料來判斷h與f是否接近

所以這邊我們可以用我們手邊知道的事情 Ein (In-sample error)

來推估 Eout (Out-of-sample error)



換句話說,根據霍夫丁不等式,隨著取樣的N越大,Ein跟Eout的差距會越來越小

所以如果差距夠小的情況下(Q:到底怎樣才算小?),Ein可以代表Eout

所以不需要知道Eout,Ein就能夠進行預測



如果今天Ein很小,表示Error很小,那麼我們選的h效果會很不錯

剛剛前面的推論都是建立在同ㄧ個h上

而且如果都強迫選擇同一套h的話,學習的結果通常就不佳 

因為相當於常用同一套方法應付不同問題

有很大的可能,Ein會很大,那麼準確度就不好


當然,我們選完h之後,不是就沒事了

還要透過其他的驗證流程來確保這個假設模型 h 真的能成為適合的學習模型 g



2016年8月20日 星期六

[學習筆記8] 機器學習基石 - Feasibility of Learning :: Probability to the Rescue

這堂課索要探討的內容需要仔細思考

筆記7的時候我們開始探討了一個問題就是

請問 : 是不是所有的問題都能夠應用機器學習呢 ? 

也就是本堂機器學習課程中第一個想要分享的部分 : When Can Machine Learning Learn ?

與前一堂 Feasibility of Learning :: Learning is Impossible? 互相呼應


拿真實世界的應用來思考

假如我們擁有手上有海量的資料

我們從這些資料裡面隨機抽取出部分資料(即所謂的取樣 Sampling)

然後看看這些取樣後的資料

是不是就能夠代表這群資料母體的資料分佈比例,或是特定資料出現的機率呢?

圖一、如何知道橘球的出現機率 ?


為了要能夠了解上述的問題

我們可以從統計學的角度切入

一個是假設母體的狀況,另一個是取樣之後的結果

我們是不是能夠想方法找到接近母體狀況的取樣結果呢 ?

(要小心,如果只相信取樣一次的結果是十分危險的,所以多次取樣是必要的)

圖二、從機率與統計的角度切入

能不能夠從我們手上取樣的彈珠資料(in-sample υ)

推估剩餘罐子中的橘色彈珠分佈情形(out-of-sample μ)呢 ?

這題的答案可以是 No! 也能是 Yes!,為什麼呢 ?

這要取決於剩餘的彈珠分佈狀況是不是跟我們手上取樣出來的彈珠分佈狀況很接近!


圖三、nu與mu


如果今天我的取樣的量夠大(N夠大)的情況下,我的μ(剩餘罐中的橘彈珠的出現機率) 跟 

υ(取樣的橘彈珠的出現機率)彼此數值會很接近

有ㄧ個數學式能夠說明這個現像,稱作霍夫丁不等式

圖四、霍夫丁不等式


但是要能夠說 in-sample υ  out-of-sample μ 很接近,就必須要冒這個結果只能是大概正確

(Probably approximately correct,PAC)的風險,畢竟這個只是統計上的結果,未必真的能夠

完全代表真實情況 !

圖五、PAC

有了 PAC,那麼,在足夠大的取樣資料個數N的情況底下

我們可以從  υ 在PAC的條件下推論出未知的 μ 


圖六、PAC與霍夫丁

補充資料 :

1. [台大机器学习笔记整理]机器学习问题与算法的基本分类&由霍夫丁不等式论证机器学习的可行性

2. 机器学习基石笔记4——在何时可以使用机器学习(4)

2016年8月19日 星期五

[學習筆記7] 機器學習基石 - Feasibility of Learning :: Learning is Impossible?

是不是所有的情況都能使用機器學習來找到可能的解答呢 ?

答案是否定的,下面的投影片中就給出了針對這個問題的解答

可以發現,一旦說答案是某一類,就可以找到反例說明對方是錯的



天下沒有白吃的午餐,想要能夠找到真正的答案還是需要費一番功夫考慮更多情況

就像下圖中,並沒有考慮的的其他情況(outside D的情況),還是有許多種可能

才能夠將問題給突破,或是找到真正的限制



機器學習(machine learning)相關資源整裡

關於機器學習(Machine Learning)我想大家對於這個名詞都不陌生

但是究竟在研究什麼,我想可以參考一下維基百科的內容 (維基百科介紹 )

我針對 Wiki 內容的部分進行一個節錄 :

機器學習理論主要是設計和分析一些讓計算機可以自動「學習」的算法。機器學習算法是一類從數據中自動分析獲得規律,並利用規律未知數據進行預測的算法。因為學習算法中涉及了大量的統計學理論,機器學習與推斷統計學聯繫尤為密切,也被稱為統計學習理論。


理論教學

線上課程

1.  國立台灣大學 NTU 公開課 - 授課教師 : 林軒田 教授

機器學習線上課程的話不得不推薦 林軒田老師老師的

機器學習基石與機器學習技法 這兩堂課程 (連結內有Youtube影片與投影片可供下載)

用深入淺出的方式講解一門困難的學科,對於想要入門的人十分推薦 !

2. 史丹佛大學 Stanford U 公開課 - 授課教師 : Andrew Ng 教授

我想網路上有很多人分享

上課影片 Youtube 連結


實務經驗(知行合一)

開發工具 

1. Python - 機器學習套件 scikit-learn  (同場加映 : 內容十分詳盡的中文教學與範例的網站)

2. Python - Google Tensor flow



真實世界應用

商業應用

1. 廣告推播預測 - 人工智慧和機器學習有何不同?哈佛AI專家告訴你

2. 影像識別 - 看富士通如何運用深度學習技術創新企業應用

3. 自動分類系統 - 幫大腦省力!隱身在 Google 郵件、翻譯、照片背後的「機器學習」

4. 棋類競技 - 淺談Alpha Go所涉及的深度學習技術

5. IC設計 - 一年追上摩爾定律七年進度,Google 首度揭露自製機器學習晶片

6. 美圖APP - 讓照片變成畢卡索作品,濾鏡App「Prisma」的秘密是什麼?

[學習筆記6] 機器學習基石 - Types of Learning :: Learning with Different Protocol

Batch Learning 

這邊的Batch指的ㄧ批的"批"。在不告訴演算法的狀況底下,丟入一批資料要資料進行分類,

例如輸入一批的E-mail資料交給機器學習演算法進行分類。



Online Learning

像排隊一樣,循序的處理資料,按照順序進行標籤與分類的動作。如果先前垃圾郵件自動篩

選機制如果判斷錯誤,像是垃圾郵件結果被判定不是,以及不是垃圾郵件卻被判定是垃圾郵

件,我們可以將這些錯誤的結果一筆一筆逐步進行修正,這便是online learning的主要概念。

PLA演算法的概念也可以應用在online learning上。一筆一筆檢察,如果正確分類,則跳過該

結果;若分類錯誤,則逐步進行修正。


Active Learning

這些與資料溝通的方式可以對應到學生平常學習的概念

Batch Learning就像填鴨式教育 ('duck deeding'),一次丟一堆問題給你,等你寫完答案之後再

來看你寫得對不對

Online Learning 則是一個例子一個例子的被動式教學('passive sequential'),像是數學一樣,一題例題教完之後再換下一題。

這些學習方法都顯得被動,因此我們能不能夠讓機器自己提出問題來讓機器的答題能更快?

因此誕生了Active Learning,讓程式能夠主動問問題。



[學習筆記5] 機器學習基石 - Types of Learning :: Learning with Different Data Label

Supervised vs Unsupervised


  • Supervised Learning 監督式學習 (Core Tool 本課的重點工具~)


是一個機器學習中的方法,可以由訓練資料中學到或建立一個模式(函數 / learning model),並依此模式推測新的實例。訓練資料是由輸入物件(通常是向量)和預期輸出所組成。函數的輸出可以是一個連續的值(稱為迴歸分析),或是預測一個分類標籤(稱作分類) --Wiki - 監督式學習[1]

就像老師一開始告訴大家一元、五元、十元到五十元硬幣個別是什麼之後,讓學生練習去分類。


  • Unsupervised Learning 非監督式的學習


非監督式學習是一種機器學習的方式,並不需要人力來輸入標籤 --Wiki - 監督式學習[2]

非監督式的學習,是一開始沒有告訴演算法某些東西是什麼,讓演算法自己找出規則嘗試去分類或是分群

最後補充一段我覺得蠻有趣的話,這個適用在很多領域的知識裡 : 
分類器的表現好壞很大程度地跟被分類的資料特性有關。沒有單一分類器可以在所有的問題上都表現最好,這被稱為『天下沒有白吃的午餐理論』。

各式的經驗法則被用來比較分類器的表現及確認分類器表現的資料特性。決定適合某一問題的分類器仍舊是一項藝術而非科學
( 我 : 表示還有很多事情是目前科學知識力有未逮之處,才會以經驗公式來帶過XD )  


  • Semi Supervised Learning 半監督式學習


半監督式學習與監督式學習的差別在於,半監督式的不是所有的資料點都有標記。其餘未標記的資料則要依靠學習演算法來完成分類或分群任務。



參考資料

[1]監督式學習 - Wiki

[2]非監督式學習 -Wiki

2016年8月18日 星期四

[學習筆記4] 機器學習基石 - Types of Learning :: Learning with Different Output Space

前面的東西再做個小小複習 : 




找到模型g (代表下圖的黑線) 能夠正確分開資料之後,之後輸入資料後

就可以根據g的規則來對新的資料進行分類動作



二元分類 (Binary Classification)是機器學習裡最基礎的分類器。

在分辨不同類別的資料上,統計學已經針對這個問題有了伸入的研究,叫作回歸分析(Regression Analysis)

節錄交大工工系 統計學(二)的講義中對於回歸分析的解釋

回歸分析[1] 的主要目的是探究一個數個自變數(independent variable) 和一個因變數(dependent variable) 間的關係,進而建構一個適當的數學方程式,並利用此方程式來解釋或預測因變數之值。在迴歸分析中自變數(又稱解釋變數)以X 表之,因變數(又稱反應變數)以Y表之;自變數X與因變 數Y之間的函數關係或數學方程式,稱為迴歸模式。

Ex. 某人有某些特徵,他有某癌症的比率多高 ?


或是,探討與分析結構的機器學習方式 (錄如,自然語言處理Natural Language Processing )




參考資料:

[1] 交大工工系 統計學(二)講義  授課教師 : 唐麗英教授

[學習筆記3] 機器學習基石 - Learning to Answer Yes/No :: Non-Separable Data

Non-Linear Separability Problem

資料若屬於線性可分割(Linear separate)當然是最好

但是問題來了,真實世界裡總是不是那麼理想,總有幾個頑固份子破壞了和諧

若手上有今天非線性可分割的資料點該怎麼辦?


對於這些有雜訊存在的資料點,我們可以使用近似的方法,找到"最合適"的解


Pocket Algorithm - 與Greedy Algorithm近似的演算法

林軒田老師以小朋友手上有個玩具,還想要在抓其他的玩具來作比喻 (我 : 吃碗內看碗外)

Pocket Algorithm 是手上有一個近似解之後,再繼續尋找更合適的解


Pocket Algorithm( PLA的變形) 與 PLA的核心想法類似

但是運算上 Pocket Algorithm比 PLA演算法計算速度更久的原因在於 :

1.  但是Pocket演算法需要額外儲存目前已運算完的結果

2.  PLA演算法只要check目前這組裡面有什麼資料點分類錯誤,一找到就立刻更新權重值,直到找到最佳解就停止。但是Pocket演算法面對得可能是非線性可分割,因此需要檢查所有的分類結果,直到找到最適合的那組解為止。在相同事情上,Pocket演算法花費的時間會更久。

Learning to Answer Yes/No 小結

最後,對於前面的學習內容來個總結 : 

Perceptron Hypothesis Set (Set of candidate formula)與PLA演算法 

可以解決可線性分割(Linear Separability)的分類類別

至於非線性分割(Non-Linear Separability)的問題,則要仰賴Pocket演算法求得近似解

註 : 這邊的Perceptron模型就是H中的其中一個模型





[學習筆記2] 機器學習基石 - Learning to Answer Yes/No :: Guarantee of PLA

Linear Separability



證明題 1



證明題 2



在 14頁的地方我就卡住了

這個部分我還在嘗試 : P

兩個直槓[1]似乎也是絕對值的意思

[1] http://goo.gl/1wTYkc

[學習筆記1] 機器學習基石 - Learning to Answer Yes/No :: Perceptron Learning Algorithm

前情題要

A takes D and H to get g = 機器學習演算法A由訓練資料D與可能的預測模型資料庫,找出最合適的最終預測模型g

回到一開始的信用卡的發卡驗證問題, 今天我們想要找到一個預測模型 f ,能夠讓我們丟入申請辦卡人的資料X之後,得到誰適合申辦信用卡的結果Y。

但在不知道f的情況下(天下沒有白吃的午餐,一切還是要自己來: P),透過過去的歷史紀錄D,配合機器學習演算法A,從假設組合H  (H中包含多種可能的模型)裡面選一個預測模型g (但g前幾次的預測效果可能不佳,需要機器學習演算法A多次的修正參數進行調整) 

將資料x丟入最接近真實模型f的訓練模型g之後,便能夠得到結果Y




Perceptron Learning Algorithm (感知層學習演算法, PLA) [1] 

(Q: 如何證明在有限步驟內可以找到最後的解答 ?)

資料分類

在作PLA之前,首先來將資料點來進行一個分類




Sign函數[2]會根據 Sigma算出來的結果 (內含資料權重值*該項目資料數值)

減去 Threshold(門檻值) 的大小來判定

若符合條件,則判定為good,賦予 +1 值;反之,則為bad,賦予 -1 值

這邊的 h即為perceptron (感知神經元)




詳情可以看類神經網路


PLA演算法

PLA 林軒田老師戲稱叫作 知錯能改演算法

演算法過程如下面的投影片所表示

1. 首先演算法會隨機選擇一條線作為起始點

(當然,不考慮最佳化的情況下,若選的位置不好可能會需要多幾次運算次數)

然後檢查所有的資料點分類是否正確

2. 若有錯誤,則修正權重數值

3. 若有錯誤則繼續重複步驟2,直到找到可以正確分類的分割線為止

(答案可能不只有一個)






參考文獻 :

[1] 感知學習演算法(Perceptron Learning Algorithm)白話說明

[2] 符號函數 - Sign()  Wiki


別人寫得筆記,更為用心跟詳細,分想給大家

林軒田教授機器學習基石 MACHINE LEARNING FOUNDATIONS 第二講學習筆記
/* 載入prettify的autoloader */ /* 載入JQuery */