寬、窄卷積神經(jīng)網(wǎng)絡(luò)
當(dāng)我在上文中解釋卷積的時(shí)候,我忽略了一點(diǎn)運(yùn)用過(guò)濾器的小細(xì)節(jié)。我們?cè)谝粋€(gè)矩陣的中心有3×3的過(guò)濾器工作得很棒,但是它在邊界的表現(xiàn)如何呢?你應(yīng)該如何應(yīng)用這個(gè)過(guò)濾器于矩陣的第一個(gè)元素(沒(méi)有任何相鄰的上方元素和左邊元素)? 你可以用0來(lái)填充邊界。所有超過(guò)矩陣邊界的元素都當(dāng)做0來(lái)處理。這么做之后呢,你就可以將過(guò)濾器用于矩陣中的每一個(gè)元素,并且獲得更大的等大小的輸出。使用0填充的(zero-padding)也稱為寬卷積(wide convolution),不用0填充稱為窄神經(jīng)網(wǎng)絡(luò)。下面是一個(gè)例子。
步長(zhǎng)(Stride size)
另一個(gè)卷積的超參是步長(zhǎng),也就是每一步你想移動(dòng)你的過(guò)濾器多少距離。上述的所有的例子,步長(zhǎng)均為1。對(duì)連續(xù)應(yīng)用過(guò)濾器采樣子矩陣,就會(huì)導(dǎo)致采樣信息的重疊。一個(gè)更大的步長(zhǎng)意味著更少地使用過(guò)濾器和更小的輸出。下面的例子來(lái)自于the Stanford cs231 website 展示了步長(zhǎng)為1和步長(zhǎng)為2運(yùn)用于一維輸入的情況:
Convolution Stride Size.?
Left: Stride size 1. Right: Stride size 2. Source: ?
在文獻(xiàn)中我們通??吹降亩际遣介L(zhǎng)大小為1的情景,但是較大的步幅讓你建立一個(gè)處理過(guò)程類似RNN的模型,就像樹(shù)型結(jié)構(gòu)。
池層(POOLING LAYERS)
卷積神經(jīng)網(wǎng)絡(luò)的另一個(gè)關(guān)鍵在于Pooling layers,它通常在卷積層后面使用。Pooling layers用于下采樣上一層的輸入。最簡(jiǎn)單也是最常見(jiàn)的做法是,取每個(gè)過(guò)濾器中的最大值為輸出。你不必對(duì)一個(gè)完整的矩陣都做pooling操作,你可以對(duì)一個(gè)小窗口做pooling。如下圖,展示一個(gè)在2×2窗口的max pooling操作(在NLP問(wèn)題中,我們通常要對(duì)整個(gè)輸入進(jìn)行pooling操作,產(chǎn)生每個(gè)過(guò)濾器產(chǎn)生一個(gè)單獨(dú)的數(shù)字輸出):
Max pooling in CNN. Source:
為什么要進(jìn)行Pooling操作呢?有以下這么幾個(gè)原因。
Pooling操作的一個(gè)優(yōu)勢(shì)在于它能夠產(chǎn)生一個(gè)固定大小的輸出矩陣。這個(gè)矩陣通常被用于分類。例如,如果你有1000個(gè)過(guò)濾器并且你對(duì)每一個(gè)過(guò)濾器都進(jìn)行了Max Pooling操作,那么你就得到了1000維的輸出。不管你過(guò)濾器的大小,也不管你輸入的大小,你的輸出大小就是固定的。這樣你就可以用各種各樣長(zhǎng)度的句子和各種各樣大小的過(guò)濾器,但是總會(huì)得到相同的輸出維度,從而進(jìn)行分類。
Pooling的使用也可以減少輸出的維度,同時(shí)(我們希望這樣)保存最顯著的信息。你可以想象一下,每個(gè)過(guò)濾器能夠識(shí)別出一種特征,例如,識(shí)別出這個(gè)句子有沒(méi)有含有一個(gè)類似”not amazing”的否定詞。如果句子中的某個(gè)地方出現(xiàn)了這個(gè)詞組,那么掃描采樣這一塊的過(guò)濾器就會(huì)產(chǎn)生一個(gè)大的數(shù)值,在別的區(qū)域產(chǎn)生一個(gè)小的值。這樣做之后呢,你就能夠保持那些關(guān)于某些特征有沒(méi)有出現(xiàn)在句子中的信息,而損失了這個(gè)特征究竟出現(xiàn)在句子的哪個(gè)位置的信息。但是,損失的這個(gè)信息并沒(méi)有什么用途吧?對(duì)啊,這是有一點(diǎn)像a bag of n-grams model所做的那樣。你損失了關(guān)于定位的全局信息(某些東西出現(xiàn)在句子中的某些地方),但是你保留下來(lái)了被你的過(guò)濾器采樣到的局部信息,就像”not amazing”與”amazing not”非常不同一樣。(這就是我上文說(shuō)的一個(gè)有疑問(wèn)的說(shuō)法)
在圖像識(shí)別中,Pooling也可以提供基礎(chǔ)的平移、旋轉(zhuǎn)不變性。當(dāng)你對(duì)于某個(gè)區(qū)域進(jìn)行Pooling操作的時(shí)候,結(jié)果通常來(lái)說(shuō)會(huì)保持一致,無(wú)論你是旋轉(zhuǎn)還是平移你圖像的像素,因?yàn)镸ax Pooling會(huì)最終識(shí)別出同樣的數(shù)值。
通道(CHANNELS)
我們需要理解的最后一個(gè)理論是通道。通道是輸入數(shù)據(jù)的一種不同的‘樣子’。例如,在圖像識(shí)別中,我們一般使用的是RGB(red, green, blue) 通道。在通道里應(yīng)用卷積的時(shí)候,你可以采用不同的或者相同的權(quán)值。在NLP問(wèn)題中,你可以想到通道的種類是非常多的:用不同的word embeddings(word2vec and GloVe for example)來(lái)區(qū)分通道,或者,你可以為不同的語(yǔ)言表達(dá)的同樣意思的句子、單詞設(shè)計(jì)一個(gè)通道。
用于NLP的CNN
現(xiàn)在讓我們看看一些CNN在自然語(yǔ)言處理中的應(yīng)用。我會(huì)嘗試總結(jié)一些研究成果與結(jié)論??傊?,我會(huì)漏了描述很多有趣的應(yīng)用(請(qǐng)?jiān)谠u(píng)論中告訴我),但我希望至少覆蓋一些比較流行的結(jié)果。
CNN天生就適合用于分類任務(wù),例如情感分析,垃圾郵件檢測(cè)或主題分類。卷積和池操作會(huì)丟失單詞的局部順序,所以呢,句子標(biāo)記,例如詞性標(biāo)注或?qū)嶓w提取,是有點(diǎn)難以適應(yīng)純CNN架構(gòu)(也不是不可能,你可以添加位置特征的輸入)。
[1] 評(píng)估一個(gè)CNN結(jié)構(gòu)在各種分類數(shù)據(jù)集中的表現(xiàn),主要包括情感分析和主題分類的任務(wù)。 CNN結(jié)構(gòu)跨數(shù)據(jù)集的問(wèn)題上有著非常不錯(cuò)的表現(xiàn),同時(shí)最新的技術(shù)也使得它在小數(shù)據(jù)上表現(xiàn)優(yōu)異。 出人意料的是,論文中使用的網(wǎng)絡(luò)是非常簡(jiǎn)單的,這就是為什么它非常的有效。輸入層是一個(gè)由連續(xù)的word2vec word embeddings組成的句子。在卷積層的后面跟著多個(gè)過(guò)濾器,然后是一個(gè)max-pooling layer,最后是一個(gè)softmax分類器。該論文也對(duì)兩個(gè)不同的通道做實(shí)驗(yàn),通道是以靜態(tài)和動(dòng)態(tài)word embeddings形式的,并且其中一個(gè)能夠在訓(xùn)練中被調(diào)整,一個(gè)不能被調(diào)整。一個(gè)相似的但是更加復(fù)雜的結(jié)構(gòu)在[2]中被提出。[6] 加入了一個(gè)新增的層用于在網(wǎng)絡(luò)結(jié)構(gòu)中進(jìn)行“語(yǔ)義聚合”(semantic clustering) 。
[4]從頭訓(xùn)練一個(gè)CNN,不需要pre-trained word向量,例如word2vec或者GloVe。它直接將卷積用于one-hot向量。作者還提出了一種空間節(jié)約的bag-of-words似的輸入數(shù)據(jù)表示方法 ,減少了網(wǎng)絡(luò)需要訓(xùn)練的參數(shù)個(gè)數(shù)。在[5]中,作者用一個(gè)二外的無(wú)監(jiān)督“region embedding”擴(kuò)展了這個(gè)模型,該擴(kuò)展是學(xué)習(xí)用CNN來(lái)預(yù)測(cè)文本區(qū)域的內(nèi)容。這些論文中使用的方法似乎在長(zhǎng)文本(例如,電影評(píng)論)的處理中做得不錯(cuò),但是他們?cè)诙涛谋荆ɡ纾⒉┲械奶幚硇Ч€不得而知。直觀地來(lái)看,這確實(shí)很有道理。對(duì)短文本使用pre-trained word embeddings將會(huì)產(chǎn)生更大的收益,相比將它們用于處理長(zhǎng)文本。
建立一個(gè)CNN解耦狗意味著許多超參可供選擇,就像我上文提到的那樣:輸入表示法(word2vec, GloVe, one-hot),卷積過(guò)濾器的數(shù)量和大小,池操作的策略(max, average),以及激活函數(shù)(ReLU, tanh)。[7]通過(guò)調(diào)整CNN結(jié)構(gòu)的超參,多次運(yùn)行程序,研究、分析其的性能和方差,從而得出驗(yàn)證性的評(píng)價(jià)。如果你想要將你的CNN用于文本分類,用這篇論文的結(jié)論作為基礎(chǔ)起始點(diǎn)是再好不過(guò)的了。一些脫穎而出的結(jié)論是,max-pooling的效果總是好于average_pooling;一個(gè)理想狀況下的過(guò)濾器大小是很重要的,但是大部分還是依具體情況而定;正則化與否在NLP問(wèn)題中似乎沒(méi)有多大影響。這項(xiàng)研究的需要注意的是,在文件長(zhǎng)度方面,所有的數(shù)據(jù)集都頗為相似。所以呢,同樣的準(zhǔn)則看清了并不適用于那些看起來(lái)相當(dāng)不同的數(shù)據(jù)。
[8]研究了CNN對(duì)關(guān)系抽取和關(guān)系分類的應(yīng)用。除了單詞向量,作者用了單詞與關(guān)注的實(shí)體(譯者:attention mechanism里的概念)之間的相對(duì)位置作為卷積層的另一個(gè)輸入。這個(gè)模型假定實(shí)體的位置已經(jīng)被給定,并且各實(shí)例的輸入包含一個(gè)上述的關(guān)系。[9]和[10]也研究的是同樣的模型。
在微軟的[11]和[12]研究中,能夠發(fā)現(xiàn)一個(gè)CNN在NLP中有趣的應(yīng)用。這些論文描述的是如果得知那些可以被用于信息檢索的句子的語(yǔ)義上有意義的表示方法。論文中的例子包括,根據(jù)讀者現(xiàn)在閱讀的文章,推薦出讀者可能感興趣的文章。句子的表示方法是用基于搜索引擎的日志數(shù)據(jù)來(lái)進(jìn)行訓(xùn)練的。
大多數(shù)的CNN結(jié)構(gòu)以用這種或者那種方式從embeddings (低維表示法) 中學(xué)習(xí)作為它們訓(xùn)練過(guò)程的一部分。并非所有的論文都關(guān)注于如果訓(xùn)練或者研究分析learned embeddings意義何在。[13]展示了一個(gè)CNN結(jié)構(gòu)。這個(gè)結(jié)構(gòu)用于預(yù)測(cè)Facebook的位置標(biāo)簽,同時(shí),產(chǎn)生有意義的單詞和句子的embeddings。這些learned embeddings隨后被成功地用于其他的問(wèn)題: 以點(diǎn)擊流數(shù)據(jù)作為訓(xùn)練集,將用戶可能產(chǎn)生潛在興趣的文章推薦給用戶。
字符級(jí)CNN(CHARACTER-LEVEL CNNS)
這個(gè)專業(yè)名詞翻譯是我自己猜的,也可能是漢字、個(gè)性之類的。
目前為止,所有模型的表示方法都是基于單詞的。但是也有將CNN應(yīng)用于字符的研究。 [14] 研究了character-level embeddings,將它們和pre-trained word embeddings結(jié)合在一起,并且將CNN用于詞性標(biāo)注 (Part of Speech tagging). [15][16] 研究了直接用CNN從字符中進(jìn)行訓(xùn)練,不需要接住任何的pre-trained embeddings。值得注意的是,作者用了一個(gè)共9層的深度神經(jīng)網(wǎng)絡(luò),并將其用于情感分析和文本分類的作用。結(jié)果表明,在大數(shù)據(jù)的情況下,直接從字符級(jí)輸入的學(xué)習(xí)效果非常好(百萬(wàn)級(jí)的例子),但是在較小的數(shù)據(jù)集上面表現(xiàn)得比較差(百條、千條例子)。 [17] 研究了字符級(jí)CNN在語(yǔ)言模型(Language Modeling)上面的應(yīng)用,用字符級(jí)CNN的輸出作為L(zhǎng)STM(長(zhǎng)期短期記憶單元)的輸入。同樣的模型可以用于多個(gè)語(yǔ)言。
最讓人驚奇的是上面所說(shuō)的所以論文都是在最近的1-2年內(nèi)發(fā)表的。非常明顯的,CNN在NLP問(wèn)題上面很早就取得了很好的成績(jī),。雖然自然語(yǔ)言處理(幾乎)是剛剛開(kāi)始起步,但是新成果和新技術(shù)的發(fā)展步伐正在顯著加快。
[1]?Kim, Y. (2014). Convolutional Neural Networks for Sentence Classification. Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing (EMNLP 2014), 1746–1751.?
[2]?Kalchbrenner, N., Grefenstette, E., & Blunsom, P. (2014). A Convolutional Neural Network for Modelling Sentences. Acl, 655–665.?
[3]?Santos, C. N. dos, & Gatti, M. (2014). Deep Convolutional Neural Networks for Sentiment Analysis of Short Texts. In COLING-2014 (pp. 69–78).?
[4]?Johnson, R., & Zhang, T. (2015). Effective Use of Word Order for Text Categorization with Convolutional Neural Networks. To Appear: NAACL-2015, (2011).?
[5]?Johnson, R., & Zhang, T. (2015). Semi-supervised Convolutional Neural Networks for Text Categorization via Region Embedding.?
[6]?Wang, P., Xu, J., Xu, B., Liu, C., Zhang, H., Wang, F., & Hao, H. (2015). Semantic Clustering and Convolutional Neural Network for Short Text Categorization. Proceedings ACL 2015, 352–357.?
[7]?Zhang, Y., & Wallace, B. (2015). A Sensitivity Analysis of (and Practitioners’ Guide to) Convolutional Neural Networks for Sentence Classification,?
[8]?Nguyen, T. H., & Grishman, R. (2015). Relation Extraction: Perspective from Convolutional Neural Networks. Workshop on Vector Modeling for NLP, 39–48.?
[9]?Sun, Y., Lin, L., Tang, D., Yang, N., Ji, Z., & Wang, X. (2015). Modeling Mention , Context and Entity with Neural Networks for Entity Disambiguation, (Ijcai), 1333–1339.?
[10]?Zeng, D., Liu, K., Lai, S., Zhou, G., & Zhao, J. (2014). Relation Classification via Convolutional Deep Neural Network. Coling, (2011), 2335–2344.?
[11]?Gao, J., Pantel, P., Gamon, M., He, X., & Deng, L. (2014). Modeling Interestingness with Deep Neural Networks.?
[12]?Shen, Y., He, X., Gao, J., Deng, L., & Mesnil, G. (2014). A Latent Semantic Model with Convolutional-Pooling Structure for Information Retrieval. Proceedings of the 23rd ACM International Conference on Conference on Information and Knowledge Management – CIKM ’14, 101–110.?
[13]?Weston, J., & Adams, K. (2014). # T AG S PACE : Semantic Embeddings from Hashtags, 1822–1827.?
[14]?Santos, C., & Zadrozny, B. (2014). Learning Character-level Representations for Part-of-Speech Tagging. Proceedings of the 31st International Conference on Machine Learning, ICML-14(2011), 1818–1826.?
[15]?Zhang, X., Zhao, J., & LeCun, Y. (2015). Character-level Convolutional Networks for Text Classification, 1–9.?
[16]?Zhang, X., & LeCun, Y. (2015). Text Understanding from Scratch. arXiv E-Prints, 3, 011102.?
[17]?Kim, Y., Jernite, Y., Sontag, D., & Rush, A. M. (2015). Character-Aware Neural Language Models.
評(píng)論