技術(shù)領(lǐng)域
本公開(kāi)涉及一種脈沖神經(jīng)網(wǎng)絡(luò)。更具體地,本公開(kāi)涉及在執(zhí)行期間減少脈沖神經(jīng)網(wǎng)絡(luò)的存儲(chǔ)器訪問(wèn)和網(wǎng)絡(luò)內(nèi)帶寬消耗。
背景技術(shù):
神經(jīng)網(wǎng)絡(luò)可以在各種不同的應(yīng)用中使用。例如,神經(jīng)網(wǎng)絡(luò)可以用于執(zhí)行任務(wù),包括但不限于,語(yǔ)音識(shí)別、視覺(jué)目標(biāo)識(shí)別和/或定位、圖像重建、異常檢測(cè)、可能需要模式識(shí)別的其它應(yīng)用等。脈沖神經(jīng)網(wǎng)絡(luò)是適合用于在時(shí)間和/或順序方面處理數(shù)據(jù)的特定類神經(jīng)網(wǎng)絡(luò)。例如,脈沖神經(jīng)網(wǎng)絡(luò)可以用于處理音頻,諸如語(yǔ)音和/或視頻。
在脈沖神經(jīng)網(wǎng)絡(luò)中,“脈沖”在神經(jīng)元之間傳送。可以利用脈沖神經(jīng)網(wǎng)絡(luò)的這種特性來(lái)實(shí)現(xiàn)功率優(yōu)化的神經(jīng)網(wǎng)絡(luò)。這些功率優(yōu)化的神經(jīng)網(wǎng)絡(luò)可以以各種不同類型的裝置和/或系統(tǒng)來(lái)實(shí)現(xiàn),包括但不限于,消費(fèi)電子裝置、服務(wù)器、云服務(wù)器應(yīng)用等。
脈沖卷積神經(jīng)網(wǎng)絡(luò)(SCNN)和脈沖遞歸神經(jīng)網(wǎng)絡(luò)(SRNN)屬于脈沖神經(jīng)網(wǎng)絡(luò)的特定子類。SCNN和SRNN使用CNN和RNN的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)和優(yōu)化訓(xùn)練基礎(chǔ)設(shè)施。然而,SCNN和SRNN被轉(zhuǎn)換成脈沖實(shí)現(xiàn)用于執(zhí)行。提供給脈沖神經(jīng)網(wǎng)絡(luò)的輸入包括脈沖列。更具體地,每個(gè)輸入神經(jīng)元接收一系列脈沖作為輸入。正如所指出的,跨越脈沖神經(jīng)網(wǎng)絡(luò)傳送信息,作為從一層到下一層的脈沖。最終的輸出通常是輸出脈沖列。輸出脈沖可以被計(jì)數(shù)或以其它方式轉(zhuǎn)化成所需要的結(jié)果,這可能是關(guān)于接收輸入的分類或其它確定。
技術(shù)實(shí)現(xiàn)要素:
一個(gè)實(shí)施例可以包括一種實(shí)現(xiàn)使用第一分割將具有多個(gè)層的脈沖神經(jīng)網(wǎng)絡(luò)分割成多個(gè)平截頭體的方法,其中,每個(gè)平截頭體包括脈沖神經(jīng)網(wǎng)絡(luò)的每個(gè)分割層的一片。方法包括:讀取脈沖神經(jīng)網(wǎng)絡(luò)的第一層的第一片;以及利用處理器,在處理器的內(nèi)部存儲(chǔ)器中存儲(chǔ)中間數(shù)據(jù)的同時(shí)使用第一層的第一片產(chǎn)生脈沖神經(jīng)網(wǎng)絡(luò)的第二層的第一片;第一層的第一片和第二層的第一片屬于同一平截頭體。
另一實(shí)施例可以包括實(shí)現(xiàn)使用第一分割將具有多個(gè)層的脈沖神經(jīng)網(wǎng)絡(luò)分割成多個(gè)平截頭體的設(shè)備,其中,每個(gè)平截頭體包括脈沖神經(jīng)網(wǎng)絡(luò)的每個(gè)分割層的一片。設(shè)備包括被配置為存儲(chǔ)中間數(shù)據(jù)的內(nèi)部存儲(chǔ)器,以及耦合到內(nèi)部存儲(chǔ)器并被配置為發(fā)起可執(zhí)行操作的第一計(jì)算單元??蓤?zhí)行操作包括:讀取脈沖神經(jīng)網(wǎng)絡(luò)的第一層的第一片,并且在處理器的內(nèi)部存儲(chǔ)器中存儲(chǔ)中間數(shù)據(jù)的同時(shí)使用第一層的第一片產(chǎn)生脈沖神經(jīng)網(wǎng)絡(luò)的第二層的第一片。第一層的第一片和第二層的第一片屬于同一平截頭體。
另一實(shí)施例可以包括計(jì)算機(jī)程序產(chǎn)品,包括其上存儲(chǔ)有實(shí)現(xiàn)使用第一分割將具有多個(gè)層的脈沖神經(jīng)網(wǎng)絡(luò)分割成多個(gè)平截頭體的程序代碼的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中,每個(gè)平截頭體包括脈沖神經(jīng)網(wǎng)絡(luò)的每個(gè)分割層的一片。程序代碼可以由處理器執(zhí)行以執(zhí)行以下操作,所述操作包括:讀取脈沖神經(jīng)網(wǎng)絡(luò)的第一層的第一片,并且在處理器的內(nèi)部存儲(chǔ)器中存儲(chǔ)中間數(shù)據(jù)的同時(shí)使用第一層的第一片產(chǎn)生脈沖神經(jīng)網(wǎng)絡(luò)的第二層的第一片。第一層的第一片和第二層的第一片屬于同一平截頭體。
提供本發(fā)明內(nèi)容部分僅介紹特定概念,而不是識(shí)別所要求保護(hù)的主題的任何關(guān)鍵或必要特征。根據(jù)附圖和下面的詳細(xì)描述,本發(fā)明的許多其它特征和實(shí)施例將是顯而易見(jiàn)的。
附圖說(shuō)明
附圖示出一個(gè)或多個(gè)實(shí)施例;然而,附圖不應(yīng)被認(rèn)為將本發(fā)明僅限制到所示的實(shí)施例。在查看下面的詳細(xì)描述以及參照附圖之后,各方面和優(yōu)點(diǎn)將變得明顯。
圖1是示出脈沖神經(jīng)網(wǎng)絡(luò)的多個(gè)層的示例性處理的框圖。
圖2是示出具有重疊片(overlapping tiles)的神經(jīng)網(wǎng)絡(luò)層的示例性分割的框圖。
圖3是示出由示例性神經(jīng)網(wǎng)絡(luò)引擎執(zhí)行的處理的框圖。
圖4是示出執(zhí)行脈沖神經(jīng)網(wǎng)絡(luò)的示例性方法的流程圖。
圖5是示出確定神經(jīng)網(wǎng)絡(luò)的平截頭體(frustum)的示例性方法的流程圖。
圖6是脈沖神經(jīng)網(wǎng)絡(luò)的層的示例性分割。
圖7是示出執(zhí)行脈沖神經(jīng)網(wǎng)絡(luò)的另一示例性方法的流程圖。
圖8是示出用于在神經(jīng)網(wǎng)絡(luò)上實(shí)現(xiàn)分割處理的數(shù)據(jù)處理系統(tǒng)的示例的框圖。
具體實(shí)施方式
盡管本公開(kāi)以限定新穎特征的權(quán)利要求為結(jié)論,但是認(rèn)為通過(guò)考慮結(jié)合附圖的描述,在此描述的各種特征將更好理解。用于說(shuō)明的目的提供本公開(kāi)的范圍內(nèi)描述的處理、機(jī)器、制造及其任何變化。描述的任何特定結(jié)構(gòu)和功能細(xì)節(jié)不應(yīng)被解釋為限制,而僅僅作為權(quán)利要求的基礎(chǔ)以及作為代表的基礎(chǔ),用于教導(dǎo)本領(lǐng)域技術(shù)人員不同地采用在幾乎任何適當(dāng)?shù)脑敿?xì)結(jié)構(gòu)中描述的特征。另外,本公開(kāi)中使用的術(shù)語(yǔ)和短語(yǔ)并不意在是限制性的,而是提供所描述的特征的可理解的描述。
本公開(kāi)涉及脈沖神經(jīng)網(wǎng)絡(luò)(SNN)。更具體地,本公開(kāi)涉及在執(zhí)行期間減少存儲(chǔ)器訪問(wèn)和網(wǎng)絡(luò)內(nèi)帶寬消耗。SNN可以用于實(shí)現(xiàn)功率優(yōu)化網(wǎng)絡(luò),其可以用在從移動(dòng)消費(fèi)裝置到可以用于執(zhí)行云服務(wù)器應(yīng)用的服務(wù)器范圍內(nèi)的各種不同類型的系統(tǒng)中。
SNN利用抑制SNN的部分活動(dòng)的特定神經(jīng)元模型,由此允許SNN比其它類型的神經(jīng)網(wǎng)絡(luò)消耗更少的功率??梢酝ㄟ^(guò)使用閾值模型抑制SNN的神經(jīng)元的活動(dòng)。除非特征是在給定的區(qū)域足夠強(qiáng),否則SNN的響應(yīng)為(0)或不產(chǎn)生脈沖。神經(jīng)網(wǎng)絡(luò)的那部分消耗的功率變得可忽略不計(jì)。
許多不同類型SNN在每個(gè)神經(jīng)元存儲(chǔ)突觸后電位(PSP)。SNN內(nèi)的神經(jīng)元的PSP值表示SNN在給定時(shí)間的狀態(tài)。由于傳入數(shù)據(jù)是0(指示沒(méi)有脈沖)或1(指示脈沖),因此更新神經(jīng)元的PSP的計(jì)算成本可以很小。確定輸入的權(quán)重和以確定神經(jīng)元的PSP值涉及有條件加法運(yùn)算,而不是乘法運(yùn)算。乘法運(yùn)算被消除。盡管如此,一些SNN存儲(chǔ)大量的數(shù)據(jù),其中包括PSP值。為了執(zhí)行SNN存儲(chǔ)此數(shù)據(jù)可能需要大量?jī)?nèi)存,并且產(chǎn)生大量讀取和寫入數(shù)據(jù)流量以保存SNN的狀態(tài)并在被處理的每個(gè)時(shí)間間隔之后恢復(fù)SNN的狀態(tài)。
根據(jù)本文所述的本發(fā)明的布置中,以可以減少或消除用于存儲(chǔ)和恢復(fù)SNN狀態(tài)的數(shù)據(jù)流量的方式執(zhí)行由神經(jīng)網(wǎng)絡(luò)引擎(NN引擎)執(zhí)行SNN。由于減少或消除了與存儲(chǔ)PSP值和從外部存儲(chǔ)器取得PSP值相關(guān)的數(shù)據(jù)流量,因此也可以減少或者至少在一些情況下消除外部存儲(chǔ)器內(nèi)的SNN狀態(tài)存儲(chǔ)。在另一方面,可以執(zhí)行SNN,使得可以產(chǎn)生脈沖,以減少和/或消除當(dāng)對(duì)每個(gè)神經(jīng)元計(jì)算輸入的權(quán)重和時(shí)零的添加。
如本文所述,數(shù)據(jù)流量的減少被轉(zhuǎn)化為執(zhí)行SNN時(shí)減少的NN引擎功率消耗。也可以增加NN引擎的性能,例如,使運(yùn)行或執(zhí)行速度更快。無(wú)論是功率消耗還是執(zhí)行時(shí)間的性能改進(jìn),允許功率和/或熱預(yù)算受限的系統(tǒng)實(shí)現(xiàn)如本文所述的SNN。在較大的基于服務(wù)器的計(jì)算環(huán)境中,功率消耗仍然是可能阻止利用神經(jīng)網(wǎng)絡(luò)的應(yīng)用規(guī)模增加的主要成本和限制。本公開(kāi)描述的本發(fā)明的布置促進(jìn)在基于服務(wù)器的計(jì)算環(huán)境中(包括但不限于,云計(jì)算環(huán)境)實(shí)現(xiàn)SNN的使用和按比例調(diào)整。
圖1是示出SNN 100的多個(gè)層的示例性處理的框圖。在圖1的示例中,SNN 100包括層102、106和106。層102是第一層。層104是第二層。層106是第三層。在圖1的示例中,數(shù)據(jù)從層102流向到層104,再到層106。作為示例,層102、106和106都可以被實(shí)現(xiàn)為特征提取神經(jīng)網(wǎng)絡(luò)的卷積層。
如本文所定義,神經(jīng)網(wǎng)絡(luò)的“層”包括一個(gè)或多個(gè)特征映射。如圖示,層102、106和106的每一個(gè)可以包括一個(gè)或多個(gè)特征映射。在圖1的示例中,層102包括一個(gè)特征映射102-1。層104包括4個(gè)特征映射104-1、104-2、104-3和104-4。層106包括6個(gè)特征映射106-1、106-2、106-3、106-4、106-5和106-6。應(yīng)當(dāng)理解,層102、106和106的每一個(gè)所示的特征映射的數(shù)量?jī)H是為了說(shuō)明目的。本公開(kāi)描述的本發(fā)明的布置不意在由SNN 100的任何層中的特定數(shù)量的特征映射和/或SNN 100中的特定數(shù)量的層限制。
在一個(gè)布置中,NN引擎可以執(zhí)行圖1所示的SNN 100。在操作期間,NN引擎通過(guò)讀取和寫入層102、106和106的特征映射產(chǎn)生中間數(shù)據(jù)流量。NN引擎可以在執(zhí)行SNN 100中執(zhí)行特征映射的多個(gè)讀取操作。為了說(shuō)明目的,由于層102、106和106的每一個(gè)可以包括10個(gè)、100個(gè)或更多特征映射,因此,在SNN 100的執(zhí)行期間可以在層中和/或?qū)娱g產(chǎn)生大量中間數(shù)據(jù)流量。
在一方面,特征映射的每一個(gè)可以被實(shí)現(xiàn)為表示不同(x,y)位置的學(xué)習(xí)特征的強(qiáng)度的PSP值的2D圖像映射。為了產(chǎn)生SNN 100的層N+1的特征映射,NN引擎讀取層N的多個(gè)特征映射。如所示示例,如果層N具有10個(gè)特征映射,層N+1具有20個(gè)特征映射,則NN引擎可以讀取層N的每個(gè)特征映射20次。這樣,NN引擎單從層N就可能執(zhí)行總共200次特征映射讀取(10x20)。
根據(jù)本文描述的本發(fā)明布置的一方面,NN引擎可以在實(shí)現(xiàn)SNN 100中重新排列計(jì)算。重新排列計(jì)算允許NN引擎在產(chǎn)生中間值之后立即消耗在SNN 100的執(zhí)行期間生成的中間值。通過(guò)在產(chǎn)生之后不久使用中間值,可以限制在NN引擎內(nèi)在任意一次必須被存儲(chǔ)在外部存儲(chǔ)器(諸如隨機(jī)存取存儲(chǔ)器(RAM))內(nèi)的中間數(shù)據(jù)量。例如,SNN 100的執(zhí)行期間需要存儲(chǔ)的中間數(shù)據(jù)量可以足夠小以適合NN引擎的處理器的內(nèi)部存儲(chǔ)器。內(nèi)部存儲(chǔ)器可以是NN引擎的處理器的片上存儲(chǔ)器或高速緩存。這樣,中間數(shù)據(jù)不需要被存儲(chǔ)在需要更多的時(shí)間和/或能量進(jìn)行讀寫的外部RAM或其它存儲(chǔ)器。
在一個(gè)示例性實(shí)施例中,NN引擎可以使用相同的條件累加單元組來(lái)產(chǎn)生層的中間數(shù)據(jù)和消耗中間數(shù)據(jù),作為神經(jīng)網(wǎng)絡(luò)的下一層的輸入。如上所述,中間數(shù)據(jù)在累加單元產(chǎn)生之后很快由相同累加單元消耗。因此,如果有的話,則很少的中間數(shù)據(jù)可能需要在NN引擎內(nèi)被任意遠(yuǎn)距離地發(fā)送到例如外部RAM。這種配置可以有助于通過(guò)減少NN引擎內(nèi)長(zhǎng)互連的數(shù)據(jù)流量,以進(jìn)一步減少NN引擎的功耗。
在另一示例性實(shí)施例中,NN引擎可以被配置為重新排列計(jì)算量,以通過(guò)交織神經(jīng)網(wǎng)絡(luò)的一個(gè)或多個(gè)或可能所有卷積層的產(chǎn)生來(lái)減少和/或消除中間結(jié)果,并本地化中間結(jié)果。在傳統(tǒng)的實(shí)施方式中,NN引擎可以執(zhí)行層102的所有,然后執(zhí)行層104的所有,然后執(zhí)行層106的所有等。根據(jù)本文所述的本發(fā)明的布置,NN引擎可以執(zhí)行層102的一部分,然后執(zhí)行層104的一部分,然后執(zhí)行層106的一部分等。例如,NN引擎可以執(zhí)行層102的片108-1,然后執(zhí)行層104的片110-1,然后執(zhí)行層106的片112-1等。然后,NN引擎可以執(zhí)行片108-2,接著執(zhí)行片110-2,接著執(zhí)行片112-2,依此類推。在另一布置中,輸入數(shù)據(jù)可以在兩個(gè)或兩個(gè)以上的時(shí)間間隔內(nèi)進(jìn)行批處理。
為了說(shuō)明目的,圖1的SNN 100可以被可視化為金字塔層。如上所述,執(zhí)行可以在具有片108的層102的金字塔底部開(kāi)始,并且向上繼續(xù)到具有片110的層104,并繼續(xù)到具有片112的層106。由于SNN 100向上穿過(guò),因此盡管每個(gè)下一更高層的特征映射的數(shù)量增加,但是每個(gè)下一更高層在x-y尺寸方面可能會(huì)收縮。例如,層104的x-y尺寸可以小于層102的x-y尺寸。層104比層102具有更多特征映射。在其它情況下,SNN的下一更高層的特征映射的數(shù)量可以保持相同。
根據(jù)另一實(shí)施例,SNN 100的3D體積可以從概念上切割或者分割成多個(gè)矩形的平截頭體。每個(gè)矩形平截頭體與SNN 100的每一層可具有矩形相交,這限定了片。在圖1的示例中,SNN 100被分成4個(gè)平截頭體,被稱為平截頭體1,2,3和4。通過(guò)平截頭體與SNN 100的層102、104和106的每一個(gè)的相交限定矩形片。因此,給定層的每片包括該層的每個(gè)特征映射的一部分。例如,片110-1包括特征映射104-1、104-2、104-3和104-4的每一個(gè)的左上部分。為了討論的目的,每一層的參考編號(hào)的延伸部分指示該片所屬的特定平截頭體。例如,平截頭體1可以包括層102的片108-1,層104的片110-1和層106的片112-1。平截頭體2可以包括層102的片108-2、層104的片110-2和層106的片112-2等。
通常,可以獨(dú)立于每個(gè)其它平截頭體執(zhí)行每個(gè)平截頭體內(nèi)的處理。在一個(gè)實(shí)施例中,可以在相鄰平截頭體之間共享少量數(shù)據(jù)。對(duì)于SNN 100的給定層的片,NN引擎的處理器消耗和產(chǎn)生的特征映射的一部分可以被存儲(chǔ)在內(nèi)部存儲(chǔ)器中,該內(nèi)部存儲(chǔ)器與處理器在片上。處理器針對(duì)片產(chǎn)生的特征映射的一部分可以用于產(chǎn)生下一層的相應(yīng)片的輸出。例如,處理器可以消耗內(nèi)部存儲(chǔ)器中存儲(chǔ)的特征映射的一部分(例如,層102的片108-1),以產(chǎn)生層104的相應(yīng)片110-1。層104的片110-1也可以被存儲(chǔ)在內(nèi)部存儲(chǔ)器中。如本公開(kāi)內(nèi)所限定,術(shù)語(yǔ)“相應(yīng)片”是指神經(jīng)網(wǎng)絡(luò)的相鄰層相同平截頭體中的片,作為參考片或主體片。然后,處理器可以利用內(nèi)部存儲(chǔ)器中的層104的片110-1來(lái)產(chǎn)生層106的片112-1。片112-1也可以存儲(chǔ)在內(nèi)部存儲(chǔ)器中。在一個(gè)方面,內(nèi)部存儲(chǔ)器處理平截頭體所需的總存儲(chǔ)是SNN 100的兩個(gè)相鄰層的平截頭體的相應(yīng)片的最大足跡(例如,存儲(chǔ)器使用)。例如,與片112-1相應(yīng)的數(shù)據(jù)可以覆蓋片108-1的數(shù)據(jù)。應(yīng)該理解,片的x和y尺寸(例如,平截頭體尺寸)可以按照需要減小,以保證中間結(jié)果適合可用內(nèi)部存儲(chǔ)器。
對(duì)于神經(jīng)網(wǎng)絡(luò)的每個(gè)平截頭體,NN引擎可以從層N的相應(yīng)片限定的特征映射的一部分產(chǎn)生由層N+1的片限定的特征映射的部分。在一個(gè)實(shí)施例中,NN引擎可以在內(nèi)部存儲(chǔ)器中保持所有需要的數(shù)據(jù)的同時(shí)按照各種不同順序中的任意順序來(lái)執(zhí)行必要的處理。例如,NN引擎可通過(guò)讀取由層N的相應(yīng)片限定的特征映射的部分的輸入脈沖中的每一個(gè)輸入脈沖并對(duì)其進(jìn)行權(quán)重來(lái)產(chǎn)生片的每個(gè)輸出特征映射的部分。NN引擎可以將權(quán)重的脈沖加在一起,以針對(duì)(或不針對(duì))由層N+1的片限定的特征映射的部分來(lái)產(chǎn)生脈沖。在NN引擎產(chǎn)生層N+1的特征映射的部分之后,分配給層N的特征映射的內(nèi)部存儲(chǔ)器的存儲(chǔ)區(qū)域可以被釋放,并且用于存儲(chǔ)層N+2的特征映射。NN引擎可以隨著后續(xù)層的新產(chǎn)生的中間數(shù)據(jù)如所述地產(chǎn)生而繼續(xù)覆蓋中間數(shù)據(jù)。
盡管可以獨(dú)立處理平截頭體,但是中間數(shù)據(jù)的一小部分可以在神經(jīng)網(wǎng)絡(luò)的相同層內(nèi)沿相鄰片邊界共享。如所示,層102的片108-1產(chǎn)生的脈沖傳播到層104的片110-1。在此示例中,層102的片108-1產(chǎn)生的脈沖的一小部分可能需要與層102的片108共享。在每個(gè)平截頭體與一個(gè)事件隊(duì)列相關(guān)聯(lián)的實(shí)施例中,相鄰片的脈沖事件可以被張貼在目標(biāo)為受影響的片的兩個(gè)或更多個(gè)事件隊(duì)列中。在另一實(shí)施例中,相鄰片的脈沖事件可以被張貼在一個(gè)事件隊(duì)列并被多次讀取。將相鄰片的脈沖事件張貼到多于一個(gè)事件隊(duì)列或者多次讀取相鄰片的脈沖事件在片之間有效地共享數(shù)據(jù)。在另一實(shí)施例中,可以通過(guò)將片定義為在片邊界彼此重疊來(lái)消除相鄰片之間的數(shù)據(jù)共享。在這種情況下,NN引擎可以確定片的脈沖事件,包括片的邊界區(qū),每片一次。因此,在重疊片的情況下,兩個(gè)相鄰片的數(shù)據(jù)不需要被共享。
通過(guò)將神經(jīng)網(wǎng)絡(luò)劃分成可以彼此獨(dú)立處理的平截頭體,NN引擎可以使用多個(gè)計(jì)算單元并行處理平截頭體。例如,NN引擎的一個(gè)計(jì)算單元可以執(zhí)行片108-1、110-1和112-1;NN引擎的另一計(jì)算單元可以執(zhí)行片108-2、110-2和112-2;NN引擎的另一計(jì)算單元可以執(zhí)行片108-3、110-3和112-3;而NN引擎的另一計(jì)算單元可以執(zhí)行片108-4、110-4和112-4。如所示,處于相同層的緊鄰平截頭體的片之間可以使用或共享一些數(shù)據(jù)。
圖2是示出具有重疊片的神經(jīng)網(wǎng)絡(luò)層的示例性分割的框圖。更具體地,圖2示出SNN 100的層102。如圖示,片108-1、108-2、108-3和108-4被定義為彼此重疊。重疊區(qū)域205是陰影。還在沒(méi)有片108-1、108-2、108-3和108-4的情況下,孤立地示出重疊區(qū)域205。
圖3是示出由示例性NN引擎300執(zhí)行的處理的框圖。如圖示,NN引擎300可以包括處理器305和外部存儲(chǔ)器315。處理器305可以包括一個(gè)或多個(gè)計(jì)算單元308。在處理器305包括多個(gè)計(jì)算單元308的情況下,計(jì)算單元308可以被配置為并行操作或彼此同時(shí)操作。此外,計(jì)算單元308可以彼此獨(dú)立地進(jìn)行操作。在一個(gè)示例中,每個(gè)計(jì)算單元308可以被實(shí)現(xiàn)為可以執(zhí)行指令的內(nèi)核。
處理器305可以包括內(nèi)部存儲(chǔ)器310。內(nèi)部存儲(chǔ)器310可以是片上存儲(chǔ)器。例如,內(nèi)部存儲(chǔ)器310可以是處理器305的高速緩存存儲(chǔ)器。內(nèi)部存儲(chǔ)器310可以被實(shí)現(xiàn)為處理器305的簡(jiǎn)單緩沖器、1級(jí)高速緩沖存儲(chǔ)器、2級(jí)高速緩沖存儲(chǔ)器等。如圖示,計(jì)算單元308可以耦合到內(nèi)部存儲(chǔ)器310。在處理器305包括多個(gè)計(jì)算單元308的布置中,每個(gè)計(jì)算單元308可以具有專用內(nèi)部存儲(chǔ)器310。內(nèi)部存儲(chǔ)器310,或視情況每個(gè)內(nèi)部存儲(chǔ)器,可以存儲(chǔ)PSP值322-1(例如,特征映射和/或其部分),可選地存儲(chǔ)權(quán)重320-1、指令325,并且包括一個(gè)或多個(gè)事件隊(duì)列330。
如圖示,處理器305可以耦合到外部存儲(chǔ)器315。在一個(gè)示例中,外部存儲(chǔ)器315可以被實(shí)現(xiàn)為一個(gè)或多個(gè)其它級(jí)別的處理器305的高速緩沖存儲(chǔ)器。然而,外部存儲(chǔ)器315可以不與處理器305位于同一片上。在另一示例中,外部存儲(chǔ)器315可以被實(shí)現(xiàn)為RAM,例如DRAM、SRAM等。在另一方面,處理器305可以通過(guò)存儲(chǔ)器控制器(未示出)耦合到外部存儲(chǔ)器315。通常,中間數(shù)據(jù),例如,PSP值322-1、權(quán)重320-1和脈沖事件可以存儲(chǔ)在內(nèi)部存儲(chǔ)器310內(nèi)。脈沖事件可以存儲(chǔ)在事件隊(duì)列330中。如本文所定義的,術(shù)語(yǔ)“脈沖事件”是指神經(jīng)元的輸出為是1(指示尖峰)或0(指示沒(méi)有尖峰)。
在圖3的示例中,神經(jīng)網(wǎng)絡(luò)的神經(jīng)元的權(quán)重320-2可以存儲(chǔ)在外部存儲(chǔ)器315中,而權(quán)重320-1可以存儲(chǔ)在內(nèi)部存儲(chǔ)器310中。在一個(gè)示例性實(shí)現(xiàn)方式中,權(quán)重320-1是處理SNN 100的層的片產(chǎn)生SNN 100的下一層的相應(yīng)片所需的那些權(quán)重。在圖2的示例中,例如,權(quán)重320-1是處理層102的片108-1產(chǎn)生層104的片110-1所需的權(quán)重。權(quán)重320-2是當(dāng)前沒(méi)有使用的SNN100的其它權(quán)重。在另一個(gè)示例性實(shí)施例中,處理器305可以壓縮權(quán)重320-1在內(nèi)部存儲(chǔ)器310中的存儲(chǔ)。
處理器305可以被實(shí)現(xiàn)為一個(gè)或多個(gè)硬件電路。在一方面,處理器305可以被配置為執(zhí)行諸如指令325的指令。指令325可以被包含在程序代碼中。如所述,處理器305可以被實(shí)現(xiàn)為集成電路。處理器305的示例性實(shí)施例可以包括但不限于,中央處理單元(CPU)、多核CPU、陣列處理器、向量處理器、數(shù)字信號(hào)處理器(DSP)、現(xiàn)場(chǎng)可編程門陣列(FPGA)、可編程邏輯陣列(PLA)、專用集成電路(ASIC)、可編程邏輯電路、控制器等??梢允褂盟龈鞣N不同的處理器的任何一個(gè)與外部存儲(chǔ)器315組合實(shí)現(xiàn)NN引擎300。
NN引擎300可以在SNN 100的各個(gè)片上操作,而不是各個(gè)神經(jīng)元上操作。由于卷積濾波器的接收區(qū)域重疊,單輸入脈沖可以作用于多個(gè)相鄰目標(biāo)神經(jīng)元。作為說(shuō)明性實(shí)例,考慮5×5目標(biāo)神經(jīng)元的接收區(qū)域。在這種情況下,輸入脈沖作用于25個(gè)目標(biāo)神經(jīng)元。神經(jīng)網(wǎng)絡(luò)的各層之間傳送的脈沖的結(jié)果是,SCNN的卷積從N×M矩陣乘法退化到N×M條件加法。在N×M條件加法中,添加權(quán)重320-1中與具有脈沖的輸入相應(yīng)的一個(gè)特定權(quán)重。
在一個(gè)示例性實(shí)施例中,NN引擎300可以從累加步驟減少和/或消除不必要的加零(添加-0)運(yùn)算。例如,處理器305可以在輸入脈沖而不是輸出神經(jīng)元上迭代。處理器305可以更新每個(gè)受影響的目標(biāo)神經(jīng)元。處理器305可以并行執(zhí)行更新。結(jié)果,處理器305可以“分散”輸入而不是“聚集”輸入。
如圖示,NN引擎300可以在事件隊(duì)列330的多個(gè)(例如,陣列)中存儲(chǔ)輸入脈沖。在一個(gè)布置中,每個(gè)事件隊(duì)列330可以被保留以由神經(jīng)網(wǎng)絡(luò)的特定平截頭體使用。例如,對(duì)于神經(jīng)網(wǎng)絡(luò)的每個(gè)平截頭體,NN引擎300可以包括一個(gè)事件隊(duì)列。這樣,對(duì)于“T”時(shí)間間隔的給定集合,每個(gè)事件隊(duì)列可以存儲(chǔ)目標(biāo)為神經(jīng)網(wǎng)絡(luò)的給定寬度(W)高度(H)深度(D)的脈沖事件,其中,T是一或更大的整數(shù)值。
在圖3的示例中,內(nèi)部存儲(chǔ)器310可以用于實(shí)現(xiàn)事件隊(duì)列330,其被標(biāo)記為事件隊(duì)列330-1、330-2、330-3和330-4。通過(guò)事件隊(duì)列300的標(biāo)號(hào)的延伸部分至少每個(gè)事件隊(duì)列可以使用的特定平截頭體。這樣,事件隊(duì)列330-1可以用于平截頭體1。事件隊(duì)列330-2可以用于平截頭體2等。在一個(gè)示例性實(shí)施例中,NN引擎300可以維護(hù)平截頭體和事件隊(duì)列之間的一對(duì)一關(guān)系。維護(hù)這種關(guān)系導(dǎo)致不同層的相同平截頭體中的片的脈沖事件被存儲(chǔ)在相同的事件隊(duì)列。
為了說(shuō)明的目的,事件隊(duì)列330-1、330-2、330-3和330-4被示出為在內(nèi)部存儲(chǔ)器310內(nèi)同時(shí)實(shí)現(xiàn)。應(yīng)當(dāng)理解,在任何給定時(shí)間僅被處理的特定平截頭體的事件隊(duì)列需要在內(nèi)部存儲(chǔ)器310內(nèi)實(shí)現(xiàn)。例如,如果NN引擎300正在處理平截頭體1的片,則NN引擎300僅需要在內(nèi)部存儲(chǔ)器310內(nèi)實(shí)現(xiàn)事件隊(duì)列330-1。隨著NN引擎300處理其它平截頭體,可以實(shí)現(xiàn)其它事件隊(duì)列用于存儲(chǔ)脈沖事件。
作為說(shuō)明性示例,事件隊(duì)列330-1可以存儲(chǔ)從處理片108-1產(chǎn)生的脈沖事件。脈沖事件是臨時(shí)的,并因此,一旦使用權(quán)重320-1的神經(jīng)元消耗或使用脈沖事件來(lái)更新神經(jīng)元的PSP值322-1,在事件隊(duì)列330-1內(nèi)脈沖事件可以被覆蓋。形成特征映射的PSP值322-1和322-2表示SNN 100的持久狀態(tài)。處理器305在每個(gè)時(shí)間間隔更新PSP值322-1。因此,代表片的特征映射的部分的PSP值322-1不會(huì)從內(nèi)部存儲(chǔ)器310被刪除和/或移動(dòng),直到選定數(shù)量的時(shí)間間隔已被處理來(lái)產(chǎn)生下一層中的相應(yīng)片。例如,內(nèi)部存儲(chǔ)器310內(nèi)的PSP值322-1可以表示片108-1的T個(gè)時(shí)間間隔的PSP值以及從片108-1產(chǎn)生的片110-1的T個(gè)時(shí)間間隔的PSP值。響應(yīng)于產(chǎn)生片110-1的T個(gè)時(shí)間間隔,存儲(chǔ)內(nèi)部存儲(chǔ)器內(nèi)的片108-1的PSP值可以被存儲(chǔ)在或移動(dòng)到外部存儲(chǔ)器315,作為PSP值322-2。隨后可以從外部存儲(chǔ)器315調(diào)用PSP值,并且將PSP值存儲(chǔ)在內(nèi)部存儲(chǔ)器310來(lái)處理片108-1的進(jìn)一步的時(shí)間間隔,并產(chǎn)生片110-1的進(jìn)一步的時(shí)間間隔。
在一個(gè)實(shí)施例中,可以通過(guò)事件隊(duì)列330中的條目表示層的給定片的脈沖事件。隊(duì)列條目可以包括片內(nèi)的(x,y)坐標(biāo),隨后是指定1和/或0的掩碼。例如,坐標(biāo)(x,y)表示片的第一部分的位置偏移。坐標(biāo)之后的掩碼可以包括指示片的特定節(jié)點(diǎn)具有脈沖還是不具有脈沖的多個(gè)比特。在一個(gè)示例中,掩碼中的一(1)值可以指示脈沖,而零(0)值可以指示沒(méi)有脈沖。在本實(shí)施例中,不必為每個(gè)神經(jīng)元保存(x,y)坐標(biāo),從而提供緊湊和/或壓縮的存儲(chǔ)。根據(jù)脈沖的稀疏性,其它事件隊(duì)列存儲(chǔ)格式可以用于高效地指定哪些神經(jīng)元具有脈沖以及脈沖的時(shí)間間隔。
如圖示,按照行,事件隊(duì)列330-1可以包括多個(gè)條目。每行可以表示給定片的區(qū)域的脈沖。例如,對(duì)(x1,y1)表示片的第一區(qū)域的位置從片的基準(zhǔn)點(diǎn)的偏移量。掩碼(例如,MASK 1)可以包括指示片的特定神經(jīng)元具有脈沖還是不具有尖峰的多個(gè)比特。例如,如果區(qū)域是5×5的塊,則如果狀態(tài)是“脈沖”和“無(wú)脈沖”,MASK 1可以具有25位。使用片108-1產(chǎn)生的特征映射的區(qū)域可以存儲(chǔ)在事件隊(duì)列330-1,作為(x1,y1),隨后是Mask 1,作為(x2,y2),隨后Mask 2等。
在另一實(shí)施例中,處理器305可以被配置以進(jìn)一步壓縮脈沖事件數(shù)據(jù)以減少存儲(chǔ)和/或簡(jiǎn)化壓縮條目的處理。在一個(gè)示例中,處理器305可以跳過(guò)沒(méi)有脈沖的區(qū)域和/或子區(qū)域的處理。在另一示例中,與如隊(duì)列條目中指定的所有零(例如,沒(méi)有尖峰)相應(yīng)的區(qū)域或子區(qū)域可以被過(guò)濾,以減少不必要的計(jì)算成本。例如,NN引擎300可以包括防止全零的區(qū)域被存儲(chǔ)在內(nèi)部存儲(chǔ)器310內(nèi)的事件隊(duì)列330的邏輯。
應(yīng)當(dāng)理解,在區(qū)域或子區(qū)域具有全零(例如,沒(méi)有脈沖)的情況下,NN引擎300可以跟蹤給定區(qū)域不具有尖峰的時(shí)間間隔的數(shù)量,并且更新PSP值322-1,以指示在區(qū)域沒(méi)有脈沖的情況下基于逝去的時(shí)間間隔數(shù)量發(fā)生的衰變。這樣,對(duì)于在一個(gè)或多個(gè)時(shí)間間隔內(nèi)不具有脈沖的那些區(qū)域,不需要在每個(gè)時(shí)間間隔更PSP值322-1。
圖4是示出執(zhí)行SNN的示例性方法400的流程圖。方法400可以由如參照?qǐng)D3所描述的NN引擎來(lái)執(zhí)行。在塊405,NN引擎可以將神經(jīng)網(wǎng)絡(luò)劃分成多個(gè)平截頭體。平截頭體可以是矩形。NN引擎可以將神經(jīng)網(wǎng)絡(luò)劃分成從神經(jīng)網(wǎng)絡(luò)的較高層向較低層投影的矩形平截頭體。
在一個(gè)實(shí)施例中,NN引擎可以使用SNN的預(yù)定分割。例如,可以用NN引擎在執(zhí)行SNN時(shí)可以讀取和/或確定的預(yù)定分割來(lái)存儲(chǔ)SNN。
在另一實(shí)施例中,NN引擎可以響應(yīng)于神經(jīng)網(wǎng)絡(luò)的執(zhí)行來(lái)分割神經(jīng)網(wǎng)絡(luò)。例如,NN引擎可以根據(jù)神經(jīng)網(wǎng)絡(luò)的處理器的內(nèi)部存儲(chǔ)器的尺寸分割SNN。NN引擎可以根據(jù)內(nèi)部提供給用于實(shí)現(xiàn)事件隊(duì)列的處理器的存儲(chǔ)器量、存儲(chǔ)權(quán)重、存儲(chǔ)指令和用于處理SNN的兩個(gè)相鄰層的相應(yīng)片的存儲(chǔ)PSP值來(lái)調(diào)整平截頭體的尺寸,如上所述。
在塊410,NN引擎可以創(chuàng)建和/或維護(hù)神經(jīng)網(wǎng)絡(luò)的每個(gè)平截頭體的事件隊(duì)列。隨著對(duì)層的片產(chǎn)生脈沖,脈沖事件張貼到事件隊(duì)列以用于下一層的相應(yīng)片。這些是在下一時(shí)間間隔內(nèi)到該層的輸入脈沖。應(yīng)當(dāng)理解,兩個(gè)不同的層和/或時(shí)間間隔的脈沖事件可以在邏輯上區(qū)分和/或在相同事件隊(duì)列中分離。NN引擎可以根據(jù)神經(jīng)網(wǎng)絡(luò)的層的片在時(shí)間間隔中使脈沖聚集。如使用事件隊(duì)列實(shí)現(xiàn)的聚集允許NN引擎更緊湊地表示脈沖事件的集合,原因是多個(gè)脈沖/無(wú)脈沖值可以存儲(chǔ)在具有單個(gè)(x,y)偏移的掩碼中,而不是存儲(chǔ)掩碼的每個(gè)比特(脈沖/無(wú)脈沖值)的(x,y)偏移。
在塊415,對(duì)于時(shí)間間隔T集合中的每個(gè)時(shí)間間隔,NN引擎可以將用于產(chǎn)生所有脈沖事件的每個(gè)輸入隊(duì)列條目處理為神經(jīng)網(wǎng)絡(luò)中的下一層的相應(yīng)片的適當(dāng)?shù)哪繕?biāo)事件隊(duì)列。例如,NN引擎可以讀取被處理的平截頭體的下一隊(duì)列條目。NN引擎可以根據(jù)接收域的寬度和高度以及隊(duì)列條目的掩碼中設(shè)置的比特來(lái)計(jì)算哪些目標(biāo)神經(jīng)元受影響。如所述,在隊(duì)列條目中的掩碼的比特說(shuō)明先前層中哪些神經(jīng)元已經(jīng)產(chǎn)生脈沖。
在說(shuō)明性示例中,NN引擎可以處理4個(gè)脈沖的組。應(yīng)當(dāng)理解,選擇4僅為說(shuō)明性目的,并不意在作為本文描述的本發(fā)明的布置的限制。例如,NN引擎可以處理具有比4個(gè)脈沖更少或更多的組。在一個(gè)示例中,NN引擎可以處理脈沖的數(shù)量不是4的整數(shù)倍的部分組。繼續(xù)該示例,對(duì)于每個(gè)4輸入累加器,NN引擎可以為作用于相應(yīng)輸出神經(jīng)元的4個(gè)輸入脈沖路由來(lái)自內(nèi)部存儲(chǔ)器的相應(yīng)權(quán)重。在一種布置中,NN引擎可以根據(jù)提供給每個(gè)累加器作為輸入的脈沖的相對(duì)(x,y)偏移利用查找表來(lái)產(chǎn)生正確權(quán)重。
當(dāng)在與給定目標(biāo)神經(jīng)元相應(yīng)的給定累加器已經(jīng)累加所有輸入特征映射的脈沖的貢獻(xiàn)時(shí),NN引擎可以計(jì)算神經(jīng)元的PSP值。如果新的PSP值超過(guò)閾值,則NN引擎產(chǎn)生新的脈沖。因此,NN引擎可以將相應(yīng)隊(duì)列條目添加到輸出事件隊(duì)列。更新PSP值用于隨后時(shí)間間隔中的計(jì)算。這樣,必須在每個(gè)神經(jīng)元存儲(chǔ)PSP值。所有神經(jīng)元的PSP值表示神經(jīng)網(wǎng)絡(luò)在任何給定時(shí)間間隔的狀態(tài)。PSP值可以構(gòu)成需要存儲(chǔ)器存儲(chǔ)以及讀取和寫入數(shù)據(jù)流量的大量數(shù)據(jù),以保存神經(jīng)網(wǎng)絡(luò)狀態(tài)和在每個(gè)時(shí)間間隔之后恢復(fù)神經(jīng)網(wǎng)絡(luò)狀態(tài)。
由于SCNN是前饋型神經(jīng)網(wǎng)絡(luò)的,因此NN引擎可以在一些數(shù)量T的時(shí)間間隔(其中T是1或更大的整數(shù)值)內(nèi)處理第一層的片,并且為神經(jīng)網(wǎng)絡(luò)的下一層的相應(yīng)片建立多個(gè)時(shí)間間隔。在一種布置中,多個(gè)時(shí)間間隔的脈沖可以通過(guò)神經(jīng)網(wǎng)絡(luò)的一層一起批處理,以在多個(gè)時(shí)間間隔從該層產(chǎn)生事件。神經(jīng)元的狀態(tài)(例如,PSP值)可以被保存到外部存儲(chǔ)器,并且可以在時(shí)間間隔的批處理之間從外部存儲(chǔ)器調(diào)用。保存和調(diào)用神經(jīng)元狀態(tài)可以是數(shù)據(jù)流量的來(lái)源,特別是在較大的神經(jīng)網(wǎng)絡(luò)中。此外,通過(guò)將時(shí)間間隔批處理成T個(gè)時(shí)間間隔的組,減少了權(quán)重產(chǎn)生的數(shù)據(jù)流量和權(quán)重解壓縮處理時(shí)間。由于對(duì)于T個(gè)時(shí)間間隔的整個(gè)批處理重復(fù)使用相同權(quán)重,并且在從外部存儲(chǔ)器讀取新權(quán)重來(lái)處理下一層的片之前的時(shí)間期間,相同權(quán)重保持在內(nèi)部存儲(chǔ)器中,因此出現(xiàn)這種減少。
由于NN引擎通過(guò)每一層將T個(gè)時(shí)間間隔一起批處理,可以按照因子1/T減少保存和調(diào)用神經(jīng)元狀態(tài)的數(shù)據(jù)流量。通過(guò)批處理,NN引擎可以在內(nèi)部存儲(chǔ)器保持PSP值,并且抑制數(shù)據(jù)流量的一部分,例如,與存儲(chǔ)和調(diào)用神經(jīng)元狀態(tài)相關(guān)聯(lián)的一些或全部數(shù)據(jù)流量。在一個(gè)實(shí)施例中,可以在進(jìn)行隨后或更高層的任何事情之前對(duì)每層一起批處理生成神經(jīng)網(wǎng)絡(luò)的結(jié)果所需要的所有間隔。在這種情況下,可以消除與存儲(chǔ)神經(jīng)元狀態(tài)相關(guān)的數(shù)據(jù)流量。此外,可以從NN引擎排除外部存儲(chǔ)器。
NN引擎也可以在多個(gè)處理內(nèi)核之間分布工作,以針對(duì)相鄰片之間脈沖的交換實(shí)現(xiàn)最少或更少交叉流量的良好縮放。如所討論的,NN引擎可以維護(hù)用于將脈沖從神經(jīng)網(wǎng)絡(luò)的一層傳播到下一層的事件隊(duì)列。脈沖需要存儲(chǔ)??梢怨芾懋a(chǎn)生脈沖的處理,使得每個(gè)隊(duì)列條目可以存儲(chǔ)在NN引擎的計(jì)算單元和/或處理器的內(nèi)部存儲(chǔ)器內(nèi),例如,片上存儲(chǔ)器內(nèi)??梢酝ㄟ^(guò)在事件數(shù)量具有已知最大存儲(chǔ)要求的片中處理每層來(lái)實(shí)現(xiàn)維護(hù)內(nèi)部存儲(chǔ)器內(nèi)的隊(duì)列條目。因此,NN引擎不需要在下一層處理完成之前立即生成整個(gè)層的所有脈沖事件。
在塊420,NN引擎可以針對(duì)下一層的相應(yīng)片在T個(gè)時(shí)間間隔集合批處理得到的脈沖事件數(shù)據(jù)。
雖然在圖4中未示出,但是應(yīng)當(dāng)理解,從神經(jīng)網(wǎng)絡(luò)的平截頭體內(nèi)的層的堆棧向上,NN引擎可以重復(fù)參照塊415和420描述的操作。此外,對(duì)于給定的一批時(shí)間間隔,NN引擎可以掃描層的一個(gè)或多個(gè)連續(xù)片,以產(chǎn)生復(fù)數(shù)“N”個(gè)脈沖事件,其中,“N”是NN引擎中內(nèi)核的數(shù)量。例如,如果NN引擎生成“S”數(shù)量的脈沖事件,并且包括“N”個(gè)內(nèi)核,則NN引擎可以在移動(dòng)到神經(jīng)網(wǎng)絡(luò)下一更高層之前針對(duì)給定層生成N×S個(gè)脈沖事件。
圖5是示出確定神經(jīng)網(wǎng)絡(luò)的平截頭體的示例性方法500的流程圖??梢詧?zhí)行方法500,將神經(jīng)網(wǎng)絡(luò)劃分成平截頭體,限定神經(jīng)網(wǎng)絡(luò)的每個(gè)相應(yīng)層中的片的尺寸。在一個(gè)示例中,方法500可以由諸如計(jì)算機(jī)的數(shù)據(jù)處理系統(tǒng)(系統(tǒng))來(lái)實(shí)現(xiàn)。系統(tǒng)可以被配置為根據(jù)對(duì)要被劃分成平截頭體的神經(jīng)網(wǎng)絡(luò)的描述進(jìn)行操作。例如,系統(tǒng)可以被配置為(例如,被編程為)執(zhí)行參照?qǐng)D5描述的操作。在一個(gè)實(shí)施例中,方法500可以作為離線處理被執(zhí)行,原因是,可以在神經(jīng)網(wǎng)絡(luò)的執(zhí)行之前執(zhí)行方法500。確定的分割可以作為稍后執(zhí)行的神經(jīng)網(wǎng)絡(luò)的一部分被存儲(chǔ)。
在塊505,系統(tǒng)可以選擇一組神經(jīng)網(wǎng)絡(luò)的連續(xù)層一起處理,在NN引擎的處理器的內(nèi)部存儲(chǔ)器中保持中間數(shù)據(jù)。如所討論的,在NN引擎的處理器的內(nèi)部存儲(chǔ)器中保持中間數(shù)據(jù)減少了在執(zhí)行神經(jīng)網(wǎng)絡(luò)產(chǎn)生的芯片外數(shù)據(jù)流量。
在塊510,系統(tǒng)可以從已知內(nèi)部存儲(chǔ)器大小減去存儲(chǔ)每層的壓縮權(quán)重和事件隊(duì)列所需的存儲(chǔ)。從分割之前執(zhí)行的訓(xùn)練處理已知針對(duì)神經(jīng)網(wǎng)絡(luò)的每層存儲(chǔ)壓縮權(quán)重所需的存儲(chǔ)器量。對(duì)于允許脈沖事件數(shù)據(jù)適合于隊(duì)列內(nèi)的神經(jīng)網(wǎng)絡(luò),可以使用啟發(fā)法設(shè)置或確定事件隊(duì)列的大小。剩余存儲(chǔ)空間可用于存儲(chǔ)每層的PSP值。
在塊515,系統(tǒng)可以基于組的層N中的特征映射的數(shù)量所需的存儲(chǔ)加上組的下一層(層N+1)的相應(yīng)存儲(chǔ)需求,確定片的寬度和高度。層N+1所需的存儲(chǔ)是縮放的寬度和高度與層N+1的特征映射的數(shù)量的乘積。從層N縮放所述寬度和高度。
對(duì)于在塊505選擇的層組,系統(tǒng)可以確定任何給定層的寬度和高度,以便在從內(nèi)部存儲(chǔ)器的總可用存儲(chǔ)減去壓縮權(quán)重和事件隊(duì)列存儲(chǔ)之后,兩個(gè)相鄰層的片(例如,相應(yīng)片)的PSP值適合剩余存儲(chǔ)。由于在每一層縮放片分辨率,因此一個(gè)尺寸將導(dǎo)致縮放不會(huì)超過(guò)可用存儲(chǔ)。
提出圖5僅用于說(shuō)明的目的,并且因此不意在作為本文公開(kāi)的本發(fā)明的布置的限制。圖5示出基于NN引擎的內(nèi)部存儲(chǔ)器的尺寸將神經(jīng)網(wǎng)絡(luò)分割為平截頭體的示例性處理。在一種布置中,可以對(duì)SNN中的不同連續(xù)層組執(zhí)行圖5以確定SNN的多于一個(gè)的分割。以這種方式,可以使用第一分割執(zhí)行具有多個(gè)連續(xù)層的SNN的一部分,并且使用第二分割和不同分割來(lái)執(zhí)行具有連續(xù)層的SNN的第二部分(或第三部分或更多部分)。
圖6是SNN的層602的示例性分割。在圖6的示例中,層602被分割為包括16片,如片604-634所示。在圖6所示的示例中,NN引擎可以包括多個(gè)不同計(jì)算單元或內(nèi)核。例如,NN引擎可以分布在計(jì)算單元A、B、C和D之間工作,以針對(duì)相鄰片之間脈沖的交換實(shí)現(xiàn)最少或至少更少交叉流量的良好縮放。
在一個(gè)示例中,首先,NN引擎可以執(zhí)行層602的分區(qū)640。分區(qū)640包括片604、606、608和610。NN引擎可以對(duì)一批T時(shí)間間隔產(chǎn)生分區(qū)640的片的所有脈沖事件作為到神經(jīng)網(wǎng)絡(luò)的下一層的輸入。計(jì)算單元A可以執(zhí)行片604。計(jì)算單元B可以執(zhí)行片606。計(jì)算單元C可以執(zhí)行片608。計(jì)算單元D可以執(zhí)行片610。
第二,NN引擎可以執(zhí)行層602的分區(qū)642。分區(qū)642包括片612、614、616和618。NN引擎可以對(duì)一批T時(shí)間間隔產(chǎn)生分區(qū)642的片的所有脈沖事件作為到神經(jīng)網(wǎng)絡(luò)的下一層的輸入。計(jì)算單元A可以執(zhí)行片612。計(jì)算單元B可以執(zhí)行片614。計(jì)算單元C可以執(zhí)行片616。計(jì)算單元D可以執(zhí)行片618。
然后,NN引擎進(jìn)行到神經(jīng)網(wǎng)絡(luò)的下一層,并且在下一層執(zhí)行相應(yīng)片。NN引擎可以通過(guò)神經(jīng)網(wǎng)絡(luò)的各層繼續(xù)往上,直到達(dá)到選擇的或指定的層。響應(yīng)于達(dá)到選擇的層,NN引擎可以返回到層602以繼續(xù)處理剩余片。
例如,在如上所述返回到層602之后,首先,NN引擎可以執(zhí)行層602的分區(qū)644。分區(qū)644包括片620、622、624和626。NN引擎可以對(duì)一批T時(shí)間間隔產(chǎn)生分區(qū)644的片的所有脈沖事件作為到神經(jīng)網(wǎng)絡(luò)的下一層的輸入。計(jì)算單元A可以執(zhí)行片620。計(jì)算單元B可以執(zhí)行片622。計(jì)算單元C可以執(zhí)行片624。計(jì)算單元D可以執(zhí)行片626。
第二,NN引擎可以執(zhí)行層602的分區(qū)646。分區(qū)646包括片628、630、632和634。NN引擎可以對(duì)一批T個(gè)時(shí)間間隔產(chǎn)生分區(qū)646的片的所有脈沖事件作為到神經(jīng)網(wǎng)絡(luò)的下一層的輸入。計(jì)算單元A可以執(zhí)行片628。計(jì)算單元B可以執(zhí)行片630。計(jì)算單元C可以執(zhí)行片632。計(jì)算單元D可以執(zhí)行片634。NN引擎可以通過(guò)神經(jīng)網(wǎng)絡(luò)的各層繼續(xù)往上,如所述,處理相應(yīng)片,直到達(dá)到選擇的層。
圖7是示出執(zhí)行SNN的另一示例性方法700的流程圖。方法700可以由參照?qǐng)D3描述的NN引擎來(lái)執(zhí)行。方法700可以在NN引擎已經(jīng)將神經(jīng)網(wǎng)絡(luò)分割成平截頭體并且已經(jīng)為平截頭體建立隊(duì)列的狀態(tài)下開(kāi)始,如本文所述。
在塊705,NN引擎可以選擇神經(jīng)網(wǎng)絡(luò)的層作為當(dāng)前層。例如,NN引擎可以選擇層N作為當(dāng)前層。在塊710,NN引擎可以確定當(dāng)前層是否是被指定為用于執(zhí)行圖7所示的執(zhí)行方法的停止點(diǎn)。如果是,則在一方面,方法700結(jié)束。在另一方面,如參照?qǐng)D6所述,方法可以在神經(jīng)網(wǎng)絡(luò)的第一層重新開(kāi)始。例如,在塊710,NN引擎可以確定已經(jīng)達(dá)到神經(jīng)網(wǎng)絡(luò)的特定層。作為響應(yīng),如果起始層中還剩余待處理的片(例如,神經(jīng)網(wǎng)絡(luò)的至少一個(gè))平截頭體需要處理),則NN引擎可以從起始層開(kāi)始處理,或者結(jié)束。如果沒(méi)有達(dá)到指定層,則方法700可以繼續(xù)到塊715。
在塊715,NN引擎可以選擇當(dāng)前層的片作為當(dāng)前片。在塊720,NN引擎可以從與當(dāng)前片相關(guān)聯(lián)的事件隊(duì)列讀取隊(duì)列條目。隊(duì)列條目也可以用于待處理的第一時(shí)間間隔。
在塊725,NN引擎可以使用權(quán)重和PSP值產(chǎn)生神經(jīng)網(wǎng)絡(luò)的下一層中的相應(yīng)片的隊(duì)列條目。例如,如果待處理的當(dāng)前片是圖1中的層102的片108-1,則下一層的相應(yīng)片是層104的片110-1。為神經(jīng)網(wǎng)絡(luò)的下一層產(chǎn)生的隊(duì)列條目可以存儲(chǔ)在相同事件隊(duì)列中。如所述,NN引擎可以將產(chǎn)生的隊(duì)列條目指定為屬于下一層,而不是屬于當(dāng)前層。NN引擎還可以根據(jù)時(shí)間間隔給隊(duì)列條目分組。
如所討論的,當(dāng)在以給定目標(biāo)神經(jīng)元相應(yīng)的給定累加器已經(jīng)累加所有輸入特征映射的脈沖的貢獻(xiàn)時(shí),NN引擎可以計(jì)算神經(jīng)元的PSP值。如果新的PSP值超過(guò)閾值,則NN引擎產(chǎn)生新的脈沖。因此,NN引擎可以將相應(yīng)隊(duì)列條目添加到輸出事件隊(duì)列。為隨后時(shí)間間隔的計(jì)算更新神經(jīng)元的PSP值。
在一些情況下,神經(jīng)網(wǎng)絡(luò)內(nèi)的脈沖可能是分散的和聚集的。對(duì)于給定區(qū)域(例如,隊(duì)列條目)和時(shí)間間隔,有可能僅存在針對(duì)不同的相鄰神經(jīng)元的幾個(gè)脈沖。對(duì)于每一目標(biāo)神經(jīng)元,盡管可以添加不同權(quán)重,但是到神經(jīng)元的許多輸入可以是零。根據(jù)一個(gè)示例性實(shí)施例,不是使用執(zhí)行循環(huán)來(lái)處理在設(shè)定數(shù)量的循環(huán)中到給定神經(jīng)元的所有輸入,其中,零需要與一相同的時(shí)間量來(lái)進(jìn)行處理,NN引擎可以通過(guò)僅處理非零神經(jīng)元輸入來(lái)收集輸入。通過(guò)有效地跳過(guò)到神經(jīng)元的零輸入,NN引擎的性能可以在運(yùn)行時(shí)間和功耗方面得到改進(jìn)。
在塊730,NN引擎可以確定當(dāng)前片的另一時(shí)間間隔是否待處理。如果是,則方法700可以循環(huán)回到塊720,以處理當(dāng)前片的下一時(shí)間間隔的條目。如果不是,則方法700可以繼續(xù)到塊735。
在塊735,NN引擎可以確定是否執(zhí)行神經(jīng)網(wǎng)絡(luò)的當(dāng)前層的另一片。例如,根據(jù)分割(例如,層中的片數(shù)、NN引擎的計(jì)算單元的數(shù)量和/或內(nèi)部存儲(chǔ)器的大小),NN引擎可以執(zhí)行當(dāng)前層的另一片。NN引擎可以被配置為處理一個(gè)或多個(gè)片的脈沖事件,并且在滑動(dòng)到當(dāng)前層的另一片之前產(chǎn)生到下一層的輸出脈沖事件的T個(gè)時(shí)間間隔。
在一個(gè)方面,NN引擎可以對(duì)一個(gè)或多個(gè)時(shí)間間隔執(zhí)行當(dāng)前層的每一片。在另一方面,NN引擎可以僅執(zhí)行當(dāng)前層的片的子集,例如,1個(gè)或更多,但少于全部片。盡管如此,應(yīng)當(dāng)理解,可以通過(guò)對(duì)NN引擎的第一計(jì)算單元執(zhí)行圖7的方法,而NN引擎的一個(gè)或多個(gè)其它計(jì)算單元同時(shí)執(zhí)行圖7的方法。計(jì)算單元還可以以同步的方式操作,使得同時(shí)操作的計(jì)算單元處理的片的相鄰邊緣可以被共享??蛇x地,片可以以重疊的方式來(lái)定義,以避免計(jì)算單元之間的數(shù)據(jù)共享。
在任何情況下,如果NN引擎確定當(dāng)前層的另一片將被執(zhí)行,則方法700可以循環(huán)回到塊715,以選擇用于執(zhí)行的下一片。如果NN引擎確定不處理當(dāng)前層的另一片,則方法700可以循環(huán)回到塊705以繼續(xù)處理。
在一個(gè)布置中,可以執(zhí)行方法700,以通過(guò)第一多個(gè)連續(xù)層處理神經(jīng)網(wǎng)絡(luò)的第一平截頭體。方法700可以迭代,以通過(guò)第一多個(gè)連續(xù)層處理每個(gè)其它平截頭體。然后,可以實(shí)現(xiàn)方法700,再次處理與第一多個(gè)連續(xù)層具有部分分割的第二多個(gè)連續(xù)層的第一平截頭體。可以重復(fù)方法700,通過(guò)具有不同分割的第二多個(gè)連續(xù)層處理剩余平截頭體。
圖8是示出用于實(shí)現(xiàn)本文參照?qǐng)D5描述的分割處理的數(shù)據(jù)處理系統(tǒng)(系統(tǒng))800的示例的框圖。如圖示,系統(tǒng)800包括至少一個(gè)處理器805(例如,中央處理單元(CPU))通過(guò)系統(tǒng)總線815或其它合適的電路耦合到存儲(chǔ)元件810。系統(tǒng)800在存儲(chǔ)元件810內(nèi)存儲(chǔ)計(jì)算機(jī)可讀指令(也稱為“程序代碼”)。存儲(chǔ)元件810可被視為計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的示例。處理器805經(jīng)由系統(tǒng)總線815執(zhí)行從存儲(chǔ)元件810訪問(wèn)的程序代碼。
存儲(chǔ)元件810可包括一個(gè)或多個(gè)物理存儲(chǔ)裝置,例如,本地存儲(chǔ)器820和一個(gè)或多個(gè)大容量存儲(chǔ)裝置825。本地存儲(chǔ)器820是指在程序代碼的實(shí)際執(zhí)行期間通常使用的隨機(jī)存取存儲(chǔ)器(RAM)或其它非持久存儲(chǔ)器裝置。大容量存儲(chǔ)裝置825可以被實(shí)現(xiàn)為硬盤驅(qū)動(dòng)器(HDD)、固態(tài)驅(qū)動(dòng)器(SSD)或其它持久性數(shù)據(jù)存儲(chǔ)裝置。系統(tǒng)800還可以包括提供至少某些程序代碼的臨時(shí)存儲(chǔ)的一個(gè)或多個(gè)高速緩沖存儲(chǔ)器(未示出),以減少在執(zhí)行期間必須從大容量存儲(chǔ)裝置825取得程序代碼的次數(shù)。
輸入/輸出(I/O)裝置(諸如鍵盤830、顯示裝置835、指向裝置840和一個(gè)或多個(gè)網(wǎng)絡(luò)適配器845)可以耦合到系統(tǒng)800。I/O裝置可以直接或通過(guò)中間I/O控制器耦合到系統(tǒng)800。在一些情況下,在觸摸屏用作顯示裝置835的情況下一個(gè)或多個(gè)I/O裝置可以被組合。在這種情況下,顯示裝置835也可以實(shí)現(xiàn)鍵盤830和指向設(shè)備840。網(wǎng)絡(luò)適配器845可以用于通過(guò)中間專用或公共網(wǎng)絡(luò)將系統(tǒng)800耦合到其它系統(tǒng)、計(jì)算機(jī)系統(tǒng)、遠(yuǎn)程打印機(jī)和/或遠(yuǎn)程存儲(chǔ)裝置。調(diào)制解調(diào)器、電纜調(diào)制解調(diào)器、以太網(wǎng)卡、無(wú)線收發(fā)器和/或無(wú)線電設(shè)備是系統(tǒng)800可以使用不同類型的網(wǎng)絡(luò)適配器845的示例。根據(jù)系統(tǒng)800的特定實(shí)現(xiàn)方式,特定類型的一個(gè)或多個(gè)網(wǎng)絡(luò)適配器視情況而變。
如圖8所示,存儲(chǔ)元件810可以存儲(chǔ)操作系統(tǒng)850和一個(gè)或多個(gè)應(yīng)用855。應(yīng)用855例如可以是當(dāng)被執(zhí)行時(shí)分割神經(jīng)網(wǎng)絡(luò)的神經(jīng)網(wǎng)絡(luò)實(shí)體,。在一個(gè)方面,由系統(tǒng)800(具體地,由處理器805)執(zhí)行以可執(zhí)行程序代碼的形式實(shí)現(xiàn)的操作系統(tǒng)850和應(yīng)用855。這樣,操作系統(tǒng)850和應(yīng)用855可以被認(rèn)為是系統(tǒng)800的集成部分。操作系統(tǒng)850、應(yīng)用855和系統(tǒng)800使用的、產(chǎn)生的和/或操作的任何數(shù)據(jù)項(xiàng)是當(dāng)由系統(tǒng)800利用時(shí)賦予功能的功能數(shù)據(jù)結(jié)構(gòu)。
在一個(gè)方面,系統(tǒng)800可以是適合于存儲(chǔ)和/或執(zhí)行程序代碼的計(jì)算機(jī)或其它裝置。系統(tǒng)800可以代表任何種類的計(jì)算機(jī)系統(tǒng)和/或裝置,包括處理器和存儲(chǔ)器,并能夠執(zhí)行本公開(kāi)中所描述的操作。在一些情況下,特定計(jì)算機(jī)系統(tǒng)和/或裝置可以包括比所述更少的組件或更多的組件。系統(tǒng)800可以被實(shí)現(xiàn)為如所示的單獨(dú)系統(tǒng)或者多個(gè)聯(lián)網(wǎng)或互聯(lián)系統(tǒng),其中,每個(gè)系統(tǒng)具有與系統(tǒng)的結(jié)構(gòu)相同或類似的結(jié)構(gòu)。
在一個(gè)示例中,系統(tǒng)800可以接收神經(jīng)網(wǎng)絡(luò)作為輸入。系統(tǒng)800在執(zhí)行操作系統(tǒng)150和應(yīng)用155時(shí)可以分割神經(jīng)網(wǎng)絡(luò)并在存儲(chǔ)器或其它計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中存儲(chǔ)分割的神經(jīng)網(wǎng)絡(luò)以用于稍后執(zhí)行。
本文所使用的術(shù)語(yǔ)僅用于描述具體實(shí)施例的目的,并不意在進(jìn)行限制。盡管如此,將提出在整個(gè)文檔現(xiàn)在應(yīng)用的幾個(gè)定義。
如本文所定義的,單數(shù)形式“一”、“一個(gè)”和“該”也意在包括復(fù)數(shù)形式,除非上下文清楚地另外指明。
如本文所定義的,術(shù)語(yǔ)“另一”是指至少第二個(gè)或更多。
如本文所定義的,術(shù)語(yǔ)“至少一個(gè)”,“一個(gè)或多個(gè)”和“和/或”是開(kāi)放式的表述,是操作中的合取和析取,除非明確另外說(shuō)明。例如,表述“A、B和C中的至少一個(gè)”,“A、B或C中的至少一個(gè)”,“A,B和C中的一個(gè)或多個(gè)”,“A,B或C中的一個(gè)或多個(gè)”和“A,B和/或C”是指A單獨(dú)、B單獨(dú)、C單獨(dú)、A和B一起、A和C一起、B和C一起或A、B和C一起。
如本文所定義的,“自動(dòng)”是指無(wú)需用戶干預(yù)。
如本文所用,術(shù)語(yǔ)“云計(jì)算”可以是指促進(jìn)對(duì)可配置計(jì)算資源(諸如網(wǎng)絡(luò)、服務(wù)器、存儲(chǔ)器、應(yīng)用和/或服務(wù))的共享池的方便按需網(wǎng)絡(luò)訪問(wèn)的計(jì)算模型??梢栽谧钌俟芾砉ぷ骰蚍?wù)提供者交互的情況下快速提供和釋放這些計(jì)算資源。云計(jì)算提高了可用性,并且其特征可以是按需自助服務(wù)、廣泛的網(wǎng)絡(luò)接入、資源池、快速?gòu)椥院蜏y(cè)量。云計(jì)算通常支持服務(wù)模式,諸如云計(jì)算軟件即服務(wù)(SaaS)、云平臺(tái)即服務(wù)(PaaS)和/或云基礎(chǔ)設(shè)施即服務(wù)(IaaS)。云計(jì)算還可以支持部署模式,諸如私有云、社區(qū)云、公有云和/或混合云??梢詮拿绹?guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院(NIST)(更具體地,NIST的信息技術(shù)實(shí)驗(yàn)室)獲得關(guān)于云計(jì)算的進(jìn)一步資料。
如本文所定義的,術(shù)語(yǔ)“計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)”是指包含或存儲(chǔ)由指令執(zhí)行系統(tǒng)、設(shè)備或裝置使用或結(jié)合使用的程序代碼的存儲(chǔ)介質(zhì)。如本文所定義的,“計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)”不是臨時(shí)的傳播信號(hào)本身。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是但不限于,電子存儲(chǔ)裝置、磁存儲(chǔ)裝置、光存儲(chǔ)裝置、電磁存儲(chǔ)裝置、半導(dǎo)體存儲(chǔ)裝置或上述的任何適當(dāng)組合。如本文所述,存儲(chǔ)元件是計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的示例。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的更具體的示例的非窮舉列表可以包括:便攜式計(jì)算機(jī)磁盤、硬盤、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、可擦除可編程只讀存儲(chǔ)器(EPROM或閃存)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)、便攜式光盤只讀存儲(chǔ)器(CD-ROM)、數(shù)字多功能盤(DVD)、存儲(chǔ)棒、軟盤等。
如本文所定義的,“耦合”是指連接,無(wú)論是直接而沒(méi)有任何中間元件或具有一個(gè)或多個(gè)中間元件間接地連接,除非另有說(shuō)明。兩個(gè)元件可以機(jī)械耦合、電耦合或通過(guò)通信信道、通路、網(wǎng)絡(luò)或系統(tǒng)通信地鏈接耦合。
如本文所定義的,術(shù)語(yǔ)“可執(zhí)行操作”或“操作”是由數(shù)據(jù)處理系統(tǒng)或數(shù)據(jù)處理系統(tǒng)內(nèi)的處理器執(zhí)行的任務(wù),除非上下文另有說(shuō)明??蓤?zhí)行操作的示例包括但不限于,“處理”、“電腦計(jì)算”、“計(jì)算”、“確定”、“顯示”、“比較”等。對(duì)此,操作是指例如計(jì)算機(jī)系統(tǒng)的數(shù)據(jù)處理系統(tǒng)或類似電子計(jì)算裝置的這樣的動(dòng)作和/或處理:操縱計(jì)算機(jī)系統(tǒng)的寄存器或存儲(chǔ)器內(nèi)被表示為物理(電子)量的數(shù)據(jù),并且將其轉(zhuǎn)換成計(jì)算機(jī)系統(tǒng)存儲(chǔ)器和/或寄存器或者其它這種信息存儲(chǔ)、傳輸或顯示裝置內(nèi)類似地被表示為物理量的其它數(shù)據(jù)。
如本文所定義的,術(shù)語(yǔ)“包括”指定所陳述的特征、整數(shù)、步驟、操作、元件和/或部件的存在,但是不排除存在或添加一個(gè)或多個(gè)其它特征、整數(shù)、步驟、操作、元件、部件和/或它們的組。
如本文所定義的,術(shù)語(yǔ)“如果”是指“當(dāng)”或“之后”或“響應(yīng)于”或“響應(yīng)”,這取決于上下文。因此,短語(yǔ)“如果確定”或“如果檢測(cè)到[所陳述的條件或事件]”可以被解釋為是指“確定之后”或“響應(yīng)于確定”或“一檢測(cè)到[所陳述的條件或事件]”或“響應(yīng)于檢測(cè)到[所陳述的條件或事件]”或“響應(yīng)于檢測(cè)到[所陳述的條件或事件]”,這取決于上下文。
如本文所定義的,術(shù)語(yǔ)“一個(gè)實(shí)施例”、“實(shí)施例”或類似語(yǔ)言是指結(jié)合該實(shí)施例描述的特定特征、結(jié)構(gòu)或特性包括在本公開(kāi)內(nèi)所描述的至少一個(gè)實(shí)施例中。因此,在整個(gè)本公開(kāi)中短語(yǔ)“在一個(gè)實(shí)施例中”、“在實(shí)施例中”和類似語(yǔ)言的出現(xiàn)可以但不一定都是指同一實(shí)施例。
如本文所定義的,術(shù)語(yǔ)“輸出”是指存儲(chǔ)在物理存儲(chǔ)元件(例如,裝置),寫入到顯示或其它外圍輸出裝置,發(fā)送或傳送到另一系統(tǒng),導(dǎo)出等。
如本文所定義的,術(shù)語(yǔ)“多個(gè)”是指兩個(gè)或兩個(gè)以上。
如本文所定義的,術(shù)語(yǔ)“響應(yīng)于”是指對(duì)動(dòng)作或事件響應(yīng)或反應(yīng)。因此,如果“響應(yīng)于”第一動(dòng)作執(zhí)行第二動(dòng)作,則存在第一動(dòng)作的發(fā)生與第二動(dòng)作的發(fā)生之間的因果關(guān)系。術(shù)語(yǔ)“響應(yīng)于”表示因果關(guān)系。
如本文所定義的,術(shù)語(yǔ)“用戶”是指人。
術(shù)語(yǔ)第一、第二等在本文中可以用于描述各種元件。這些元件不應(yīng)由這些術(shù)語(yǔ)限制,原因是這些數(shù)據(jù)僅用于將一個(gè)元件與另一個(gè)元件區(qū)分,除非另有說(shuō)明或者上下文清楚地指出。
計(jì)算機(jī)程序產(chǎn)品可以包括其上具有用于使處理器執(zhí)行本發(fā)明的各方面的計(jì)算機(jī)可讀程序指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)(或介質(zhì))。在此公開(kāi)中,術(shù)語(yǔ)“程序代碼”與術(shù)語(yǔ)“計(jì)算機(jī)可讀程序指令”可以互換使用。本文中所描述的計(jì)算機(jī)可讀程序指令可以從計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)下載到相應(yīng)的計(jì)算/處理裝置,或者經(jīng)由網(wǎng)絡(luò)(例如,互聯(lián)網(wǎng)、局域網(wǎng)、廣域網(wǎng)和/或無(wú)線網(wǎng)絡(luò))下載到外部計(jì)算機(jī)或外部存儲(chǔ)裝置。網(wǎng)絡(luò)可以包括銅傳輸電纜、光傳輸光纖、無(wú)線傳輸、路由器、防火墻、交換機(jī)、網(wǎng)關(guān)計(jì)算機(jī)和/或包括邊緣服務(wù)器的邊緣裝置。在每個(gè)計(jì)算/處理裝置中的網(wǎng)絡(luò)適配器卡或網(wǎng)絡(luò)接口從網(wǎng)絡(luò)接收計(jì)算機(jī)可讀程序指令,并且轉(zhuǎn)發(fā)計(jì)算機(jī)可讀程序指令,用于存儲(chǔ)在各自的計(jì)算/處理裝置內(nèi)的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中。
用于執(zhí)行本文中所描述的本發(fā)明的布置的操作計(jì)算機(jī)可讀程序指令可以是匯編指令、指令集架構(gòu)(ISA)指令、機(jī)器指令、機(jī)器相關(guān)指令、微碼固件指令、狀態(tài)設(shè)置數(shù)據(jù)或者一個(gè)或多個(gè)編程語(yǔ)言(包括面向?qū)ο蟮木幊陶Z(yǔ)言和/或程序的編程語(yǔ)言)的任何組合撰寫的源代碼或目標(biāo)代碼。計(jì)算機(jī)可讀程序指令可以全部在用戶的計(jì)算機(jī)上執(zhí)行,作為獨(dú)立的軟件包部分地在用戶的計(jì)算機(jī)上執(zhí)行,部分地在用戶的計(jì)算機(jī)上且部分在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行,或者全部在遠(yuǎn)程計(jì)算機(jī)或服務(wù)器上執(zhí)行。在后一種情形下,遠(yuǎn)程計(jì)算機(jī)可以通過(guò)任何類型的網(wǎng)絡(luò)(包括LAN或WAN)連接到用戶,或者可以連接到外部計(jì)算機(jī)(例如,通過(guò)使用互聯(lián)網(wǎng)服務(wù)提供者的互聯(lián)網(wǎng))。在一些情況下,電子電路(包括例如,可編程邏輯電路、FPGA或PLA)可以通過(guò)利用計(jì)算機(jī)可讀程序指令的狀態(tài)信息個(gè)性化電子電路來(lái)執(zhí)行計(jì)算機(jī)可讀程序指令,以執(zhí)行本文所描述的各方面本發(fā)明的布置。
本文將參照流程圖和/或方法、設(shè)備(系統(tǒng))的框圖和計(jì)算機(jī)程序產(chǎn)品描述的本發(fā)明布置的特定方面。應(yīng)當(dāng)理解,流程圖和/或框圖的每個(gè)塊,以及流程圖和/或框圖中塊的組合可以由計(jì)算機(jī)可讀程序指令,例如,程序代碼來(lái)實(shí)現(xiàn)。
這些計(jì)算機(jī)可讀程序指令可以被提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)或者其它可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生機(jī)器,使得經(jīng)由計(jì)算機(jī)或其它可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行指令時(shí),指令創(chuàng)建用于實(shí)現(xiàn)在流程圖和/或框圖的一個(gè)或多個(gè)塊中指定的功能/動(dòng)作的裝置。這些計(jì)算機(jī)可讀程序指令還可以存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,能夠指導(dǎo)計(jì)算機(jī)、可編程數(shù)據(jù)處理設(shè)備和/或其它裝置以特定方式運(yùn)行,使得其中存儲(chǔ)有指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)包括實(shí)現(xiàn)在流程圖和/或框圖的一個(gè)或多個(gè)塊中指定的操作的各個(gè)方面的指令的一種制品。
計(jì)算機(jī)可讀程序指令還可以被加載到計(jì)算機(jī)、其它可編程數(shù)據(jù)處理設(shè)備或其它裝置,使得一系列操作將在計(jì)算機(jī)、其它可編程設(shè)備或其它裝置上被執(zhí)行,以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而指令在計(jì)算機(jī)、其它可編程數(shù)據(jù)處理設(shè)備或其它裝置上執(zhí)行時(shí),指令實(shí)現(xiàn)在流程圖和/或框圖的一個(gè)或多個(gè)塊中指定的功能/動(dòng)作。
附圖中的流程圖和框圖說(shuō)明了根據(jù)本發(fā)明布置的各方面的架構(gòu)、功能以及系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品可能實(shí)現(xiàn)的操作。對(duì)此,流程圖或框圖中的每個(gè)塊可以表示模塊、段或者指令部分,其包括用于實(shí)現(xiàn)指定操作的一個(gè)或多個(gè)可執(zhí)行指令。在一些替代實(shí)現(xiàn)方式中,在塊中指出的操作可以不按照?qǐng)D中所指的順序發(fā)生。例如,連續(xù)示出的兩個(gè)塊可以基本同時(shí)執(zhí)行,或者這些塊有時(shí)可以以相反的順序執(zhí)行,這取決于所涉及的功能。還應(yīng)當(dāng)指出,框圖和/或流程圖的每個(gè)塊以及框圖和/或流程圖中塊的組合可以由專用基于硬件的系統(tǒng)來(lái)實(shí)現(xiàn),所述系統(tǒng)執(zhí)行指定功能或動(dòng)作或進(jìn)行專用硬件和計(jì)算機(jī)指令的組合。
為說(shuō)明的簡(jiǎn)潔和清楚的目的,在附圖中所示的元件不一定按比例繪制。例如,為了清楚,一些元件的尺寸可能相對(duì)于其它元件被放大。此外,在認(rèn)為適當(dāng)時(shí),附圖標(biāo)記在圖中重復(fù)以指示相應(yīng)的、類似的或相似的特征。
可以在下面的權(quán)利要求中找到的相應(yīng)的結(jié)構(gòu)、材料、動(dòng)作以及所有裝置或步驟加功能元件的等同物意在包括結(jié)合其它要求保護(hù)的元件執(zhí)行功能任何結(jié)構(gòu)、材料或動(dòng)作,作為具體請(qǐng)求保護(hù)的內(nèi)容。
一個(gè)實(shí)施例可以包括實(shí)現(xiàn)使用第一分割將具有多個(gè)層的脈沖神經(jīng)網(wǎng)絡(luò)分割成多個(gè)平截頭體的方法,其中,每個(gè)平截頭體包括脈沖神經(jīng)網(wǎng)絡(luò)的每個(gè)分割層的一片。方法可以包括讀取脈沖神經(jīng)網(wǎng)絡(luò)的第一層的第一片,并且在處理器的內(nèi)部存儲(chǔ)器中存儲(chǔ)中間數(shù)據(jù)的同時(shí)利用處理器使用第一層的第一片產(chǎn)生脈沖神經(jīng)網(wǎng)絡(luò)的第二層的第一片。第一層的第一片和第二層的第一片屬于同一平截頭體。
在一個(gè)方面,在產(chǎn)生另一片之前的多個(gè)時(shí)間間隔產(chǎn)生第二層的第一片。
在另一方面中,平截頭體的大小根據(jù)內(nèi)部存儲(chǔ)器的大小來(lái)確定。
在再一方面,中間數(shù)據(jù)包括突觸后電位值(post synaptic potential value)和脈沖事件。此外,脈沖事件可以作為多個(gè)掩碼存儲(chǔ)在內(nèi)部存儲(chǔ)器的事件隊(duì)列中,每個(gè)掩碼包括x坐標(biāo)和y坐標(biāo)。
可以使用處理器的第一計(jì)算單元執(zhí)行產(chǎn)生第二層的第一片。方法可以包括與第一計(jì)算單元同時(shí)地利用處理器的第二計(jì)算單元使用脈沖神經(jīng)網(wǎng)絡(luò)的第一層的第二片來(lái)產(chǎn)生第二層的第二片。
方法可以包括使用與第一分割不同的第二分割來(lái)產(chǎn)生脈沖神經(jīng)網(wǎng)絡(luò)的再一層的至少一個(gè)片。
另一實(shí)施例可以包括實(shí)現(xiàn)使用第一分割將具有多個(gè)層的脈沖神經(jīng)網(wǎng)絡(luò)分割成多個(gè)平截頭體的設(shè)備,其中,每個(gè)平截頭體包括脈沖神經(jīng)網(wǎng)絡(luò)的每個(gè)分割層的一片。設(shè)備包括被配置為存儲(chǔ)中間數(shù)據(jù)的內(nèi)部存儲(chǔ)器,以及耦合到內(nèi)部存儲(chǔ)器并被配置為發(fā)起可執(zhí)行操作的第一計(jì)算單元??蓤?zhí)行操作包括讀取脈沖神經(jīng)網(wǎng)絡(luò)的第一層的第一片,并且在處理器的內(nèi)部存儲(chǔ)器中存儲(chǔ)中間數(shù)據(jù)的同時(shí)使用第一層的第一片產(chǎn)生脈沖神經(jīng)網(wǎng)絡(luò)的第二層的第一片。第一層的第一片和第二層的第一片屬于同一平截頭體。
在一個(gè)方面,在產(chǎn)生另一片之前的多個(gè)時(shí)間間隔產(chǎn)生第二層的第一片。
在另一方面中,平截頭體的大小根據(jù)內(nèi)部存儲(chǔ)器的大小來(lái)確定。
在再一方面,中間數(shù)據(jù)包括突觸后電位值和脈沖事件。此外,脈沖事件可以存儲(chǔ)在內(nèi)部存儲(chǔ)器的事件隊(duì)列中作為多個(gè)掩碼,每個(gè)掩碼包括x坐標(biāo)和y坐標(biāo)。
設(shè)備可以包括:第二計(jì)算單元,被配置為發(fā)起可執(zhí)行操作,所述可執(zhí)行操作包括與第一計(jì)算單元同時(shí)使用脈沖神經(jīng)網(wǎng)絡(luò)的第一層的第二片產(chǎn)生第二層的第二片。
第一計(jì)算單元可以被配置為發(fā)起可執(zhí)行操作,所述可執(zhí)行操作還包括使用與第一分割不同的第二分割產(chǎn)生脈沖神經(jīng)網(wǎng)絡(luò)的再一層的至少一個(gè)片。
另一實(shí)施例可以包括計(jì)算機(jī)程序產(chǎn)品,包括其上存儲(chǔ)有實(shí)現(xiàn)使用第一分割將具有多個(gè)層的脈沖神經(jīng)網(wǎng)絡(luò)分割成多個(gè)平截頭體的程序代碼的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中,每個(gè)平截頭體包括脈沖神經(jīng)網(wǎng)絡(luò)的每個(gè)分割層的一片。程序代碼可以由處理器執(zhí)行,以執(zhí)行操作,包括讀取脈沖神經(jīng)網(wǎng)絡(luò)的第一層的第一片,并且在處理器的內(nèi)部存儲(chǔ)器中存儲(chǔ)中間數(shù)據(jù)的同時(shí)使用第一層的第一片產(chǎn)生脈沖神經(jīng)網(wǎng)絡(luò)的第二層的第一片。第一層的第一片和第二層的第一片屬于同一平截頭體。
在一個(gè)方面,在產(chǎn)生另一片之前的多個(gè)時(shí)間間隔產(chǎn)生第二層的第一片。
在另一方面中,平截頭體的大小根據(jù)內(nèi)部存儲(chǔ)器的大小來(lái)確定。
在再一方面,中間數(shù)據(jù)包括突觸后電位值和脈沖事件。此外,脈沖事件可以作為多個(gè)掩碼存儲(chǔ)在內(nèi)部存儲(chǔ)器的事件隊(duì)列中,每個(gè)掩碼包括x坐標(biāo)和y坐標(biāo)。
程序代碼可以由處理器執(zhí)行以執(zhí)行操作,所述操作還包括:使用與第一分割不同的第二分割產(chǎn)生脈沖神經(jīng)網(wǎng)絡(luò)的再一層的至少一個(gè)片。
本文提供的本發(fā)明的布置的描述是為了說(shuō)明的目的,并非意在窮舉或限制為所公開(kāi)的形式和示例。本文所用的術(shù)語(yǔ)被選擇來(lái)解釋本發(fā)明布置的原理,在市場(chǎng)中發(fā)現(xiàn)的技術(shù)的實(shí)際應(yīng)用或技術(shù)改進(jìn),并且/或者使本領(lǐng)域的普通技術(shù)人員能夠理解本文所公開(kāi)的實(shí)施例。在不脫離所描述的本發(fā)明布置的范圍和精神的情況下,修改和變化對(duì)于本領(lǐng)域的普通技術(shù)人員可以是顯而易見(jiàn)的。因此,應(yīng)當(dāng)參考下列權(quán)利要求而不是前述的公開(kāi)內(nèi)容,作為表示這樣的特征和實(shí)施方式的范圍。