lecture1-NN的簡介


    這是DL的發明人Hinton在多倫多大學的2013年冬季教授de課程,並將視頻分享到coursera網站上。其中不但有視頻,也有課件,但是Hinton主頁上還有他上課的課后問題,Hinton告訴學生這些視頻作為課前看看,課中在討論和上課,其實這種方法很好。可惜估計一輩子也看不到大牛了,只能沾沾他的放到萬里的光了,不過Hinton的課程的確每節課包含的信息太多了,還是較為難消化的,不如ng說的通俗易懂,看來傳道授業上還是ng更勝一籌。Hinton針對研究生的課程是很大的貼近DL的,但是沒有視頻,只有課件,可惜了。

一、我們為什么需要機器學習

    要回答這個問題首先要知道什么是機器學習。Hinton認為對於很多問題來說,例如:在一個混亂的場景中通過不同的光照條件下如何用一種新穎的觀點去正確的識別一個3D對象,計算一個信用卡的交易是否是詐騙等問題的程序是很難寫的。因為我們不知道我們的大腦是如何處理這些問題的,即使我們知道原理,這個程序也是相當,相當復雜的。而且對於第二個問題,沒有任何的規則既能夠很簡單而且很可靠。我們需要計算大量的弱規則(weak rules),而且詐騙是個動態的目標,我們沒法將程序進行固定,這個程序需要一直的學習保持changing。

  個人觀點:Hinton認為的機器學習其實就是在模擬人腦的情況下如何讓程序簡單,可靠。

   不同於以前針對每個具體的任務我們去寫一個單獨的程序,我們通過收集大量的樣本,然后在給定輸入的情況下指定正確的輸出,一個機器學習算法就是通過在這些樣本的基礎上通過生成一個程序來完成這個工作。這個程序是通過學習算法生成的,看上去是不同於手寫的程序,例如它有可能會包含着百萬級別關於如何衡量證據的參數(其實就是權重)。如果我們的工作是正確的,那么這個程序在新情況下工作的將和我們之前訓練情況下的一樣好。如果數據集更換了,那么這個程序也能夠很容易的改變並在新的數據集上進行訓練。而且現在這種時代,數據的計算所花的代價比支付一個人去寫一個具體任務的代價要低好多(機器成本和人工成本)。所以現在能夠提供一個大而復雜的程序去處理這些不同的任務。

    很多任務可以通過學習來完美的解決,比如:一、模式識別:真實場景中的對象識別、人臉驗證或者人臉表情識別、口語識別;二、異常識別:信用卡交易中不尋常的序列、核能發電站的傳感器讀數的不尋常模式;三:預測:未來股票的價格或者貨幣交易率、一個人喜歡什么樣的電影等。

    在生物實驗中,果蠅因為獲取方便而且繁殖迅速加上人類對果蠅已經了解很多,所以它是生物實驗的標准數據,而對於ML來說,MNIST也是這樣一個數據庫,首先是這個數據的公開性,而且可以通過一個適中大小的NN來快速的學習,而且因為有各種ML方法在這個數據上實驗,使得我們可以很容易的相互之間進行比較。所以這里將MNIST作為一個標准任務數據集。


    這個數據集已經成功的被NN征服了,但是其中具體的原理卻有些不是很明朗。假設上圖中綠色框框中的數字2,給你一串阿拉伯數字,你能猜得出這是2,但是到底是什么讓他成為2,這個就不知道了。如果說將其中的一個重疊到另一個,會發現是不完全匹配(不重合),如果稍微的傾斜一下,那么就更不可能重合了,所以這里不是用簡單的模板 去套,這就是為什么MNIST對於ML來說是個好數據集。相對於現在來說,MNIST是已經輕松的被ML解決了,所以朝着更宏大的目標看去,ImageNet任務。現在可以創建有着100百萬個參數的NN,從1.3百萬個高分辨率的訓練圖像中區分1k個目標類別。在2010年的挑戰賽中top 1上獲得了47%的錯誤率,在top 5上獲得了25%的錯誤率。在2012年Krizhevsky創建了一個非常深的NN,並在top1 上獲得了低於40%的錯誤率,在top 5上獲得了少於20%的錯誤率。(在lecture 5中詳細說明)。

    


如上兩個圖,第一個圖是為了說明在很多情況下,我們在這個數據集上獲得的效果還是可以的,但是因為單獨的圖片上很多信息的缺失,比如第一個和雞頭一樣的圖片,那個你完全肉眼猜不出是鷹還是水獺什么的,其實覺得這個可以接受吧,因為我們人類可以看到整個圖像,這里是數據不充分的情況下的;第二幅圖是為了說明我們的NN可以用在很廣泛的對象識別中,但是也因為如上圖中的信息缺失或者與其他對象超相近而識別錯誤。

    NN應用的另一個廣泛的任務是:語音識別,一個語音識別包含着差不多3個階段:

               預處理:先將這個聲波轉換成聲音系數。然后差不多每10毫秒提取一個新的向量。

              聲音模型:通過獲得一些聲音系數的相鄰向量,並用他們去對那些被使用的音素進行下賭注。就像一個小窗口,我們去猜測這里面的音素是什么,音素的哪部分在里面。一個很好的語音識別系統,需要對一個音素有很多可選的模型,每個模型都有這三個部分。所以會有成千的部分去需要猜測這是什么(這段Hinton說的 不懂啊,我不是做語音識別的,所以挺迷糊的),所以需要對這成千以上的進行下賭注。

           解碼:一旦對上面的都進行下賭注了,就可以進入到解碼階段的工作,它可以將找到合理的猜測,然后拼接稱成對應於各種各樣的事情,即序列的下賭注。

    多倫多大學的DNN的先驅Geroge Dahl和Abdel-rahman Mohamed現在將之前的ML方法來放在聲音模型上,現在都開始用在實際的系統上。


這兩個先驅采用了許多二值神經元,采用許多聲音幀,然后在標簽上進行下賭注。他們使用的是小型的數據庫,而且183個可選的標簽,並做了一些預訓練,在最后獲得了20.7%的錯誤率。這個數據集在語音識別中就和MNIST一樣的地位。


上圖就是12年的結果圖,來自於微軟研究院,IBM和谷歌的。比如微軟的,從之前最好的27.4%的錯誤率改成現在18.5%的錯誤率,而且之前想有更好的效果還得訓練2000個小時,現在只要訓練309個小時就能達到相似的結果。

二、什么是神經網絡

    研究神經計算的原因是為了:理解大腦是怎樣工作的;為了從神經元獲得如何並行計算的靈感和他們之間自適應的連接(比如大腦對於視覺識別等來說是輕松應對,但是對於乘法計算等並行卻不是很好);從大腦中獲得新穎的學習算法去解決實際的問題,如果我們知道大腦實際是怎樣工作的,那么學習算法將會變得很有用,這也是這個課程的目的所在。這部分主要說的就是生物上的神經網絡,就是給個直觀的理解(對於高中生物聯賽二等獎的來說,輕松應對,所以這部分就不說明了,直接貼slides)。





下面這個slide就是為什么很多人覺得可以做一個通用的模型去應對所有的任務,就像人一樣:


三、神經元的一些簡單模型

    雖然現在使用的神經網絡模型沒有上面說的那么復雜,但是也足夠復雜了,對於現在的我們來說。我們現在的模型都可以稱之為理想化的神經元模型,是移除了一些具體的條件,但是可以實質上的反映真實的神經元的本質的,這也允許我們能夠利用數學去對它和與它相似的系統進行分析,而且一旦我們懂得了基本的原理,那么就可以一點點的把它變得更復雜,使這個模型更真實。但是要時刻記得,這個模型其實還是錯的,不是真正的神經元模型,比如真實的神經元之間的聯系是實值(應該說的是連續的意思吧)的而不是現在這種離散的激活值,但是采用離散的這種想法仍然有助於ML的發展。

    線性神經元是現今最簡單的了,他通過限制計算部分來讓我們懂得一些最基本的情況,然后在進行復雜的擴展。


上圖就是線性神經元的計算函數。

    早在1943年受馮諾依曼的影響McCulloch-Pitts等有了新的想法,首先通過對輸入進行權重計算和,然后當這個權重和超過了一個閾值,那么就會輸出一個激活脈沖。McCulloch和Pitts 認為,每個脈沖就像是計算一個命題的真值,並將每個神經元的真值結合起來來計算的另一個命題的真值。這是1940年代的想法。


上圖就是1940年代的感知機所干的事情。

    對於如何寫這個線性神經元函數,其實下面的兩種方法都是可以的,只是在不同場合考慮不同的計算方便:


    將線性神經元和二值閾值神經元(上面的感知算法)結合起來的就是修正線性神經元,有時候也叫做線性閾值神經元。首先計算輸入的線性權重和,然后在輸出的時候是非線性的,遵照下面的函數來進行:


上圖中的函數圖好像SVM的原理圖啊(我之前寫的svm簡介中的逼近圖)

      個人認為:這種神經元的計算方法是離真實的又靠近了一步,因為在當超過閾值的時候那么激活的強度不應該被限制,而是隨着計算結果的變化,激活強度有所變化,而當被抑制的時候,那么就是一直處於抑制狀態(這里不考慮真實神經元的反饋和強抑制情況)。

    但是在現在這個時代使用的最頻繁的還是sigmoid神經元,他是有着一個實值(看來real-valued,應該就是連續的意思吧)輸出,而且很平滑,並在輸出上還有所界限:sigmoid函數使用的是邏輯函數,而且有着很簡單的導數,利於學習。


sigmoid神經元

    隨機二值神經元采用的計算方法和sigmoid神經元是一樣的,但是他是將輸出的 y看成概率,因為概率的總和為1,所以看上去理所當然,隨機在於輸入是隨機的(隨機變量),但是輸出是通過sigmoid函數決定的。(說的煩了點,其實就是個簡單的用概率的觀點來解釋罷了)。

四、一個學習的簡單例子

     這里舉得例子是如何去識別手寫形狀(其實就是用的MNIST)。考慮一個有着兩層神經元的NN,底層神經元表現像素的強度,頂層神經元表現已知的形狀。當一個像素是黑色的,那么他就有資格投票自己屬於什么樣的形狀(即這個像素是屬於0的 還是1的這種),當所有的像素都投票之后,獲得最多得分的就是所猜測的數字的形狀(Hinton這里說的就是集體專家系統的思想)。


上圖就是,考慮一個像素他到底投給哪個形狀的票。


       很自然的權重就是介於輸入和輸出之間的邊的值,對於權重都在干森么,我們不知道,所以可視化也是個很好的任務(這里舉得例子是第一層權重的可視化,高層權重的可視化是更加麻煩的,參考: visualizing higher layer features of a deep network),有利於知道他們是怎么工作的。所以,針對每個輸出單元,我們都建立一個他們對應的輸入圖像的“map”,去顯示從輸入像素到輸出圖像中對應的像素的強度。上圖中,輸入圖像是任意的(這里舉個例子是2),然后往上的那個是個映射,是每個像素對應輸出的權重映射,這里的權重都是初始化為隨機值的,然后不斷的通過給定一個圖像,就通過已激活的像素進行遞增這個當前正確類別的像素強度,但數量多了,就會造成失控,所以需要從所有的激活像素中進行遞減。(其實說的這么多就是簡單的BP算法,先前向傳播,然后后向傳播)


上圖就是經過很多的樣本的訓練之后所獲得的結果圖。並可以看出,其實這不是模版的嵌套,因為仔細觀察上圖中7和9,他們下半部分都是沒有正權值的,因為他們兩個來說,下面的部分是相同的,沒有決定性,所以權值顯示的都是具有決定性的信息。但是這個學習算法是很簡單的,所以學到的決策信息不多,相反他的確學到一些形狀模版的東西,最后的結果其實是通過這些模版進行比對,重合最多的數字就是所訓練的結果。但是對於這種想法來說,因為手寫數字是比較復雜的,所以沒法匹配。為了獲得一個數字的所有可能的變形,需要學習他們所有的特征,這量還是有些大的,因為變形是無止境的。

五、三種學習的方法

       無監督學習;增強學習;有監督學習。Hinton說這個課程的上部分是有監督學習,下部分是無監督學習,增強學習他不打算講。

    對於有監督學習來說:每個樣本都包含着輸入向量和一個目標輸出(其實就是標簽)。他有着回歸和分類兩鍾。回歸:就是目標輸出是一個實數或者是一個完整的實數向量,例如接下來6個月的股票價格或者明天中午的溫度等等;而分類的目標輸出是一個類別標簽,最簡單的標簽就是1和0,當然也有很多可選的標簽。

   有監督學習的典型工作方式:首先從許多的模型中選擇一個模型,這里可以看作是一個模型函數 ,通過使用有着許多數值參數的W,來將輸入向量 X,映射到輸出向量 Y上。這里的擬合就是通過模型的猜測輸出能夠和給定的標簽之間的差距最小。最常用的回歸上的損失函數就是 1/2 (y-t)^2。

    增強學習:(這是ng的拿手好戲,他做無人直升機可是做了好久)增強學習的輸出是一個動作或者一系列的動作,通過與實際的場合下的環境互動來決定動作,增強學習的目標就是使得選擇的每個動作都能夠最大化對未來的期望,而且使用一個折扣因子來計算未來的期望,所以可以不用看的太遠,而且增強學習很難,因為未來的期望是很難去知道是對還是錯的,而且一個標量的期望也給不了太多有用的信息。所以沒法使用百萬級別的參數去學習增強學習,其他兩個可以,而且增強學習的參數一般也就是100或者1k的級別。

   無監督學習:在接近40多年中,無監督學習一直被ML社區的人所忽略,大家一直以為無監督學習就是聚類。一個重要的原因是因為大家不知道無監督學習的目標是什么,一個主要的目標其實是產生輸入的內部表征,然后將他用在后續的有監督或者增強學習上;(后一個例子 不知道怎么理解,理解不了Hinton說的是什么)你能夠用雙眼去觀察物體表面的距離,而不需要腳踩的一步一步的去量。

   其他無監督學習的目標就是:他能提供關於輸入數據的一個緊湊的,低緯度的表征:高維度輸入通常都可以基於一個(或幾個)低維度輸入()參考線性代數中的基向量表示法,PCA就是廣泛的用來查找一個低緯度表征的線性方法;能夠提供關於輸入數據的具有經濟性的高維度表征,例如特征提取:二值特征通常來說是很經濟的,因為只需要一位就能表達,而且對於高維的來說,因為是實值特征,所以很多值是接近於0(稀疏的原理);第三個目標就是找到輸入的一個合理的聚類,聚類可以被視為一個非常典型的稀疏編碼,因為差不多所有的特征中只有一個是非0的(這里暫時理解無能,估計看了后面的,回頭看就好多了)。

   









免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM