TensorFlow深度學習筆記 文本與序列的深度模型


Deep Models for Text and Sequence

轉載請注明作者:夢里風林
Github工程地址:https://github.com/ahangchen/GDLnotes
歡迎star,有問題可以到Issue區討論
官方教程地址
視頻/字幕下載

Rare Event

與其他機器學習不同,在文本分析里,陌生的東西(rare event)往往是最重要的,而最常見的東西往往是最不重要的。

語法多義性

  • 一個東西可能有多個名字,對這種related文本能夠做參數共享是最好的
  • 需要識別單詞,還要識別其關系,就需要過量label數據

無監督學習

  • 不用label進行訓練,訓練文本是非常多的,關鍵是要找到訓練的內容
  • 遵循這樣一個思想:相似的詞匯出現在相似的場景中
  • 不需要知道一個詞真實的含義,詞的含義由它所處的歷史環境決定

Embeddings

  • 將單詞映射到一個向量(Word2Vec),越相似的單詞的向量會越接近
  • 新的詞可以由語境得到共享參數

Word2Vec

  • 將每個詞映射到一個Vector列表(就是一個Embeddings)里,一開始隨機,用這個Embedding進行預測
  • Context即Vector列表里的鄰居
  • 目標是讓Window里相近的詞放在相鄰的位置,即預測一個詞的鄰居
  • 用來預測這些相鄰位置單詞的模型只是一個Logistics Regression, just a simple Linear model

Comparing embeddings

  • 比較兩個vector之間的夾角大小來判斷接近程度,用cos值而非L2計算,因為vector的長度和分類是不相關的:

  • 最好將要計算的vector都歸一化

Predict Words

  • 單詞經過embedding變成一個vector
  • 然后輸入一個WX+b,做一個線性模型
  • 輸出的label概率為輸入文本中的詞匯
  • 問題在於WX+b輸出時,label太多了,計算這種softmax很低效
  • 解決方法是,篩掉不可能是目標的label,只計算某個label在某個局部的概率,sample softmax

t-SNE

  • 查看某個詞在embedding里的最近鄰居可以看到單詞間的語義接近關系
  • 將vector構成的空間降維,可以更高效地查找最近單詞,但降維過程中要保持鄰居關系(原來接近的降維后還要接近)
  • t-SNE就是這樣一種有效的方法

類比

  • 實際上我們能得到的不僅是單詞的鄰接關系,由於將單詞向量化,可以對單詞進行計算
  • 可以通過計算進行語義加減,語法加減

Sequence

文本(Text)是單詞(word)的序列,一個關鍵特點是長度可變,就不能直接變為vector

CNN and RNN

CNN 在空間上共享參數,RNN在時間上(順序上)共享參數

  • 在每輪訓練中,需要判斷至今為之發生了什么,過去輸入的所有數據都對當下的分類造成影響
  • 一種思路是記憶之前的分類器的狀態,在這個基礎上訓練新的分類器,從而結合歷史影響
  • 這樣需要大量歷史分類器
  • 重用分類器,只用一個分類器總結狀態,其他分類器接受對應時間的訓練,然后傳遞狀態

RNN Derivatives

  • BackPropagation Through time
  • 對同一個weight參數,會有許多求導操作同時更新之
  • 對SGD不友好,因為SGD是用許多不相關的求導更新參數,以保證訓練的穩定性
  • 由於梯度之間的相關性,導致梯度爆炸或者梯度消失

  • 使得訓練時找不到優化方向,訓練失敗

Clip Gradient

計算到梯度爆炸的時候,使用一個比值來代替△W(梯度是回流計算的,橫坐標從右往左看)

  • Hack but cheap and effective

LSTM(Long Short-Term Memory)

梯度消失會導致分類器只對最近的消息的變化有反應,淡化以前訓練的參數,也不能用比值的方法來解決

  • 一個RNN的model包含兩個輸入,一個是過去狀態,一個是新的數據,兩個輸出,一個是預測,一個是將來狀態

  • 中間是一個簡單的神經網絡
  • 將中間的部分換成LSTM-cell就能解決梯度消失問題
  • 我們的目的是提高RNN的記憶能力
  • Memory Cell

三個門,決定是否寫/讀/遺忘/寫回

  • 在每個門上,不單純做yes/no的判斷,而是使用一個權重,決定對輸入的接收程度
  • 這個權重是一個連續的函數,可以求導,也就可以進行訓練,這是LSTM的核心

  • 用一個邏輯回歸訓練這些門,在輸出進行歸一化

  • 這樣的模型能讓整個cell更好地記憶與遺忘
  • 由於整個模型都是線性的,所以可以方便地求導和訓練

LSTM Regularization

  • L2, works
  • Dropout on the input or output of data, works

有了上面的模型之后,我們可以根據上文來推測下文,甚至創造下文,預測,篩選最大概率的詞,喂回,繼續預測……

  • 我們可以每次只預測一個字母,but this is greedy,每次都挑最好的那個
  • 也可以每次多預測幾步,然后挑整體概率較高的那個,以減少偶然因素的影響
  • 但這樣需要生成的sequence會指數增長
  • 因此我們在多預測幾步的時候,只為概率比較高的幾個候選項做預測,that's beam search.

翻譯與識圖

  • RNN將variable length sequence問題變成了fixed length vector問題,同時因為實際上我們能利用vector進行預測,我們也可以將vector變成sequence

  • 我們可以利用這一點,輸入一個序列,到一個RNN里,將輸出輸入到另一個逆RNN序列,形成另一種序列,比如,語言翻譯

  • 如果我們將CNN的輸出接到一個RNN,就可以做一種識圖系統

循環神經網絡實踐

覺得我的文章對您有幫助的話,給個star可好?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM