剛?cè)胧忠槐尽栋自捝疃葘W習與Tensorflow》雇盖,哈哈厘灼,一直看深度學習很火夹纫,其實自己一知半解,都沒有對這個領(lǐng)域進行一點系統(tǒng)的學習设凹,現(xiàn)在準備看看這本書,開始入門茅姜。畢竟深度學習是大趨勢闪朱,個個都說是個坑,個個都往里跳钻洒。奋姿。。趁著有時間素标,了解了解也無妨称诗。
初步感覺這本書比周志華老師的《機器學習》稍微好懂一點,講實例和大比方居多头遭,當然也有公式支撐寓免。整體還不錯,講了基本神經(jīng)網(wǎng)絡(luò)计维、CNN袜香、RNN、LSTM鲫惶、HMM蜈首、Deep Residual Network(深度殘差網(wǎng)絡(luò))這些耳熟能詳?shù)哪P汀?/p>
所以,一邊看欠母,一邊做做筆記欢策,也比較隨意。
首先赏淌,相信很多人都還不知道tensor是什么踩寇,百度翻譯出來的是張量,張肌猜敢,其實姑荷,這里的tensor就是向量的意思盒延,tensorflow就是向量流、數(shù)據(jù)流的意思鼠冕。tensorflow是谷歌的深度學習開源框架添寺,用于訓練神經(jīng)網(wǎng)絡(luò)的。
幾個深度學習框架的比較如下:
Theano懈费、Torch是兩個最具有擴展性的深度學習框架计露,無論在支持的各種網(wǎng)絡(luò)層種類數(shù)量上,或者是在支持的各種庫上憎乙。symbolic differentiation是Theano中對于 非標準深度網(wǎng)絡(luò)架構(gòu)(non-standard deep architecture) 提供的最有用的特性票罐。
Torch正在補上這個空缺,可以參考這個博客:
https://blog.twitter.com/2015/autograd-for-torch在CPU上training以及deploy泞边,對于任何的網(wǎng)絡(luò)模型该押,Torch的性能都最優(yōu),其次是Theano阵谚,Neon的在CPU上的性能最差在GPU上deploy已經(jīng)訓練好的卷積和全連接網(wǎng)絡(luò)(也就是 前向傳播過程)蚕礼,Torch也是最適合的,其次是Theano在GPU上training卷積和全連接網(wǎng)絡(luò)梢什,Theano在小網(wǎng)絡(luò)模型(LeNet)的表現(xiàn)最好奠蹬,在大網(wǎng)絡(luò)模型(AlexNet)上,Torch性能最佳嗡午。Neon在大網(wǎng)絡(luò)模型上也非常有優(yōu)勢Torch受益于它眾多的擴展庫及文檔(這個確實囤躁,Torch的文檔閱讀性很強,Theano也不錯)荔睹,還有Torch的錯誤調(diào)試工具也很有優(yōu)勢狸演。
TensorFlow是非常具有擴展性的一個深度學習框架,尤其是在不同情況的各種設(shè)備上应媚,進行深度學習框架部署時严沥,更方便穩(wěn)定。但是在單機上中姜,它的表現(xiàn)就不具有那么強的競爭力了消玄。
Tensor Flow:
TensorFlow是一款開源的數(shù)學計算軟件,使用數(shù)據(jù)流圖(Data Flow Graph)的形式進行計算丢胚。圖中的節(jié)點代表數(shù)學運算翩瓜,而圖中的線條表示多維數(shù)據(jù)數(shù)組(tensor)之間的交互。TensorFlow靈活的架構(gòu)可以部署在一個或多個CPU携龟、GPU的臺式以及服務(wù)器中兔跌,或者使用單一的API應(yīng)用在移動設(shè)備中。TensorFlow最初是由研究人員和Google Brain團隊針對機器學習和深度神經(jīng)網(wǎng)絡(luò)進行研究所開發(fā)的峡蟋,目前開源之后可以在幾乎各種領(lǐng)域適用坟桅。
Data Flow Graph:使用有向圖的節(jié)點和邊共同描述數(shù)學計算华望。graph中的nodes代表數(shù)學操作,也可以表示數(shù)據(jù)輸入輸出的端點仅乓。邊表示節(jié)點之間的關(guān)系赖舟,傳遞操作之間互相使用的多位數(shù)組(tensors),tensor在graph中流動——這也就是TensorFlow名字的由來夸楣。一旦節(jié)點相連的邊傳來了數(shù)據(jù)流宾抓,節(jié)點就被分配到計算設(shè)備上異步的(節(jié)點間)、并行的(節(jié)點內(nèi))執(zhí)行豫喧。
機動性: TensorFlow并不只是一個規(guī)則的neural network庫石洗,事實上如果你可以將你的計算表示成data flow graph的形式,就可以使用TensorFlow紧显。用戶構(gòu)建graph讲衫,寫內(nèi)層循環(huán)代碼驅(qū)動計算,TensorFlow可以幫助裝配子圖鸟妙。定義新的操作只需要寫一個Python函數(shù)焦人,如果缺少底層的數(shù)據(jù)操作,需要寫一些C++代碼定義操作重父。
可適性強:可以應(yīng)用在不同設(shè)備上,cpus忽匈,gpu房午,移動設(shè)備,云平臺等
自動差分:TensorFlow的自動差分能力對很多基于Graph的機器學習算法有益
多種編程語言可選:TensorFlow很容易使用丹允,有python接口和C++接口郭厌。其他語言可以使用SWIG工具使用接口。(SWIG—Simplified Wrapper and Interface Generator雕蔽, 是一個非常優(yōu)秀的開源工具折柠,支持將C/C++代碼與任何主流腳本語言相集成。)
最優(yōu)化表現(xiàn):充分利用硬件資源批狐,TensorFlow可以將graph的不同計算單元分配到不同設(shè)備執(zhí)行扇售,使用TensorFlow處理副本。
(其他幾大框架介紹見:
https://www.leiphone.com/news/201608/5kCJ4Vim3wMjpBPU.html)
下面正式來談本書的內(nèi)容:
一嚣艇、牛頓法解方程:
在函數(shù)上隨機取一個點(x0,f(x0))作這個點的切線承冰,得到與x軸的交點,,得到一次近似點x1食零,然后在函數(shù)上找到對應(yīng)的(x1,f(x1))同樣作切線困乒,得到二次近似點x2,這樣就不斷逼近方程的解贰谣。
二娜搂、梯度下降法:
這里主要就一個x的更新公式:
每次都根據(jù)這個公式進行迭代迁霎,直到達到停止條件或者收斂條件。
三百宇、VC維:如果樣本數(shù)是3考廉,分類方式是分為2類,那么這三個樣本可以被完全分開恳谎。
2維空間的線性分類器的VC維就是3.對于神經(jīng)網(wǎng)絡(luò)而言芝此,我們可以認為其VC維很高,即能把很多很多樣本都能完全分開因痛。豐富的VC維也可能使得網(wǎng)絡(luò)陷入過擬合狀態(tài)婚苹。
四、CNN:
卷積神經(jīng)網(wǎng)絡(luò):
卷積:通過函數(shù)f和g生成第三個函數(shù)的一種數(shù)學算子鸵膏,表征了函數(shù)f與g經(jīng)過翻轉(zhuǎn)和平移的重疊部分的面積膊升。
卷積核:
F(x)=wx+b 即對原有的像素點進行相乘(*w)最后再加上b就是最終一次卷積的結(jié)果。其中谭企,w是一組向量廓译。
卷積層參數(shù):
padding填充:通常是填充0,其作用是:保護邊界信息债查;彌補尺寸差異非区。
Stride步幅:即每次卷積核滑動的單位。Stride會影響計算的次數(shù)和時間盹廷,以及下一層的參數(shù)數(shù)目征绸。
卷積層已經(jīng)提取過一次特征。
池化層:max-pool與mean-pool俄占,仍然有stride這個參數(shù)管怠。
如果在上一層傳過來的數(shù)據(jù)如下所示,并使用stride=2,2*2的核去max-pooling:
池化層又對特征進行了一次提取缸榄,進一步獲取更抽象的信息渤弛;防止過擬合。
保持不變性甚带,容忍圖像的少量平移她肯,旋轉(zhuǎn)以及縮放。
局部感知野:
權(quán)值共享:
在全局圖像中選定一個8*8的小樣本欲低,并且用這個小樣本學習到一些特征辕宏,之后可以利用這些學到的特征應(yīng)用到全局圖像的其他位置上,卷積砾莱,可以得到這些特征在圖像所有區(qū)域的不同響應(yīng)值瑞筐,得到卷積后的新圖像。 不同的卷積核可以提取不同的如邊緣信息、梯度信息等
下采樣:
取最大值和平均值分別為最大池化和平均池化聚假。池化的區(qū)域不發(fā)生重疊块蚌,但是權(quán)值共享可能重疊。
下采樣的方法降低了特征的維度大小膘格。
CNN的典型模型:VGG-16(visual geometry group)其中有16個帶有參數(shù)的網(wǎng)絡(luò)層峭范。
激勵函數(shù):
1、Sigmoid
y=1/1+e(-z)? z=wTx
2瘪贱、Softmax
信息熵:信息的雜亂程度或意外程度的量化纱控。熵越小越容易分類。
Softmax使用的損失函數(shù)叫做:交叉熵
好像在做邏輯回歸菜秦,對于每一種分類都是伯努利分布
信息熵:事件越不可能發(fā)生甜害,信息量越大。
五球昨、獨熱編碼:one-hot encoding
在一個維度上有著大小關(guān)系尔店,在這樣設(shè)定表示對象的過程的中這種關(guān)系被強給了這些對象。
[1,0,0,0,0]這樣的形式主慰,可以形成正交的維度嚣州。