天天看點

深度學習

1. 為什麼要進行預訓練?

   為模型提供了一個好的初始化參數,在目标任務上具備更好的泛化性能、并加速收斂;

   是一種有效的正則化手段,避免在小資料集上過拟合。

2. 什麼是詞嵌入和分布式表示?ptms與分布式表示的關系?

   把一個維數為所有詞的數量的高維空間嵌入到一個維數低得多的連續向量空間中,每個單詞或詞組被映射為實數域上的向量,

   這也是分布式表示:向量的每一次元都沒有實際意義,而整體代表一個具體概念。

3. 什麼是tf-idf(詞頻-逆文檔頻率)

   tf(term frequency): 某個詞在整個文檔中出現的頻率,即詞頻統計逆文本頻率,文本頻率指含有某個詞的文本在整個語料

   庫中所占的比例。逆文本頻率是文本頻率的倒數。

深度學習
深度學習
深度學習

     不能反映詞的位置資訊,對關鍵詞進行提取的時候,詞的位置資訊(如:标題、句首、句尾的詞應該賦予更高的權重)。tf-idf

   嚴重依賴語料庫,尤其是在訓練同類語料庫時,往往會掩蓋一些同類型的關鍵詞。

4. 什麼是交叉熵損失函數

   交叉熵和 kl 散度差了一個常數項,可用于度量兩個機率分布間的差異性資訊,熵越小則分布越接近真實分布,不确定性越低。

5. bert 如何訓練的?

   bert輸入向量的組成部分是詞向量(token embeddings)、段向量(segment embeddings)、位置向量(position embeddings)。

   bert輸入的最大長度限制為512。bert的輸出是每個token的表示向量,也可以擷取每一層的表示向量。

   bert是一種自編碼語言模型,可以看到一個單詞兩個方向的上下文資訊,結構采用原始transformer的編碼器部分。bert的輸入

   序列可以是一個句子或兩個句子的組合,每個序列都在起始位置添加一個特殊的分類标記[cls]。輸入是兩個句子時,句子之間需

   要用一個特殊的分隔符[sep]分隔,并且為每個詞添加一個可學習的段嵌入向量來訓示該詞屬于哪一個句子,每個詞的輸入表示是

   對應的詞向量,段嵌入向量和位置向量的和。

   采用兩個無監督的任務對bert進行預訓練,分别為mlm(masked lm)和nsp(next sentence prediction),兩個任務一起訓練,輸入是句子對構成的序列。

   在mlm任務中,從輸入序列随機選擇出15%的詞,輸出端不重建整個輸入,隻對這15%的詞做預測。在選出的詞中,80%替換為[mask]标記,10%替換為随機的單

   詞,剩下10%的詞不做更改。之是以沒有将這15%的詞全部替換為[mask]标記,是為了緩解在訓練時存在[mask]标記而在fine-tune時沒有[mask]标記而帶來的

   不一緻,但差異仍然存在,另外mlm通過沒有掩蓋的詞來重建被掩蓋的詞,忽略了被掩蓋單詞之間的依賴關系。

   nsp任務的目的是訓練模型了解句子之間的關系。在構造句子對的時候,50%的可能性後面的句子是前面句子真實的下一句,50%的可能性後面的句子是從語料

   庫中随機選擇的。

6. 過拟合的處理方法,有哪些正則化方法?

   正則化是機器學習中最常見的過拟合解決方法,在損失函數中加入正則項來懲罰模型的參數,以此來降低模型的複雜度,常見的添加正則項的正則化技術有

   l1,l2 正則化,在神經網絡中則有dropout等。選取合适的停止訓練标準,使對機器的訓練在合适的程度,即early stopping。資料增強。

   正則化工作的時候,它使網絡的權值更小。權值變小意味着,如果我們在這裡或那裡改變一些随機輸入,網絡的行為不會有太大的變化,這反過來使正則化

   的網絡很難學習資料中的局部噪聲。這迫使網絡隻學習那些在訓練集中經常看到的特征。對bias進行正則化可能引入大量的欠拟合。

7. layernorm 和 batchnorm 的差別

   batch normalization 的處理對象是對一批樣本, layer normalization 的處理對象是單個樣本。batch normalization 是對這批樣本的同一次元特征做标準

   化,layer normalization 是對這單個樣本的所有次元特征做标準化。

8. 請問人工神經網絡中為什麼 relu 要好過于 tanh 和 sigmoid function?

   第一,采用 sigmoid 等函數,算激活函數時(指數運算)涉及除法和指數運算,計算量大,而采用 relu 激活函數,整個過程的計算量節省很多。

   第二,對于深層網絡,sigmoid 函數反向傳播時,很容易就會出現梯度消失的情況(在 sigmoid 接近飽和區時,變換太緩慢,導數趨于0,這種情況會造成資訊丢失),

   這種現象稱為飽和,進而無法完成深層網絡的訓練。而 relu 就不會有飽和傾向,不會有特别小的梯度出現。

   第三,relu 會使一部分神經元的輸出為0,這樣就造成了網絡的稀疏性,并且減少了參數的互相依存關系,緩解了過拟合問題的發生。

9. 為什麼引入非線性激勵函數?

   隻有線性激勵函數的條件下,多層網絡與一層網絡相當。

   非線性變換是深度學習有效的原因之一。原因在于非線性相當于對空間進行變換,變換完成後相當于對問題空間進行簡化,原來線性不可解的問題現在變得可以解了。

深度學習

10. 為什麼 lstm 模型中既存在 sigmoid 又存在 tanh 兩種激活函數,而不是選擇統一一種 sigmoid 或者 tanh?這樣做的目的是什麼?

    sigmoid 用在了各種 gate 上,産生0-1之間的值。

    tanh 用在了狀态和輸出上,是對資料的處理,這個用其他激活函數或許也可以。二者目的不一樣。

11. 如何解決 rnn 梯度爆炸和彌散的問題?

    為了解決梯度爆炸問題,thomas mikolov首先提出了一個簡單的啟發性的解決方案,就是當梯度大于一定門檻值的的時候,将它截斷為一個較小的數。

    為了解決梯度彌散的問題,使用 relu 代替 sigmoid 函數。relu 的導數不是 0 就是 1.是以,神經元的梯度将始終為 1,而不會當梯度傳播了一定時間之後變小。

12. 什麼樣的資料集不适合用深度學習?

   (1)資料集太小,資料樣本不足時,深度學習相對其它機器學習算法,沒有明顯優勢。

   (2)資料集沒有局部相關特性,目前深度學習表現比較好的領域主要是圖像/語音/自然語言處理等領域,這些領域的一個共性是局部相關性。圖像中像素組成物體,

        語音信号中音位組合成單詞,文本資料中單詞組合成句子,這些特征元素的組合一旦被打亂,表示的含義同時也被改變。對于沒有這樣的局部相關性的資料集,

        不适于使用深度學習算法進行處理。舉個例子:預測一個人的健康狀況,相關的參數會有年齡、職業、收入、家庭狀況等各種元素,将這些元素打亂,并不會影

        響相關的結果。

13. cnn的卷積核是單層的還是多層的?

    一般而言,深度卷積網絡是一層又一層的。層的本質是特征圖, 存貯輸入資料或其中間表示值。一組卷積核則是聯系前後兩層的網絡參數表達體, 訓練的目标就是每

    個卷積核的權重參數組。

    描述網絡模型中某層的厚度,通常用名詞通道 channel 數或者特征圖 feature map 數。不過人們更習慣把作為資料輸入的前層的厚度稱之為通道數(比如rgb三色圖

    層稱為輸入通道數為3),把作為卷積輸出的後層的厚度稱之為特征圖數。

    卷積的意思就是把一個區域,不管是一維線段,二維方陣,還是三維長方塊,全部按照卷積核的次元形狀,對應逐點相乘再求和,濃縮成一個标量值也就是降到零次元,

    作為下一層的一個feature map的一個點的值!

14. 什麼是cnn的池化pool層?

    池化,簡言之,即取區域平均或最大。

15. 神經網絡參數初始化方法有哪些?

    神經網絡的收斂結果實際上很大程度取決于網絡參數的最開始的初始化。

    如果權值的初始值過大,則會導緻梯度爆炸,使得網絡不收斂;過小的權值初始值,則會導緻梯度消失,使網絡收斂緩慢或者收斂到局部極小值。

    随機正态/均勻分布初始化。

    xavier 初始化:基本思想是保持輸入和輸出的方差一緻。

16. 訓練技巧

    要做梯度歸一化,即算出來的梯度除以 minibatch size。

    clip(梯度裁剪): 限制最大梯度,其實是value = sqrt(w1^2+w2^2….),如果 value 超過了門檻值,就算一個衰減系系數,讓value的值等于門檻值。

    dropout 對小資料防止過拟合有很好的效果,值一般設為 0.1。

    rnn 的 dim 和 embdding size 一般從128上下開始調整. batch size 一般從 128 左右開始調整,batch size合适最重要,并不是越大越好。

    word2vec/glove 初始化,在小資料上,不僅可以有效提高收斂速度,也可以提高結果。

    除了 gate 之類的地方,需要把輸出限制成 0-1 之外,盡量不要用 sigmoid,可以用 tanh 或者 relu 之類的激活函數.1. sigmoid函數在-4到4的區間裡,

    才有較大的梯度。之外的區間,梯度接近0,很容易造成梯度消失問題。2. 輸入0均值,sigmoid函數的輸出不是0均值的。

17. cnn最成功的應用是在cv,那為什麼nlp和speech的很多問題也可以用cnn解出來?為什麼alphago裡也用了cnn?這幾個不相關的問題的相似性在哪裡?

    cnn通過什麼手段抓住了這個共性?

    以上幾個不相關問題的相關性在于,都存在局部與整體的關系,由低層次的特征經過組合,組成高層次的特征,并且得到不同特征之間的空間相關性。

    cnn抓住此共性的手段主要有四個:局部連接配接/權值共享/池化操作/多層次結構。

    局部連接配接使網絡可以提取資料的局部特征;權值共享大大降低了網絡的訓練難度,一個filter隻提取一個特征,在整個圖檔(或者語音/文本) 中進行卷積;

    池化操作與多層次結構一起,實作了資料的降維,将低層次的局部特征組合成為較高層次的特征,進而對整個圖檔進行表示。

18. lstm結構推導,為什麼比rnn好?

    lstm 通過門機制來緩解梯度消失問題。神經網絡會通過學習改變門控的值來決定什麼時候遺忘梯度,什麼時候保留梯度。

    lstm的發明,主要是為了解決梯度消失。因為梯度消失了,參數就沒有辦法更新了。

    rnn 所謂梯度消失的真正含義是,梯度被近距離梯度主導,導緻模型難以學到遠距離的依賴關系。

    lstm 中梯度的傳播有很多條路徑,

深度學習

 這條路徑上隻有逐元素相乘和相加的操作,梯度流最穩定;

    但是其他路徑(例如 

深度學習

 )上梯度流與普通 rnn 類似,照樣會發生相同的權重矩陣反複連乘。

    但是在其他路徑上,lstm 的梯度流和普通 rnn 沒有太大差別,依然會爆炸或者消失。由于總的遠距離梯度 = 各條路徑的遠距離梯度之和,即

    便其他遠距離路徑梯度消失了,隻要保證有一條遠距離路徑(就是上面說的那條高速公路)梯度不消失,總的遠距離梯度就不會消失(正常梯度

    + 消失梯度 = 正常梯度)。是以 lstm 通過改善一條路徑上的梯度問題拯救了總體的遠距離梯度。

19. 一個激活函數需要具有哪些必要的屬性?

    非線性、幾乎處處可微、計算簡單、非飽和性、輸出範圍有限。

繼續閱讀