這本書開篇第一章寫得特別好,各個模型的算法推導也比較全,基本涵蓋了比較經典的判別模型和生成模型。
這本書代碼和應用特別多,了解python用法和機器學習算法的代碼實現非常方便。
這本書個人感覺偏理論一點,偽代碼看着都實現不了,不過關於推薦系統的整個架構講得挺清楚的,各種推薦引擎的算法設計,基於內容的,基於鄰域,基於便簽,基於地點和時間(context)等等,最后將這些推薦引擎融合,排序,過濾等等就構成了推薦系統,從各種推薦指標中比較了推薦引擎的優劣。最后還講了如何預測評分。
《spark大數據處理技術》
這本書算是我的spark啟蒙書籍,尤其是介紹spark的核心概念,比如RDD,運行架構和任務架構都講得比較好。還有不少例子和API的講解
吳岸城的《神經網絡與深度學習》
這本書個人感覺挺好的,極貼近現實,從實際生活講到了(第一個)機器學習模型(感知機),從淺層學習講到了深層學習,之后介紹了自編碼,RBM,DBN,CNN,RNN.以及后面的AlphaGo,遷移學習,概率圖等。有時間會把書中自己感覺重要的做一下筆記
Hinton(辛頓)是反向傳播算法和對比散度算法的發明人之一
LeCun(勒丘恩)對卷積神經網絡(CNN)改進再應用
Jürgen Schmidhuber是LSTM的發明人,梯度消失的貢獻人和遞歸結構的推動者
人腦的工作原理:
大腦能做的每件事,能記住的每件事,都是很多細胞連接起來以后發揮的功能。大腦皮層的每一塊區域負責處理圖像的一方面,比如皮毛、尾巴、面部特征和動作等,這些綜合起來形成了一個完整的形象,
神經元的工作原理:細胞軸突是一條長長的纖維,它把細胞體的輸出信息傳到到其他神經元。樹突用來接收其他神經元的輸入信號。
神經元具有兩個最主要的特性,即興奮性和傳導性。
神經元可分為傳入神經元、中間神經元、傳出神經元
神經元之間相互連接的突觸隨着動作電位脈沖激勵方式與強度的變化,其傳遞電位的作用可增加或減弱。
人工神經網絡:
常用的傳遞函數:機器學習中常用的傳遞函數總結
最簡單的神經網絡:機器學習-感知機
網絡的輸出根據網絡的連接方式,權重和激勵函數的不同而不同。
由輸入的信號源、隱層及輸出組成的層叫做多層神經網絡,多層神經網絡的一個重要特征是上一層輸出只能是下一層輸入,不可跨層連接。
輸入層和輸出層一般按照數據集和需求確定,隱層神經元個數需大於輸入層。
深度學習:
人的視覺系統的信息處理是分級的。從視網膜出發,經過低級的V1區提取邊緣特征,到V2區的基本形狀或目標的局部,再到高層的整個目標,以及到更高層進行分類判斷等
神經-中樞-大腦的工作過程或許是一個不斷迭代、不斷抽象的過程
任何事物都可以划分成粒度合適的淺層特征,而這個淺層特征一般就是我們的第二層輸入。
結構性特征具有明顯的層級概念,從較小粒度划分,再用划分的基本特征組成上層特征,以此類推,可以展現特征的結構性。
傳統神經網絡一半只有兩到三層的神經網絡,參數和計算單元有限,對復雜函數的表示能力有限,學習能力也有限;而深度學習具有五層以上的神經網絡,並且引入了更有效的算法。
誤差反向傳播算法(BP)的基本思想:(1)信號正向傳播,若輸出層的實際輸出和期望的輸出不符,則進入誤差的反向傳播階段(2)誤差反向傳播:從輸出到輸入,將誤差分攤給各層的所有單元,從而獲得各層單元的誤差信號,此信號作為修正各單元權值的依據。
BP算法的問題:(1)梯度越來越稀疏:從上往下,誤差矯正信號越來越小。(2)收斂到局部最小值:尤其是從最優區域開始的時候(3)大部分數據是沒有標記的,而BP算法是有監督算法。
自動學習特征的方法統稱為深度學習。深度學習首先利用無監督學習對每一層進行逐層訓練去學習特征;每次單獨訓練一層,並將訓練結果作為更高一層的輸入;然后到最上層改用監督學習從上到下進行微調取學習模型。
深度學習的常用算法:
自動編碼器(AutoEncoder):
稀疏編碼:理論上為了確保信號重建的准確度,需要令所采用的取樣矩陣各行列之間相干性盡量低,且需矩陣元素取值隨機性盡量調高。目前被提出的簡化取樣矩陣主要包括兩種:結構化采樣矩陣與數值簡化采樣矩陣。如果在自動編碼器的基礎上加L1的規則限制,我們就可以得到SparseAutoEncoder法。
棧式自編碼器:棧式自編碼器是一個有多層稀疏自編碼器組成的神經網絡。對於一個n層棧式自編碼器的編碼過程就是,按照從前向后的順序執行每一層自編碼器的編碼步驟:
(1)通過反向傳播的方法,利用所有數據對第一層的自編碼器進行訓練
(2)移除前面自編碼器的輸出層,用另一個自編碼器替代,再用反向傳播進行訓練,這個步驟稱為預訓練
(3)在網絡的最后一層后面再加上一個或多個連接層。整個網絡可以被看作是一個多層感知機,並使用反向傳播算法進行訓練,這步也稱之為微調
有限制玻爾茲曼機(Restricted Boltzmann Machine)
玻爾茲曼機是源於物理學的能量函數的建模方法,能夠描述變量的高層互作用。
有限制玻爾茲曼機(Restricted Boltzmann Machine),以下簡稱RBM,包括隱層和偏置層,其中可見層和隱層的鏈接是方向不定的(值可以雙向傳播,也就是隱層->可見層和可見層->隱層)和完全連接的。
RBM網絡是一種隨機網絡,一個隨機網絡(比如BNN)包括兩個主要結構:概率分布函數(聯合概率分布,邊緣概率分布,條件概率分布),能量函數。其中能量函數(統計力學)是描述整個系統狀態的一個測度。系統越有序或者概率分布越集中,系統的能量越小。反之,系統越無序或者概率分布越趨於均勻分布,則系統的能量越大。能量函數的最小值,就是我們要找的系統最穩定的狀態。
RBM網絡有幾個參數,一個是可視化層與隱藏層之間的權重矩陣W,一個是可視節點的偏移量b,一個是隱藏節點的偏移量c,這幾個參數決定了一個n維(可視化層結點數)樣本如何編碼成一個m維(隱層結點數)樣本
RBM的用途:
(1)對數據進行編碼(降維)
(2)得到權重矩陣和偏移量,供BP神經網絡初始化訓練
(3)可以估計聯合概率(生成模型)
(4)可以計算條件概率(判別模型)
深度信念網絡(Deep Belief Network)
傑弗里.辛頓在2006年提出了深度信念網絡(Deep Belief Network),DBN是由多個RBM層構成的。
DBN在訓練模型的過程中主要分為以下兩步:
(1)分別單獨無監督的訓練每一層RBM網絡,確保特征向量映射到不同特征空間是,都盡可能多地保留特征信息(預處理)。
(2)在DBN的最后一層設置BP網絡,接收RBM的輸出特征向量作為它的輸入特征向量,有監督第訓練實體關系分類器(微調)。
卷積神經網絡(Convolutional Neural Network):
CNN最初誕生是為了識別二維圖形;現在,卷積神經網絡也可應用於人臉識別,文字識別等方向。
卷積網絡的每一層都將三維輸入(長,寬,深度/顏色)轉換成三維輸出值,這個轉換過程是由一個圖像過濾器(或者稱為一個有關權重的方陣)來完成的,這個過程其實就是特征提取,而這個圖像過濾器是需要人為設定的。
卷積神經網絡的各個組成部分:
如下這是一個LeNet-5網絡
(用於圖像內容識別)
,
便於我們更直觀的理解CNN的各個層次結構
:
卷積層(Convolutional Layer):對輸入數據應用若干過濾器,一個輸入參數被用來做了很多類型的特征提取(比如LeNet-5網絡
的第一卷積層(C1)使用了6個5*5的過濾器),對圖像應用一個過濾器之后得到的結果被稱為特征圖譜(FeatureMap),特征圖譜的數目和過濾器的數目相等(C1層是6個FeatureMaps,每個FM大小為:(32-6)*(32-6))。從直覺上講,如果將一個權重分布在整個圖像上,那么這個特征就和位置無關了,同時多個過濾器可以分別探測出不同的特征。比如,像青蛙捕蟲一樣,有的腦部區域負責提取(判定蚊子的)圖像特征,有的腦部區域負責提取物體的運動軌跡;一旦這兩個特征提取出來,就向特征重合的地方吐舌頭。
子采樣層(Subsamping Layer):又叫池化(Pooling)層,縮減輸入數據的規模(比如S2層應用一個2*2的采樣區域后,每個FM大小為:(28/2)*(28/2)),常用的子采樣方法有最大值合並,平均值合並和隨機合並。
全連接層(Full Connection Layer):F6層與C5層全相連,F6層計算輸入向量和權重向量之間的點積,再加上一個偏置,然后將其傳給sigmoid函數產生單元i的一個狀態
輸出層:輸出層由歐式徑向基函數(Euclidean Radial Basis Function)單元組層。每類一個單元,換句話說,每個輸出ERBF單元計算輸入向量和函數向量之間的歐氏距離。一個ERBF輸出可以被理解為輸入模式和與EFBF相關聯類的一個模型的匹配程度的懲罰項。
卷積神經網絡的訓練過程通過改進的反向傳播實現,將子采樣層作為考慮的因素並基於所有值來更新卷積過濾器的權重。實操中也可以設定前向反饋一些數據,以便調整。
理解卷積神經網絡的一個在線例子:http://cs.stanford.edu/people/karpathy/convnetjs/demo/mnist.html
深入:CNN特性/優點待續。。。
張重生的《深度學習原理與實踐》
以Caffe作為工具講解,這本書代碼太多,不過例子也挺多,因為本人涉及DL較少,所以感覺收獲較少,同時很多擴展閱讀和鏈接也沒讀。BP和CNN理論,都舉了一個例子。之后的章節就都是實驗了,各種貼代碼的套路。最后作者也說DL很多缺乏理論解釋,大部分處理監督,調參困難,軟硬件的門檻較高等。
這本書涉及到語言檢索,語言處理,搜索引擎,機器學習算法和數據結構算法很多范圍,還有幾章是介紹名人或者思想的;每一章都不太多,我每天做地鐵就可以讀兩章。而且有的還從網上找了例子,尤其是信息度量和信息指紋,以及輸入法的例子
下面貼幾個我練手的例子,加深書中內容的理解:
處理海量數據查找的BloomFilter
信息指紋/判斷字符串數組內容相同——google的simHash
《python自然語言處理》