1. 一文看懂四種基本的神經網路架構
原文鏈接:
http://blackblog.tech/2018/02/23/Eight-Neural-Network/
更多干貨就在我的個人博客 http://blackblog.tech 歡迎關注
剛剛入門神經網路,往往會對眾多的神經網路架構感到困惑,神經網路看起來復雜多樣,但是這么多架構無非也就是三類,前饋神經網路,循環網路,對稱連接網路,本文將介紹四種常見的神經網路,分別是CNN,RNN,DBN,GAN。通過這四種基本的神經網路架構,我們來對神經網路進行一定的了解。
神經網路是機器學習中的一種模型,是一種模仿動物神經網路行為特徵,進行分布式並行信息處理的演算法數學模型。這種網路依靠系統的復雜程度,通過調整內部大量節點之間相互連接的關系,從而達到處理信息的目的。
一般來說,神經網路的架構可以分為三類:
前饋神經網路:
這是實際應用中最常見的神經網路類型。第一層是輸入,最後一層是輸出。如果有多個隱藏層,我們稱之為「深度」神經網路。他們計算出一系列改變樣本相似性的變換。各層神經元的活動是前一層活動的非線性函數。
循環網路:
循環網路在他們的連接圖中定向了循環,這意味著你可以按照箭頭回到你開始的地方。他們可以有復雜的動態,使其很難訓練。他們更具有生物真實性。
循環網路的目的使用來處理序列數據。在傳統的神經網路模型中,是從輸入層到隱含層再到輸出層,層與層之間是全連接的,每層之間的節點是無連接的。但是這種普通的神經網路對於很多問題卻無能無力。例如,你要預測句子的下一個單詞是什麼,一般需要用到前面的單詞,因為一個句子中前後單詞並不是獨立的。
循環神經網路,即一個序列當前的輸出與前面的輸出也有關。具體的表現形式為網路會對前面的信息進行記憶並應用於當前輸出的計算中,即隱藏層之間的節點不再無連接而是有連接的,並且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出。
對稱連接網路:
對稱連接網路有點像循環網路,但是單元之間的連接是對稱的(它們在兩個方向上權重相同)。比起循環網路,對稱連接網路更容易分析。這個網路中有更多的限制,因為它們遵守能量函數定律。沒有隱藏單元的對稱連接網路被稱為「Hopfield 網路」。有隱藏單元的對稱連接的網路被稱為玻爾茲曼機。
其實之前的帖子講過一些關於感知機的內容,這里再復述一下。
首先還是這張圖
這是一個M-P神經元
一個神經元有n個輸入,每一個輸入對應一個權值w,神經元內會對輸入與權重做乘法後求和,求和的結果與偏置做差,最終將結果放入激活函數中,由激活函數給出最後的輸出,輸出往往是二進制的,0 狀態代表抑制,1 狀態代表激活。
可以把感知機看作是 n 維實例空間中的超平面決策面,對於超平面一側的樣本,感知器輸出 1,對於另一側的實例輸出 0,這個決策超平面方程是 w⋅x=0。 那些可以被某一個超平面分割的正反樣例集合稱為線性可分(linearly separable)樣例集合,它們就可以使用圖中的感知機表示。
與、或、非問題都是線性可分的問題,使用一個有兩輸入的感知機能容易地表示,而異或並不是一個線性可分的問題,所以使用單層感知機是不行的,這時候就要使用多層感知機來解決疑惑問題了。
如果我們要訓練一個感知機,應該怎麼辦呢?
我們會從隨機的權值開始,反復地應用這個感知機到每個訓練樣例,只要它誤分類樣例就修改感知機的權值。重復這個過程,直到感知機正確分類所有的樣例。每一步根據感知機訓練法則來修改權值,也就是修改與輸入 xi 對應的權 wi,法則如下:
這里 t 是當前訓練樣例的目標輸出,o 是感知機的輸出,η 是一個正的常數稱為學習速率。學習速率的作用是緩和每一步調整權的程度,它通常被設為一個小的數值(例如 0.1),而且有時會使其隨著權調整次數的增加而衰減。
多層感知機,或者說是多層神經網路無非就是在輸入層與輸出層之間加了多個隱藏層而已,後續的CNN,DBN等神經網路只不過是將重新設計了每一層的類型。感知機可以說是神經網路的基礎,後續更為復雜的神經網路都離不開最簡單的感知機的模型,
談到機器學習,我們往往還會跟上一個詞語,叫做模式識別,但是真實環境中的模式識別往往會出現各種問題。比如:
圖像分割:真實場景中總是摻雜著其它物體。很難判斷哪些部分屬於同一個對象。對象的某些部分可以隱藏在其他對象的後面。
物體光照:像素的強度被光照強烈影響。
圖像變形:物體可以以各種非仿射方式變形。例如,手寫也可以有一個大的圓圈或只是一個尖頭。
情景支持:物體所屬類別通常由它們的使用方式來定義。例如,椅子是為了讓人們坐在上面而設計的,因此它們具有各種各樣的物理形狀。
卷積神經網路與普通神經網路的區別在於,卷積神經網路包含了一個由卷積層和子采樣層構成的特徵抽取器。在卷積神經網路的卷積層中,一個神經元只與部分鄰層神經元連接。在CNN的一個卷積層中,通常包含若干個特徵平面(featureMap),每個特徵平面由一些矩形排列的的神經元組成,同一特徵平面的神經元共享權值,這里共享的權值就是卷積核。卷積核一般以隨機小數矩陣的形式初始化,在網路的訓練過程中卷積核將學習得到合理的權值。共享權值(卷積核)帶來的直接好處是減少網路各層之間的連接,同時又降低了過擬合的風險。子采樣也叫做池化(pooling),通常有均值子采樣(mean pooling)和最大值子采樣(max pooling)兩種形式。子采樣可以看作一種特殊的卷積過程。卷積和子采樣大大簡化了模型復雜度,減少了模型的參數。
卷積神經網路由三部分構成。第一部分是輸入層。第二部分由n個卷積層和池化層的組合組成。第三部分由一個全連結的多層感知機分類器構成。
這里舉AlexNet為例:
·輸入:224×224大小的圖片,3通道
·第一層卷積:11×11大小的卷積核96個,每個GPU上48個。
·第一層max-pooling:2×2的核。
·第二層卷積:5×5卷積核256個,每個GPU上128個。
·第二層max-pooling:2×2的核。
·第三層卷積:與上一層是全連接,3*3的卷積核384個。分到兩個GPU上個192個。
·第四層卷積:3×3的卷積核384個,兩個GPU各192個。該層與上一層連接沒有經過pooling層。
·第五層卷積:3×3的卷積核256個,兩個GPU上個128個。
·第五層max-pooling:2×2的核。
·第一層全連接:4096維,將第五層max-pooling的輸出連接成為一個一維向量,作為該層的輸入。
·第二層全連接:4096維
·Softmax層:輸出為1000,輸出的每一維都是圖片屬於該類別的概率。
卷積神經網路在模式識別領域有著重要應用,當然這里只是對卷積神經網路做了最簡單的講解,卷積神經網路中仍然有很多知識,比如局部感受野,權值共享,多卷積核等內容,後續有機會再進行講解。
傳統的神經網路對於很多問題難以處理,比如你要預測句子的下一個單詞是什麼,一般需要用到前面的單詞,因為一個句子中前後單詞並不是獨立的。RNN之所以稱為循環神經網路,即一個序列當前的輸出與前面的輸出也有關。具體的表現形式為網路會對前面的信息進行記憶並應用於當前輸出的計算中,即隱藏層之間的節點不再無連接而是有連接的,並且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出。理論上,RNN能夠對任何長度的序列數據進行處理。
這是一個簡單的RNN的結構,可以看到隱藏層自己是可以跟自己進行連接的。
那麼RNN為什麼隱藏層能夠看到上一刻的隱藏層的輸出呢,其實我們把這個網路展開來開就很清晰了。
從上面的公式我們可以看出,循環層和全連接層的區別就是循環層多了一個權重矩陣 W。
如果反復把式2帶入到式1,我們將得到:
在講DBN之前,我們需要對DBN的基本組成單位有一定的了解,那就是RBM,受限玻爾茲曼機。
首先什麼是玻爾茲曼機?
[圖片上傳失敗...(image-d36b31-1519636788074)]
如圖所示為一個玻爾茲曼機,其藍色節點為隱層,白色節點為輸入層。
玻爾茲曼機和遞歸神經網路相比,區別體現在以下幾點:
1、遞歸神經網路本質是學習一個函數,因此有輸入和輸出層的概念,而玻爾茲曼機的用處在於學習一組數據的「內在表示」,因此其沒有輸出層的概念。
2、遞歸神經網路各節點鏈接為有向環,而玻爾茲曼機各節點連接成無向完全圖。
而受限玻爾茲曼機是什麼呢?
最簡單的來說就是加入了限制,這個限制就是將完全圖變成了二分圖。即由一個顯層和一個隱層構成,顯層與隱層的神經元之間為雙向全連接。
h表示隱藏層,v表示顯層
在RBM中,任意兩個相連的神經元之間有一個權值w表示其連接強度,每個神經元自身有一個偏置系數b(對顯層神經元)和c(對隱層神經元)來表示其自身權重。
具體的公式推導在這里就不展示了
DBN是一個概率生成模型,與傳統的判別模型的神經網路相對,生成模型是建立一個觀察數據和標簽之間的聯合分布,對P(Observation|Label)和 P(Label|Observation)都做了評估,而判別模型僅僅而已評估了後者,也就是P(Label|Observation)。
DBN由多個限制玻爾茲曼機(Restricted Boltzmann Machines)層組成,一個典型的神經網路類型如圖所示。這些網路被「限制」為一個可視層和一個隱層,層間存在連接,但層內的單元間不存在連接。隱層單元被訓練去捕捉在可視層表現出來的高階數據的相關性。
生成對抗網路其實在之前的帖子中做過講解,這里在說明一下。
生成對抗網路的目標在於生成,我們傳統的網路結構往往都是判別模型,即判斷一個樣本的真實性。而生成模型能夠根據所提供的樣本生成類似的新樣本,注意這些樣本是由計算機學習而來的。
GAN一般由兩個網路組成,生成模型網路,判別模型網路。
生成模型 G 捕捉樣本數據的分布,用服從某一分布(均勻分布,高斯分布等)的雜訊 z 生成一個類似真實訓練數據的樣本,追求效果是越像真實樣本越好;判別模型 D 是一個二分類器,估計一個樣本來自於訓練數據(而非生成數據)的概率,如果樣本來自於真實的訓練數據,D 輸出大概率,否則,D 輸出小概率。
舉個例子:生成網路 G 好比假幣製造團伙,專門製造假幣,判別網路 D 好比警察,專門檢測使用的貨幣是真幣還是假幣,G 的目標是想方設法生成和真幣一樣的貨幣,使得 D 判別不出來,D 的目標是想方設法檢測出來 G 生成的假幣。
傳統的判別網路:
生成對抗網路:
下面展示一個cDCGAN的例子(前面帖子中寫過的)
生成網路
判別網路
最終結果,使用MNIST作為初始樣本,通過學習後生成的數字,可以看到學習的效果還是不錯的。
本文非常簡單的介紹了四種神經網路的架構,CNN,RNN,DBN,GAN。當然也僅僅是簡單的介紹,並沒有深層次講解其內涵。這四種神經網路的架構十分常見,應用也十分廣泛。當然關於神經網路的知識,不可能幾篇帖子就講解完,這里知識講解一些基礎知識,幫助大家快速入(zhuang)門(bi)。後面的帖子將對深度自動編碼器,Hopfield 網路長短期記憶網路(LSTM)進行講解。
2. 深度學習與神經網路有什麼區別
找深度學習和神經網路的不同點,其實主要的就是:
原來多層神經網路做的步驟是:特徵映射到值。特徵是人工挑選。
深度學習做的步驟是 信號->特徵->值。 特徵是由網路自己選知仔擇。
另外,深度學習作為機器學習的領域中一個新的研究方向,在被引進機器學習後,讓機器學習可以更加的接近最初的目標,也就是人工智慧。
深度學習主要就是對樣本數據的內在規律還有表示層次的學習,這些學習過程中獲得的信息對諸如文字,圖像和聲音等數據的解釋有很大的幫助。它的最終目標是讓機器能夠像人一樣具有分析學習能力,能夠識別文字、圖像和聲音等數據。 深度學習是一個復雜的機器學習演算法,在語音和圖像識別方面取得的悔岩效果,遠遠超過先前相關技術。
深度學習在搜索技術,數據挖掘,機器學習,機器翻譯,自然語言處理,多媒體學習,語音,推薦和個性化技術,以及其他相關領域都取得了很多成果。深度學習使機器模仿視聽和思考等人類的活動,解決了很多復雜的模式識別難題,使得人工智慧相關技術取得了很大進步。
而神經網路則是可以分為兩種,一種是生物神經網路,而另一種則是人工神經網路。
生物神經網路就是生物的大腦神經元、主要是由細胞以及觸點組成的,主要的作用就是讓生物產生意識,或者是幫助生物實現思考還有行動的目的。
神經網路可以指向兩種,一個是生物神經網路,一個是人工神經網路。
人工神經網路(Artificial Neural Networks,簡寫為ANNs)也簡稱為神經網路(NNs)或稱作連接模型(Connection Model),它是一種模仿動物神經網路行為特徵,進行分布式並行信息處理的演算法數學模型。這種網路依靠系統的復雜程度,通過調整內部大量節點之間相互連接的關系,從而達到處理信息的目的。
人搭前汪工神經網路:是一種應用類似於大腦神經突觸聯接的結構進行信息處理的數學模型。在工程與學術界也常直接簡稱為「神經網路」或類神經網路。
3. 語言模型介紹
語言模型(LM)是很多自然語言處理(NLP)任務的基礎。語言模型是指對於語言序列 ,計算該序列的概率,即 ,這里的語言序列是有序的語言序列,後續計算也會體現這一點。一般我們認為一個正常的語句,它出現的概率是大於非正常的語句。比如有如下三個語句:
那麼應當會有 和 ,這是因為 正常詞序的語句會比亂序的語句更常見,正常含義的語句會比無意義的語句更常見 。
計算一個語言序列的概率,我們可以使用鏈式法則去計算
但該計算方法有兩個缺陷:
我們能夠建立語言模型了,一般的我們在訓練集上得到語言模型的參數,在測試集裡面來測試模型的性能,那麼如何去衡量一個語言模型的好壞呢?比較兩個模型A,B好壞,一種外在的評價就是將AB放入具體的任務中,然後分別得到模型的准確率,這種方式當然是最好的方式,但這種方式的缺點是過於耗時,在實際情況中往往需要花費過多時間才能得到結果。另一種方式是使用下面要介紹的困惑度,但注意困惑度並不是上述外在評價的一個好的近似,所以一般使用在試點試驗上,所謂試點試驗就是一個小規模的初步研究,以評估一些性能。
困惑度的基本評價方式是對測試集賦予高概率值的模型更好,一個句子W的困惑度(PP)定義如下:
S代表sentence,N是句子長度, 是第i個詞的概率。第一個詞就是 ,而 是<s>,表示句子的起始,是個佔位符,事實上,結尾應該也有一個佔位符,但這里好像沒有寫。
這個式子可以這樣理解,PPL越小, 則越大,一句我們期望的sentence出現的概率就越高。
為了解決參數空間過大的問題。人們引入了馬爾科夫假設:隨意一個詞出現的概率只與它前面出現的有限的一個或者幾個詞有關。
如果一個詞的出現與它周圍的詞是獨立的,那麼我們就稱之為unigram,也就是一元語言模型:
如果一個詞的出現僅依賴於它前面出現的一個詞,那麼我們就稱之為bigram:
一般來說,N元模型就是假設當前詞的出現概率只與它前面的n-1個詞有關。而這些概率參數都是可以通過大規模語料庫來計算:
在實踐中用的最多的就是bigram和trigram了,高於四元的用的非常少,由於訓練它須要更龐大的語料,並且數據稀疏嚴重,時間復雜度高,精度卻提高的不多。
那在實際計算中,我們怎麼計算一個句子的概率呢?
以一元模型為例,在一元語言模型中,我們的句子概率定義為:
那麼這裡面的每個因子 該怎麼計算呢?
這里使用頻率統計的辦法,由於一元模型認為每個詞是相互獨立的,所以統計的時候,只需要統計語料庫中每個詞出現的頻率作為概率就可以了。
這里的計算可以認為是根據極大似然估計得到的,假如詞典里有V個詞,每個詞對應一個概率,考慮到所有詞出現的概率和是1,那就有V-1個參數 。假設詞典表中第i詞在語料庫中出現的數目為 ,並且 那麼根據極大似然估計就有:
取對數之後:
這個可以用多元函數極值去求解。不過這樣進行多元極值求解不容易計算,如果用條件極值會容易計算,用拉格朗日乘數法進行求解。
求解得:
有了每個詞的出現概率,帶入到式子 中就可以計算出對應句子的概率。
對於二元模型或者多元模型,其計算方式有些區別,因為假設有些不同,假如我們需要計算 的值,那麼統計頻率的方式是:
那對於bigram中的第一個詞的概率,由於他之前沒有詞彙,那這時候我們一般會認為句子的開頭和結尾分別有一個抽象符號<s>和</s>,那麼句子就變成了<s>, ,</s>,因此 式可以變為:
其餘的n-gram模型也是類似的計算方法,有的地方說的是不要用添加開始和結尾的符號,直接用unigram和bigram的方法去計算 即可,這里暫時以斯坦福的課程為准吧,但是應該對最終影響有限,畢竟本質上是在做最大似然估計。
在上述 計算過程中,由於分子是詞對出現的次數,那很有可能在語料庫中沒有出現這樣的詞對,這時計算結果就是0,同時也會導致句子的出現概率也為0,那這樣有些不合理,即使寫錯了字,也應當有一定概率出現,所以在計算 式的時候要做一下平滑處理
其原理是保證每一個詞對(對於bigram而言)都會出現一次,因此, 式可以修改為:
其中V是詞的字典數目,這里分母加1是為了保證概率和為1,即 ,通俗理解為,我們往語料庫中加入了 這V個詞對,因此其分母語料庫統計的數目也要加V。
Add-K平滑就是保證每個詞對都出現K次,因此, 式可以修改為:
這里分母加KV和之前的模式是一樣的。
這個估計是一個很重要的平滑方式,其原理就是對於沒有看見的事件,我們不能認為它的發生概率就是零,因此我們從概率的總量(Probability mass)中,分配一個很小的比例給予這些沒有看見的事件,這樣一來,看見的那些事件的概率總和就要小於1,因此,需要將所有看見的事件概率小一點。至於小多少,要根據「越是不可信的統計折扣越多」的方法進行。
可以參考: https://zhuanlan.hu.com/p/53636976
神經網路語言模型就是指利用神經網路進行語言建模,當前的一些預訓練語言模型就是利用神經網路來建模的。
前向神經網路,又被稱為全連接(Fully Connected Neural Network)神經網路,是最早被引入到語言建模中的神經網路結構。前向神經網路一般可表示為:
這里的 是一個resial connect的含義。
其中 ,是權重矩陣, 是輸出層的節點數,在語言模型中等於詞典的大小, 等於隱藏層大小,為用戶自定義。 是輸入的特徵維度。
當我們用上述前饋神經網路來描述語言模型的時候,我們假設要預測詞 ,那我們通常用 這前n-1個詞作為輸入。一般詞的輸入先要做一層embedding的映射,將每個詞轉為一個低維度的向量,這就需要一個look up table,假設字典數目是V,而embedding的長度是m,那麼這個look up table就是一個 的矩陣。輸入了n-1個詞,經過embedding之後,就有n-1個m維度向量,我們將它們拼接起來作為前饋神經網路的輸入,這時候前饋神經網路的輸入維度 ,最終輸出的 作為預測 的得分,然後再接一層softmax得出概率,計算交叉熵損失函數即可訓練模型。
下圖中的每個子單元是在對語句中的某一個詞進行預測。
循環神經網路(Recurrent Neural Networks)是另一種可以用來進行語言模型建模的網路結構,之前提到的前向神經網路語言模型是以前n-1個詞作為輸入來預測當前詞,這種處理方式是解決不了時序問題的,在預測當前詞的時候,無法很好的依賴於上下文(主要是上文),而循環神經網路則可以解決上下文依賴問題。
循環神經網路引入了一個中間隱藏層 ,該隱藏層的狀態可以沿著時間將信息傳給下一次預測。直觀來說,就是將第 時刻的隱藏層的狀態 作為第 時刻模型預測或者訓練的一個輸入,這里的時刻也可以叫做時間步。
下圖是一張對RNN進行時間鋪開的展示圖,每個時間單元都將自身的隱藏層作為下一個時間單元的輸入,這張圖上面並沒有畫出第一個時間單元接受的隱藏層的輸入,事實上,第一個單元也接受了輸入,一般是一個初始化的0向量。
上述的結構依然有局限性,就是它只能利用近期的信息去編碼我們需要的格式,如果時間步的跨度過大,原先的信息會在傳遞中逐漸丟失。
假設現在有這樣一個任務,考慮到下面這句話「I grew up in France… I speak fluent French.」,現在需要語言模型通過現有以前的文字信息預測該句話的最後一個字。通過以前文字語境可以預測出最後一個字是某種語言,但是要猜測出French,要根據之前的France語境。因為這次的有用信息與需要進行處理信息的地方之間的距離較遠,這樣容易導致RNN不能學習到有用的信息,最終推導的任務可能失敗。
LSTMs也是循環神經網路的一種,它利用了cell狀態將長期依賴的信息保留了下來,它也具有這種鏈式結構,但是它的重復單元不同於標准RNN網路里的單元只有一個網路層,它的內部有四個網路層。LSTMs的結構如下圖所示。
LSTM的核心是細胞狀態,用貫穿計算單元的水平線表示。這個狀態區別於隱藏層的狀態,它只是很少的參與信息交換,所以可以保存較遠的時間步的信息。我們可以從下圖看到,細胞狀態在一個時間步裡面只參與三次信息交互:兩次接受信息,一次輸出信息參與計算。這三個操作被稱為門,分別稱為忘記門、輸入門和輸出門。
最後回到語言模型上面,使用RNN進行語言模型建模,那麼輸入的 就是經過embedding的結果,並且最後對於每個 的輸出上再接一層全連接層,輸出詞典數目的維度,最後再加一層softmax就可以得到下一個詞輸出的概率
上述的都是單向語言模型,但是實際上,我們在t時刻的詞的概率不只會依賴於之前的詞,有時候還會和後面的詞有關,比如說there is a tree,這里的is就是單數形式,依賴於後面的a tree來確定。所以就有了兩個單向的LSTM(並不是Bi-LSTM)去更好的進行語言建模。
給定N個token的序列 ,前向語言模型的表示方法為:
同樣的,後向語言模型的表示方法為:
前向模型和後向模型都是用同樣的方式去預測下一個詞,只是方向不同,而且ELMo不光是兩個反方向的LSTM模型疊加,還可以是多層的兩個反方向LSTM疊加,因此會有多個細胞狀態和隱藏層,但其實和單層的是一樣的,只是上層的LSTM接受的輸入是下層的隱藏層(也可以加上殘差連接),兩個不同方向的LSTM模型是互不幹擾的,他們的聯系就只有輸入的token的embedding是共用的,以及最後的全連接加softmax是通用的。ELMo訓練的時候,比如預測詞 ,輸入 左邊的詞彙,經過正向LSTM得到一個 ,同時輸入 右邊的詞彙,經過反向LSTM也得到了一個 ,然後將這兩個hidden拼接到一起之後接一個全連接softmax,就可以得到當前輸出為詞彙表中各詞的概率了,同前文中描述的一樣,交叉熵損失函數就是當前預測詞為實際詞的概率,也就是我們要求的語言模型的概率。
最後的極大似然估計則為:
其中token 的embedding表示的參數 以及softmax 層(全連接加softmax轉成字典的向量維度)參數 前後向是通用的,LSTM 的參數按照方向取不同值。
傳統的語言模型是從左到右或者從右到左的利用上文或者下文去預測當前詞,但實際上,當前詞出現不只是單單依靠上文或者下文,其實應該是同時依賴於上下文,在ELMo裡面,就是用了雙向語言模型的結構,但是這種雙向語言模型只是兩個獨立的前向和後向模型合並起來的,並不是一種完美的結合上下文。因此谷歌在Bidirectional Encoder Representation from Transformers一文中,提出了一種Masked Language Model,該語言模型結構是在一個句子中隨機挑選一部分詞彙,用一個MASK標記替換掉該詞彙,然後在模型訓練的時候去預測該詞彙,完成訓練過程
Masked的具體過程是隨機選擇語料中15%的token,然後再將這些token以80%的概率用[MASK]替換掉,10%的概率用詞彙表中的其餘詞彙替換,還有10%的概率保持不變,然後將這15%的token的位置記錄下來。Masked language model需要將包含了MASK的token輸入到transformer的encoder的結構裡面,encoder會針對每一個輸入的token進行self-attention,這樣就可以讓某個詞的信息編碼到全局信息。最後根據之前MASK的token位置,取出這些token各自對應的hidden,然後再接一個全連接softmax得到預測值(這里的全連接softmax並不加入到語言模型的詞語表徵裡面,只在訓練時候使用),最後再根據實際值去計算mask token的損失函數值。在Bert裡面除了mask token的損失值,還有一個next sentence的損失值,對於兩個句子組成的句子對,bert在構造樣本的時候,會將後一個句子以一定概率替換成其餘的句子,並且要記錄下構造樣本是隨機生成的句子對還是真實的句子對,損失值的計算需要用到[CLS]的表徵結果,我們對[CLS]的表徵結果經過一層全連接softmax,然後去判斷這個句子對是隨機生成的還是真實的。最後,這兩個損失值是直接相加作為最終損失值。
參考鏈接:
Statistical language model 統計語言模型
深入理解語言模型 Language Model
從經典結構到改進方法,神經網路語言模型綜述
深入淺出講解語言模型
神經網路語言建模系列之一:基礎模型
4. 線性層和全連接層的區別
線性層和全連接層沒有區別。線性層即全連接層。
全連接層,是每一個結點都與上一層的所有結點相連,用來把前邊提取到的特徵綜合起來。由於其全相連的特性,一般全連接層的參數也是最多的。
例如在VGG16中,第一個全連接層FC1有4096個節點,上一層POOL2是7*7*512 = 25088個節點,則該傳輸需要4096*25088個權值,需要耗很大的內存。
卷積神經網路的全連接層
在 CNN 結構中,經多個卷積層和池化層後,連接著1個或1個以上的全連接層。與 MLP 類似,全連接層中的每個神經元與其前一層的所有神經元進行全連接。全連接層可以整合卷積層或者池化層中具有類別區分性的局部信息。為了提升 CNN 網路性能,全連接層每個神經元的激勵函數一般採用 ReLU 函數。
最後一層全連接層的輸出值被傳遞給一個輸出,可以採用 softmax 邏輯回歸(softmax regression)進行分類,該層也可稱為 softmax 層(softmax layer)。對於一個具體的分類任務,選擇一個合適的損失函數是十分重要的,CNN 有幾種常用的損失函數,各自都有不同的特點。通常,CNN 的全連接層與 MLP 結構一樣,CNN 的訓練演算法也多採用BP演算法。
5. 深度學習和神經網路的區別是什麼
這兩個概念實際上是互相交叉的,例如,卷積神經網路(Convolutional neural networks,簡稱CNNs)就是一種深度的監督學習下的機器學習模型,而深度置信網(Deep Belief Nets,簡稱DBNs)就是一種無監督學習下的機器學習模型。
深度學習的概念源於人工神經網路的研究。含多隱層的多層感知器就是一種深度學習結構。深度學習通過組合低層特徵形成更加抽象的高層表示屬性類別或特徵,以發現數據的分布式特徵表示。
深度學習的概念由Hinton等人於2006年提出。基於深信度網(DBN)提出非監督貪心逐層訓練演算法,為解決深層結構相關的優化難題帶來希望,隨後提出多層自動編碼器深層結構。此外Lecun等人提出的卷積神經網路是第一個真正多層結構學習演算法,它利用空間相對關系減少參數數目以提高訓練性能。
6. 全連接神經網路和傳統bp網的區別
?
一個是表示各層連接方式,一個表示訓練方式。沒有什麼可比性。
7. 前饋式神經網路與反饋式神經網路有何不同
前饋式神經網路和反饋式神經網路是兩種主要的神經網路架構。
前饋式神經網路是信息在網路中單向流動的結構,它的信息只能從輸入層流向輸出層。常見的遲掘慎前饋式神經網路有多層感知器和卷積神經網路。
反饋散鎮式神經網路是信息在網路中雙碼敬向流動的結構,信息可以從輸入層流向輸出層,也可以從輸出層流回輸入層。常見的反饋式神經網路有循環神經網路和遞歸神經網路。
前饋式神經網路適用於靜態任務,而反饋式神經網路適用於動態任務。