文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.190355
中文引用格式: 萬(wàn)迪凱,,豐大軍. 神經(jīng)網(wǎng)絡(luò)關(guān)聯(lián)存儲(chǔ)器的設(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ā)展給語(yǔ)言、圖像以及個(gè)性化推薦[1-2]等領(lǐng)域帶來(lái)了突破的進(jìn)展,,但是神經(jīng)網(wǎng)絡(luò)的存儲(chǔ)能力一直是一個(gè)重大的缺陷,。目前的神經(jīng)網(wǎng)絡(luò)深度越來(lái)越深,參數(shù)數(shù)量也越來(lái)越多,,橫掃自然語(yǔ)言處理多項(xiàng)任務(wù)的BERT模型[3]的參數(shù)數(shù)量更是達(dá)到了3億以上。如此多的參數(shù)就帶來(lái)了神經(jīng)網(wǎng)絡(luò)訓(xùn)練上的困難,。同時(shí)參數(shù)數(shù)量的增加也會(huì)帶來(lái)額外的計(jì)算開(kāi)銷(xiāo),,將模型應(yīng)用到小型嵌入式等計(jì)算能力低的設(shè)備中去就要減少參數(shù)數(shù)量,,如對(duì)模型進(jìn)行剪枝優(yōu)化[4]。要達(dá)到減少參數(shù)數(shù)量的目的,可以給神經(jīng)網(wǎng)絡(luò)裝配一個(gè)大容量的存儲(chǔ)器,,將一些神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)過(guò)程中的知識(shí)記錄下來(lái),等需要時(shí)再進(jìn)行提取,,直觀上可以降低神經(jīng)網(wǎng)絡(luò)需要學(xué)習(xí)的參數(shù)量,。
知識(shí)有兩種,一種是觸類(lèi)旁通,、舉一反三的邏輯推理能力,;一種是死記硬背的知識(shí)點(diǎn)。大容量的存儲(chǔ)器用來(lái)存儲(chǔ)這兩類(lèi)知識(shí),,以便在需要的時(shí)候進(jìn)行存儲(chǔ),。然而知識(shí)點(diǎn)之間并不是孤立存在的,它們是聯(lián)系著的,,回想下人類(lèi)思考的過(guò)程,,在思考一個(gè)問(wèn)題時(shí)往往會(huì)把相關(guān)的問(wèn)題以及相關(guān)的方法都聯(lián)想起來(lái)。為了模擬人類(lèi)的這一能力,就需要存儲(chǔ)器具有關(guān)聯(lián)能力,,即邏輯上這些被存儲(chǔ)的東西之間構(gòu)成一張立體的網(wǎng)絡(luò)圖,,互相聯(lián)系,能進(jìn)行關(guān)聯(lián)性存儲(chǔ),。當(dāng)一個(gè)輸入到達(dá)時(shí),,此時(shí)如若能將相關(guān)的知識(shí)提取出來(lái)作為當(dāng)前輸入的輔助輸入,則可以增強(qiáng)當(dāng)前神經(jīng)網(wǎng)絡(luò)的能力,。本文旨在設(shè)計(jì)一個(gè)適合于神經(jīng)網(wǎng)絡(luò)使用的大容量的關(guān)聯(lián)存儲(chǔ)系統(tǒng),,并通過(guò)設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)將自然語(yǔ)言語(yǔ)句向量嵌入后加以關(guān)聯(lián)存儲(chǔ)進(jìn)行實(shí)際應(yīng)用。
1 總體設(shè)計(jì)
設(shè)計(jì)整體分為關(guān)聯(lián)存儲(chǔ)器的設(shè)計(jì)和自然語(yǔ)言語(yǔ)句向量嵌入兩部分,。關(guān)聯(lián)存儲(chǔ)器主要用來(lái)存儲(chǔ)經(jīng)過(guò)向量表示后的語(yǔ)句的語(yǔ)義,,并能進(jìn)行動(dòng)態(tài)更新和關(guān)聯(lián)性查詢。自然語(yǔ)言語(yǔ)句向量嵌入主要負(fù)責(zé)把語(yǔ)句進(jìn)行有意義的向量化,,其通過(guò)訓(xùn)練一個(gè)seq2seq的神經(jīng)網(wǎng)絡(luò)模型來(lái)達(dá)到此目的,,系統(tǒng)的總體架構(gòu)圖如圖1所示。
關(guān)聯(lián)存儲(chǔ)器持久化采用的數(shù)據(jù)庫(kù)是REmote DIctionary Server(Redis)數(shù)據(jù)庫(kù),。Redis是一個(gè)開(kāi)源的,、使用ANSI C語(yǔ)言編寫(xiě)、遵守BSD協(xié)議,、支持網(wǎng)絡(luò),、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),,并提供多種語(yǔ)言的API,。它通常被稱(chēng)為數(shù)據(jù)結(jié)構(gòu)服務(wù)器,因?yàn)橹悼梢允亲址?、哈希,、列表、集合和有序集合等?lèi)型,。
2 關(guān)聯(lián)存儲(chǔ)器的設(shè)計(jì)
神經(jīng)網(wǎng)絡(luò)的向量一般維度都較高,,且需要存儲(chǔ)的向量個(gè)數(shù)通常較多,采用通常的存儲(chǔ)方式,,每進(jìn)行一次相關(guān)性查詢,,需要兩兩比較,所需要的時(shí)間復(fù)雜度為O(N2),,其中N為存儲(chǔ)的向量的個(gè)數(shù),。要想在神經(jīng)網(wǎng)絡(luò)的海量數(shù)據(jù)訓(xùn)練過(guò)程中使用關(guān)聯(lián)存儲(chǔ)器,這樣的時(shí)間復(fù)雜度是無(wú)法接受的,。為了解決這個(gè)問(wèn)題,,有兩種方法可供選擇,,一種是LSH(局部敏感性哈希)[5],另一種是Hopfield神經(jīng)網(wǎng)絡(luò)[6],。
2.1 局部敏感性哈希
局部敏感性哈希的提出用以解決在大量向量中找到相似的向量而不用兩兩比較,。局部敏感性哈希將兩個(gè)原本相似的長(zhǎng)向量經(jīng)過(guò)哈希后,其哈希向量仍然保持相似性,,其原本用在比較文本之間的相似性上,,不同的相似性度量對(duì)應(yīng)不同的哈希函數(shù),但并不是所有的相似性度量都有對(duì)應(yīng)的哈希函數(shù),。哈希函數(shù)族的原始定義如下:
從S空間變換到U空間的函數(shù)族H如果滿足以下兩個(gè)條件:
(1)如果p∈B(q,,r1),那么P(h(q)=h(p))≥p1,;
(2)如果pB(q,,r2),那么P(h(q)=h(p))≤p2,。
則稱(chēng)函數(shù)族H是(r1,,r2,p1,,p2)敏感的,,其中B(q,r1)代表與q距離小于r1的點(diǎn)集合,,P函數(shù)代表概率,,h是從H中任選的哈希函數(shù)。
也就是說(shuō),,如果兩個(gè)點(diǎn)p,、q足夠接近,那么它們哈希之后的值也大概率一樣,;如果兩個(gè)點(diǎn)p、q相距較遠(yuǎn),,那么它們哈希之后的值就大概率不一樣,。
有了敏感性哈希函數(shù)后,通過(guò)與或操作可以控制兩個(gè)向量被映射到同一個(gè)哈希桶中的概率,。
通過(guò)局部敏感性哈??梢詫⒃瓉?lái)需要O(N2)復(fù)雜度的查詢操作減少到O(N)。
2.2 Hopfield神經(jīng)網(wǎng)絡(luò)
Hopfield神經(jīng)網(wǎng)絡(luò)通過(guò)引入物理學(xué)中的能量函數(shù)的概念旨在構(gòu)建一個(gè)聯(lián)想的記憶系統(tǒng),,其基本結(jié)構(gòu)如圖2所示,。
其中,Vi,、Vj分別為神經(jīng)元i,、j的輸出,。
給定所有的神經(jīng)元一個(gè)初始的值,該神經(jīng)網(wǎng)絡(luò)最終會(huì)達(dá)到能量局部最低的狀態(tài),,整個(gè)網(wǎng)絡(luò)就像一個(gè)動(dòng)力系統(tǒng),,傾向于保持能量處于一個(gè)較小的狀態(tài),就像物理學(xué)中水往低處走的現(xiàn)象,。能量的局部極小值可能有很多個(gè),,給定神經(jīng)元以不同的初始值能量可能會(huì)收斂到不同的局部最小值。給極小值附近的點(diǎn)施加一個(gè)輕微的擾動(dòng),,它還是會(huì)回到極小值點(diǎn),,由于該神經(jīng)網(wǎng)絡(luò)的這個(gè)特點(diǎn),可以把它用在聯(lián)想記憶上,。聯(lián)想記憶系統(tǒng)存儲(chǔ)著一系列記憶向量的集合,。只要給聯(lián)想記憶網(wǎng)絡(luò)一個(gè)相關(guān)的記憶向量,它就能正確恢復(fù)出原來(lái)存儲(chǔ)的記憶向量,,例如聯(lián)想記憶系統(tǒng)存儲(chǔ)著一句話,,可能只需要幾個(gè)詞語(yǔ)就能聯(lián)想起整句話。
要讓上述網(wǎng)絡(luò)存儲(chǔ)不同的記憶向量,,就要讓這些需要記憶的向量都變成能量方程的局部最小值點(diǎn),。因此需要尋找一種方法可以讓任意點(diǎn)都成為局部極小值點(diǎn)。此外學(xué)習(xí)規(guī)則還需要滿足以下兩條性質(zhì):
(1)局部性,,即某個(gè)權(quán)重的更新要只依賴與它相鄰的兩個(gè)神經(jīng)元,;
(2)能增量學(xué)習(xí),即記憶某個(gè)新模式(向量)不必依賴原來(lái)的向量,,權(quán)重的更新只依賴于它的舊值和新的要記憶的模式,。
Hebbian學(xué)習(xí)規(guī)則如下:
當(dāng)神經(jīng)元輸出0/1時(shí),有:
其中,,s代表迭代步,。這個(gè)學(xué)習(xí)規(guī)則的意思是同時(shí)激發(fā)的兩個(gè)神經(jīng)元傾向于形成強(qiáng)的連接關(guān)系。
雖然Hopfield神經(jīng)網(wǎng)絡(luò)提供了模擬人類(lèi)記憶的模型,,但是其存儲(chǔ)效率較為低下,,N個(gè)神經(jīng)元的完全圖大概能存儲(chǔ)0.15N個(gè)記憶向量,總共存儲(chǔ)了0.15N2 bit的數(shù)據(jù),。而構(gòu)建一個(gè)這樣的神經(jīng)網(wǎng)絡(luò)需要的存儲(chǔ)量為N(N-1)個(gè)權(quán)重向量,,設(shè)每個(gè)權(quán)重的值范圍為[-M,M],,則需要N(N-1)log(2M+1)位來(lái)存儲(chǔ)這些權(quán)重,。因此,本文選取了局部敏感性哈希作為關(guān)聯(lián)存儲(chǔ)器的實(shí)現(xiàn),。
3 自然語(yǔ)言語(yǔ)句向量嵌入
為了將語(yǔ)句存儲(chǔ)進(jìn)關(guān)聯(lián)存儲(chǔ)器中去,,首先要將文字表達(dá)的語(yǔ)句轉(zhuǎn)換為向量,,為此本文設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)模型,將語(yǔ)句嵌入為向量,。
3.1 模型結(jié)構(gòu)
模型的基礎(chǔ)結(jié)構(gòu)為seq2seq模型[7],,如圖3所示,分為編碼器和解碼器,,編碼器將向量編碼為語(yǔ)義向量,,將生成的語(yǔ)義向量輸入解碼器解碼為所需要得到的輸出語(yǔ)句。現(xiàn)在常用的seq2seq結(jié)構(gòu)的編碼器和解碼器一般由堆疊的LSTM或GRU組成,,并且?guī)в衋ttention和beam search,,目的并不是為了得到更高的精確度,而是為了獲取更加精確的中間向量表示,。由于LSTM會(huì)生成狀態(tài)向量c和隱藏層輸出h,,這兩者均輸入到解碼器,如果是堆疊的多層LSTM,,那么就會(huì)有多個(gè)這樣的(c,,h)組。由于無(wú)法判斷使用那個(gè)可以較好地代表中間語(yǔ)義向量,,因此編碼器和解碼器只是采用單層的簡(jiǎn)單的RNN,,這樣編碼器就只生成一個(gè)單一的狀態(tài)向量傳遞到解碼器,通過(guò)語(yǔ)料訓(xùn)練后可以得到有意義的語(yǔ)句向量表示,。本文采用Cornell Movie-Dialogs Corpus[8]當(dāng)作訓(xùn)練語(yǔ)料庫(kù)進(jìn)行訓(xùn)練,,該語(yǔ)料庫(kù)包含從原始電影腳本中提取的大量元數(shù)據(jù)豐富的虛構(gòu)對(duì)話集合,該語(yǔ)料集共囊括617部電影,,電影人物角色數(shù)量達(dá)到9 035個(gè),,共有10 292對(duì)電影角色之間的220 579次對(duì)話,總計(jì)304 713個(gè)對(duì)話片段,。對(duì)于對(duì)話片段,,相似的回答往往對(duì)應(yīng)相似的提問(wèn),根據(jù)語(yǔ)料庫(kù)構(gòu)建問(wèn)答對(duì),,將提問(wèn)當(dāng)作輸入傳入編碼器,,生成語(yǔ)義向量,再將該語(yǔ)義向量作為初始狀態(tài)輸入到解碼器中去,,解碼器的目標(biāo)是生成正確的回答。編碼器和解碼器的結(jié)構(gòu)如圖4所示,。雖然在訓(xùn)練過(guò)程中分別訓(xùn)練了編碼器和解碼器,,但是實(shí)際使用時(shí)只用到了訓(xùn)練好的編碼器,編碼器和解碼器一起訓(xùn)練是為了讓編碼器產(chǎn)生的語(yǔ)義向量更加準(zhǔn)確,。
3.2 模型訓(xùn)練
本次訓(xùn)練采用單個(gè)NVIDIA Tesla P100 GPU,,使用TensorFlow開(kāi)源庫(kù)作為基本框架進(jìn)行模型搭建,。損失函數(shù)采用交叉熵?fù)p失函數(shù),優(yōu)化器選用Adam優(yōu)化器,,共計(jì)訓(xùn)練30輪,,18 720批次,學(xué)習(xí)率為0.002,。訓(xùn)練過(guò)程中的損失函數(shù)的下降曲線如圖5所示,。
4 結(jié)束語(yǔ)
本文主要介紹適用于神經(jīng)網(wǎng)絡(luò)的關(guān)聯(lián)存儲(chǔ)器的設(shè)計(jì),并設(shè)計(jì)實(shí)驗(yàn)對(duì)實(shí)際的語(yǔ)句進(jìn)行向量嵌入并存儲(chǔ)到關(guān)聯(lián)存儲(chǔ)器中,,其性能指標(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ò)的個(gè)性化推薦系統(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.
作者信息:
萬(wàn)迪凱,,豐大軍
(華北計(jì)算機(jī)系統(tǒng)工程研究所,,北京100083)