《白話深度學習與Tensorflow》學習筆記(1)深度學習框架、CNN、VC維

剛入手一本《白話深度學習與Tensorflow》,哈哈,一直看深度學習很火,其實自己一知半解,都沒有對這個領域進行一點系統的學習,現在準備看看這本書,開始入門。畢竟深度學習是大趨勢,個個都說是個坑,個個都往裏跳。。。趁着有時間,瞭解瞭解也無妨。

初步感覺這本書比周志華老師的《機器學習》稍微好懂一點,講實例和大比方居多,當然也有公式支撐。整體還不錯,講了基本神經網絡、CNN、RNN、LSTM、HMM、Deep Residual Network(深度殘差網絡)這些耳熟能詳的模型。

所以,一邊看,一邊做做筆記,也比較隨意。

首先,相信很多人都還不知道tensor是什麼,百度翻譯出來的是張量,張肌,其實,這裏的tensor就是向量的意思,tensorflow就是向量流、數據流的意思。tensorflow是谷歌的深度學習開源框架,用於訓練神經網絡的。

幾個深度學習框架的比較如下:

Theano、Torch是兩個最具有擴展性的深度學習框架,無論在支持的各種網絡層種類數量上,或者是在支持的各種庫上。symbolic differentiation是Theano中對於 非標準深度網絡架構(non-standard deep architecture) 提供的最有用的特性。

Torch正在補上這個空缺,可以參考這個博客:

https://blog.twitter.com/2015/autograd-for-torch在CPU上training以及deploy,對於任何的網絡模型,Torch的性能都最優,其次是Theano,Neon的在CPU上的性能最差在GPU上deploy已經訓練好的卷積和全連接網絡(也就是 前向傳播過程),Torch也是最適合的,其次是Theano在GPU上training卷積和全連接網絡,Theano在小網絡模型(LeNet)的表現最好,在大網絡模型(AlexNet)上,Torch性能最佳。Neon在大網絡模型上也非常有優勢Torch受益於它衆多的擴展庫及文檔(這個確實,Torch的文檔閱讀性很強,Theano也不錯),還有Torch的錯誤調試工具也很有優勢。

TensorFlow是非常具有擴展性的一個深度學習框架,尤其是在不同情況的各種設備上,進行深度學習框架部署時,更方便穩定。但是在單機上,它的表現就不具有那麼強的競爭力了。

Tensor Flow:

TensorFlow是一款開源的數學計算軟件,使用數據流圖(Data Flow Graph)的形式進行計算。圖中的節點代表數學運算,而圖中的線條表示多維數據數組(tensor)之間的交互。TensorFlow靈活的架構可以部署在一個或多個CPU、GPU的臺式以及服務器中,或者使用單一的API應用在移動設備中。TensorFlow最初是由研究人員和Google Brain團隊針對機器學習和深度神經網絡進行研究所開發的,目前開源之後可以在幾乎各種領域適用。

Data Flow Graph:使用有向圖的節點和邊共同描述數學計算。graph中的nodes代表數學操作,也可以表示數據輸入輸出的端點。邊表示節點之間的關係,傳遞操作之間互相使用的多位數組(tensors),tensor在graph中流動——這也就是TensorFlow名字的由來。一旦節點相連的邊傳來了數據流,節點就被分配到計算設備上異步的(節點間)、並行的(節點內)執行。

機動性: TensorFlow並不只是一個規則的neural network庫,事實上如果你可以將你的計算表示成data flow graph的形式,就可以使用TensorFlow。用戶構建graph,寫內層循環代碼驅動計算,TensorFlow可以幫助裝配子圖。定義新的操作只需要寫一個Python函數,如果缺少底層的數據操作,需要寫一些C++代碼定義操作。

可適性強:可以應用在不同設備上,cpus,gpu,移動設備,雲平臺等

自動差分:TensorFlow的自動差分能力對很多基於Graph的機器學習算法有益

多種編程語言可選:TensorFlow很容易使用,有python接口和C++接口。其他語言可以使用SWIG工具使用接口。(SWIG—Simplified Wrapper and Interface Generator, 是一個非常優秀的開源工具,支持將C/C++代碼與任何主流腳本語言相集成。)

最優化表現:充分利用硬件資源,TensorFlow可以將graph的不同計算單元分配到不同設備執行,使用TensorFlow處理副本。

(其他幾大框架介紹見:

https://www.leiphone.com/news/201608/5kCJ4Vim3wMjpBPU.html

下面正式來談本書的內容:

一、牛頓法解方程:

在函數上隨機取一個點(x0,f(x0))作這個點的切線,得到與x軸的交點,,得到一次近似點x1,然後在函數上找到對應的(x1,f(x1))同樣作切線,得到二次近似點x2,這樣就不斷逼近方程的解。

二、梯度下降法:

這裏主要就一個x的更新公式:




每次都根據這個公式進行迭代,直到達到停止條件或者收斂條件。

三、VC維:如果樣本數是3,分類方式是分爲2類,那麼這三個樣本可以被完全分開。

2維空間的線性分類器的VC維就是3.對於神經網絡而言,我們可以認爲其VC維很高,即能把很多很多樣本都能完全分開。豐富的VC維也可能使得網絡陷入過擬合狀態。

四、CNN:

卷積神經網絡:

卷積:通過函數f和g生成第三個函數的一種數學算子,表徵了函數f與g經過翻轉和平移的重疊部分的面積。

卷積核:

F(x)=wx+b 即對原有的像素點進行相乘(*w)最後再加上b就是最終一次卷積的結果。其中,w是一組向量。

卷積層參數:

padding填充:通常是填充0,其作用是:保護邊界信息;彌補尺寸差異。

Stride步幅:即每次卷積核滑動的單位。Stride會影響計算的次數和時間,以及下一層的參數數目。

卷積層已經提取過一次特徵。

池化層:max-pool與mean-pool,仍然有stride這個參數。

如果在上一層傳過來的數據如下所示,並使用stride=2,2*2的核去max-pooling:




池化層又對特徵進行了一次提取,進一步獲取更抽象的信息;防止過擬合。

保持不變性,容忍圖像的少量平移,旋轉以及縮放。

局部感知野:



權值共享:

在全局圖像中選定一個8*8的小樣本,並且用這個小樣本學習到一些特徵,之後可以利用這些學到的特徵應用到全局圖像的其他位置上,卷積,可以得到這些特徵在圖像所有區域的不同響應值,得到卷積後的新圖像。 不同的卷積核可以提取不同的如邊緣信息、梯度信息等

下采樣:

取最大值和平均值分別爲最大池化和平均池化。池化的區域不發生重疊,但是權值共享可能重疊。

下采樣的方法降低了特徵的維度大小。

CNN的典型模型:VGG-16(visual geometry group)其中有16個帶有參數的網絡層。

激勵函數:

1、Sigmoid

y=1/1+e(-z)  z=wTx

2、Softmax

信息熵:信息的雜亂程度或意外程度的量化。熵越小越容易分類。

Softmax使用的損失函數叫做:交叉熵



好像在做邏輯迴歸,對於每一種分類都是伯努利分佈

信息熵:事件越不可能發生,信息量越大。

五、獨熱編碼:one-hot encoding

在一個維度上有着大小關係,在這樣設定表示對象的過程的中這種關係被強給了這些對象。

[1,0,0,0,0]這樣的形式,可以形成正交的維度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章