1. 程式人生 > >Deep Learning及NLP(自然語言處理)雜談--第三部分

Deep Learning及NLP(自然語言處理)雜談--第三部分

歡迎轉載,轉載請註明出處:

本雜談分為三個部分,此文為第一部分。

第一部分

第二部分

第三部分


第三部分

這一部分只介紹了一個model,就是在CV領域大名鼎鼎的CNN其他課程大多請的外賓過來講課,講得都是DL如何在實際情況下的應用。

CNN

Basic CNN

CNN顧名思義倦積神經網路這個model叫倦積神經網路是因為它提取features的方式和倦積有些類似都是一格一格(或者幾格幾格)的左右移動。

CNN和Recursive NN是很類似的

所不同的是CNN省略了Recursive NN的第一步也就是Parsing tree的那一步。

Induced Feature Graph,可以自己生成拓撲結構。看似挺不錯的。RNN是使用過的vector在同一layer裡不會再使用第二次,CNN是用過的vector在同一layer裡還可以用,從不計較。

CNN很像卷積的,選一個window,然後從左向右的一步一步的移動,然後生成上一層的layer。

然後使用和RNN裡一樣的計算步驟,一步一步的recursive

這種模型簡單是簡單,但是效果不好

CNN and pooling

帶Pooling的CNN和Basic CNN在對於最下面兩層的處理方面都是一樣的,先生成金字塔的最下面兩層:

然後生成了一個c的vector,接下來就pooling的過程,c_hat = max{C}

但是這樣提取出來的只有一個,提取出來的features太少,於是我們用不同寬度的window提取出feature map,然後再pooling,這樣提取出來的features就多了。

有一個trick據說可以提高精度這種方法是主動讓models overfitting

在training階段的最後一步,在z之前element-wise乘一個r,r是Bernoulli random variables。

這樣可以有意的提高overfitting的可能性,繼而可以訓練儘可能多的features

在使用的時候當然不用再乘r了,但是weight會很大,所以:

使其縮小,再計算最後結果

還有一個trick是為了避免overfitting的:

還有一個trick,由於我們的模型很複雜,dataset也很大,訓練時間很長,但是最終的訓練結果可能不是最優的,所以就每隔一段時間,記錄下來相應的weight和accuracy,在最後訓練完成的時候使用accuracy最高的weight。

Complex pooling schemes

這是目前為止效果最好的CNN模型

第一層

第一層使用的是Wide Convolution

左邊的是narrow右邊的是wide

具體要怎麼convolution呢?首先選一個m作為weight matrix

然後生成M

最後往上 計算一層:

第二層

這個model裡使用的k-max pooling和之前的不一樣,這裡一次提取出來前k個最大的,不像之前模型只提取出最大的

首先是k的計算方法:

其中L是總層數,l是相應的層,s是句子裡的單詞數。k_top這個就自己優化了。

計算方法和這個類似,差別就是取出前k個最大的

Folding

這個最簡單,就是把每兩行相加起來,加之前是d行,加之後是d / 2行

最後一層

得到了想要的features最後就用Fully connected layer做預測了!

CNN application machine translation

先不管用之前講得哪種CNN生成最頂上的那個feature,然後用RNN生成對應的target language

 Application Q&A

基於memory network的Q&A。Memory Networks不是和之前我們講得模型裡所定義的那種Memory。之前課上介紹的Model裡的memory是使用各種data然後訓練model,可以認為memory儲存在這個model的weight裡,可以用來進行object detection等的工作。而這堂課講得memory和之前定義的不是一個概念,之前的memory類似計算機的軟體,這堂課講得memory類似計算機的硬碟,需要用到memory的時候從硬盤裡提取資料,不需要的時候就放那裡。

Q&A類似我們中學英語考試的閱讀理解,或者語文高考的最後幾道閱讀題。我們實際想要達到的目標是能夠讓計算機完成語文高考的閱讀題的水平,這種目標想法很好,但是實現很難衡量現有模型的好與壞,而且也不可能一下就實現這麼複雜的架構。所以基於以上考慮聰明的科學家把Q&A分成了好幾塊類似我們中學英語的閱讀理解,不用回答完整的句子,只要像英語閱讀那樣司選一或者只要回答單個或者幾個關鍵詞即可。論文中有具體的介紹分出來的Tasks的講解和例子,從前到後的排序是由容易及難。我們大致的認為先把以上的幾個分塊的任務完成之後,再使用一個優化的model使得輸出的句子比較nature就能完成AI的Q&A的任務了。

這個Memory Network的目標是可以理解(comprehension)一篇文章或者一部電影,然後根據文章或者電影的內容回答問題。但是動詞的種類那麼多,如果一個單詞一個處理方法的話不現實,效率也挺低,而很多動詞的意思其實是類似的,所以就可以使用下圖中的基本Command來替代這些各種各樣的單詞。

替代完成後,再進行處理就相對來說簡單了。

有了處理過的資料,也有了多個簡單的Q&A目標,接下來就可以進行model的建立了。

我們建立的model主要分為四個部分I,G,O,R

I這一模組,其實之前的課程大部分都是針對I模組所包含的任務的,比如說Parsing,RNN。

不論在論文裡還是在課上講到的O模組的搜尋的向量只搜尋兩個,具體搜尋方法如下:

簡單的說就是每次取出最高score的向量,然後再根據取出來的這兩個向量和原始的問題生成貌似nature的回答。

那麼如果在Memory裡一個單詞沒有見過或者一個單詞遺失了怎麼辦呢?簡單的辦法就是使用臨近的單詞,然後Bag-of-words

當然以上的內容還遠遠沒有達到AI的要求,課上和論文裡都給出了approach AI的兩個方法:

parallel計算

Efficient formulations

Structured VS unstructured computation

structured graph就是指各個units之間的連線都很規矩比如說CNN

這種規矩的表示方法的好處是:cache的使用都是連續的,很容易load,對記憶體的使用也很少。缺點就是靈活性不好

還有一種就是unstructured graph

好處是表達能力更強,但是cache的使用不連續,不容易load,對記憶體使用偏高(和之前的對立)

我們的目標就是在不影響效能的前提下,使表達更加structured

Block operations and BLAS

Block operations一個最簡單的例子就是矩陣乘法和加法,也就類似把相似的運算打包成一整塊,然後輸入進去批量計算。

BLAS: Basic Linear Algebra Subroutines是一款很先進的平行計算工具,課上還推薦了其他很棒的平行計算工具。

CPUs and GPUs

課上講師說CPU和GPU已經達到了peak performance。

記憶體的大小很受限,CPU和GPU的通訊很慢是一個瓶頸。

CPU更少的cores            每個core運算速度更快

GPU更多的cores            每個core運算速度慢

但是GPU有數量優勢,整體來說GPU運算速度比CPU快

乍一看貌似完全使用GPU更好,其實不然。

由於有通訊瓶頸,在計算量較小的時候使用CPU其實更有計算優勢,在計算數量較多的時候使用GPU才有明顯的優勢。

Data parallelism

這個就是用來優化之前的Batching gradient descent

1.先指定一個master core然後多個worker core,首先master給每個worker分配計算的任務

2.然後每個worker core各自分別計算

3.計算完成後彙總到master那裡,由master彙總計算出最終結果

這裡的parallelism是同步的。

Model parallelism

這個就是把model進行分塊然後各個模組分別分配給各個core計算然後彙總結果。

一臺計算機的計算能力怎麼說都是有限的,能不能使用多臺計算機同時幫助計算呢?

但是計算機之間的乙太網通訊速度太慢了,開發更快速的計算機間通訊才行。

Asynchronous SGD

前面說得同步的計算方法需要等待每個work core都計算完成才能彙總計算出結果,這樣就會使一部分時間消耗在等待上面。

鑑於此就提出了非同步的SGD

分配任務還是照常分配,但是誰計算完成誰就上傳計算結果給master,然後master彙總完成之後立即給每個work core更新資料

HW3及有用的連結

homework

if __name__=='__main__'

with … as …

matlib.plot.subplot

set_aspect

‘equal’

same scaling from data to plot units for x and y

num

a circle will be stretched such that the height is num times the width. aspect=1 is the same as aspect=’equal’.

優化方法

有用的資源

Speech recognition model的開源project

兩個dataset語音識別方面的:

TIMIT

http://blog.163.com/gz_aaa/blog/static/37834532201471881923177/

http://www.fon.hum.uva.nl/david/ma_ssp/2007/TIMIT/

Switchboard

幾個開源的Parallelism Packages

1.BLAS

2.CPUs: Intel MKL, Atlas, GOTO

GPUs: Cuda, OpenAcc, clBLAS

3.Theano, Torch