反向傳播算法(back propagation algorithm, BP-algorithm)是深度學習的最重要的兩大基石(另外一個是梯度降低算法),幾乎全部的深度學習算法底層都會調用BP算法,其本質就是對鏈式求導法則的應用而已. 而穿越時間的反向傳播算法(back propagation through time algorithm, BPTT-algorithm) 則是BP上的應用,其核心沒有改變,只不過在應用時,要注意一些穿越時間的特別之處.html
深度學習包含兩方面內容:算法
1.更好的訓練深度神經網絡。神經網絡隱藏層超過兩層就算深度神經網絡,三層的NN的訓練還好說,可是若是NN不少層數呢?那將會面臨梯度彌散和梯度爆炸等問題。因此爲了讓訓練的DNN取得好的效果,就有了一些訓練DNN的技巧,好比反向傳播算法、激活函數、批量歸一化、dropout等技術的發明;而梯度降低是爲了更好的優化代價函數(損失函數),無論是機器學習仍是深度學習,總會須要優化代價函數。
2.設計網絡結構以更好的提取特徵。增長神經網絡隱藏層就能提取更高層次特徵,卷積神經網絡能提取空間上的特徵,循環神經網絡可以提取時間序列特徵,等等;因而各類網絡結構被髮明出來,好比AlexNet,LeNet,GooleNet,Inception系列,ResNet等等,另外還有LSTM等等。
網絡結構再美,若是不能訓練到收斂,就是不work。因此咱們今天介紹的這些技術就是爲了更好的訓練DNN,它們是保證可以訓練好的DNN的基礎,因此它們叫深度學習的前戲!!數據庫
數學視角:
編程
事實上,神經網絡的本質就是經過參數與激活函數來擬合特徵與目標之間的真實函數關係。初學者可能認爲畫神經網絡的結構圖是爲了在程序中實現這些圓圈與線,但在一個神經網絡的程序中,既沒有「線」這個對象,也沒有「單元」這個對象。實現一個神經網絡最須要的是線性代數庫。網絡
下文主要講述前饋神經網絡:架構
這個值稱之爲損失(loss),咱們的目標就是使對全部訓練數據的損失和儘量的小。機器學習
若是將先前的神經網絡預測的矩陣公式帶入到yp中(由於有z=yp),那麼咱們能夠把損失寫爲關於參數(parameter)的函數,這個函數稱之爲損失函數(loss function)。下面的問題就是求:如何優化參數,可以讓損失函數的值最小。分佈式
此時這個問題就被轉化爲一個優化問題。一個經常使用方法就是高等數學中的求導,可是這裏的問題因爲參數不止一個,求導後計算導數等於0的運算量很大,因此通常來講解決這個優化問題使用的是梯度降低算法。梯度降低算法每次計算參數在當前的梯度,而後讓參數向着梯度的反方向前進一段距離,不斷重複,直到梯度接近零時截止。通常這個時候,全部的參數剛好達到使損失函數達到一個最低值的狀態。函數
在神經網絡模型中,因爲結構複雜,每次計算梯度的代價很大。所以還須要使用反向傳播算法。反向傳播算法是利用了神經網絡的結構進行的計算。不一次計算全部參數的梯度,而是從後往前。首先計算輸出層的梯度,而後是第二個參數矩陣的梯度,接着是中間層的梯度,再而後是第一個參數矩陣的梯度,最後是輸入層的梯度。計算結束之後,所要的兩個參數矩陣的梯度就都有了。學習
反向傳播算法能夠直觀的理解爲下圖。梯度的計算從後往前,一層層反向傳播。前綴E表明着相對導數的意思。
反向傳播算法的啓示是數學中的鏈式法則。在此須要說明的是,儘管早期神經網絡的研究人員努力從生物學中獲得啓發,但從BP算法開始,研究者們更多地從數學上尋求問題的最優解。再也不盲目模擬人腦網絡是神經網絡研究走向成熟的標誌。正如科學家們能夠從鳥類的飛行中獲得啓發,但沒有必要必定要徹底模擬鳥類的飛行方式,也能製造能夠飛天的飛機。
優化問題只是訓練中的一個部分。機器學習問題之因此稱爲學習問題,而不是優化問題,就是由於它不只要求數據在訓練集上求得一個較小的偏差,在測試集上也要表現好。由於模型最終是要部署到沒有見過訓練數據的真實場景。提高模型在測試集上的預測效果的主題叫作泛化(generalization),相關方法被稱做正則化(regularization)。神經網絡中經常使用的泛化技術有權重衰減等。
在深度學習中,泛化技術變的比以往更加的重要。這主要是由於神經網絡的層數增長了,參數也增長了,表示能力大幅度加強,很容易出現過擬合現象。所以正則化技術就顯得十分重要。目前,Dropout技術,以及數據擴容(Data-Augmentation)技術是目前使用的最多的正則化技術。
1.概念
對於一門技術的學習而言,首先最重要的是弄清概念。只有將概念理解清楚,才能順暢的進行後面的學習。因爲神經網絡漫長的發展歷史,常常會有一些概念容易混淆,讓人學習中產生困惑。這裏麪包括歷史的術語,不一致的說法,以及被遺忘的研究等。
歷史的術語
這個的表明就是多層感知器(MLP)這個術語。起初看文獻時很難理解的一個問題就是,爲何神經網絡又有另外一個名稱:MLP。其實MLP(Multi-Layer Perceptron)的名稱起源於50-60年代的感知器(Perceptron)。因爲咱們在感知器之上又增長了一個計算層,所以稱爲多層感知器。值得注意的是,雖然叫「多層」,MLP通常都指的是兩層(帶一個隱藏層的)神經網絡。
MLP這個術語屬於歷史遺留的產物。如今咱們通常就說神經網絡,以及深度神經網絡。前者表明帶一個隱藏層的兩層神經網絡,也是EasyPR目前使用的識別網絡,後者指深度學習的網絡。
不一致的說法
這個最明顯的表明就是損失函數loss function,這個還有兩個說法是跟它徹底一致的意思,分別是殘差函數error function,以及代價函數cost function。loss function是目前深度學習裏用的較多的一種說法,caffe裏也是這麼叫的。cost function則是Ng在coursera教學視頻裏用到的統一說法。這三者都是同一個意思,都是優化問題所須要求解的方程。雖然在使用的時候不作規定,可是在聽到各類講解時要內心明白。
再來就是權重weight和參數parameter的說法,神經網絡界因爲之前的慣例,通常會將訓練獲得的參數稱之爲權重,而不像其餘機器學習方法就稱之爲參數。這個須要記住就好。不過在目前的使用慣例中,也有這樣一種規定。那就是非偏置節點鏈接上的值稱之爲權重,而偏置節點上的值稱之爲偏置,二者統一塊兒來稱之爲參數。
另一個同義詞就是激活函數active function和轉移函數transfer function了。一樣,他們表明一個意思,都是疊加的非線性函數的說法。
被遺忘的研究
因爲神經網絡發展歷史已經有70年的漫長曆史,所以在研究過程當中,必然有一些研究分支屬於被遺忘階段。這裏麪包括各類不一樣的網絡,例如SOM(Self-Organizing Map,自組織特徵映射網絡),SNN(Synergetic Neural Network,協同神經網絡),ART(Adaptive Resonance Theory,自適應共振理論網絡)等等。因此看歷史文獻時會看到許多沒見過的概念與名詞。
有些歷史網絡甚至會從新成爲新的研究熱點,例如RNN與LSTM就是80年代左右開始的研究,目前已是深度學習研究中的重要一門技術,在語音與文字識別中有很好的效果。
對於這些易於混淆以及弄錯的概念,務必須要多方參考文獻,理清上下文,這樣纔不會在學習與閱讀過程當中迷糊。
神經網絡實際上是一個很是寬泛的稱呼,它包括兩類,一類是用計算機的方式去模擬人腦,這就是咱們常說的ANN(人工神經網絡),另外一類是研究生物學上的神經網絡,又叫生物神經網絡。對於咱們計算機人士而言,確定是研究前者。
在人工神經網絡之中,又分爲前饋神經網絡和反饋神經網絡這兩種。那麼它們二者的區別是什麼呢?這個其實在於它們的結構圖。咱們能夠把結構圖看做是一個有向圖。其中神經元表明頂點,鏈接表明有向邊。對於前饋神經網絡中,這個有向圖是沒有迴路的。你能夠仔細觀察本文中出現的全部神經網絡的結構圖,確認一下。而對於反饋神經網絡中,結構圖的有向圖是有迴路的。反饋神經網絡也是一類重要的神經網絡。其中Hopfield網絡就是反饋神經網絡。深度學習中的RNN也屬於一種反饋神經網絡。
具體到前饋神經網絡中,就有了本文中所分別描述的三個網絡:單層神經網絡,雙層神經網絡,以及多層神經網絡。深度學習中的CNN屬於一種特殊的多層神經網絡。另外,在一些Blog中和文獻中看到的BP神經網絡是什麼?其實它們就是使用了反向傳播BP算法的兩層前饋神經網絡。也是最廣泛的一種兩層神經網絡。
經過以上分析能夠看出,神經網絡這種說法實際上是很是廣義的,具體在文章中說的是什麼網絡,須要根據文中的內容加以區分。
做者推薦課程:
機器學習這個詞是讓人疑惑的,首先它是英文名稱Machine Learning(簡稱ML)的直譯,在計算界Machine通常指計算機。這個名字使用了擬人的手法,說明了這門技術是讓機器「學習」的技術。可是計算機是死的,怎麼可能像人類同樣「學習」呢?
傳統上若是咱們想讓計算機工做,咱們給它一串指令,而後它遵守這個指令一步步執行下去。有因有果,很是明確。但這樣的方式在機器學習中行不通。機器學習根本不接受你輸入的指令,相反,它接受你輸入的數據! 也就是說,機器學習是一種讓計算機利用數據而不是指令來進行各類工做的方法。這聽起來很是難以想象,但結果上倒是很是可行的。「統計」思想將在你學習「機器學習」相關理念時無時無刻不伴隨,相關而不是因果的概念將是支撐機器學習可以工做的核心概念。你會顛覆對你之前全部程序中創建的因果無處不在的根本理念。
2.機器學習的定義
從廣義上來講,機器學習是一種可以賦予機器學習的能力以此讓它完成直接編程沒法完成的功能的方法。但從實踐的意義上來講,機器學習是一種經過利用數據,訓練出模型,而後使用模型預測的一種方法。
數據挖掘
數據挖掘=機器學習+數據庫。這幾年數據挖掘的概念實在是太耳熟能詳。幾乎等同於炒做。但凡說數據挖掘都會吹噓數據挖掘如何如何,例如從數據中挖出金子,以及將廢棄的數據轉化爲價值等等。可是,我儘管可能會挖出金子,但我也可能挖的是「石頭」啊。這個說法的意思是,數據挖掘僅僅是一種思考方式,告訴咱們應該嘗試從數據中挖掘出知識,但不是每一個數據都能挖掘出金子的,因此不要神話它。一個系統絕對不會由於上了一個數據挖掘模塊就變得無所不能(這是IBM最喜歡吹噓的),偏偏相反,一個擁有數據挖掘思惟的人員纔是關鍵,並且他還必須對數據有深入的認識,這樣纔可能從數據中導出模式指引業務的改善。大部分數據挖掘中的算法是機器學習的算法在數據庫中的優化。
統計學習
統計學習近似等於機器學習。統計學習是個與機器學習高度重疊的學科。由於機器學習中的大多數方法來自統計學,甚至能夠認爲,統計學的發展促進機器學習的繁榮昌盛。例如著名的支持向量機算法,就是源自統計學科。可是在某種程度上二者是有分別的,這個分別在於:統計學習者重點關注的是統計模型的發展與優化,偏數學,而機器學習者更關注的是可以解決問題,偏實踐,所以機器學習研究者會重點研究學習算法在計算機上執行的效率與準確性的提高。
計算機視覺
計算機視覺=圖像處理+機器學習。圖像處理技術用於將圖像處理爲適合進入機器學習模型中的輸入,機器學習則負責從圖像中識別出相關的模式。計算機視覺相關的應用很是的多,例如百度識圖、手寫字符識別、車牌識別等等應用。這個領域是應用前景很是火熱的,同時也是研究的熱門方向。隨着機器學習的新領域深度學習的發展,大大促進了計算機圖像識別的效果,所以將來計算機視覺界的發展前景不可估量。
語音識別
語音識別=語音處理+機器學習。語音識別就是音頻處理技術與機器學習的結合。語音識別技術通常不會單獨使用,通常會結合天然語言處理的相關技術。目前的相關應用有蘋果的語音助手siri等。
天然語言處理
天然語言處理=文本處理+機器學習。天然語言處理技術主要是讓機器理解人類的語言的一門領域。在天然語言處理技術中,大量使用了編譯原理相關的技術,例如詞法分析,語法分析等等,除此以外,在理解這個層面,則使用了語義理解,機器學習等技術。做爲惟一由人類自身創造的符號,天然語言處理一直是機器學習界不斷研究的方向。按照百度機器學習專家餘凱的說法「聽與看,說白了就是阿貓和阿狗都會的,而只有語言纔是人類獨有的」。如何利用機器學習技術進行天然語言的的深度理解,一直是工業和學術界關注的焦點。
能夠看出機器學習在衆多領域的外延和應用。機器學習技術的發展促使了不少智能領域的進步,改善着咱們的生活。
一、迴歸算法
在大部分機器學習課程中,迴歸算法都是介紹的第一個算法。緣由有兩個:一.迴歸算法比較簡單,介紹它可讓人平滑地從統計學遷移到機器學習中。二.迴歸算法是後面若干強大算法的基石,若是不理解迴歸算法,沒法學習那些強大的算法。迴歸算法有兩個重要的子類:即線性迴歸和邏輯迴歸。
線性迴歸就是咱們前面說過的房價求解問題。如何擬合出一條直線最佳匹配我全部的數據?通常使用「最小二乘法」來求解。「最小二乘法」的思想是這樣的,假設咱們擬合出的直線表明數據的真實值,而觀測到的數據表明擁有偏差的值。爲了儘量減少偏差的影響,須要求解一條直線使全部偏差的平方和最小。最小二乘法將最優問題轉化爲求函數極值問題。函數極值在數學上咱們通常會採用求導數爲0的方法。但這種作法並不適合計算機,可能求解不出來,也可能計算量太大。
計算機科學界專門有一個學科叫「數值計算」,專門用來提高計算機進行各種計算時的準確性和效率問題。例如,著名的「梯度降低」以及「牛頓法」就是數值計算中的經典算法,也很是適合來處理求解函數極值的問題。梯度降低法是解決迴歸模型中最簡單且有效的方法之一。從嚴格意義上來講,因爲後文中的神經網絡和推薦算法中都有線性迴歸的因子,所以梯度降低法在後面的算法實現中也有應用。
邏輯迴歸是一種與線性迴歸很是相似的算法,可是,從本質上講,線型迴歸處理的問題類型與邏輯迴歸不一致。線性迴歸處理的是數值問題,也就是最後預測出的結果是數字,例如房價。而邏輯迴歸屬於分類算法,也就是說,邏輯迴歸預測結果是離散的分類,例如判斷這封郵件是不是垃圾郵件,以及用戶是否會點擊此廣告等等。
實現方面的話,邏輯迴歸只是對對線性迴歸的計算結果加上了一個Sigmoid函數,將數值結果轉化爲了0到1之間的機率(Sigmoid函數的圖像通常來講並不直觀,你只須要理解對數值越大,函數越逼近1,數值越小,函數越逼近0),接着咱們根據這個機率能夠作預測,例如機率大於0.5,則這封郵件就是垃圾郵件,或者腫瘤是不是惡性的等等。從直觀上來講,邏輯迴歸是畫出了一條分類線,見下圖。
邏輯迴歸算法劃出的分類線基本都是線性的(也有劃出非線性分類線的邏輯迴歸,不過那樣的模型在處理數據量較大的時候效率會很低),這意味着當兩類之間的界線不是線性時,邏輯迴歸的表達能力就不足。下面的兩個算法是機器學習界最強大且重要的算法,均可以擬合出非線性的分類線。
二、神經網絡
神經網絡(也稱之爲人工神經網絡,ANN)算法是80年代機器學習界很是流行的算法,不過在90年代中途衰落。如今,攜着「深度學習」之勢,神經網絡重裝歸來,從新成爲最強大的機器學習算法之一。
神經網絡的誕生起源於對大腦工做機理的研究。早期生物界學者們使用神經網絡來模擬大腦。機器學習的學者們使用神經網絡進行機器學習的實驗,發如今視覺與語音的識別上效果都至關好。在BP算法(加速神經網絡訓練過程的數值算法)誕生之後,神經網絡的發展進入了一個熱潮。BP算法的發明人之一是前面介紹的機器學習大牛Geoffrey Hinton(圖1中的中間者)。
監督學習算法:
線性迴歸,邏輯迴歸,神經網絡,SVM
無監督學習算法:
聚類算法,降維算法
特殊算法:
推薦算法
除了這些算法之外,有一些算法的名字在機器學習領域中也常常出現。但他們自己並不算是一個機器學習算法,而是爲了解決某個子問題而誕生的。你能夠理解他們爲以上算法的子算法,用於大幅度提升訓練過程。其中的表明有:梯度降低法,主要運用在線型迴歸,邏輯迴歸,神經網絡,推薦算法中;牛頓法,主要運用在線型迴歸中;BP算法,主要運用在神經網絡中;SMO算法,主要運用在SVM中。
大數據的核心是利用數據的價值,機器學習是利用數據價值的關鍵技術,對於大數據而言,機器學習是不可或缺的。相反,對於機器學習而言,越多的數據會越 可能提高模型的精確性,同時,複雜的機器學習算法的計算時間也迫切須要分佈式計算與內存計算這樣的關鍵技術。所以,機器學習的興盛也離不開大數據的幫助。 大數據與機器學習二者是互相促進,相依相存的關係。
機器學習與大數據緊密聯繫。可是,必須清醒的認識到,大數據並不等同於機器學習,同理,機器學習也不等同於大數據。大數據中包含有分佈式計算,內存數據庫,多維分析等等多種技術。單從分析方法來看,大數據也包含如下四種分析方法:
1.大數據,小分析:即數據倉庫領域的OLAP分析思路,也就是多維分析思想。
2.大數據,大分析:這個表明的就是數據挖掘與機器學習分析法。
3.流式分析:這個主要指的是事件驅動架構。
4.查詢分析:經典表明是NoSQL數據庫。
也就是說,機器學習僅僅是大數據分析中的一種而已。儘管機器學習的一些結果具備很大的魔力,在某種場合下是大數據價值最好的說明。但這並不表明機器學習是大數據下的惟一的分析方法。
機器學習與大數據的結合產生了巨大的價值。基於機器學習技術的發展,數據可以「預測」。對人類而言,積累的經驗越豐富,閱歷也普遍,對將來的判斷越準確。例如常說的「經驗豐富」的人比「初出茅廬」的小夥子更有工做上的優點,就在於經驗豐富的人得到的規律比他人更準確。而在機器學習領域,根據著名的一個實驗,有效的證明了機器學習界一個理論:即機器學習模型的數據越多,機器學習的預測的效率就越好。見下圖:
總結起來,人工智能的發展經歷了以下若干階段,從早期的邏輯推理,到中期的專家系統,這些科研進步確實使咱們離機器的智能有點接近了,但還有一大段距離。直到機器學習誕生之後,人工智能界感受終於找對了方向。基於機器學習的圖像識別和語音識別在某些垂直領域達到了跟人相媲美的程度。機器學習令人類第一次如此接近人工智能的夢想。
那麼,從計算機來看,以上的種種能力都有種種技術去應對。
例如計算能力咱們有分佈式計算,反應能力咱們有事件驅動架構,檢索能力咱們有搜索引擎,知識存儲能力咱們有數據倉庫,邏輯推理能力咱們有專家系統,可是,惟有對應智慧中最顯著特徵的概括與感悟能力,只有機器學習與之對應。這也是機器學習能力最能表徵智慧的根本緣由。
摘抄鏈接:http://www.cnblogs.com/subcon...
http://www.cnblogs.com/subcon...