1.CNN網絡中的池化方式選擇
池化方式有兩種:1)最大池化;2)平均池化
在實驗中我發現,最大池化要比平均池化慢很多,效果也不如平均池化好。所以,池化的方式我們盡量選擇平均池化。
2.CNN卷積核的設計
卷積的大小,遵守奇數設計原則,如【1,3,5,7】
3.CNN和RNN網絡輸出到全連接層數據shape的確定
兩個網絡最終都要接一個全連接,你一定要保證輸入全連接網絡的shape是二維的,即(?,網絡最終抽取特征的維數),“?”表示是batch的大小,后面是維數。
這樣無論你接下來如何處理,如兩個網絡的特征拼接,還是能夠保持相同的shape,那么直接輸入到全連接層就可以了。
4.RNN網絡中,深度和方向的考慮
input的方向性 - 單向或雙向
深度 - 單層或多層
類型– RNN,LSTM或GRU
目前的RNN網絡,最多也就是兩層。
5.embeddings加入位置信息
數據表示時,對於字符、單詞、句子信息
6.加入注意力機制
雖然RNN網絡能夠捕捉長時信息,但畢竟能力有限,在對待全局時序信息時需要我們引入注意力機制,可以顯著提高模型的准確率。無論你的模型效果如何,引入注意力是一個不錯的選擇。
我們摒棄之前的固有思維,不再依賴於遞歸神經網絡和卷積神經網絡,轉而使用一種更為簡單的網絡架構來做序列變換,即注意力機制的序列變換器(Transformer)。
在大部分任務中,注意力機制通常和遞歸神經網絡聯合起來使用。
在這種情況下,遠距離計算序列中的依賴性關系就會變得非常困難。在我們提出的轉換器結構中,我們對序列中的位置進行注意力加權,然后取均值,因此運算量可以被縮減為固定數。不過這種操作的顯著弊端在於加權求均值的操作,會在一定程度上犧牲運算的精度,需要級聯多級注意力機制進行精度補償。
所謂 Self Attention,其實就是 Attention(X,X,X),X 就是前面說的輸入序列。也就是說,在序列內部做 Attention,尋找序列內部的聯系。
7.Transformer網絡
完全拋棄了CNN, RNN,全部使用注意力來實現。值得注意的是,Feed Forward網絡用到了1維卷積,增加卷積核的數量,對模型的提高幫助很大。這點需要注意。
8.NLP任務,去停用詞對訓練模型的影響
文本中一般都會有噪聲,我們需要去停用詞,目前來看停用詞表內容有大有小,到底選取哪一個來作為停用詞表,需要根據實際訓練的情況來考慮。目前我正在嘗試,給出一個結論。
優秀的預處理確實可以提高模型的精度,停用詞表越大,去掉的停用詞越多,留下的信息就越有用,模型表現的越好。提高停用詞表的質量,可以整體提升模型的2到3個點
9.向網絡中引入殘差
Transformer網絡中,用到了殘差計算,也是提高優化性能的方式之一
10.Layer Normalization
對每一層做normalization,可以很快滴提高網絡的收斂速度。transformer網絡本身就沒有用LSTM,在加上使用了normalization,讓模型訓練變得非常快,往往在5個epoch就可以達到比較好的效果
11. BERT和ELMO的比較
在特征抽取器選擇方面,elmo選擇了LSTM;bert選擇了Transform。很多研究已經證明,transform提取特征的能力要遠遠強於LSTM.
elmo這種使用雙向拼接融合特征的能力可能比bert一體化的特征融合方案要弱
12.訓練數據集的長度截取標准
由於模型的限定,輸入到模型的數據長度要求是定長的,輸入長度的選取也是要講究的,我們要觀察數據長度的分布,找出一個合理的長度。
長度過長,那么較短的樣本就會引入過多的padding符號。但這一點可以彌補,transformer網絡能夠將padding進行mask,這些信息不會有干擾。
長度過短,有些信息就會丟失,對模型來說缺乏有更為表征的樣本。
這樣看來,選取的長度稍微長一點,效果會好。但這樣也會更耗時些。
這里需要注意的一點,padding的方式有在句前和句后做padding,個人認為將padding放在句前效果會好一些,就是所謂的“冷啟動”
13.各類模型優劣總結
待續