池化方式有兩種:1)最大池化;2)平均池化
在實驗中我發現,最大池化要比平均池化慢很多,效果也不如平均池化好。所以,池化的方式我們盡量選擇平均池化。
卷積的大小,遵守奇數設計原則,如【1,3,5,7】
兩個網路最終都要接乙個全連線,你一定要保證輸入全連線網路的shape是二維的,即(?,網路最終抽取特徵的維數),「?」表示是batch的大小,後面是維數。
這樣無論你接下來如何處理,如兩個網路的特徵拼接,還是能夠保持相同的shape,那麼直接輸入到全連線層就可以了。
input的方向性 - 單向或雙向
深度 - 單層或多層
型別– rnn,lstm或gru
目前的rnn網路,最多也就是兩層。
資料表示時,對於字元、單詞、句子資訊
雖然rnn網路能夠捕捉長時資訊,但畢竟能力有限,在對待全域性時序資訊時需要我們引入注意力機制,可以顯著提高模型的準確率。無論你的模型效果如何,引入注意力是乙個不錯的選擇。
我們摒棄之前的固有思維,不再依賴於遞迴神經網路和卷積神經網路,轉而使用一種更為簡單的網路架構來做序列變換,即注意力機制的序列變換器(transformer)。
在大部分任務中,注意力機制通常和遞迴神經網路聯合起來使用。
在這種情況下,遠距離計算序列中的依賴性關係就會變得非常困難。在我們提出的轉換器結構中,我們對序列中的位置進行注意力加權,然後取均值,因此運算量可以被縮減為固定數。不過這種操作的顯著弊端在於加權求均值的操作,會在一定程度上犧牲運算的精度,需要級聯多級注意力機制進行精度補償。
所謂 self attention,其實就是 attention(x,x,x),x 就是前面說的輸入序列。也就是說,在序列內部做 attention,尋找序列內部的聯絡。
完全拋棄了cnn, rnn,全部使用注意力來實現。值得注意的是,feed forward網路用到了1維卷積,增加卷積核的數量,對模型的提高幫助很大。這點需要注意。
文字中一般都會有雜訊,我們需要去停用詞,目前來看停用詞表內容有大有小,到底選取哪乙個來作為停用詞表,需要根據實際訓練的情況來考慮。目前我正在嘗試,給出乙個結論。
優秀的預處理確實可以提高模型的精度,停用詞表越大,去掉的停用詞越多,留下的資訊就越有用,模型表現的越好。提高停用詞表的質量,可以整體提公升模型的2到3個點
transformer網路中,用到了殘差計算,也是提高優化效能的方式之一
對每一層做normalization,可以很快滴提高網路的收斂速度。transformer網路本身就沒有用lstm,在加上使用了normalization,讓模型訓練變得非常快,往往在5個epoch就可以達到比較好的效果
在特徵抽取器選擇方面,elmo選擇了lstm;bert選擇了transform。很多研究已經證明,transform提取特徵的能力要遠遠強於lstm.
elmo這種使用雙向拼接融合特徵的能力可能比bert一體化的特徵融合方案要弱
由於模型的限定,輸入到模型的資料長度要求是定長的,輸入長度的選取也是要講究的,我們要觀察資料長度的分布,找出乙個合理的長度。
長度過長,那麼較短的樣本就會引入過多的padding符號。但這一點可以彌補,transformer網路能夠將padding進行mask,這些資訊不會有干擾。
長度過短,有些資訊就會丟失,對模型來說缺乏有更為表徵的樣本。
這樣看來,選取的長度稍微長一點,效果會好。但這樣也會更耗時些。
這裡需要注意的一點,padding的方式有在句前和句後做padding,個人認為將padding放在句前效果會好一些,就是所謂的「冷啟動」
待續
深度學習模型設計經驗分享
suo.im 5o3jws 本次演講將從資料準備 模型結構 優化方法 計算效能這四個方面,來 深度學習模型設計的一些經驗。以個人經驗來看,一般性的研發流程大致可分為8步。問題分析,確定需求 資料分析,確定現有資料的價值 主要依據特徵及分布 特徵抽取,根據資料的價值和需要解決的問題,確定特徵 資料準備...
深度學習的幾點總結
1.卷積和池化關係 一般先卷積後池化 卷積的時候盡量不壓縮影象的長寬,盡量保留更多的資訊,卷積會無意的丟失一些資訊,因此池化可以解決這個問題,在池化進行壓縮。2.評價 連續資料的精度 r2 score 不均衡資料的精度 f1 score 過擬合 l1 l2 regularization,dropou...
關於設計模式的幾點經驗分享
設計模式大家都很熟悉,什麼簡單工廠模式,抽象工廠模式,命令模式,介面卡模式幾乎每個開發人員都能說出個一大堆來,但到實際應用時又往往難以落地,或被濫用,本週有幸去參加大鬍子的兩天的設計模式的課,感覺還是收穫頗豐,在這裡我就把課程結合自身的一些經驗介紹一下。在做程式設計的時候需要遵從一些基本原則,比較公...