本發(fā)明涉及用于神經(jīng)網(wǎng)絡(luò)模型計算中數(shù)據(jù)的存儲與調(diào)度。
背景技術(shù):
:隨著人工智能技術(shù)的發(fā)展,涉及深度神經(jīng)網(wǎng)絡(luò)、尤其是卷積神經(jīng)網(wǎng)絡(luò)的技術(shù)在近幾年得到了飛速的發(fā)展,在圖像識別、語音識別、自然語言理解、天氣預(yù)測、基因表達(dá)、內(nèi)容推薦和智能機(jī)器人等領(lǐng)域均取得了廣泛的應(yīng)用。所述深度神經(jīng)網(wǎng)絡(luò)可以被理解為一種運(yùn)算模型,其中包含大量數(shù)據(jù)節(jié)點,每個數(shù)據(jù)節(jié)點與其他數(shù)據(jù)節(jié)點相連,各個節(jié)點間的連接關(guān)系用權(quán)重表示。隨著深度神經(jīng)網(wǎng)絡(luò)的不斷發(fā)展,其復(fù)雜程度也在不斷地提高。為了權(quán)衡復(fù)雜度和運(yùn)算效果之間的矛盾,在參考文獻(xiàn):courbariauxm,hubarai,soudryd,etal.binarizedneuralnetworks:trainingdeepneuralnetworkswithweightsandactivationsconstrainedto+1or-1[j].arxivpreprintarxiv:1602.02830,2016.中提出了可以采用“二值卷積神經(jīng)網(wǎng)絡(luò)模型”來降低傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的復(fù)雜度。在所述二值卷積神經(jīng)網(wǎng)絡(luò)中,卷積神經(jīng)網(wǎng)絡(luò)中的權(quán)重、輸入數(shù)據(jù)、輸出數(shù)據(jù)均采用“二值形式”,即通過“1”和“-1”近似地表示其大小,例如以“1”來表示大于等于0的數(shù)值,并用“-1”來表示小于0的數(shù)值。通過上述方式,降低了神經(jīng)網(wǎng)絡(luò)中用于操作的數(shù)據(jù)位寬,由此極大程度地降低了所需的參數(shù)容量,致使二值卷積神經(jīng)網(wǎng)絡(luò)尤其適用于在物端實現(xiàn)圖像識別、增強(qiáng)現(xiàn)實和虛擬現(xiàn)實。在現(xiàn)有技術(shù)中通常采用通用的計算機(jī)處理器來運(yùn)行深度神經(jīng)網(wǎng)絡(luò),例如中央處理器(cpu)和圖形處理器(gpu)等。然而,并不存在針對二值卷積神經(jīng)網(wǎng)絡(luò)的專用處理器。通用的計算機(jī)處理器計算單元位寬通常為多比特,計算二值神經(jīng)網(wǎng)絡(luò)會產(chǎn)生資源浪費(fèi)。技術(shù)實現(xiàn)要素:因此,本發(fā)明的目的在于克服上述現(xiàn)有技術(shù)的缺陷,提供一種二值卷積神經(jīng)網(wǎng)絡(luò)處理器,包括:待計算數(shù)據(jù)存儲裝置,用于存儲二值形式的待卷積數(shù)據(jù)的元素以及二值形式的卷積核元素;二值卷積裝置,用于對所述二值形式的卷積核元素及所述二值形式的待卷積數(shù)據(jù)中相應(yīng)的元素進(jìn)行二值卷積操作;數(shù)據(jù)調(diào)度裝置,用于將所述卷積核元素與所述待卷積數(shù)據(jù)中相應(yīng)的元素載入所述二值卷積裝置;池化裝置,用于對卷積所獲得的結(jié)果進(jìn)行池化處理;以及歸一化裝置,用于對經(jīng)過池化的結(jié)果進(jìn)行歸一化操作。優(yōu)選地,根據(jù)所述的二值卷積神經(jīng)網(wǎng)絡(luò)處理器,其中所述二值卷積裝置,包括:xnor門,其以所述二值形式的卷積核元素及所述二值形式的待卷積數(shù)據(jù)中相應(yīng)的元素作為其輸入;累加裝置,其將所述xnor門的輸出作為其輸入,用于對所述xnor門的輸出進(jìn)行累加,以輸出二值卷積操作的結(jié)果;其中,所述累加裝置包括or門和或漢明重量計算單元,其中,所述or門的至少一個輸入為所述xnor門的輸出;所述漢明重量計算單元的至少一個輸入為所述xnor門的輸出。優(yōu)選地,根據(jù)所述的二值卷積神經(jīng)網(wǎng)絡(luò)處理器,其中所述待計算數(shù)據(jù)存儲裝置還被用于在線地對所獲得的經(jīng)過二值轉(zhuǎn)換的卷積核和或待卷積數(shù)據(jù)進(jìn)行存儲。優(yōu)選地,根據(jù)所述的二值卷積神經(jīng)網(wǎng)絡(luò)處理器,其中還包括:二值化裝置,用于將所獲得的卷積核和或待卷積數(shù)據(jù)轉(zhuǎn)換為二值形式。優(yōu)選地,根據(jù)所述的二值卷積神經(jīng)網(wǎng)絡(luò)處理器,其中所述數(shù)據(jù)調(diào)度裝置中設(shè)置有寄存器,用于在使用時載入需要重復(fù)使用的卷積核元素。優(yōu)選地,根據(jù)上述任意一項所述的二值卷積神經(jīng)網(wǎng)絡(luò)處理器,在所述待計算數(shù)據(jù)存儲裝置中所述待卷積數(shù)據(jù)的元素以及所述卷積核元素按照圖層交錯的方式而存儲。優(yōu)選地,根據(jù)所述的二值卷積神經(jīng)網(wǎng)絡(luò)處理器,在所述待計算數(shù)據(jù)存儲裝置中所述待卷積數(shù)據(jù)的元素根據(jù)卷積核的大小及卷積操作時依次參與計算的待卷積數(shù)據(jù)的元素而存儲。優(yōu)選地,根據(jù)所述的二值卷積神經(jīng)網(wǎng)絡(luò)處理器,在所述待計算數(shù)據(jù)存儲裝置中所述待卷積數(shù)據(jù)的元素和或所述卷積核元素的存儲方式滿足以下一項或多項:依照所述卷積核和所述待卷積數(shù)據(jù)的矩陣排布順序而存儲;卷積核和或待卷積數(shù)據(jù)的矩陣中處于同一位置、不同通道中的元素連續(xù)地存儲在連續(xù)的多個存儲單元中;同一卷積核中同一權(quán)重下的全部元素和或同一待卷積數(shù)據(jù)中用于進(jìn)行卷積操作的子矩陣中的全部元素存儲在存儲裝置中連續(xù)的多個存儲單元中。并且,本發(fā)明還提供了一種針對上述任意一項所述的二值卷積神經(jīng)網(wǎng)絡(luò)處理器的使用方法,包括:1)將所述待計算數(shù)據(jù)存儲裝置中的待卷積數(shù)據(jù)載入寄存器;2)將所述寄存器中的所述待卷積數(shù)據(jù)以及所述待計算數(shù)據(jù)存儲裝置中需要與所述待卷積數(shù)據(jù)執(zhí)行乘法的元素載入至二值卷積裝置中,以進(jìn)行二值卷積操作;3)由所述池化裝置對所述二值卷積裝置的輸出進(jìn)行池化處理;4)由所述歸一化裝置對所述池化裝置的輸出進(jìn)行歸一化操作。以及一種計算機(jī)可讀存儲介質(zhì),其中存儲有計算機(jī)程序,所述計算機(jī)程序在被執(zhí)行時用于實現(xiàn)上述的方法。與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點在于:提供了經(jīng)過簡化的用于執(zhí)行卷積運(yùn)算的硬件結(jié)構(gòu)、以及基于該結(jié)構(gòu)的二值卷積神經(jīng)網(wǎng)絡(luò)處理器及相應(yīng)的計算方法,通過在運(yùn)算過程中減少進(jìn)行計算的數(shù)據(jù)的位寬,達(dá)到提高運(yùn)算效率、降低存儲容量及能耗的效果。附圖說明以下參照附圖對本發(fā)明實施例作進(jìn)一步說明,其中:圖1是神經(jīng)網(wǎng)絡(luò)的多層結(jié)構(gòu)的示意圖;圖2是在二維空間中進(jìn)行卷積計算的示意圖;圖3是根據(jù)本發(fā)明的一個實施例的二值卷積裝置的硬件結(jié)構(gòu)示意圖;圖4是根據(jù)本發(fā)明又一個實施例的二值卷積裝置的硬件結(jié)構(gòu)示意圖;圖5是根據(jù)本發(fā)明又一個實施例的二值卷積裝置的硬件結(jié)構(gòu)示意圖;圖6a~6c示出了本發(fā)明采用漢明重量計算元件的二值卷積裝置的硬件結(jié)構(gòu)示意圖;圖7是根據(jù)本發(fā)明的一個實施例對多通道的卷積核即權(quán)重0和權(quán)重1以及待卷積數(shù)據(jù)進(jìn)行存儲的示意圖;圖8是根據(jù)本發(fā)明的一個實施例的二值卷積神經(jīng)網(wǎng)絡(luò)處理器的結(jié)構(gòu)的示意圖;圖9是根據(jù)本發(fā)明的一個實施例采用二值卷積神經(jīng)網(wǎng)絡(luò)處理器進(jìn)行計算的示意圖;圖10是根據(jù)本發(fā)明的又一個實施例采用二值卷積神經(jīng)網(wǎng)絡(luò)處理器進(jìn)行計算的示意圖。具體實施方式下面結(jié)合附圖和具體實施方式對本發(fā)明作詳細(xì)說明。計算機(jī)學(xué)科中所使得神經(jīng)網(wǎng)絡(luò)是一種仿照生物學(xué)上神經(jīng)突觸聯(lián)接結(jié)構(gòu)的數(shù)學(xué)模型,利用由神經(jīng)網(wǎng)絡(luò)所組成的應(yīng)用系統(tǒng)可以實現(xiàn)諸如機(jī)器學(xué)習(xí)、模式識別等諸多功能。所述神經(jīng)網(wǎng)絡(luò)在結(jié)構(gòu)上分為多層,圖1示出了一種神經(jīng)網(wǎng)絡(luò)多層結(jié)構(gòu)的示意圖。參考圖1,所述多層結(jié)構(gòu)中的第一層為輸入層,最后一層為輸出層,其余各層為隱藏層。在使用所述神經(jīng)網(wǎng)絡(luò)時,向輸入層輸入原始圖像,即輸入層圖層,(在本發(fā)明中的所述“圖像”、“圖層”指的是待處理的原始數(shù)據(jù),不僅僅是狹義的通過拍攝照片獲得的圖像),由神經(jīng)網(wǎng)絡(luò)中的每一層對所輸入的圖層進(jìn)行加工處理并將結(jié)果輸入到神經(jīng)網(wǎng)絡(luò)的下一層中,并最終將輸出層的輸出作為所輸出的結(jié)果。如前文中所述地,為了應(yīng)對神經(jīng)網(wǎng)絡(luò)日益復(fù)雜的結(jié)構(gòu),現(xiàn)有技術(shù)提出了一種二值卷積神經(jīng)網(wǎng)絡(luò)的概念。顧名思義,二值卷積神經(jīng)網(wǎng)絡(luò)的運(yùn)算包括對所輸入的數(shù)據(jù)進(jìn)行“卷積”操作,并且其還包括諸如“池化”、“歸一化”、“二值化”等操作。作為二值卷積神經(jīng)網(wǎng)絡(luò)中重要的一項操作,。下面將通過圖2詳細(xì)介紹“卷積”的計算過程。圖2示出了在二維空間中利用大小為3乘3的“二值”的卷積核對大小為5乘5的“二值”的圖像進(jìn)行卷積的計算過程。參考圖2,首先針對圖像從上至下的第1-3行、從左至右的第1-3列范圍內(nèi)的各個元素,分別采用在卷積核中對應(yīng)的元素與每個所述元素相乘:例如,采用卷積核中第1行第1列的元素(表示為“卷積核(1,1)”)乘以圖像中第1行第1列的元素(表示為“圖像(1,1)”)得到1×1=1,采用卷積核中第1行第2列的卷積核(1,2)乘以圖像中第1行第2列的元素圖像(1,2)得到1×0=0,類似地計算卷積核(1,3)乘以圖像(1,3)得到1×1=1,依次類推計算得出9個結(jié)果并將這9個結(jié)果相加得到1+0+1+0+1+0+0+0+1=4以作為卷積結(jié)果中第1行第1列的元素,卷積結(jié)果(1,1)。類似地,計算卷積核(1,1)乘以圖像(1,2)、卷積核(1,2)乘以圖像(1,3)、卷積核(1,3)乘以圖像(1,4)、卷積核(2,1)乘以圖像(2,2)…,依次類推計算出1+0+0+1+0+0+0+1=3以作為卷積結(jié)果(1,2)。采用上述方式可以計算出如圖2所示出的大小為3乘3的卷積結(jié)果矩陣。所獲得到的如圖2所示出的卷積結(jié)果通過緩沖和二值化處理被輸入到下一層的二值卷積神經(jīng)網(wǎng)絡(luò)中。上述示例示出了卷積的計算過程所包括的“乘”、以及“加”或“累加求和”的運(yùn)算。發(fā)明人意識到基于二值的乘法運(yùn)算所特有的特性,使得二值卷積運(yùn)算中的“乘”可被“異或非”運(yùn)算所代替,即僅利用一個邏輯元件xnor門便可完成在現(xiàn)有技術(shù)中必須采用乘法器才可完成的“乘”的運(yùn)算??梢钥闯?,基于二值的卷積過程相較于傳統(tǒng)的卷積更為簡單,其無需進(jìn)行諸如“2×4”這樣復(fù)雜的乘法運(yùn)算,在進(jìn)行“乘”的運(yùn)算時,若進(jìn)行乘法運(yùn)算的元素中有任意一個為“0”則所獲得的結(jié)果便為“0”,若進(jìn)行乘法運(yùn)算的全部元素均為“1”則所獲得的結(jié)果便為“1”。下面將通過一個具體的示例來詳細(xì)說明在本發(fā)明中可以利用xnor門元件來代替乘法器的原理。在實際使用二值化的卷積時,首先會對圖像和卷積核中的非二值數(shù)值z進(jìn)行二值化處理,即:其中,將大于等于0的數(shù)值z二值化為“1”以代表圖2中用于卷積運(yùn)算的符號“1”,將小于0的數(shù)值z二值化為“-1”以代表圖2中用于卷積運(yùn)算的符號“0”。對經(jīng)過二值化處理的圖像和卷積核的值進(jìn)行“異或非”運(yùn)算,即存在以下幾種情況:輸入a輸入b輸出f符號-1-111-11-101-1-101111通過上述真值表可以看出,在針對二值化的數(shù)值進(jìn)行“乘”的運(yùn)算時,可以采用用于執(zhí)行“異或非”運(yùn)算的邏輯元件xnor門來代替乘法器。而如本領(lǐng)域公知地,乘法器的復(fù)雜度遠(yuǎn)高于一個邏輯元件xnor門。因此,發(fā)明人認(rèn)為通過采用邏輯元件xnor門來代替?zhèn)鹘y(tǒng)處理器中的乘法器,可以大幅地降低二值卷積神經(jīng)網(wǎng)絡(luò)的處理器所使用器件的復(fù)雜度。此外,發(fā)明人還意識到基于二值的加法運(yùn)算所特有的特性,使得上述二值卷積運(yùn)算中的“加”可被“或”運(yùn)算所代替,即可以利用邏輯元件or門便來代替在現(xiàn)有技術(shù)中所采用的加法器。這是由于,對上述xnor門的輸出進(jìn)行的“或”運(yùn)算的結(jié)果可被表達(dá)為g=f1+f2...+fn,并最終輸出單比特的結(jié)果g,其中fk表示第k個xnor門的輸出,n表示其輸出被用作為or門的輸入的xnor門總數(shù)?;诎l(fā)明人的上述分析,本發(fā)明提供了一種可被用于二值卷積神經(jīng)網(wǎng)絡(luò)處理器的二值卷積裝置,其利用基于二值的乘法運(yùn)算、加法運(yùn)算的特性,簡化了處理器中用于執(zhí)行卷積運(yùn)算的硬件的構(gòu)成,由此提高卷積運(yùn)算的速度、降低處理器的總體能耗。圖3示出了根據(jù)本發(fā)明的一個實施例的二值卷積裝置的硬件結(jié)構(gòu)。如圖3所示,該二值卷積裝置包括9個xnor門以及1個or門,全部9個xnor門的輸出被用作所述or門的輸入。在進(jìn)行卷積運(yùn)算時,由每個xnor門分別計算n1×w1、n2×w2…n9×w9,以獲得輸出f1~f9;or門將f1~f9作為其輸入,輸出卷積結(jié)果中的第一個元素g1。類似地,采用同一個卷積核,針對圖像中的其他區(qū)域進(jìn)行計算,可以獲得卷積結(jié)果中的其他元素的大小,此處不再復(fù)述。在圖3所示出的實施例中,并行地利用多個xnor門進(jìn)行乘的計算,提高了卷積計算的速率。然而應(yīng)當(dāng)理解,在本發(fā)明中還可以對所述二值卷積裝置的硬件結(jié)構(gòu)進(jìn)行變形,下面將通過其他幾個實施例進(jìn)行舉例說明。圖4示出了根據(jù)本發(fā)明的又一個實施例的二值卷積裝置的硬件結(jié)構(gòu)。如圖4所示,該二值卷積裝置包括1個xnor門、1個or門、以及一個寄存器,所述寄存器用于存儲or門的輸出并且其所存儲的值被用作所述or門的其中一個輸入,并且所述or門的另一個輸入為所述xnor門的輸出。在進(jìn)行卷積運(yùn)算時,依照時刻的推進(jìn),分別在第一至第九個時刻將n1和w1、n2和w2、…n9和w9作為xnor門的輸入,相應(yīng)地對應(yīng)于每個時刻從xnor門輸出f1、f2…f9以作為or門的其中一個輸入,并且將寄存器中所存儲的在前一時刻從or門中輸出的結(jié)果作為or門的另一個輸入。例如,當(dāng)xnor門輸出f1(其大小等于n1×w1)時,從寄存器中讀取出預(yù)存的符號“0”將其與f1一并作為or門的輸入,并從or門輸出f1;當(dāng)xnor門輸出f2(其大小等于n2×w2)時,從寄存器中讀取出f1將其與f2一并作為or門的輸入,并從or門輸出f1+f2,依次類推直至輸出針對f1~f9的累加結(jié)果g1。在圖4所示出的實施例中,通過增加對xnor門和or門的復(fù)用率,減少了所采用元件數(shù)量,并且該方案所采用的是僅具有兩個輸入端的or門,其硬件復(fù)雜程度更低。圖5示出了根據(jù)本發(fā)明的又一個實施例的二值卷積裝置的硬件結(jié)構(gòu)。該實施例與圖4所示出的實施例類似,均只采用了一個xnor門、一個or門和一個寄存器,不同的是在圖5中xnor門的輸入被存入可以同時存儲多位結(jié)果的寄存器中,并且寄存器中的各個結(jié)果被用作or門的輸入。該實施例的使用方法與圖4中的實施例相類似,均是對xnor門進(jìn)行復(fù)用,不同的是圖5將每個時刻xnor門所輸出的結(jié)果存入能夠同時保存多位結(jié)果的寄存器中,并在獲得了全部f1~f9后,由or門進(jìn)行“或”的運(yùn)算以輸出g1。在本發(fā)明圖3、4、5所提供的實施例中,均采用了or門來實現(xiàn)“加”或“累加”的功能,并且所述or門的輸入均來自于xnor門的輸出,致使最終從or門輸出的結(jié)果均為單比特值,由此可以簡化計算過程、增加運(yùn)算速率。該方案所提供的硬件結(jié)構(gòu)尤其適用于針對二值神經(jīng)網(wǎng)絡(luò)的專用處理器,這是由于二值神經(jīng)網(wǎng)絡(luò)采用數(shù)值“1”和“-1”表示神經(jīng)網(wǎng)絡(luò)中的權(quán)重和數(shù)據(jù),在神經(jīng)網(wǎng)絡(luò)計算過程存在大量乘法和加法操作,減少計算操作數(shù)位寬可以有效地降低計算復(fù)雜度。然而,由于上述采用or門來實現(xiàn)“加”或“累加”的功能的方案均為單比特計算,因而會引入一定程度的誤差。對此,本發(fā)明還提供了一種可選的方案,即采用漢明重量計算元件來代替如圖3、4、5中所示出的or門以實現(xiàn)“加”或“累加”的功能。圖6a~6c示出了具有漢明重量計算元件的硬件結(jié)構(gòu),在所述可選的方案中,漢明重量計算元件將xnor門的輸出作為其輸入,輸出所輸出數(shù)據(jù)中邏輯“1”的數(shù)據(jù),即漢明重量。所述方案與上述采用or門的方案相類似,同樣可以達(dá)到簡化計算過程的效果,并且該方案還可以實現(xiàn)精準(zhǔn)的求和操作。發(fā)明人發(fā)現(xiàn),基于本發(fā)明所提供的上述二值卷積裝置針對每一次“乘”及“累加”計算,所操作的均為單個比特的數(shù)據(jù),并且通過該二值卷積裝置所輸出的也均為單個比特的數(shù)據(jù),而這樣的特征尤其適用于采用“圖層交錯型數(shù)據(jù)映射方式”來存儲和調(diào)度參與卷積運(yùn)算及計算所獲得的數(shù)據(jù),從而達(dá)到減少數(shù)據(jù)載入次數(shù),充分利用數(shù)據(jù)的局部性提高數(shù)據(jù)的重復(fù)利用率的效果。本發(fā)明中的所述“圖層交錯型數(shù)據(jù)映射方式”指的是,按照通道(channel)的方向?qū)⒕矸e核和待卷積數(shù)據(jù)中的各個元素依次存儲至存儲裝置的每一行中,即在存儲裝置中數(shù)據(jù)按照圖層交錯的方式進(jìn)行存儲,相鄰的兩個數(shù)據(jù)元素來自不同的通道而不是同一通道。如圖7所示,在本發(fā)明中,在同一z軸上的卷積核和待卷積數(shù)據(jù)的元素對應(yīng)同一“通道”,即具有相同z值的元素屬于同一通道。為更加形象具體地描述所述數(shù)據(jù)計算方式,圖7以(x,y,z)=2*2*2的卷積核權(quán)重0和卷積核權(quán)重1,與(x,y,z)=2*3*2的待卷積數(shù)據(jù)為例,詳細(xì)闡述本發(fā)明提供的適用于二值卷積神經(jīng)網(wǎng)絡(luò)的圖層交錯型數(shù)據(jù)映射方式。參考圖7,權(quán)重0和權(quán)重1中的元素按照該元素所處的空間位置,被分別劃分為四組:其中,權(quán)重0的四組權(quán)重分別為az、bz、cz和dz,如圖所示,z為0、1;權(quán)重1的四組權(quán)重分別為az、bz、cz和dz,如圖所示,z為0、1。參考圖7,根據(jù)本發(fā)明的一個實施例,可以采用以下方式來存儲卷積核權(quán)重0、卷積核權(quán)重1、以及待卷積數(shù)據(jù)中的各個元素。圖7中,為了方便說明,依據(jù)每個卷積核的尺寸和步進(jìn)大小,將權(quán)重0和權(quán)重1的三維矩陣中的元素按照所處的通道劃分為兩個二維矩陣,例如將權(quán)重0劃分為由a0、b0、c0、d0所組成的二維矩陣和由a1、b1、c1、d1所組成的二維矩陣;類似地,將待卷積數(shù)據(jù)的三維矩陣中的元素按照所處的通道劃分為兩個二維矩陣,即由x0、y0、z0、p0、q0、r0所組成的二維矩陣和由x1、y1、z1、p1、q1、r1所組成的二維矩陣。在存儲卷積核權(quán)重0時,在權(quán)重存儲裝置的一行連續(xù)的存儲單元中,依次存儲權(quán)重0中的元素a0、a1、b0、b1、c0、c1、d0和d1,共8個比特??梢钥闯?,在存儲單元中,相鄰的兩個元素彼此來自于不同的通道,例如a0和a1分別來自不同的通道,a1和b0也來自不同的通道,按照這樣的方式即為前文中所述按照圖層交錯的存儲方式。在存儲卷積核權(quán)重1時,在該權(quán)重存儲裝置的另外一行連續(xù)的存儲單元中,依次存儲權(quán)重1中的元素的a0、a1、b0、b1、c0、c1、d0和d1,共8個比特。與權(quán)重0的存儲方式類似地,相鄰的兩個元素同樣來自于不同的通道。在權(quán)重存儲裝置中,位于相同x軸和相同y軸的權(quán)重元素(例如a0和a1)作為相鄰元素依次存儲,在相同x軸和相同y軸的元素存儲完畢后存儲下一組具有相同x軸和y軸的權(quán)重元素(例如b0和b1),依次類推,將卷積核內(nèi)其他權(quán)重元素存儲完畢。在存儲待卷積數(shù)據(jù)時,可以根據(jù)卷積核的大小及卷積操作時依次參與計算的數(shù)據(jù)元素進(jìn)行存儲。參考圖2所示出的卷積計算規(guī)則,可知需要首先針對azxz、bzyz、czpz和dzqz進(jìn)行計算,再針對azyz、bzzz、czqz和dzrz進(jìn)行計算。因此,在存儲待卷積數(shù)據(jù)的各個元素時,除按照圖層交錯的存儲方式之外,還應(yīng)當(dāng)考慮卷積計算的規(guī)則,從而依次存儲參與計算的數(shù)據(jù)元素,例如將xz、yz、pz、qz存儲在一行或一列連續(xù)的存儲單元中,將yz、zz、qz、rz存儲在另外一行或一列連續(xù)的存儲單元中。參考圖7,在數(shù)據(jù)存儲裝置的一列連續(xù)的存儲單元中,依次存儲x0、x1、y0、y1、p0、p1、q0、q1。在數(shù)據(jù)存儲裝置的另外一列連續(xù)的存儲單元中,依次存儲y0、y1、z0、z1、q0、q1、r0、r1。與存儲卷積核的元素相類似地,在數(shù)據(jù)存儲裝置中,位于相同x軸和相同y軸的數(shù)據(jù)元素(例如x0和x1)被分為一組并作為相鄰元素依次存儲,在相同x軸和相同y軸的元素存儲完畢后存儲下一組具有相同x軸和y軸的權(quán)重元素(例如y0和y1),依次類推,將待卷積數(shù)據(jù)矩陣中與卷積核尺寸相當(dāng)?shù)淖泳仃?例如在圖7中以虛線標(biāo)出的)內(nèi)其他數(shù)據(jù)元素存儲完畢。盡管在圖7所示出的示例中,卷積核和待卷積數(shù)據(jù)的通道數(shù)均為2,然而應(yīng)當(dāng)理解在本發(fā)明中對于通道數(shù)大于2的卷積核和待卷積數(shù)據(jù)也可以按照圖層交錯的存儲方式。優(yōu)選地,在存儲時,依次填滿存儲裝置中連續(xù)的多個存儲單元,即依照卷積核和待卷積數(shù)據(jù)的矩陣排布順序,在存儲裝置中進(jìn)行存儲。優(yōu)選地,將卷積核和或待卷積數(shù)據(jù)的矩陣中處于同一位置、不同通道中的元素連續(xù)地存儲在存儲裝置中連續(xù)的多個存儲單元。優(yōu)選地,將同一卷積核中同一權(quán)重下的全部元素和或同一待卷積數(shù)據(jù)中用于進(jìn)行卷積操作的子矩陣中的全部元素存儲在存儲裝置中連續(xù)的多個存儲單元中。圖7中為了方便解釋,將權(quán)重存儲裝置和數(shù)據(jù)存儲裝置設(shè)置為彼此不同的存儲裝置,然而應(yīng)當(dāng)理解本發(fā)明即可以將所述權(quán)重存儲裝置和所述數(shù)據(jù)存儲裝置分別設(shè)置在不同的存儲器上,也可以存儲在同一存儲器的不同區(qū)域上,例如統(tǒng)一地存儲在待計算數(shù)據(jù)存儲裝置上。并且,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,上述實施例所描述的存儲方式既可以優(yōu)先于二值神經(jīng)網(wǎng)絡(luò)的計算過程,在處理器外離線地完成,也可以在處理器上在線地完成,例如在處理器的片上芯片中完成,或以計算機(jī)程序的方式進(jìn)行存儲,并通過處理器來執(zhí)行所述計算機(jī)程序。采用根據(jù)本發(fā)明的上述圖層交錯型數(shù)據(jù)映射方式來存儲各個卷積核以及待卷積數(shù)據(jù)中的各個元素,可以減少數(shù)據(jù)的載入次數(shù)、提高數(shù)據(jù)的復(fù)用率。還應(yīng)當(dāng)理解,采用上述“圖層交錯型數(shù)據(jù)映射方式”來存儲卷積核元素以及與所述待卷積數(shù)據(jù)中相應(yīng)的元素的目的在于方便讀取,以快速便捷地確定二值卷積裝置的輸入。因此,凡是可以實現(xiàn)在所述卷積核元素的存儲位置與所述待卷積數(shù)據(jù)中相應(yīng)的元素的存儲位置之間建立映射關(guān)系的方式,均可被用于存儲所述卷積核元素以及與所述待卷積數(shù)據(jù)的元素。例如,在連續(xù)的存儲單元的長度小于8比特時,例如僅為4比特,對權(quán)重0中的a0、a1、b0、b1、c0、c1、d0和d1進(jìn)行折疊式的存儲,即在連續(xù)的存儲單元中存儲a0、a1、b0、b1,并在另一行連續(xù)的存儲單元中存儲c0、c1、d0和d1。在使用通過上述方式而存儲的卷積核元素以及待卷積數(shù)據(jù)中的相應(yīng)元素進(jìn)行卷積運(yùn)算時,適宜于采用單指令多數(shù)據(jù)流(simd)的方式來執(zhí)行,即通過單條指令將所存儲的多個數(shù)據(jù)載入至運(yùn)算單元。針對所存儲數(shù)據(jù)進(jìn)行載入及計算的方法將在隨后的實施例中詳細(xì)介紹。通過這樣的方式,可以減少計算單元的位寬、降低計算單元的硬件開銷。綜合前文中所提到的二值卷積裝置以及卷積核和待卷積數(shù)據(jù)中元素的存儲方式和調(diào)用方式,可以提供一種計算單元位款少、硬件結(jié)構(gòu)相對簡單、針對二值卷積神經(jīng)網(wǎng)絡(luò)的專用處理器。參考圖8,根據(jù)本發(fā)明的一個實施例,提供了一種二值卷積神經(jīng)網(wǎng)絡(luò)處理器10,包括:數(shù)據(jù)調(diào)度裝置101、待計算數(shù)據(jù)存儲裝置102、二值卷積裝置103、池化裝置104、歸一化裝置105、二值化裝置106。其中,待計算數(shù)據(jù)存儲裝置102用于存儲二值形式的卷積核元素以及二值形式的待卷積數(shù)據(jù)。如前文中所述,所述存儲方式應(yīng)當(dāng)能夠反映出用于卷積計算的卷積核的元素與待卷積數(shù)據(jù)中相應(yīng)的元素之間的映射關(guān)系。例如,以按照圖層交錯的方式存儲卷積核元素和待卷積數(shù)據(jù)、以及根據(jù)卷積核的大小及卷積操作時依次參與計算的待卷積數(shù)據(jù)的元素來存儲待卷積數(shù)據(jù)。具體的存儲方式可以參考前述實施例。數(shù)據(jù)調(diào)度裝置101,用于根據(jù)所述映射關(guān)系,將所述卷積核元素與所述待卷積數(shù)據(jù)中相應(yīng)的元素載入所述二值卷積裝置。例如,在所述數(shù)據(jù)調(diào)度裝置101中設(shè)置寄存器,并在使用時將需要重復(fù)使用的卷積核元素載入寄存器中。二值卷積裝置103,用于對所述二值形式的卷積核元素及所述二值形式待卷積數(shù)據(jù)中相應(yīng)的元素進(jìn)行二值卷積操作。所述二值卷積裝置103可以采用如前述實施例中任意一種結(jié)構(gòu),通過xnor門實現(xiàn)對卷積核元素及待卷積數(shù)據(jù)中相應(yīng)的元素的乘的運(yùn)算,并通過or門或漢明重量計算元件實現(xiàn)對通過乘的運(yùn)算所得結(jié)果的累加。池化裝置104,用于對卷積所獲得的結(jié)果進(jìn)行池化處理。歸一化裝置105,用于對經(jīng)過池化的結(jié)果進(jìn)行歸一化操作以加速神經(jīng)網(wǎng)絡(luò)的參數(shù)訓(xùn)練過程。在本發(fā)明的一些實施例中,可以在線地從數(shù)據(jù)源處獲得用于二值卷積操作的卷積核和或待卷積數(shù)據(jù)。由于所獲得的數(shù)據(jù)不一定為二值化的數(shù)據(jù),因此在所述實施例中,還可以在二值卷積神經(jīng)網(wǎng)絡(luò)處理器10中設(shè)置二值化裝置106,以將所獲得的數(shù)據(jù)轉(zhuǎn)換為二值形式。并且,還可以由待計算數(shù)據(jù)存儲裝置102在線地對經(jīng)過二值轉(zhuǎn)換的數(shù)據(jù)進(jìn)行存儲。應(yīng)當(dāng)理解,對于已經(jīng)在進(jìn)行卷積神經(jīng)網(wǎng)絡(luò)計算之前預(yù)先離線地在待計算數(shù)據(jù)存儲裝置102中存儲了卷積核和或待卷積數(shù)據(jù)的實施例,不必在二值卷積神經(jīng)網(wǎng)絡(luò)處理器10中設(shè)置二值化裝置106。下面將參考圖9和圖10,通過具體的實施例詳細(xì)介紹采用如圖8中所示出的二值卷積神經(jīng)網(wǎng)絡(luò)處理器10進(jìn)行計算的過程。圖9示出了根據(jù)本發(fā)明的一個實施例,采用上述二值卷積神經(jīng)網(wǎng)絡(luò)處理器進(jìn)行計算的過程。圖9采用了與圖7中相同的符號來表述卷積核元素及待卷積數(shù)據(jù)元素,例如,x0、x1、a0、a1等。其中,在權(quán)重存儲矩陣中以一個存儲字來存儲一行處于同一通道中的全部卷積核元素,如圖所示,所述存儲字位寬是8比特,每個元素占據(jù)1比特。類似地,待卷積數(shù)據(jù)矩陣中一個存儲字的位寬同樣是8比特。此外,在圖9中,xnor門和寄存器組的位寬均為2比特。在計算過程中,遵循同一卷積核內(nèi)的數(shù)據(jù)在同一累加器中累加的原則。其計算過程如下:步驟1,將待卷積數(shù)據(jù)中的高兩位(即x0和x1)載入至寄存器組中;參考圖2中所示出的卷積原理圖可知,在圖9中,待卷積數(shù)據(jù)中的元素將被反復(fù)地使用x0和x1,以在隨后的步驟中計算出a0x0、b0x0、a1x1、b1x1,因此需要將待卷積數(shù)據(jù)中的2比特的數(shù)據(jù)存入寄存器中。步驟2,將寄存器組中的待卷積數(shù)據(jù)和權(quán)重矩陣中第一行的前兩位權(quán)重數(shù)據(jù)(a0和a1)載入至xnor門中;步驟3,通過加法單元對xnor門的計算結(jié)果執(zhí)行or運(yùn)算或計算漢明重量;如前文中所述,or運(yùn)算或計算漢明重量可以達(dá)到“加”的效果,在此步驟中,可以計算得出a0x0和a1x1。步驟4,將加法單元計算結(jié)果輸入值累加器0中;所述累加器0是針對同一卷積核內(nèi)的數(shù)據(jù)進(jìn)行累加。步驟5,將寄存器組中的待卷積數(shù)據(jù)和權(quán)重矩陣中第二行的前兩位權(quán)重數(shù)據(jù)(a0和a1)載入至xnor門中;步驟6,加法單元對xnor門的計算結(jié)果執(zhí)行or運(yùn)算或計算漢明重量,計算得出a0x0和a1x1。步驟7,將加法單元計算結(jié)果輸入至累加器1中,以此類推,將x0和x1依次與權(quán)重存儲陣列中指定八行的前兩位權(quán)重進(jìn)行計算;步驟8,與前述步驟中類似地,將待卷積數(shù)據(jù)中的第三位與第四位(y0和y1)載入至寄存器組中;步驟9,將寄存器組中的待卷積數(shù)據(jù)和權(quán)重矩陣中第一行的第三位和第四位權(quán)重數(shù)據(jù)(b0和b1)載入至xnor門中;步驟10,通過加法單元對xnor門的計算結(jié)果執(zhí)行or運(yùn)算或計算漢明重量;步驟11,將加法單元計算結(jié)果輸入值累加器1中,此后與步驟5至步驟7類似,將b0和b1等位于同列的數(shù)據(jù)依次與y0和y1進(jìn)行計算;步驟12,將累加器得到一個輸出圖層的數(shù)據(jù)時,將累加器計算結(jié)果載入至緩沖單元;步驟13,當(dāng)緩沖單元得到輸出圖層完整數(shù)據(jù)后,將輸出待卷積數(shù)據(jù)載入至池化單元進(jìn)行池化操作;步驟14,將池化操作計算結(jié)果載入至批量歸一化單元進(jìn)行批量歸一化操作;步驟15,將批量歸一化的計算結(jié)果載入至二值化單元進(jìn)行二值化操作。可以看出,采用如前文中所述的方式依據(jù)所述卷積核元素的存儲位置與所述待卷積數(shù)據(jù)中相應(yīng)的元素的存儲位置之間所存在映射關(guān)系,可以快速地確定需要進(jìn)行卷積的相應(yīng)元素以將其輸入xnor門中。當(dāng)存儲單元位寬小于圖9中所示出的矩陣位寬時,還可以對所述矩陣采用分塊折疊的方式來存儲卷積核元素及待卷積數(shù)據(jù)元素,如圖10所示。類似地,圖10也采用了與圖7中相同的符號來表述卷積核元素及待卷積數(shù)據(jù)元素,與圖9的區(qū)別在于當(dāng)需要讀取屬于待卷積數(shù)據(jù)的同一數(shù)據(jù)塊中的數(shù)據(jù)時還需要考慮該數(shù)據(jù)在寄存器組中所存儲的位置。通過本發(fā)明的實施例可以看出,本發(fā)明基于二值化運(yùn)算的特性,提供了經(jīng)過簡化的用于執(zhí)行卷積運(yùn)算的硬件結(jié)構(gòu)、以及基于該結(jié)構(gòu)的二值卷積神經(jīng)網(wǎng)絡(luò)處理器及相應(yīng)的計算方法,通過在運(yùn)算過程中減少進(jìn)行計算的數(shù)據(jù)的位寬,達(dá)到提高運(yùn)算效率、降低存儲容量及能耗的效果。并且,本發(fā)明采用圖層交錯型數(shù)據(jù)映射方式進(jìn)行數(shù)據(jù)存儲和計算,簡化了卷積計算時調(diào)取待卷積數(shù)據(jù)以及卷積核數(shù)據(jù)的過程,減少了硬件開銷并提高了數(shù)據(jù)利用率。需要說明的是,上述實施例中介紹的各個步驟并非都是必須的,本領(lǐng)域技術(shù)人員可以根據(jù)實際需要進(jìn)行適當(dāng)?shù)娜∩?、替換、修改等。最后所應(yīng)說明的是,以上實施例僅用以說明本發(fā)明的技術(shù)方案而非限制。盡管上文參照實施例對本發(fā)明進(jìn)行了詳細(xì)說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,對本發(fā)明的技術(shù)方案進(jìn)行修改或者等同替換,都不脫離本發(fā)明技術(shù)方案的精神和范圍,其均應(yīng)涵蓋在本發(fā)明的權(quán)利要求范圍當(dāng)中。當(dāng)前第1頁12