第1章-什么是深度学习(笔记)
?
在經典的程序設計(即符號主義人工智能的范式)中,人們輸入的是規則(即程序)和需要根據這些規則進行處理的數據,系統輸出的是答案
(見圖 1-2)。
利用機器學習,人們輸入的是數據和從這些數據中預期得到的答案,系統輸出的是
規則。這些規則隨后可應用于新的數據,并使計算機自主生成答案。
?
因此,機器學習和深度學習的核心問題在于有意義地變換數據,
換句話說,在于學習輸入數據的有用表示(representation)——這種表示可以讓數據更接近預期輸出。
?
所有機器學習算法都包括自動尋找這樣一種變換:
這種變換可以根據任務將數據轉化為更加有用的表示。
這些操作可能是前面提到的坐標變換,也可能是線性投影(可能會破壞信息)、平移、非線性操作(比如“選擇所有 x>0 的點”),等等。機器學習算法在尋找這些變換時通常沒有什么創造性,而僅僅是遍歷一組預先定義好的操作,這組操作叫作假設空間(hypothesis space)。
深度學習不是大腦模型。
深度學習是從數據中學習表示的一種數學框架.
神經網絡中每層對輸入數據所做的具體操作保存在該層的權重(weight)中,
其本質是一串數字。
用術語來說,每層實現的變換由其權重來參數化(parameterize,見圖 1-7)。權重有時也被稱為該層的參數(parameter)。在這種語境下,學習的意思是為神經網絡的所有層找到一組權重值,使得該網絡能夠將每個示例輸入與其目標正確地一一對應。但重點來了:
一個深度神經網絡可能包含數千萬個參數。找到所有參數的正確取值可能是一項非常艱巨的任務,特別是
考慮到修改某個參數值將會影響其他所有參數的行為。
?
想要控制一件事物,首先需要能夠觀察它。想要控制神經網絡的輸出,就需要能夠衡量該輸出與預期值之間的距離。這是神經網絡損失函數(loss function)的任務,該函數也叫目標函數(objective function)。損失函數的輸入是網絡預測值與真實目標值(即你希望網絡輸出的結果),然后計算一個距離值,衡量該網絡在這個示例上的效果好壞(見圖 1-8)。
?
深度學習的基本技巧是利用這個距離值作為反饋信號來對權重值進行微調,以降低當前示
例對應的損失值(見圖 1-9)。這種調節由優化器(optimizer)來完成,它實現了所謂的反向
傳播(backpropagation)算法,這是深度學習的核心算法。下一章中會詳細地解釋反向傳播的工
作原理。
雖然一些改變世界的應用(比如自動駕駛汽車)已經觸手可及,但更多的應用可能在長時間內仍然難以實現,比如可信的對話系統、達到人類水平的跨任意語言的機器翻譯、達到人類水平的自然語言理解。
我們尤其不應該把達到人類水平的通用智能(human-level?general intelligence)的討論太當回事。
在短期內期望過高的風險是,一旦技術上沒有實現,那么研究投資將會停止,而這會導致在很長一段時間內進展緩慢.
?
不要相信短期的炒作,但一定要相信長期的愿景。
深度學習不一定總是解決問題的正確工具:
有時沒有足夠的數據,深度學習不適用;
有時用其他算法可以更好地解決問題。
?
logreg是一種分類算法,而不是回歸算法。
?
?
貝爾實驗室于 1989 年第一次成功實現了神經網絡的實踐應用,當時 Yann LeCun 將卷積神經網絡的早期思想與反向傳播算法相結合,并將其應用于手寫數字分類問題,由此得到名為LeNet 的網絡,在 20 世紀 90 年代被美國郵政署采用,用于自動讀取信封上的郵政編碼。
?
SVM 的目標是通過在屬于兩個不同類別的兩組數據點之間找到良好決策邊界(decision?boundary,見圖 1-10)來解決分類問題。決策邊界可以看作一條直線或一個平面,將訓練數據劃分為兩塊空間,分別對應于兩個類別。對于新數據點的分類,你只需判斷它位于決策邊界的哪一側。
SVM 通過兩步來尋找決策邊界。
(1) 將數據映射到一個新的高維表示,這時決策邊界可以用一個超平面來表示(如果數據像圖 1-10 那樣是二維的,那么超平面就是一條直線)。
(2) 盡量讓超平面與每個類別最近的數據點之間的距離最大化,從而計算出良好決策邊界(分割超平面),這一步叫作間隔最大化(maximizing the margin)。這樣決策邊界可以很好地推廣到訓練數據集之外的新樣本。
?
但是,SVM 很難擴展到大型數據集,并且在圖像分類等感知問題上的效果也不好。SVM是一種比較淺層的方法,因此要想將其應用于感知問題,首先需要手動提取出有用的表示(這叫作特征工程),這一步驟很難,而且不穩定。
?
?
深度卷積神經網絡(convnet)已成為所有計算機視覺任務的首選算法。更一般地說,它在所有感知任務上都有效。
在 2015 年和 2016 年的主要計算機視覺會議上,幾乎所有演講都與 convnet 有關。與此同時,深度學習也在許多其他類型的問題上得到應用,比如自然語言處理。
它已經在大量應用中完全取代了 SVM 與決策樹。舉個例子,歐洲核子研究中心(CERN)多年來一直使用基于決策樹的方法來分析來自大型強子對撞機(LHC)ATLAS 探測器的粒子數據,但 CERN 最終轉向基于 Keras 的深度神經網絡,因為它的性能更好,而且在大型數據集上易于訓練。
?
?
先前的機器學習技術(淺層學習)僅包含將輸入數據變換到一兩個連續的表示空間,通常使用簡單的變換,比如高維非線性投影(SVM)或決策樹。但這些技術通常無法得到復雜問題所需要的精確表示。因此,人們必須竭盡全力讓初始輸入數據更適合用這些方法處理,也必須手動為數據設計好的表示層。這叫作特征工程。與此相反,深度學習完全將這個步驟自動化:
利用深度學習,你可以一次性學習所有特征,而無須自己手動設計。這極大地簡化了機器學習工作流程,通常將復雜的多階段流程替換為一個簡單的、端到端的深度學習模型。
你可能會問,如果問題的關鍵在于有多個連續表示層,那么能否重復應用淺層方法,以實現和深度學習類似的效果?
在實踐中,如果連續應用淺層學習方法,其收益會隨著層數增加迅速降低,因為三層模型中最優的第一表示層并不是單層或雙層模型中最優的第一表示層。
深度學習的變革性在于,模型可以在同一時間共同學習所有表示層,而不是依次連續學習(這被稱為貪婪學習)。
通過共同的特征學習,一旦模型修改某個內部特征,所有依賴于該特征的其他特征都會相應地自動調節適應,無須人為干預。一切都由單一反饋信號來監督:模型中的每一處變化都是為了最終目標服務。
這種方法比貪婪地疊加淺層模型更加強大,因為它可以通過將復雜、抽象的表示拆解為很多個中間空間(層)來學習這些表示,每個中間空間僅僅是前一個空間的簡單變換。
深度學習從數據中進行學習時有兩個基本特征:
第一,通過漸進的、逐層的方式形成越來越復雜的表示;
第二,對中間這些漸進的表示共同進行學習,每一層的變化都需要同時考慮上下兩層的需要。
總之,這兩個特征使得深度學習比先前的機器學習方法更加成功。
?
Kaggle 上主要有兩大方法:梯度提升機和深度學習。
具體而言,梯度提升機用于處理結構化數據的問題,而深度學習則用于圖像分類等感知問題。
?
要想在如今的應用機器學習中取得成功,你應該熟悉這兩種技術:
梯度提升機,用于淺層學習問題;
深度學習,用于感知問題。
?
長短期記憶(LSTM,long short-term memory)算法是深度學習處理時間序列的基礎,它在 1997 年就被開發出來了,而且此后幾乎沒有發生變化。
最后,在 2014 年、2015 年和 2016 年,人們發現了更先進的有助于梯度傳播的方法,比如批標準化、殘差連接和深度可分離卷積。
?
除了硬件和數據之外,直到 20 世紀前十年的末期,我們仍沒有可靠的方法來訓練非常深的神經網絡。因此,神經網絡仍然很淺,僅使用一兩個表示層,無法超越更為精確的淺層方法,比如 SVM 和隨機森林。關鍵問題在于通過多層疊加的梯度傳播。隨著層數的增加,用于訓練神經網絡的反饋信號會逐漸消失。
?
最后附上一張其他地方轉載過來的圖(不是從這本書中):
總結
以上是生活随笔為你收集整理的第1章-什么是深度学习(笔记)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: im2col原理小结
- 下一篇: 第2章-神经网络的数学基础(笔记)