李華旭
(廣西民族大學電子信息學院 廣西 南寧 530000)
人工智能[1](artificial intelligence)起源于20世紀50年代,是計算機科學研究的重點之一。目前,人工智能已經(jīng)成為計算機科學領(lǐng)域不可或缺的一部分,其在科技領(lǐng)域也受到廣泛重視,如機器人控制[2]、智能圖像處理、軌道衛(wèi)星定位等。
深度學習(deep learning)是人工智能的深層次理論。深度學習是通過訓練數(shù)據(jù)參數(shù)來達到學習訓練樣本的內(nèi)部規(guī)律以及樣本的表示層次。深度學習的神經(jīng)網(wǎng)絡(luò)由輸入層、隱藏層和輸出層所構(gòu)成。深度學習與普通的淺層次學習最大的不同就在于其神經(jīng)網(wǎng)絡(luò)的層數(shù)更深,通過對輸入特征進行逐層地變換并向更深層次傳播,這樣就能夠?qū)⑻卣鲝脑臻g轉(zhuǎn)換到一個新的特征空間從而使數(shù)據(jù)分析更加容易,當增加網(wǎng)絡(luò)層數(shù)后,網(wǎng)絡(luò)可以進行更加復雜的特征模式的提取,所以當模型更深時理論上可以取得更好的結(jié)果。
但更深的網(wǎng)絡(luò)層數(shù)并不一定會有更好的性能,當網(wǎng)絡(luò)深度不斷增加時,網(wǎng)絡(luò)的準確度就會出現(xiàn)飽和,甚至出現(xiàn)下降,即過擬合,為解決這一問題,何凱明提出了著名的深度殘差網(wǎng)絡(luò)[3](deep residual network,ResNet)。由于ResNet對減輕深層網(wǎng)絡(luò)退化有著重要作用,ResNet這一網(wǎng)絡(luò)結(jié)構(gòu)對后來的各種網(wǎng)絡(luò)模型的構(gòu)建都有著重要的影響。目前深度學習的主要研究方向有數(shù)字圖像處理(digital image processing)和自然語言處理(natural language processing,NLP)等,后文將對自然語言處理方向的技術(shù)進行綜述并對NLP相關(guān)技術(shù)進行說明。
自然語言處理(NLP)是一門用來分析人類語言以及對相關(guān)信息進行處理的人工智能方向技術(shù)。通過對NLP的研究,我們能夠?qū)崿F(xiàn)人類和計算機系統(tǒng)之間使用自然語言進行交互,由于NLP本身需要運用語言學、數(shù)學以及計算機科學等方面的技術(shù),所以NLP是一門綜合性的人工智能技術(shù)。NLP并不是簡單去研究人所使用的自然語言,而是著重于人和計算機系統(tǒng)的交互,通過分析語義來給出相應的結(jié)果。
自然語言處理的工作大致可劃分為下面幾個步驟:首先,接受人類的自然語言;其次,通過信息提取,將自然語言轉(zhuǎn)換為結(jié)構(gòu)化數(shù)據(jù);最后,通過分析數(shù)據(jù)得出結(jié)果并輸出。自然語言處理應用廣泛,其中包括人機對話交流、語言翻譯、情感分析、語音識別、搜索引擎、社交網(wǎng)站推送等。
自然語言處理(NLP)的研究主要是運用計算機科學與語言學這兩門學科的有關(guān)技術(shù)和知識。通常的計算機程序是由相關(guān)的算法和其對應數(shù)據(jù)結(jié)構(gòu)所組成,而自然語言處理則是由語義結(jié)構(gòu)與計算機模型所構(gòu)成。所以,NLP的主要任務也就和語言學所研究的內(nèi)容相似,主要就是分析單詞、詞性、語法、上下文的語義等,而為了實現(xiàn)語言的分析就必須要對神經(jīng)網(wǎng)絡(luò)模型和優(yōu)化算法進行設(shè)計。
循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network,RNN)始于20世紀80年代,于21世紀初發(fā)展成為深度學習的重要神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)之一。RNN的輸入是一連串的序列型數(shù)據(jù),這些序列就像人的語言,是一整句話,甚至是一篇文章。對于人所表達的語句來說,要想理解一句話的意義就必須要結(jié)合語句中的上下文,對于理解文章的意思就更是如此,而且也更加的復雜。
通常的神經(jīng)網(wǎng)絡(luò)主要由輸入層、隱藏層和輸出層所構(gòu)成,其結(jié)構(gòu)見圖1。
圖1 簡單的神經(jīng)網(wǎng)絡(luò)
在神經(jīng)網(wǎng)絡(luò)訓練過程中,給定輸入并通過反向傳播和優(yōu)化算法(如梯度下降算法)對模型進行調(diào)整,最終輸出結(jié)果。但這種簡單的網(wǎng)絡(luò)只能簡單處理每一個輸入的數(shù)據(jù),而并沒有在輸入的數(shù)據(jù)之間建立起它們相互的關(guān)系,即先后輸入的數(shù)據(jù)之間是完全獨立的。所以這種網(wǎng)絡(luò)結(jié)構(gòu)就不能滿足對自然語言處理的需求,為了解決這一問題于是就出現(xiàn)了RNN模型。
與普通的神經(jīng)網(wǎng)絡(luò)相比,RNN最大的優(yōu)點便是能將每個單詞同它所處的語句中上下文部分都聯(lián)系起來,這就不僅僅是對獨立的單詞做處理而是將其所處的語境也一起納入計算的步驟當中,從而讓整個模型更好地去理解自然語言。RNN相比圖1中的全連接神經(jīng)網(wǎng)絡(luò),加入了循環(huán)核(Cell)來提取特征,結(jié)構(gòu)見圖2。
圖2 RNN循環(huán)核
循環(huán)核通過不同時刻對于參數(shù)W進行共享,實現(xiàn)了對時間序列的特征提取。在圖2a中Xt與Yt分別對應數(shù)據(jù)的輸入和輸出特征,Ct用于存儲不同時刻的狀態(tài)信息,U、V、W均為參數(shù)矩陣,其中:
注:Bc、By為偏置項,Ct-1表示上一時刻Cell中存儲的狀態(tài)信息。
在神經(jīng)網(wǎng)絡(luò)的前向傳播過程當中,Cell中存儲的狀態(tài)信息在不同的時刻都會根據(jù)上式進行修改,而參數(shù)矩陣U、V、W是固定的,并不會隨時刻的變化而改變。在反向傳播的過程中,參數(shù)矩陣U、V、W會依據(jù)梯度下降算法產(chǎn)生更新。把循環(huán)核按照時間軸方向展開就能得到圖2b所示的情形,能更加直觀地理解整個訓練過程。同樣的,在不同時刻Cell中的信息依據(jù)公式計算而被刷新,U、V、W保持不變。通過訓練對參數(shù)矩陣U、V、W進行優(yōu)化,在訓練結(jié)束之后選擇效果最好的一組U、V、W參數(shù)矩陣來執(zhí)行前向傳播,并輸出結(jié)果,即可得到最終的預測值。
傳統(tǒng)的RNN可以通過記憶體實現(xiàn)短期記憶,從而達到實現(xiàn)連續(xù)數(shù)據(jù)的預測效果。但是,在數(shù)據(jù)變得較長的時候,會導致序列展開時間過長。而在反向傳播更新參數(shù)矩陣的過程中,由于梯度會根據(jù)時刻的變化來進行連續(xù)相乘,這樣就會導致梯度的消失。
為了解決普通循環(huán)神經(jīng)網(wǎng)絡(luò)中存在的長期依賴問題所導致的梯度消失問題,于是誕生了長短期記憶人工神經(jīng)網(wǎng)絡(luò)[4](long short-term memory,LSTM)。LSTM的結(jié)構(gòu)見圖3。
圖3 LSTM結(jié)構(gòu)圖
LSTM引入了門限的概念,分為輸入門限(It)、遺忘門限(Ft)和輸出(Ot)門限,具體公式如下:
在公式(2)中,Vt為當前的輸入特征,Yt-1為上個時刻的輸出,Wi、Wf、Wo是每個門限所對應的參數(shù)矩陣,Bi、Bf、Bo則是相應的偏置項,這一點與圖2a中類似。
這種神經(jīng)網(wǎng)絡(luò)最重要的部分便是提出了長期記憶(Ct)與短期記憶(Yt),以及把兩者相結(jié)合所得出的新記憶(Xt)。Ct、Yt、Xt的計算公式如下:
注:Wx為參數(shù)矩陣,Bx為偏置項。
長期記憶(Ct)由上個時刻的長期記憶與新記憶乘以不同的門限,即取不同的比例然后相加所得,而短期記憶(Yt)則是從當前輸出的長記憶中經(jīng)過輸出門(Ot)過濾后所剩下的內(nèi)容,對于新記憶(Xt)則是由之前的短期記憶與當前輸入的新特征(Vt)組合而成。
注意力機制(Attention)最初是產(chǎn)生于對人類視覺相關(guān)的研究,模仿人類觀察事物時會有選擇地去關(guān)注事物的一分特征,而忽略事物的其他一些信息。傳統(tǒng)的sequence-to-sequence模型自身存在一些缺點,例如,對較長的輸入序列進行壓縮時會導致其中一些關(guān)鍵信息的丟失,這種模型也沒辦法在輸入和輸出序列之間的對齊進行建模,這也會導致輸出結(jié)果由于受輸入序列的某些部分的影響而與期望結(jié)果相差許多。
Attention機制就是查詢(query)到主鍵(key)和值(value)對的映射,見圖4。在這里首先計算Query和每個Key進行點乘計算(MatMul),然后再使用Softmax函數(shù)進行歸一化從而來得到Q與K之間的相關(guān)性即權(quán)重,最后再用所得權(quán)重與V進行點乘得到最終值。
圖4 Attention結(jié)構(gòu)圖
如圖5所示:對于普通的Attention而言,在尋找Q與K之間的相關(guān)性時總是單個地去對應,即Q、K只有一個,而對于較為復雜語音或語言而言,通常不同字句之間有很多種不同的關(guān)系,所以這是單個Q、K之間的對應關(guān)系就不太能過夠完整推導出語句的完整意義,所以就增加了Q、K、V的數(shù)量,即Multi-head Self-attention[5]。
圖5 Multi-head Self-attention結(jié)構(gòu)圖
圖5a為多頭注意力的結(jié)構(gòu)示意圖,圖5b為多頭注意力中按比縮放的點積注意力部分的內(nèi)部結(jié)構(gòu)。Transformer使用的多頭注意力機制有3個輸入:Q、K、V,其中按比縮放的點積注意力所對應的公式如下:
由于當深度(dK)比較大的時候會導致點積結(jié)果增大,就會讓Softmax函數(shù)向梯度較小的方向變化,從而產(chǎn)生梯度的消失,在公式(4)中,通過將點積注意力(QKT)除以深度(dK)的平方根,就解決了這一問題。
對于Multi-head Self-attention而言,它與LSTM的計算方式完全不一樣,它在計算的時候總是將全部的信息同時進行點乘,而LSTM則是按順序一次進行運算,這樣做雖然提高了并行計算的效率,但是卻缺少了有用的相關(guān)位置信息。
由于Transformer模型中的Multi-head Selfattention[6]機制沒有包含不同元素之間的位置信息,于是就給輸入數(shù)據(jù)加上了一種位置編碼,對應公式如下:
在公式(5)中,pos代表每個詞在語句之中的位置,dmodel表示詞向量的維度,i為詞向量的位置。通過將位置信息除以10002i/dmodel,就能讓sin和cos的表示范圍從2π擴展到1000π,最后在將其與源數(shù)據(jù)相加即可得到包含有位置編碼的數(shù)據(jù)。當輸入的pos值為50,dmodel為100時,編碼效果見圖6。
圖6 Positional Encoding
與之前的LSTM模型相比,Transformer模型完全采用Self-attention機制代替了LSTM所使用的RNN模型結(jié)構(gòu),并在自然語言翻譯方面取得了更好的效果。Transformer進行并行計算,而不是和RNN那樣序列化地計算,提高了計算效率,Transformer能夠?qū)W習長距離元素之間的關(guān)系依賴,并解決了傳統(tǒng)RNN在序列過長時產(chǎn)生的梯度消失問題,同時Selfattention機制也能更好地解釋模型。但Transformer也有一些缺點,如計算量相對巨大,多頭機制中的無效信息有很多等。
自然語言處理作為人工智能領(lǐng)域的一個重要方向,相關(guān)的技術(shù)已經(jīng)得到了越來越廣泛的應用。從全連接神經(jīng)網(wǎng)絡(luò)到RNN再到Transformer,然后是基于Transformer框架的BERT[7-8],無疑讓自然語言處理的能力更近了一步。雖然Transformer模型計算量巨大,但隨著計算機計算能力的提高便能夠?qū)Ω育嫶蟮臄?shù)據(jù)加以處理。未來的自然語言處理研究仍要圍繞算法的優(yōu)化,運用語言學以及其他學科的技術(shù)進行更深層次的語義分析等方面進行。相信,隨著越來越多新技術(shù)的出現(xiàn),自然語言處理的研究將取得更高的成就。