《白話深度學(xué)習(xí)與Tensorflow》學(xué)習(xí)筆記(1)

剛?cè)胧忠槐尽栋自捝疃葘W(xué)習(xí)與Tensorflow》,哈哈,一直看深度學(xué)習(xí)很火,其實(shí)自己一知半解,都沒有對(duì)這個(gè)領(lǐng)域進(jìn)行一點(diǎn)系統(tǒng)的學(xué)習(xí),現(xiàn)在準(zhǔn)備看看這本書,開始入門。畢竟深度學(xué)習(xí)是大趨勢(shì),個(gè)個(gè)都說是個(gè)坑,個(gè)個(gè)都往里跳。。。趁著有時(shí)間,了解了解也無妨。

初步感覺這本書比周志華老師的《機(jī)器學(xué)習(xí)》稍微好懂一點(diǎn),講實(shí)例和大比方居多,當(dāng)然也有公式支撐。整體還不錯(cuò),講了基本神經(jīng)網(wǎng)絡(luò)、CNN、RNN、LSTM、HMM、Deep Residual Network(深度殘差網(wǎng)絡(luò))這些耳熟能詳?shù)哪P汀?/p>

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

首先,相信很多人都還不知道tensor是什么,百度翻譯出來的是張量,張肌,其實(shí),這里的tensor就是向量的意思,tensorflow就是向量流、數(shù)據(jù)流的意思。tensorflow是谷歌的深度學(xué)習(xí)開源框架,用于訓(xùn)練神經(jīng)網(wǎng)絡(luò)的。

幾個(gè)深度學(xué)習(xí)框架的比較如下:

Theano、Torch是兩個(gè)最具有擴(kuò)展性的深度學(xué)習(xí)框架,無論在支持的各種網(wǎng)絡(luò)層種類數(shù)量上,或者是在支持的各種庫上。symbolic differentiation是Theano中對(duì)于 非標(biāo)準(zhǔn)深度網(wǎng)絡(luò)架構(gòu)(non-standard deep architecture) 提供的最有用的特性。

Torch正在補(bǔ)上這個(gè)空缺,可以參考這個(gè)博客:

https://blog.twitter.com/2015/autograd-for-torch在CPU上training以及deploy,對(duì)于任何的網(wǎng)絡(luò)模型,Torch的性能都最優(yōu),其次是Theano,Neon的在CPU上的性能最差在GPU上deploy已經(jīng)訓(xùn)練好的卷積和全連接網(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)勢(shì)Torch受益于它眾多的擴(kuò)展庫及文檔(這個(gè)確實(shí),Torch的文檔閱讀性很強(qiáng),Theano也不錯(cuò)),還有Torch的錯(cuò)誤調(diào)試工具也很有優(yōu)勢(shì)。

TensorFlow是非常具有擴(kuò)展性的一個(gè)深度學(xué)習(xí)框架,尤其是在不同情況的各種設(shè)備上,進(jìn)行深度學(xué)習(xí)框架部署時(shí),更方便穩(wěn)定。但是在單機(jī)上,它的表現(xiàn)就不具有那么強(qiáng)的競(jìng)爭(zhēng)力了。

Tensor Flow:

TensorFlow是一款開源的數(shù)學(xué)計(jì)算軟件,使用數(shù)據(jù)流圖(Data Flow Graph)的形式進(jìn)行計(jì)算。圖中的節(jié)點(diǎn)代表數(shù)學(xué)運(yùn)算,而圖中的線條表示多維數(shù)據(jù)數(shù)組(tensor)之間的交互。TensorFlow靈活的架構(gòu)可以部署在一個(gè)或多個(gè)CPU、GPU的臺(tái)式以及服務(wù)器中,或者使用單一的API應(yīng)用在移動(dòng)設(shè)備中。TensorFlow最初是由研究人員和Google Brain團(tuán)隊(duì)針對(duì)機(jī)器學(xué)習(xí)和深度神經(jīng)網(wǎng)絡(luò)進(jìn)行研究所開發(fā)的,目前開源之后可以在幾乎各種領(lǐng)域適用。

Data Flow Graph:使用有向圖的節(jié)點(diǎn)和邊共同描述數(shù)學(xué)計(jì)算。graph中的nodes代表數(shù)學(xué)操作,也可以表示數(shù)據(jù)輸入輸出的端點(diǎn)。邊表示節(jié)點(diǎn)之間的關(guān)系,傳遞操作之間互相使用的多位數(shù)組(tensors),tensor在graph中流動(dòng)——這也就是TensorFlow名字的由來。一旦節(jié)點(diǎn)相連的邊傳來了數(shù)據(jù)流,節(jié)點(diǎn)就被分配到計(jì)算設(shè)備上異步的(節(jié)點(diǎn)間)、并行的(節(jié)點(diǎn)內(nèi))執(zhí)行。

機(jī)動(dòng)性: TensorFlow并不只是一個(gè)規(guī)則的neural network庫,事實(shí)上如果你可以將你的計(jì)算表示成data flow graph的形式,就可以使用TensorFlow。用戶構(gòu)建graph,寫內(nèi)層循環(huán)代碼驅(qū)動(dòng)計(jì)算,TensorFlow可以幫助裝配子圖。定義新的操作只需要寫一個(gè)Python函數(shù),如果缺少底層的數(shù)據(jù)操作,需要寫一些C++代碼定義操作。

可適性強(qiáng):可以應(yīng)用在不同設(shè)備上,cpus,gpu,移動(dòng)設(shè)備,云平臺(tái)等

自動(dòng)差分:TensorFlow的自動(dòng)差分能力對(duì)很多基于Graph的機(jī)器學(xué)習(xí)算法有益

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

最優(yōu)化表現(xiàn):充分利用硬件資源,TensorFlow可以將graph的不同計(jì)算單元分配到不同設(shè)備執(zhí)行,使用TensorFlow處理副本。

(其他幾大框架介紹見:

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

下面正式來談本書的內(nèi)容:

一、牛頓法解方程:

在函數(shù)上隨機(jī)取一個(gè)點(diǎn)(x0,f(x0))作這個(gè)點(diǎn)的切線,得到與x軸的交點(diǎn),,得到一次近似點(diǎn)x1,然后在函數(shù)上找到對(duì)應(yīng)的(x1,f(x1))同樣作切線,得到二次近似點(diǎn)x2,這樣就不斷逼近方程的解。

二、梯度下降法:

這里主要就一個(gè)x的更新公式:


每次都根據(jù)這個(gè)公式進(jìn)行迭代,直到達(dá)到停止條件或者收斂條件。

三、VC維:如果樣本數(shù)是3,分類方式是分為2類,那么這三個(gè)樣本可以被完全分開。

2維空間的線性分類器的VC維就是3.對(duì)于神經(jīng)網(wǎng)絡(luò)而言,我們可以認(rèn)為其VC維很高,即能把很多很多樣本都能完全分開。豐富的VC維也可能使得網(wǎng)絡(luò)陷入過擬合狀態(tài)。

四、CNN:

卷積神經(jīng)網(wǎng)絡(luò):

卷積:通過函數(shù)f和g生成第三個(gè)函數(shù)的一種數(shù)學(xué)算子,表征了函數(shù)f與g經(jīng)過翻轉(zhuǎn)和平移的重疊部分的面積。

卷積核:

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

卷積層參數(shù):

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

Stride步幅:即每次卷積核滑動(dòng)的單位。Stride會(huì)影響計(jì)算的次數(shù)和時(shí)間,以及下一層的參數(shù)數(shù)目。

卷積層已經(jīng)提取過一次特征。

池化層:max-pool與mean-pool,仍然有stride這個(gè)參數(shù)。

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


池化層又對(duì)特征進(jìn)行了一次提取,進(jìn)一步獲取更抽象的信息;防止過擬合。

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

局部感知野:


權(quán)值共享:

在全局圖像中選定一個(gè)8*8的小樣本,并且用這個(gè)小樣本學(xué)習(xí)到一些特征,之后可以利用這些學(xué)到的特征應(yīng)用到全局圖像的其他位置上,卷積,可以得到這些特征在圖像所有區(qū)域的不同響應(yīng)值,得到卷積后的新圖像。 不同的卷積核可以提取不同的如邊緣信息、梯度信息等

下采樣:

取最大值和平均值分別為最大池化和平均池化。池化的區(qū)域不發(fā)生重疊,但是權(quán)值共享可能重疊。

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

CNN的典型模型:VGG-16(visual geometry group)其中有16個(gè)帶有參數(shù)的網(wǎng)絡(luò)層。

激勵(lì)函數(shù):

1、Sigmoid

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

2、Softmax

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

Softmax使用的損失函數(shù)叫做:交叉熵


好像在做邏輯回歸,對(duì)于每一種分類都是伯努利分布

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

五、獨(dú)熱編碼:one-hot encoding

在一個(gè)維度上有著大小關(guān)系,在這樣設(shè)定表示對(duì)象的過程的中這種關(guān)系被強(qiáng)給了這些對(duì)象。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容