文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.190355
中文引用格式: 萬迪凱,豐大軍. 神經(jīng)網(wǎng)絡(luò)關(guān)聯(lián)存儲器的設(shè)計(jì)及應(yīng)用[J].電子技術(shù)應(yīng)用,2019,45(11):10-12,16.
英文引用格式: Wan Dikai,F(xiàn)eng Dajun. The design and application of neural network associative memory system[J]. Application of Electronic Technique,2019,45(11):10-12,16.
0 引言
神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)的發(fā)展給語言、圖像以及個性化推薦[1-2]等領(lǐng)域帶來了突破的進(jìn)展,但是神經(jīng)網(wǎng)絡(luò)的存儲能力一直是一個重大的缺陷。目前的神經(jīng)網(wǎng)絡(luò)深度越來越深,參數(shù)數(shù)量也越來越多,橫掃自然語言處理多項(xiàng)任務(wù)的BERT模型[3]的參數(shù)數(shù)量更是達(dá)到了3億以上。如此多的參數(shù)就帶來了神經(jīng)網(wǎng)絡(luò)訓(xùn)練上的困難。同時參數(shù)數(shù)量的增加也會帶來額外的計(jì)算開銷,將模型應(yīng)用到小型嵌入式等計(jì)算能力低的設(shè)備中去就要減少參數(shù)數(shù)量,如對模型進(jìn)行剪枝優(yōu)化[4]。要達(dá)到減少參數(shù)數(shù)量的目的,可以給神經(jīng)網(wǎng)絡(luò)裝配一個大容量的存儲器,將一些神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)過程中的知識記錄下來,等需要時再進(jìn)行提取,直觀上可以降低神經(jīng)網(wǎng)絡(luò)需要學(xué)習(xí)的參數(shù)量。
知識有兩種,一種是觸類旁通、舉一反三的邏輯推理能力;一種是死記硬背的知識點(diǎn)。大容量的存儲器用來存儲這兩類知識,以便在需要的時候進(jìn)行存儲。然而知識點(diǎn)之間并不是孤立存在的,它們是聯(lián)系著的,回想下人類思考的過程,在思考一個問題時往往會把相關(guān)的問題以及相關(guān)的方法都聯(lián)想起來。為了模擬人類的這一能力,就需要存儲器具有關(guān)聯(lián)能力,即邏輯上這些被存儲的東西之間構(gòu)成一張立體的網(wǎng)絡(luò)圖,互相聯(lián)系,能進(jìn)行關(guān)聯(lián)性存儲。當(dāng)一個輸入到達(dá)時,此時如若能將相關(guān)的知識提取出來作為當(dāng)前輸入的輔助輸入,則可以增強(qiáng)當(dāng)前神經(jīng)網(wǎng)絡(luò)的能力。本文旨在設(shè)計(jì)一個適合于神經(jīng)網(wǎng)絡(luò)使用的大容量的關(guān)聯(lián)存儲系統(tǒng),并通過設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)將自然語言語句向量嵌入后加以關(guān)聯(lián)存儲進(jìn)行實(shí)際應(yīng)用。
1 總體設(shè)計(jì)
設(shè)計(jì)整體分為關(guān)聯(lián)存儲器的設(shè)計(jì)和自然語言語句向量嵌入兩部分。關(guān)聯(lián)存儲器主要用來存儲經(jīng)過向量表示后的語句的語義,并能進(jìn)行動態(tài)更新和關(guān)聯(lián)性查詢。自然語言語句向量嵌入主要負(fù)責(zé)把語句進(jìn)行有意義的向量化,其通過訓(xùn)練一個seq2seq的神經(jīng)網(wǎng)絡(luò)模型來達(dá)到此目的,系統(tǒng)的總體架構(gòu)圖如圖1所示。
關(guān)聯(lián)存儲器持久化采用的數(shù)據(jù)庫是REmote DIctionary Server(Redis)數(shù)據(jù)庫。Redis是一個開源的、使用ANSI C語言編寫、遵守BSD協(xié)議、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。它通常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器,因?yàn)橹悼梢允亲址⒐?、列表、集合和有序集合等類型?/p>
2 關(guān)聯(lián)存儲器的設(shè)計(jì)
神經(jīng)網(wǎng)絡(luò)的向量一般維度都較高,且需要存儲的向量個數(shù)通常較多,采用通常的存儲方式,每進(jìn)行一次相關(guān)性查詢,需要兩兩比較,所需要的時間復(fù)雜度為O(N2),其中N為存儲的向量的個數(shù)。要想在神經(jīng)網(wǎng)絡(luò)的海量數(shù)據(jù)訓(xùn)練過程中使用關(guān)聯(lián)存儲器,這樣的時間復(fù)雜度是無法接受的。為了解決這個問題,有兩種方法可供選擇,一種是LSH(局部敏感性哈希)[5],另一種是Hopfield神經(jīng)網(wǎng)絡(luò)[6]。
2.1 局部敏感性哈希
局部敏感性哈希的提出用以解決在大量向量中找到相似的向量而不用兩兩比較。局部敏感性哈希將兩個原本相似的長向量經(jīng)過哈希后,其哈希向量仍然保持相似性,其原本用在比較文本之間的相似性上,不同的相似性度量對應(yīng)不同的哈希函數(shù),但并不是所有的相似性度量都有對應(yīng)的哈希函數(shù)。哈希函數(shù)族的原始定義如下:
從S空間變換到U空間的函數(shù)族H如果滿足以下兩個條件:
(1)如果p∈B(q,r1),那么P(h(q)=h(p))≥p1;
(2)如果pB(q,r2),那么P(h(q)=h(p))≤p2。
則稱函數(shù)族H是(r1,r2,p1,p2)敏感的,其中B(q,r1)代表與q距離小于r1的點(diǎn)集合,P函數(shù)代表概率,h是從H中任選的哈希函數(shù)。
也就是說,如果兩個點(diǎn)p、q足夠接近,那么它們哈希之后的值也大概率一樣;如果兩個點(diǎn)p、q相距較遠(yuǎn),那么它們哈希之后的值就大概率不一樣。
有了敏感性哈希函數(shù)后,通過與或操作可以控制兩個向量被映射到同一個哈希桶中的概率。
通過局部敏感性哈希可以將原來需要O(N2)復(fù)雜度的查詢操作減少到O(N)。
2.2 Hopfield神經(jīng)網(wǎng)絡(luò)
Hopfield神經(jīng)網(wǎng)絡(luò)通過引入物理學(xué)中的能量函數(shù)的概念旨在構(gòu)建一個聯(lián)想的記憶系統(tǒng),其基本結(jié)構(gòu)如圖2所示。
其中,Vi、Vj分別為神經(jīng)元i、j的輸出。
給定所有的神經(jīng)元一個初始的值,該神經(jīng)網(wǎng)絡(luò)最終會達(dá)到能量局部最低的狀態(tài),整個網(wǎng)絡(luò)就像一個動力系統(tǒng),傾向于保持能量處于一個較小的狀態(tài),就像物理學(xué)中水往低處走的現(xiàn)象。能量的局部極小值可能有很多個,給定神經(jīng)元以不同的初始值能量可能會收斂到不同的局部最小值。給極小值附近的點(diǎn)施加一個輕微的擾動,它還是會回到極小值點(diǎn),由于該神經(jīng)網(wǎng)絡(luò)的這個特點(diǎn),可以把它用在聯(lián)想記憶上。聯(lián)想記憶系統(tǒng)存儲著一系列記憶向量的集合。只要給聯(lián)想記憶網(wǎng)絡(luò)一個相關(guān)的記憶向量,它就能正確恢復(fù)出原來存儲的記憶向量,例如聯(lián)想記憶系統(tǒng)存儲著一句話,可能只需要幾個詞語就能聯(lián)想起整句話。
要讓上述網(wǎng)絡(luò)存儲不同的記憶向量,就要讓這些需要記憶的向量都變成能量方程的局部最小值點(diǎn)。因此需要尋找一種方法可以讓任意點(diǎn)都成為局部極小值點(diǎn)。此外學(xué)習(xí)規(guī)則還需要滿足以下兩條性質(zhì):
(1)局部性,即某個權(quán)重的更新要只依賴與它相鄰的兩個神經(jīng)元;
(2)能增量學(xué)習(xí),即記憶某個新模式(向量)不必依賴原來的向量,權(quán)重的更新只依賴于它的舊值和新的要記憶的模式。
Hebbian學(xué)習(xí)規(guī)則如下:
當(dāng)神經(jīng)元輸出0/1時,有:
其中,s代表迭代步。這個學(xué)習(xí)規(guī)則的意思是同時激發(fā)的兩個神經(jīng)元傾向于形成強(qiáng)的連接關(guān)系。
雖然Hopfield神經(jīng)網(wǎng)絡(luò)提供了模擬人類記憶的模型,但是其存儲效率較為低下,N個神經(jīng)元的完全圖大概能存儲0.15N個記憶向量,總共存儲了0.15N2 bit的數(shù)據(jù)。而構(gòu)建一個這樣的神經(jīng)網(wǎng)絡(luò)需要的存儲量為N(N-1)個權(quán)重向量,設(shè)每個權(quán)重的值范圍為[-M,M],則需要N(N-1)log(2M+1)位來存儲這些權(quán)重。因此,本文選取了局部敏感性哈希作為關(guān)聯(lián)存儲器的實(shí)現(xiàn)。
3 自然語言語句向量嵌入
為了將語句存儲進(jìn)關(guān)聯(lián)存儲器中去,首先要將文字表達(dá)的語句轉(zhuǎn)換為向量,為此本文設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)模型,將語句嵌入為向量。
3.1 模型結(jié)構(gòu)
模型的基礎(chǔ)結(jié)構(gòu)為seq2seq模型[7],如圖3所示,分為編碼器和解碼器,編碼器將向量編碼為語義向量,將生成的語義向量輸入解碼器解碼為所需要得到的輸出語句。現(xiàn)在常用的seq2seq結(jié)構(gòu)的編碼器和解碼器一般由堆疊的LSTM或GRU組成,并且?guī)в衋ttention和beam search,目的并不是為了得到更高的精確度,而是為了獲取更加精確的中間向量表示。由于LSTM會生成狀態(tài)向量c和隱藏層輸出h,這兩者均輸入到解碼器,如果是堆疊的多層LSTM,那么就會有多個這樣的(c,h)組。由于無法判斷使用那個可以較好地代表中間語義向量,因此編碼器和解碼器只是采用單層的簡單的RNN,這樣編碼器就只生成一個單一的狀態(tài)向量傳遞到解碼器,通過語料訓(xùn)練后可以得到有意義的語句向量表示。本文采用Cornell Movie-Dialogs Corpus[8]當(dāng)作訓(xùn)練語料庫進(jìn)行訓(xùn)練,該語料庫包含從原始電影腳本中提取的大量元數(shù)據(jù)豐富的虛構(gòu)對話集合,該語料集共囊括617部電影,電影人物角色數(shù)量達(dá)到9 035個,共有10 292對電影角色之間的220 579次對話,總計(jì)304 713個對話片段。對于對話片段,相似的回答往往對應(yīng)相似的提問,根據(jù)語料庫構(gòu)建問答對,將提問當(dāng)作輸入傳入編碼器,生成語義向量,再將該語義向量作為初始狀態(tài)輸入到解碼器中去,解碼器的目標(biāo)是生成正確的回答。編碼器和解碼器的結(jié)構(gòu)如圖4所示。雖然在訓(xùn)練過程中分別訓(xùn)練了編碼器和解碼器,但是實(shí)際使用時只用到了訓(xùn)練好的編碼器,編碼器和解碼器一起訓(xùn)練是為了讓編碼器產(chǎn)生的語義向量更加準(zhǔn)確。
3.2 模型訓(xùn)練
本次訓(xùn)練采用單個NVIDIA Tesla P100 GPU,使用TensorFlow開源庫作為基本框架進(jìn)行模型搭建。損失函數(shù)采用交叉熵?fù)p失函數(shù),優(yōu)化器選用Adam優(yōu)化器,共計(jì)訓(xùn)練30輪,18 720批次,學(xué)習(xí)率為0.002。訓(xùn)練過程中的損失函數(shù)的下降曲線如圖5所示。
4 結(jié)束語
本文主要介紹適用于神經(jīng)網(wǎng)絡(luò)的關(guān)聯(lián)存儲器的設(shè)計(jì),并設(shè)計(jì)實(shí)驗(yàn)對實(shí)際的語句進(jìn)行向量嵌入并存儲到關(guān)聯(lián)存儲器中,其性能指標(biāo)達(dá)到了設(shè)計(jì)要求。
參考文獻(xiàn)
[1] 徐中輝,呂維帥.基于卷積神經(jīng)網(wǎng)絡(luò)的圖像著色[J].電子技術(shù)應(yīng)用,2018,44(10):19-22.
[2] 字云飛,李業(yè)麗,孫華艷. 基于深度神經(jīng)網(wǎng)絡(luò)的個性化推薦系統(tǒng)研究[J].電子技術(shù)應(yīng)用,2019,45(1):14-18,22.
[3] DEVLIN J,CHANG M W,LEE K,et al.Bert:Pre-training of deep bidirectional transformers for language understanding[J].arXiv Preprint arXiv:1810.04805,2018.
[4] 馬治楠,韓云杰,彭琳鈺,等.基于深層卷積神經(jīng)網(wǎng)絡(luò)的剪枝優(yōu)化[J].電子技術(shù)應(yīng)用,2018,44(12):119-112,126.
[5] DATAR M,IMMORLICA N,INDYK P,et al.Locality-sen-sitive hashing scheme based on p-stable distributions[C].Proceedings of the Twentieth Annual Symposium on Computational Geometry.ACM,2004:253-262.
[6] HOPFIELD J J.Neural networks and physical systems with emergent collective computational abilities[J].Proceedings of the National Academy of Sciences,1982,79(8):2554-2558.
[7] SUTSKEVER I,VINYALS O,LE Q V.Sequence to sequence learning with neural networks[C].Advances in Neural Information Processing Systems,2014:3104-3112.
[8] DANESCU-NICULESCU-MIZIL C,LEE L.Chameleons in imagined conversations:a new approach to understanding coordination of linguistic style in dialogs[C].Proceedings of the 2nd Workshop on Cognitive Modeling and Computational Linguistics. Association for Computational Linguistics,2011:76-87.
作者信息:
萬迪凱,豐大軍
(華北計(jì)算機(jī)系統(tǒng)工程研究所,北京100083)