學習筆記
一又厉、文本預處理
文本是一類序列數(shù)據(jù)饱亿,一篇文章可以看作是字符或單詞的序列瘟判,對文本處理主要包含以下步驟:
- 讀入文本
- 分詞
- 建立字典抡句,將每個詞映射到一個唯一的索引(index)
- 將文本從詞的序列轉(zhuǎn)換為索引的序列,方便輸入模型
對于語言的不同赋秀,在分詞上處理方式不太一樣利朵,英文單詞的意義相對獨立,分詞較為方便猎莲,可以采用spaCy和NLTK包來進行操作绍弟。
中文分詞相對難度較大,主要集中在:分詞標準著洼、歧義樟遣、新詞方面。參見中文分詞郭脂。
二年碘、語言模型
一段分詞后的自然語言文本可以看作是一個離散時間序列,通過假設詞之間存在n階馬爾可夫鏈關(guān)系展鸡,可以簡化語言模型計算,即:
不過這會帶來參數(shù)空間過大以及數(shù)據(jù)稀疏的問題。即文本內(nèi)存在高頻無意義詞埃难,具體解決方式有待研究莹弊。
采樣
在訓練中我們需要每次隨機讀取小批量樣本和標簽,這就涉及到采樣方式的選任谐尽:隨機采樣和相鄰采樣忍弛,具體如下:
三、RNN-循環(huán)神經(jīng)網(wǎng)絡
具體構(gòu)造:
其中考抄,细疚,,川梅,函數(shù)是非線性激活函數(shù)疯兼。由于引入了然遏,能夠捕捉截至當前時間步的序列的歷史信息,就像是神經(jīng)網(wǎng)絡當前時間步的狀態(tài)或記憶一樣吧彪。由于的計算基于待侵,上式的計算是循環(huán)的,使用循環(huán)計算的網(wǎng)絡即循環(huán)神經(jīng)網(wǎng)絡(recurrent neural network)姨裸。
在時間步秧倾,輸出層的輸出為:
其中傀缩,
。
模型參數(shù)
: 狀態(tài)-輸入權(quán)重
: 狀態(tài)-狀態(tài)權(quán)重
: 狀態(tài)-輸出權(quán)重
: 隱藏層的偏置
: 輸出層的偏置
循環(huán)神經(jīng)網(wǎng)絡的參數(shù)就是上述的三個權(quán)重和兩個偏置,并且在沿著時間訓練(參數(shù)的更新)瞄摊,參數(shù)的數(shù)量沒有發(fā)生變化勋又,僅僅是上述的參數(shù)的值在更新。循環(huán)神經(jīng)網(wǎng)絡可以看作是沿著時間維度上的權(quán)值共享
在卷積神經(jīng)網(wǎng)絡中换帜,一個卷積核通過在特征圖上滑動進行卷積楔壤,是空間維度的權(quán)值共享。在卷積神經(jīng)網(wǎng)絡中通過控制特征圖的數(shù)量來控制每一層模型的復雜度惯驼,而循環(huán)神經(jīng)網(wǎng)絡是通過控制和
中h的維度來控制模型的復雜度蹲嚣。
一個batch的數(shù)據(jù)的表示
如何將一個batch的數(shù)據(jù)轉(zhuǎn)換成時間步數(shù)個(批量大小,詞典大兴钌)的矩陣隙畜?
每個字符都是一個詞典大小的向量,每個樣本是時間步數(shù)個序列说贝,每個batch是批量大小個樣本
第一個(批量大小议惰,詞典大小)的矩陣:取出一個批量樣本中每個序列的第一個字符,并將每個字符展開成詞典大小的向量乡恕,就形成了第一個時間步所表示的矩陣
第二個(批量大小言询,詞典大小)的矩陣:取出一個批量樣本中每個序列的第二個字符函卒,并將每個字符展開成詞典大小的向量,就形成了第二個時間步所表示的矩陣
最后就形成了時間步個(批量大小熊榛,詞典大小)的矩陣营搅,這也就是每個batch最后的形式
隱藏狀態(tài)的初始化
隨機采樣時:每次迭代都需要重新初始化隱藏狀態(tài)(每個epoch有很多詞迭代帖世,每次迭代都需要進行初始化,因為對于隨機采樣的樣本中只有一個批量內(nèi)的數(shù)據(jù)是連續(xù)的)
相鄰采樣時:如果是相鄰采樣,則說明前后兩個batch的數(shù)據(jù)是連續(xù)的,所以在訓練每個batch的時候只需要更新一次(也就是說模型在一個epoch中的迭代不需要重新初始化隱藏狀態(tài))
detach
關(guān)于這方面,參見https://www.cnblogs.com/jiangkejie/p/9981707.html和
https://zhuanlan.zhihu.com/p/79801410
待續(xù)