專利名稱:在圖形處理單元上訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)的制作方法
專利說明在圖形處理單元上訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)
背景技術(shù):
神經(jīng)網(wǎng)絡(luò) 某些計(jì)算機(jī)問題,如字符識(shí)別和圖象識(shí)別都能用機(jī)器學(xué)習(xí)技術(shù)很好地解決,其中主要是利用神經(jīng)網(wǎng)絡(luò)。神經(jīng)網(wǎng)絡(luò)是一類基于相互連接的“神經(jīng)元”概念的算法。在一個(gè)典型的神經(jīng)網(wǎng)絡(luò)中,神經(jīng)元具有多個(gè)數(shù)據(jù)值,每個(gè)數(shù)據(jù)值根據(jù)預(yù)定義的連接強(qiáng)度影響一個(gè)所連接的神經(jīng)元的值,并判斷對(duì)于每個(gè)特定神經(jīng)元的總連接是否達(dá)到預(yù)定義的閾值。通過確定合適的連接強(qiáng)度和閾值(這一過程也被稱為“訓(xùn)練”),神經(jīng)網(wǎng)絡(luò)就可以有效識(shí)別圖形和字符。通常,這些神經(jīng)元被分組到多個(gè)“層”中,以使組間的連接對(duì)數(shù)據(jù)值的每次計(jì)算更加明顯。
圖1例示了一個(gè)簡化的神經(jīng)網(wǎng)絡(luò)框圖,該圖解釋了手寫字母“m”的一個(gè)示例100。在該示例中,示例性神經(jīng)元的值是0或1。這是為了簡化示例,并不限制在神經(jīng)網(wǎng)絡(luò)的神經(jīng)元的數(shù)據(jù)值的范圍或類型。在該示例中,手寫樣本的電子圖像用于為輸入層210即“第0層”創(chuàng)建一組數(shù)據(jù)值。在有些實(shí)現(xiàn)中,這可以通過直接將樣本200的每個(gè)像素映射到第0層的某個(gè)特定神經(jīng)元來實(shí)現(xiàn),從而每個(gè)神經(jīng)元根據(jù)像素是開還是關(guān)來顯示1或0。另一個(gè)給神經(jīng)元賦值的示例方法將結(jié)合卷積神經(jīng)網(wǎng)絡(luò)在以下討論。由于神經(jīng)網(wǎng)絡(luò)的不規(guī)則性,以及它所導(dǎo)致需要解決的問題,神經(jīng)網(wǎng)絡(luò)的每一層可能有不同數(shù)量的神經(jīng)元,而這些可能與輸入數(shù)據(jù)的具體質(zhì)量有關(guān)或無關(guān)。
如圖1所示,第0層中的多個(gè)神經(jīng)元與下一層即第1層(120)中的神經(jīng)元相連接。在一個(gè)實(shí)現(xiàn)中,這被稱為全連接神經(jīng)網(wǎng)絡(luò),具體層中的每個(gè)神經(jīng)元都與下一層的每個(gè)神經(jīng)元相連接。在圖1的示例中,通過展示兩個(gè)神經(jīng)元與第1層中的每個(gè)神經(jīng)元的連接,部分地說明了這一點(diǎn)。然后,第1層中的每個(gè)神經(jīng)元從第0層中的每個(gè)神經(jīng)元接收輸入值。這些輸入值就進(jìn)行加總,加總之和與偏差即閾值進(jìn)行比較。如果該輸入值超出一個(gè)具體神經(jīng)元的閾值,該神經(jīng)元就保持一個(gè)可作為下一層中的神經(jīng)元的輸入值的正值。這種計(jì)算對(duì)于神經(jīng)網(wǎng)絡(luò)中的各個(gè)層都持續(xù)出現(xiàn),直到計(jì)算到最后一層,即層130,這里稱其為“第n層”。在這一點(diǎn)處,神經(jīng)網(wǎng)絡(luò)例程的輸出可從第n層的值中讀取。在一字符識(shí)別中使用的網(wǎng)絡(luò)實(shí)現(xiàn)中,層中的每個(gè)值都被賦予一個(gè)具體的字符。在這個(gè)實(shí)現(xiàn)中,該網(wǎng)絡(luò)配置成以輸出層結(jié)束,該輸出層在一個(gè)神經(jīng)元中只有一個(gè)大的正值,隨后,該值顯示出哪個(gè)字符是該網(wǎng)絡(luò)計(jì)算出的最有可能的手寫輸入字符。
然而,如圖2所示,這些連接在計(jì)算上很復(fù)雜。圖2是基于前一層中的數(shù)據(jù)值計(jì)算神經(jīng)元的數(shù)據(jù)值的方法的框圖。應(yīng)當(dāng)注意,雖然圖2例示了各種矩陣,但這些矩陣的指數(shù)(或大小)會(huì)因?qū)雍途W(wǎng)絡(luò)的改變而改變,而且,各種實(shí)現(xiàn)可能會(huì)有所不同地將矩陣定向至或映射至計(jì)算機(jī)存儲(chǔ)器中。如圖2所示,實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的一個(gè)方法是把每一層都當(dāng)作一個(gè)神經(jīng)元數(shù)據(jù)值矩陣,第0層矩陣210例示了這一方法。連接強(qiáng)度就可實(shí)現(xiàn)為一轉(zhuǎn)換矩陣220,該轉(zhuǎn)換矩陣乘以第0層矩陣210。這個(gè)乘積允許前一層中的每個(gè)數(shù)據(jù)值依據(jù)連接強(qiáng)度來通過一般的矩陣乘法運(yùn)算進(jìn)行縮放,然后加總。相乘后,添加一偏差矩陣230至乘積矩陣中以說明下一層中的每個(gè)神經(jīng)元的閾值。然后,將S函數(shù)(在一實(shí)現(xiàn)中為tanh())應(yīng)用于每個(gè)作為結(jié)果的數(shù)據(jù)值以確定是否達(dá)到閾值,因此而產(chǎn)生的數(shù)據(jù)值放置到矩陣中供下一層所用。這也被稱為“壓縮函數(shù)”。因此,如圖2所示,每層間的連接,以及整個(gè)網(wǎng)絡(luò)可用一系列的矩陣來表示。尋找這些矩陣的合適值就是訓(xùn)練神經(jīng)網(wǎng)絡(luò)的問題。
雖然圖2例示了神經(jīng)網(wǎng)絡(luò)可以實(shí)現(xiàn)為矩陣,但如下述討論,神經(jīng)網(wǎng)絡(luò)計(jì)算和神經(jīng)網(wǎng)絡(luò)訓(xùn)練還包括許多數(shù)學(xué)計(jì)算。此外,非全連接神經(jīng)網(wǎng)絡(luò)計(jì)算復(fù)雜性甚至更大。
發(fā)明內(nèi)容
一像素著色器程序能在圖形處理單元上有效訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)。例如,一卷積神經(jīng)網(wǎng)絡(luò)在圖形處理單元上被實(shí)現(xiàn)為一系列紋理。然后,該神經(jīng)網(wǎng)絡(luò)通過一系列正向傳遞和反向傳遞進(jìn)行訓(xùn)練,其中卷積核和偏差矩陣在每次反向傳遞中根據(jù)誤差函數(shù)的梯度利用梯度下降法得到修正。
該實(shí)現(xiàn)利用了GPU中的像素著色器單元的并行處理性能,以有效地并行計(jì)算正向傳遞和反向傳遞。它還利用了一組示例性的逐步推倒公式以執(zhí)行像素著色器單元中的計(jì)算。在一實(shí)例中,程序通過紋理來完成輸入和輸出,計(jì)算過程中這些紋理在也會(huì)被處理。在另一實(shí)例中,使用了一多級(jí)求和運(yùn)算過程對(duì)各像素著色器單元寄存器進(jìn)行求和運(yùn)算。多種技術(shù)和系統(tǒng)可組合使用或單獨(dú)使用。
本發(fā)明內(nèi)容部分提供一些簡單形式的概念的介紹,這些概念在下面的詳細(xì)說明部分中將進(jìn)行詳細(xì)的描述。本發(fā)明內(nèi)容部分不用來確定權(quán)利要求主題的關(guān)鍵特征或?qū)嵸|(zhì)特征,也不用來確定所要求保護(hù)的主題的范圍。
結(jié)合附圖閱讀以下詳細(xì)描述的說明性實(shí)施例,可以清楚理解本發(fā)明的其它特征和優(yōu)點(diǎn)。
圖1是一個(gè)常規(guī)的全連接神經(jīng)網(wǎng)絡(luò)框圖。
圖2是一個(gè)全連接神經(jīng)網(wǎng)絡(luò)的兩層間的連接的矩陣實(shí)現(xiàn)的框圖。
圖3是一個(gè)圖形處理單元架構(gòu)的框圖。
圖4a和圖4b是兩個(gè)例示在手寫體樣本上使用卷積核框圖。
圖5是圖形處理單元中的卷積神經(jīng)網(wǎng)絡(luò)的代表性訓(xùn)練過程的流程圖。
圖6是為圖形處理單元中的計(jì)算準(zhǔn)備神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)的子過程的流程圖。
圖7是一個(gè)多級(jí)求和運(yùn)算的例子的框圖。
圖8是實(shí)施圖6的卷積神經(jīng)網(wǎng)絡(luò)技術(shù)的合適的計(jì)算環(huán)境的框圖。
具體實(shí)施例方式 以下描述涉及,為了識(shí)別手寫體而對(duì)圖形處理單元(“GPU”)架構(gòu)訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)。GPU對(duì)輸入數(shù)據(jù)反復(fù)執(zhí)行正向傳遞和反向傳遞,修正和優(yōu)化包括每一次傳遞中的神經(jīng)網(wǎng)絡(luò)的矩陣。這里描述的許多方法都已經(jīng)設(shè)計(jì)出來,以利用GPU的高效性和使用為在GPU上高效執(zhí)行而設(shè)計(jì)的像素著色器程序。
1、GPU架構(gòu) 這里所描述的方法實(shí)現(xiàn)在一圖形處理單元中。圖1所示的一圖形處理單元例示了對(duì)傳統(tǒng)的GPU結(jié)構(gòu)300的簡述。在一個(gè)實(shí)現(xiàn)中,GPU架構(gòu)與圖8所示的GPU 815相對(duì)應(yīng)。顯示數(shù)據(jù)305描述了要呈現(xiàn)的數(shù)據(jù)的幾何圖形,該顯示數(shù)據(jù)305被輸入到頂點(diǎn)著色器單元310中,以生成其幾何形式的多角形的表示。然后,把這些幾何形狀輸入到一光柵器中,該光柵器內(nèi)插多角形并對(duì)它們進(jìn)行采樣,以在圖形空間形成一組樣本點(diǎn),該組樣本點(diǎn)就可以被著色器并被添加紋理。然后,這些點(diǎn)被傳輸?shù)揭幌盗锌删幊痰南袼刂鲉卧?30中,可編程像素著色器單元330利用并行計(jì)算技術(shù)為這些點(diǎn)著色,并添加和操作紋理。正是因?yàn)槟軌虿⑿杏?jì)算和操作紋理使得GPU,尤其是像素著色器單元,成為神經(jīng)網(wǎng)絡(luò)計(jì)算的一個(gè)有用的平臺(tái)。在為利用像素著色器單元而寫的GPU可執(zhí)行程序像素著色器程序的控制下,像素著色器單元計(jì)算被頻繁地執(zhí)行。
能夠在訓(xùn)練前被計(jì)算機(jī)CPU預(yù)先加載至圖形存儲(chǔ)器350的紋理被高速緩存入紋理高速緩存器340。一旦這些過程都完成后,圖像點(diǎn)就可以在傳輸給圖形存儲(chǔ)器350之前置入幀緩沖器360。然而,在這里的方法的各種實(shí)現(xiàn)中,神經(jīng)網(wǎng)絡(luò)的輸入數(shù)據(jù)和輸出數(shù)據(jù)都將保存在紋理中。因此,在各種實(shí)現(xiàn)中,幀緩沖器的圖像點(diǎn)輸出就被忽略了或者就根本沒有創(chuàng)建。
2、卷積神經(jīng)網(wǎng)絡(luò) 雖然上述全連接神經(jīng)網(wǎng)絡(luò)經(jīng)過合適訓(xùn)練后能夠識(shí)別手寫體,但是在對(duì)輸入進(jìn)行操作時(shí),它們經(jīng)常不能利用形狀和接近性。原因之一是每個(gè)像素都是各自獨(dú)立操作的,忽略了相鄰的像素。正因如此才使用了卷積神經(jīng)網(wǎng)絡(luò),它是通過聯(lián)合數(shù)據(jù)值陣列與每個(gè)神經(jīng)元而運(yùn)作的,而非通過單個(gè)值來運(yùn)作。由此,這個(gè)陣列可以認(rèn)為是一圖像的一小片。下一層的神經(jīng)元值的變換通常就從乘法泛化為卷積。這意味著連接強(qiáng)度230是卷積核而非標(biāo)量值。圖4a和4b展示了作用于字母“m”的一個(gè)樣本400的卷積核的兩個(gè)例子。在圖4a中,樣本與表示一豎線的卷積核410結(jié)合。因此而產(chǎn)生的像素片420包括樣本中存在的三條豎線。同樣地,在圖4b中,手寫體樣本450與表示向右上方斜線的卷積核460結(jié)合。這使得像素片460包括輸入字符的兩條斜線。如圖4a和4b所示,兩個(gè)結(jié)果片在保持像素相鄰的情況下示出字符的不同信息。這使字符識(shí)別更加有效。
然而,這些更復(fù)雜的傳輸包括更復(fù)雜的神經(jīng)網(wǎng)絡(luò)矩陣。因此,當(dāng)一全連接網(wǎng)絡(luò)中的一個(gè)矩陣包括一個(gè)數(shù)值陣列時(shí),在一卷積神經(jīng)網(wǎng)絡(luò)中,每個(gè)矩陣條目都是一個(gè)矩形的(或正方形的)像素片;類似地,偏差矩陣也具有像素片,并且對(duì)每個(gè)片的每個(gè)元素執(zhí)行S函數(shù)。此外,隨著并行計(jì)算要求的增加,卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算涉及到更復(fù)雜的數(shù)學(xué)而非簡單的矩陣乘法運(yùn)算。以下第四節(jié)部分描述了一卷積神經(jīng)網(wǎng)絡(luò)計(jì)算實(shí)現(xiàn)的例子。更多關(guān)于卷積網(wǎng)絡(luò)方面的信息見P.Y.Simard,D.Steinkaus,and J.C.Platt所著的,“Best Practices for ConvolutionalNeural Networks Applied to Visual Document Analysis(卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用于可視文本分析的最佳實(shí)踐)”proc.International Conference on Document Analysisand Recognition,pp958-962(文檔分析和識(shí)別國際會(huì)議期刊,第958至962頁),2003,該文獻(xiàn)作為參考引入本說明書。
3、訓(xùn)練過程 圖5展示了用于訓(xùn)練一卷積神經(jīng)網(wǎng)絡(luò)的一個(gè)示例過程500。在過程500的各種實(shí)現(xiàn)中,各步驟可以被刪除、組合或分成子步驟。該過程開始于步驟510,在該步驟中,過程接收一需要訓(xùn)練的神經(jīng)網(wǎng)絡(luò)和訓(xùn)練樣本。在一一般的實(shí)現(xiàn)中,網(wǎng)絡(luò)可以預(yù)先設(shè)置好樣本卷積核和偏差,但是每個(gè)樣本卷積核和偏差都需優(yōu)化以給出一致的且有效的結(jié)果。訓(xùn)練樣本通常包括許多(在成千上萬個(gè)的數(shù)量級(jí))手寫體字符樣本,并要標(biāo)出每個(gè)樣本對(duì)應(yīng)的正確字符。接下來過程進(jìn)行到步驟520,準(zhǔn)備神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)比如樣本和神經(jīng)網(wǎng)絡(luò)矩陣,將之作為圖形數(shù)據(jù),由GPU300的像素著色器單元330處理。這個(gè)步驟的示例過程將在以下圖6中做進(jìn)一步的詳細(xì)描述。在一個(gè)實(shí)現(xiàn)中,步驟510和520都由和GPU 815相關(guān)聯(lián)的CPU執(zhí)行。在另一實(shí)現(xiàn)中,所有準(zhǔn)備工作都由GPU 815執(zhí)行。
如圖5所示,這些樣本中的每一個(gè)都將輸入至卷積神經(jīng)網(wǎng)絡(luò),并且計(jì)算輸出以確定網(wǎng)絡(luò)離合適的字符識(shí)別有多接近或多遠(yuǎn)。這被稱為“正向傳遞”。然后,關(guān)于包括網(wǎng)絡(luò)的每個(gè)矩陣的誤差度通過所謂的“反向傳遞”來確定,然后根據(jù)誤差修正矩陣。以下通用GPU程序的一般實(shí)踐在這里描述的實(shí)現(xiàn)中寫作一系列像素著色器程序。
這樣,在步驟530中,GPU進(jìn)入每個(gè)樣本輸入的循環(huán)。在步驟540中,神經(jīng)網(wǎng)絡(luò)經(jīng)正向傳遞,為一給定樣本確定一輸出。接下來,在步驟550中,用一誤差函數(shù)計(jì)算神經(jīng)網(wǎng)絡(luò)距期望輸出有多遠(yuǎn)。接著在步驟560中,為誤差函數(shù)確定一梯度函數(shù)。通過計(jì)算一梯度函數(shù),所述梯度函數(shù)包括每個(gè)神經(jīng)網(wǎng)絡(luò)矩陣的每個(gè)條目相對(duì)于誤差的偏導(dǎo)數(shù),GPU可以根據(jù)梯度下降法計(jì)算出每個(gè)矩陣必須調(diào)整多少。然后,在步驟570中,包括卷積核和偏差的矩陣根據(jù)梯度函數(shù)得到修正。步驟550,560和570被總稱為“反向傳遞”,因?yàn)樗鼈兘邮蛰敵稣`差信息,并且利用這些信息來確定每個(gè)神經(jīng)網(wǎng)絡(luò)矩陣所需做出的修正。第4節(jié)描述了這些正向傳遞和反向傳遞中使用的等式的一個(gè)實(shí)現(xiàn)的例子。最后,在步驟580中,只要有更多的樣本輸入,過程500的正向傳遞和反向傳遞步驟就會(huì)被反復(fù)執(zhí)行。在樣本輸入結(jié)束時(shí),神經(jīng)網(wǎng)絡(luò)已經(jīng)對(duì)那些輸入進(jìn)行訓(xùn)練,過程也就此結(jié)束。
圖6展示了用于準(zhǔn)備神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)的示例過程600,該數(shù)據(jù)在過程500的步驟520中為圖形數(shù)據(jù)。在過程600的各種實(shí)現(xiàn)中,各步驟可以被刪除、組合或分成子步驟。過程開始于步驟610,在該步驟中,過程創(chuàng)建一由覆蓋全部視口的單一三角形組成的場景。之所以這么做是為了保護(hù)光柵器和GPU的其他階段不受計(jì)算結(jié)果的影響,以免過程集中在像素著色器計(jì)算上。
在理想實(shí)現(xiàn)中,每個(gè)數(shù)據(jù)并行變量都存儲(chǔ)為一個(gè)二維紋理。然而有些變量超過二維,所以在步驟620中它們被嵌入一二維紋理中。例如,變量Kv可通過以下等式(記號(hào)見以下第4節(jié))“平坦化”為
在下一個(gè)步驟630中,為紋理確定了一坐標(biāo)系統(tǒng),因?yàn)橄袼刂鲉卧菫槟茉凇跋袼亍鄙线\(yùn)作而設(shè)計(jì)的,因此每個(gè)“像素”(在這里,像素是一卷積網(wǎng)絡(luò)矩陣的元素)的位置必須確定。一種常用方法是將“紋理坐標(biāo)”信息與向頂點(diǎn)著色器單元呈現(xiàn)的三角形的頂點(diǎn)相關(guān)聯(lián)。然后,GPU就可以在每一個(gè)輸出像素上插入紋理坐標(biāo)值,并在一個(gè)像素著色器單元寄存器中提供插入的值。這不僅可以用來確定像素,還可以用來預(yù)先計(jì)算像素著色器程序執(zhí)行期間所需的值。
然而,光柵器的插值函數(shù)的任何非平凡的使用都使得程序需要在每一次傳遞前適當(dāng)?shù)卦O(shè)置頂點(diǎn)數(shù)據(jù)。設(shè)置頂點(diǎn)數(shù)據(jù)的開支可能會(huì)超過從預(yù)計(jì)算數(shù)據(jù)值中獲得的好處。另一可選擇的實(shí)現(xiàn)利用了微軟公司的ShaderModel 3.0和ShaderModel 3.0的vPos的寄存器。這個(gè)寄存器將到輸出紋理的左上角的整數(shù)偏移量包括在其x和y分量中。從輸入紋理中查找數(shù)據(jù)值所需的地址是vPos的簡單線性組合。當(dāng)坐標(biāo)系統(tǒng)確定后,過程就可以在步驟630中創(chuàng)建紋理。最后,在步驟640中,紋理在處理開始前加載到GPU中。在一個(gè)實(shí)現(xiàn)中,如果不是所有的,也需要盡可能多的紋理加載到圖形存儲(chǔ)器中以防止GPU訪問系統(tǒng)存儲(chǔ)器,訪問系統(tǒng)存儲(chǔ)器會(huì)減慢計(jì)算時(shí)間。在這一點(diǎn)處,過程結(jié)束。
4、實(shí)現(xiàn)和推導(dǎo) 雖然在其他實(shí)現(xiàn)中可以使用其他系統(tǒng),但這里的每個(gè)例子都利用了ShaderModel 3.0像素著色器系統(tǒng)。如上所述,一神經(jīng)網(wǎng)絡(luò)包括N層神經(jīng)元,其中每個(gè)神經(jīng)元都具有一個(gè)數(shù)值。在本節(jié),稱第v層為lv。lv是一向量,將其長度表示為nv,向量的第i個(gè)元素寫作liv。每個(gè)lv+1層可利用“已知參數(shù)”Kv和bv并根據(jù)前一層lv計(jì)算出來。訓(xùn)練過程的目標(biāo)是利用梯度下降法為這些參數(shù)尋找適合的值。為方便標(biāo)記,使用條件算子I{c},當(dāng)條件c為真時(shí),該算子等于1,否則為0。這里所述的推導(dǎo)為神經(jīng)網(wǎng)絡(luò)訓(xùn)練提出了一些等式,為了減少在執(zhí)行這些訓(xùn)練技術(shù)時(shí)對(duì)像素著色器程序的調(diào)用次數(shù),所以這些等式用代數(shù)的方式簡化和組合了。
4.1全連接網(wǎng)絡(luò)——正向傳遞 為了幫助理解卷積神經(jīng)網(wǎng)絡(luò)的問題,將它與層數(shù)為2的相對(duì)簡單的全連接網(wǎng)絡(luò)相比較。這樣,在正向傳遞中,每一層都根據(jù)前一層計(jì)算得出,lv+1可由以下公式計(jì)算出 lv+1=σ(v)=σ(Kvlv+bv)(4.1) 其中,0≤v<N。這里,σ是一個(gè)tanh的一個(gè)元素級(jí)應(yīng)用的“壓縮函數(shù)”,Kv為一個(gè)表示兩層間連接強(qiáng)度的nv+1×nv矩陣,bv是表示偏差的長度為nv+1的向量。
4.2全連接網(wǎng)絡(luò)——誤差函數(shù) 為了將輸出層lN作為一字符的分類器使用,可以分辯nN類,并把liN當(dāng)作輸入屬于i類的概率
的指示符。為使這些liN變成有效概率,可以利用“softmax”函數(shù)對(duì)它們進(jìn)行標(biāo)準(zhǔn)化 如果知道當(dāng)前輸入下的正確的分類為t,那么理想的計(jì)算應(yīng)得出距這一理想值的總偏差E可用“交叉熵”公式測得 4.3全連接網(wǎng)絡(luò)——反向傳遞 如上所述,梯度下降法被用來訓(xùn)練神經(jīng)網(wǎng)絡(luò)的各種參數(shù)。這包括尋找誤差函數(shù)E相對(duì)于每個(gè)參數(shù)Kv和bv的偏導(dǎo)數(shù)。為了簡化標(biāo)記,引入
其中,□表示元素級(jí)乘法運(yùn)算,σ′是tanh′的一個(gè)元素級(jí)應(yīng)用。將E的定義代入等式(4.4)中得
這樣,對(duì)0≤v≤N有 其中,表示外積。對(duì)0≤v≤N又有 ψv-1=(kv)Tψv□σ′(v-1)(4.9) 其中,(kv)T為kv的矩陣轉(zhuǎn)置。
利用以下所示的方法,前述等式可以通過更新參數(shù)來修正神經(jīng)網(wǎng)絡(luò)參數(shù) 當(dāng)0≤v≤N時(shí),γ為學(xué)習(xí)率。在一個(gè)實(shí)現(xiàn)中,學(xué)習(xí)率設(shè)為10-3。
4.4卷積神經(jīng)網(wǎng)絡(luò)——前向傳遞 與全連接神經(jīng)網(wǎng)絡(luò)相反,在卷積神經(jīng)網(wǎng)絡(luò)中,一個(gè)層的每一個(gè)元素liv不是標(biāo)量,而是數(shù)字的pv×pv矩形片。相應(yīng)地,Ki,jv用來表示大小為sv×sv的卷積核,biv為pv+1×pv+1的偏差片。各層、各偏差和各核的各個(gè)元素分別寫作l<i><x,y>v,K<i><x,y>v和b<i><x,y>v。
類似于全連接情形,計(jì)算lv+1的公式為
然而,這里使用的符號(hào)*表示一個(gè)有些不一般的運(yùn)算。直觀上,它類似于矩陣向量積,但它最內(nèi)部的運(yùn)算不是標(biāo)量的乘法運(yùn)算而是各片的卷積和次采樣。更確切地,如果lv是pv×pv片的一個(gè)長度為nv的向量,且Kv是sv×sv核的一個(gè)nv+1×nv矩陣,那么,w=Kv*lv表示w為pv+1×pv+1片的一個(gè)長度為nv+1的向量,且 可以看出,上述是全連接情形下等式的泛化,因?yàn)楫?dāng)pv,sv=1時(shí),那么等式(4.12),(4.13)和(4.14)會(huì)變成全連接網(wǎng)絡(luò)的等式。
4.5卷積神經(jīng)網(wǎng)絡(luò)——誤差函數(shù) 上述全連接網(wǎng)絡(luò)中的誤差函數(shù)的等式也可應(yīng)用到卷積網(wǎng)絡(luò)中。
4.6卷積神經(jīng)網(wǎng)絡(luò)——反向傳遞 如上所述,在反向傳遞過程中,利用E對(duì)網(wǎng)絡(luò)中的每個(gè)變量求偏導(dǎo)數(shù),求得E的梯度。首先計(jì)算
如前所述,其中,表示元素級(jí)乘法運(yùn)算,σ′為用作“壓縮函數(shù)”的tanh的元素級(jí)應(yīng)用。由等式(4.15),導(dǎo)數(shù)可概括為
其中,(Kv)T為Kv的矩陣轉(zhuǎn)置。
注意到,本申請(qǐng)所使用的算子*′和′是非標(biāo)準(zhǔn)性的。算子′類似于一個(gè)外積,但其中的卷積和次采樣代替了最內(nèi)部的乘法運(yùn)算。如果
是pv+1×pv+1片的長度nv+1向量,且lv+1是pv×pv片的長度nv向量,那么
表示,M為sv×sv片的一個(gè)nv+1×nv矩陣,且有
以及 sv=pv-2pv+1-2 (4.20) 算子*′類似于算子*的逆,因?yàn)樗鼣U(kuò)展了而非收縮卷積自變量。如果M是sv×sv核的一個(gè)nv×nv+1陣列,且
是pv+1×pv+1片的一個(gè)長度nv+1向量,那么,
表示u為pv×pv片的一個(gè)長度向量,且
pv=2pv+1+sv-2 (4.22) 其中,“*′cond”相當(dāng)于滿足以下四個(gè)條件 (x-ξ)|2 (4.23) (y-η)|2 (4.24) 以及 同上,當(dāng)pv,sv=1時(shí),這些反向傳遞公式則變成全連接網(wǎng)絡(luò)的等式。
4.7其他層的建模 在實(shí)際應(yīng)用中,卷積神經(jīng)網(wǎng)絡(luò)既有卷積也有全連接,也就是說,在有些層中pv,sv>1,在有些層中pv,sv=1。因?yàn)槊恳粚佣寄茏鳛榫矸e層進(jìn)行數(shù)學(xué)建模(因?yàn)樗侨B接層的泛化),所以把全連接層當(dāng)作一個(gè)特例并使用更簡單的公式,在計(jì)算上更有效。
此外,還有另一種特殊情況可稱為“過渡”層。這時(shí),pv,sv>1但pv+1=1。在這種情況下,正向傳遞簡化為 同樣地,反向傳遞簡化為
以及
4.8多級(jí)求和運(yùn)算 像素著色器單元的數(shù)據(jù)并行性質(zhì)使其很難進(jìn)行加法運(yùn)算。因?yàn)槊總€(gè)像素上的結(jié)果不能依賴于其他像素上的結(jié)果,要重新使之有效的一個(gè)方法就是在多次傳播中進(jìn)行加法運(yùn)算,其中,每次傳播都加上一些固定數(shù)量的水平相鄰的片。如果A是p×p片的一個(gè)n×m陣列,那么函數(shù)Sr可定義為 圖7例示了這種多級(jí)加法運(yùn)算的一個(gè)例子。在圖7中,一矩陣710需要在每行上相加?,F(xiàn)給出一行做為示例。在圖7的示例中,矩陣中的元素每四個(gè)分組相加,所以,第一組四個(gè)元素的和加入到一過渡和矩陣720中對(duì)應(yīng)行的第一個(gè)元素。同樣地,第二組的四個(gè)元素加入到對(duì)應(yīng)行的第二個(gè)元素,依次類推。然后,在第二次傳遞中,過渡和矩陣的四個(gè)元素相加得到該行的總和。
4.9運(yùn)行條件的實(shí)現(xiàn) 由于GPU的單指令、多數(shù)據(jù)(SIMD)的性質(zhì),運(yùn)行條件可能成為影響性能的重大負(fù)擔(dān)。在許多像素著色器程序編碼模型中,有多種不同的方法可以對(duì)這些運(yùn)行條件進(jìn)行編碼。然而,在測試中發(fā)現(xiàn),指令if,指令cmp和(p0)predicate的運(yùn)行速度都很慢。
為了避免這一點(diǎn),當(dāng)運(yùn)行條件檢查邊界條件時(shí),發(fā)現(xiàn)一種有效解決的方法是一起刪除所有運(yùn)行條件,并且將GPU的輸入級(jí)設(shè)置為“border color sampling(邊界顏色采樣)”。這使紋理的定義域以外的所有訪問返回零。對(duì)于非邊界性限制條件,發(fā)現(xiàn)將運(yùn)行條件編碼至一浮點(diǎn)數(shù)中最有效,該浮點(diǎn)數(shù)當(dāng)且僅當(dāng)條件為真時(shí),大于零。這個(gè)數(shù)可結(jié)合一足夠大的因子通過指令mul_sat標(biāo)準(zhǔn)化為零或1。這將重新建立公式中所使用的I{c}。
4.10其他實(shí)現(xiàn)細(xì)節(jié) 除了執(zhí)行計(jì)算所需的時(shí)間之外,GPU中的每次傳遞都有一個(gè)固定性能開支。此外,包含在GPU驅(qū)動(dòng)程序中的編譯器通常無法優(yōu)化像素著色器程序。為了實(shí)現(xiàn)良好性能,這些因素使得合并每個(gè)像素著色器程序中盡可能多的計(jì)算顯得非常重要。
現(xiàn)有的為CPU而設(shè)計(jì)的卷積神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn),把計(jì)算的每個(gè)概念組成部分視為一可分離函數(shù),例如卷積、子采樣以及它們的衍生物。前面的逐步推導(dǎo)公式的分析推導(dǎo)針對(duì)GPU提出了優(yōu)化,減少了這項(xiàng)開支。
另外,因?yàn)樵贕PU上分配和解除分配的開支巨大,為將費(fèi)用減到最小,在一個(gè)較佳實(shí)現(xiàn)中,在過程開始時(shí)就定義所有像素著色器程序,為所有紋理分配地址,一直重復(fù)使用直到過程結(jié)束。通常認(rèn)為,CPU和GPU之間的數(shù)據(jù)傳輸開支昂貴,但是因?yàn)閿?shù)據(jù)量相對(duì)較小,可以在不進(jìn)行不犧牲大量時(shí)間優(yōu)化的情況下完成。例如,在一個(gè)實(shí)現(xiàn)中,每個(gè)訓(xùn)練樣本所需傳遞的僅僅是與輸入(通常是29×29像素)相應(yīng)的像素片和正確的分類。
5.計(jì)算環(huán)境 上述神經(jīng)網(wǎng)絡(luò)訓(xùn)練方法可以在執(zhí)行數(shù)字媒體信號(hào)處理的各種設(shè)備中實(shí)施,包括計(jì)算機(jī);圖像和視頻記錄、傳輸和接收設(shè)備;便攜式視頻播放器;視頻會(huì)議等。上述技術(shù)可在硬件電路中實(shí)施,也可用在計(jì)算機(jī)或其他計(jì)算環(huán)境中執(zhí)行的數(shù)字媒體處理軟件來實(shí)現(xiàn),所述計(jì)算環(huán)境例如圖8所示的環(huán)境。
圖8例示了一個(gè)普遍的合適的計(jì)算環(huán)境(800)的示例,上述具體內(nèi)容可以在該環(huán)境中實(shí)現(xiàn)。因?yàn)楸景l(fā)明可以實(shí)現(xiàn)于多樣的通用或?qū)S糜?jì)算環(huán)境中,計(jì)算環(huán)境(800)不用來限制本發(fā)明的使用范圍或功能范圍。
參見圖8,計(jì)算環(huán)境(800)包括至少一個(gè)處理單元(810)、一個(gè)GPU(815)和存儲(chǔ)器(820)。在圖8中,最基本的配置(830)包括在虛線內(nèi)。處理單元(810)執(zhí)行計(jì)算機(jī)可執(zhí)行指令,該處理單元(810)可以是一真實(shí)或虛擬處理器。在一多處理系統(tǒng)中,多處理單元執(zhí)行計(jì)算機(jī)可執(zhí)行指令以增強(qiáng)處理能力。存儲(chǔ)器(820)可以是易失性存儲(chǔ)器(例如寄存器、高速緩存、RAM)、非易失性存儲(chǔ)器(例如ROM、EEPROM、閃存等),或兩者的組合。存儲(chǔ)器(820)存儲(chǔ)執(zhí)行上述編碼器/解碼器和有效的轉(zhuǎn)換系數(shù)編碼/解碼技術(shù)的軟件(880)。GPU(815)與處理單元810整合在一單個(gè)電路板上或包含在不同電路板中。在一個(gè)實(shí)現(xiàn)中,GPU(815)有如圖3所示的結(jié)構(gòu)。
一計(jì)算環(huán)境可能有其他特征。例如,計(jì)算環(huán)境(800)包括存儲(chǔ)器(800)、一個(gè)或多個(gè)輸入設(shè)備(850)、一個(gè)或多個(gè)輸出設(shè)備(860)和一個(gè)或多個(gè)通信連接(870)。像總線、控制器或網(wǎng)絡(luò)這樣的相互連接機(jī)構(gòu)(圖中未示出)相互連接計(jì)算環(huán)境(800)中的各組件。通常地,操作系統(tǒng)軟件(圖中未示出)為計(jì)算環(huán)境(800)中執(zhí)行的其他軟件提供一操作環(huán)境,并且協(xié)調(diào)計(jì)算環(huán)境(800)中的各組件的活動(dòng)。
存儲(chǔ)器(840)可以是可移動(dòng)的或不可移動(dòng)的,并且包括磁盤、磁帶或磁帶盒、CD-ROMs,CD-RWs,DVDs,或其他可用來存儲(chǔ)信息并且能在計(jì)算環(huán)境(800)中訪問的介質(zhì)。存儲(chǔ)器(840)存儲(chǔ)執(zhí)行上述神經(jīng)網(wǎng)絡(luò)訓(xùn)練方法的軟件的指令(880)。
輸入設(shè)備(850)可以是觸摸輸入設(shè)備如鍵盤、鼠標(biāo)、筆或跟蹤球、一聲音輸入設(shè)備、一掃描設(shè)備、或其他向計(jì)算環(huán)境(800)提供輸入的設(shè)備。對(duì)于音頻來說,輸入設(shè)備(850)可以是一聲卡或其他可接收模擬或數(shù)字形式音頻輸入的類似的設(shè)備,或一向計(jì)算環(huán)境提供音頻樣本的CD-ROM閱讀器。輸出設(shè)備(860)可以是一顯示器、打印機(jī)、揚(yáng)聲器、CD記錄器、或其他能在計(jì)算環(huán)境(800)中提供輸出的其他設(shè)備。
通信連接(870)能通過通信介質(zhì)與其他計(jì)算實(shí)體進(jìn)行通信。通信介質(zhì)傳遞信息,如計(jì)算機(jī)可執(zhí)行指令、壓縮音頻或視頻信息、或調(diào)制的數(shù)據(jù)信號(hào)中的其他數(shù)據(jù)。調(diào)制的數(shù)據(jù)信號(hào)通過設(shè)定或改變其一個(gè)或多個(gè)特征的方法來實(shí)現(xiàn)信號(hào)內(nèi)信息的編碼。作為例子而非限制,通信媒介包括應(yīng)用了電、光、射頻、紅外、聲,或其他載體的有線或無線技術(shù)。
這里的數(shù)字媒體處理技術(shù)可在計(jì)算機(jī)可讀媒體的一般上下文中描述。計(jì)算機(jī)可讀媒體是任何可在一計(jì)算機(jī)環(huán)境中被訪問的可用媒體。作為例子而非限制,計(jì)算機(jī)可讀媒體包括存儲(chǔ)器(820)、存儲(chǔ)器(840)、通信媒體和它們的任意組合。
這里的神經(jīng)網(wǎng)絡(luò)訓(xùn)練技術(shù)可以在計(jì)算機(jī)可執(zhí)行指令的一般上下文中描述,例如包括在程序模塊中的計(jì)算機(jī)可執(zhí)行指令,在一目標(biāo)真實(shí)或虛擬處理器上的計(jì)算環(huán)境中執(zhí)行的計(jì)算機(jī)可執(zhí)行指令。一般地,程序模塊包括執(zhí)行具體任務(wù)或?qū)崿F(xiàn)具體抽象數(shù)據(jù)類型的例程、程序、程序庫、對(duì)象、類、組件、數(shù)據(jù)結(jié)構(gòu)等。程序模塊的功能可以在上述各實(shí)施例中的程序模塊中組合或分離。程序模塊的計(jì)算機(jī)可執(zhí)行指令可以在本地或分布式計(jì)算環(huán)境中執(zhí)行。
為了便于表述,本具體實(shí)施方式
部分使用了如“確定”、“生成”、“調(diào)整”和“應(yīng)用”之類的術(shù)語來描述一計(jì)算環(huán)境中的計(jì)算機(jī)運(yùn)作。這些術(shù)語是對(duì)計(jì)算機(jī)運(yùn)作的高度抽象,不應(yīng)與人類的活動(dòng)混淆。與這些術(shù)語對(duì)應(yīng)的真實(shí)的計(jì)算機(jī)運(yùn)作根據(jù)實(shí)現(xiàn)而改變。
由于這里描述的主題有多種可能的變形,因此本發(fā)明的所有實(shí)施例,以及等價(jià)的方法都在本發(fā)明所要求保護(hù)的范圍之內(nèi)。
權(quán)利要求
1.一種訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)以利用圖形處理單元(“GPU”)以及一個(gè)或多個(gè)GPU可執(zhí)行程序可讀的圖形數(shù)據(jù)來識(shí)別圖像的計(jì)算機(jī)實(shí)現(xiàn)的方法,所述圖形數(shù)據(jù)表示所述卷積神經(jīng)網(wǎng)絡(luò)的狀態(tài),所述方法包括
在GPU上執(zhí)行一個(gè)或多個(gè)GPU可執(zhí)行程序,以在所述卷積神經(jīng)網(wǎng)絡(luò)中執(zhí)行一正向傳遞;
在GPU上執(zhí)行一個(gè)或多個(gè)GPU可執(zhí)行程序,以在所述卷積神經(jīng)網(wǎng)絡(luò)中執(zhí)行一反向傳遞;
在GPU上執(zhí)行一個(gè)或多個(gè)GPU可執(zhí)行程序,以基于反向傳遞的結(jié)果修正所述圖形數(shù)據(jù);以及
重復(fù)執(zhí)行一個(gè)或多個(gè)GPU可執(zhí)行程序,以執(zhí)行正向傳遞、反向傳遞,并且修正所述圖形數(shù)據(jù),直到所述卷積神經(jīng)網(wǎng)絡(luò)得到訓(xùn)練。
2.如權(quán)利要求1所述的方法,其特征在于,所述圖形數(shù)據(jù)包括表示一個(gè)或多個(gè)神經(jīng)網(wǎng)絡(luò)變量的一個(gè)或多個(gè)紋理。
3.如權(quán)利要求2所述的方法,其特征在于
所述一個(gè)或多個(gè)紋理包括二維紋理;以及
至少一個(gè)或多個(gè)所述紋理表示一個(gè)超過二維的神經(jīng)網(wǎng)絡(luò)變量,該神經(jīng)網(wǎng)絡(luò)變量已被扁平化為二維。
4.如權(quán)利要求2所述的方法,其特征在于一紋理中所表示的值的地址通過一輸出紋理的左上角的x和y的偏移量坐標(biāo)的線性組合來確定。
5.如權(quán)利要求1所述的方法,其特征在于
所述GPU可執(zhí)行程序以一個(gè)或多個(gè)像素著色器程序的形式寫入。
6.如權(quán)利要求1所述的方法,其特征在于,所述圖形數(shù)據(jù)利用梯度下降來進(jìn)行調(diào)整。
7.如權(quán)利要求6所述的方法,其特征在于
所述一個(gè)或多個(gè)程序利用公式來計(jì)算偏導(dǎo)數(shù)以確定一梯度;以及
所述公式用代數(shù)方法進(jìn)行組合和簡化以減少對(duì)像素著色器程序的調(diào)用。
8.如權(quán)利要求1所述的方法,其特征在于
所述神經(jīng)網(wǎng)絡(luò)包括一個(gè)或多個(gè)全連接層;以及
所述一個(gè)或多個(gè)GPU可執(zhí)行程序包括利用了全連接層的單獨(dú)公式的對(duì)于一個(gè)或多個(gè)全連接層特定的一個(gè)或多個(gè)GPU可執(zhí)行程序。
9.如權(quán)利要求1所述的方法,其特征在于
所述神經(jīng)網(wǎng)絡(luò)包括一個(gè)或多個(gè)過渡層;以及
所述一個(gè)或多個(gè)GPU可執(zhí)行程序包括利用了過渡層的單獨(dú)公式的對(duì)于所述一個(gè)或多個(gè)過渡層特定的一個(gè)或多個(gè)GPU可執(zhí)行程序。
10.如權(quán)利要求1所述的方法,其特征在于,所述圖形數(shù)據(jù)描述覆蓋視口的單一三角形。
11.如權(quán)利要求1所述的方法,其特征在于
所述一個(gè)或多個(gè)GPU可執(zhí)行程序包括一個(gè)或多個(gè)求和運(yùn)算;以及
所述一個(gè)或多個(gè)求和運(yùn)算被分入到多次傳遞中。
12.如權(quán)利要求1所述的方法,其特征在于,所述卷積神經(jīng)網(wǎng)絡(luò)執(zhí)行手寫識(shí)別。
13.一種或多種包括描述由如權(quán)利要求1所述的過程訓(xùn)練的卷積網(wǎng)絡(luò)的數(shù)據(jù)的計(jì)算機(jī)可讀媒體。
14.一種或多種包括指令的計(jì)算機(jī)可讀媒體,所述指令在一圖形卡上執(zhí)行時(shí)使所述圖形卡執(zhí)行一種訓(xùn)練神經(jīng)網(wǎng)絡(luò)的方法,所述方法包括
接收表示所述神經(jīng)網(wǎng)絡(luò)的多個(gè)紋理;
基于多個(gè)輸入數(shù)據(jù)計(jì)算所述神經(jīng)網(wǎng)絡(luò)的多次正向傳遞;
對(duì)于所述多次正向傳遞中的每一次,用一梯度函數(shù)計(jì)算所述神經(jīng)網(wǎng)絡(luò)的反向傳遞;以及
對(duì)于每次反向傳遞,基于所述梯度函數(shù)的結(jié)果,改變包含在所述多個(gè)紋理中的信息以影響所述神經(jīng)網(wǎng)絡(luò)的訓(xùn)練。
15.如權(quán)利要求14所述的計(jì)算機(jī)可讀媒體,其特征在于
所述神經(jīng)網(wǎng)絡(luò)被訓(xùn)練來識(shí)別手寫字符;
所述多個(gè)紋理至少部分地表示卷積核;以及
所述卷積核對(duì)表示手寫字符的輸入數(shù)據(jù)進(jìn)行處理。
16.如權(quán)利要求14所述的計(jì)算機(jī)可讀媒體,其特征在于,所述多個(gè)紋理至少部分地表示一全連接神經(jīng)網(wǎng)絡(luò)層和一過渡層。
17.一種被配置成執(zhí)行訓(xùn)練手寫識(shí)別神經(jīng)網(wǎng)絡(luò)的方法的圖形處理單元,所述圖形處理單元包括
被配置成存儲(chǔ)一個(gè)或多個(gè)圖形紋理的數(shù)據(jù)存儲(chǔ)器,所述圖形紋理描述所述手寫識(shí)別神經(jīng)網(wǎng)絡(luò);
通過像素著色器程序來配置的多個(gè)像素著色器單元,用以
對(duì)手寫輸入數(shù)據(jù)執(zhí)行所述神經(jīng)網(wǎng)絡(luò)的重復(fù)的正向傳遞和反向傳遞;
將結(jié)果存儲(chǔ)到所述多個(gè)圖形紋理中;以及
基于所述正向和反向傳遞的結(jié)果修正所述多個(gè)紋理來訓(xùn)練所述神經(jīng)網(wǎng)絡(luò)。
18.如權(quán)利要求17所述的圖形處理單元,其特征在于,所述手寫體識(shí)別神經(jīng)網(wǎng)絡(luò)至少部分地包括一卷積層和一全連接層。
19.如權(quán)利要求17所述的圖形處理單元,其特征在于,所述一個(gè)或多個(gè)圖形紋理被配置成描述一簡化的三角形圖像,以使所述圖形處理單元所執(zhí)行的所有處理只需對(duì)所述像素著色器單元的部分進(jìn)行計(jì)算。
20.如權(quán)利要求17所述的圖形處理單元,其特征在于,所述像素著色器單元被配置成使得所述神經(jīng)網(wǎng)絡(luò)的正向傳遞和反向傳遞中的求和運(yùn)算分成多個(gè)更小的求和運(yùn)算。
全文摘要
在圖形處理單元上實(shí)現(xiàn)一卷積神經(jīng)網(wǎng)絡(luò)。然后,卷積神經(jīng)網(wǎng)絡(luò)通過一系列正向傳遞和反向傳遞來進(jìn)行訓(xùn)練,其中卷積核和偏差矩陣在每一次反向傳遞中根據(jù)誤差函數(shù)的梯度得到修正。該實(shí)現(xiàn)利用圖形處理單元中的像素遮蔽單元的并行處理性能,并利用一組逐步推導(dǎo)的公式對(duì)像素遮蔽單元的計(jì)算進(jìn)行編程。程序通過紋理來完成輸入和輸出,并且使用一多級(jí)求和運(yùn)算過程對(duì)各像素遮蔽單元寄存器進(jìn)行求和運(yùn)算。
文檔編號(hào)G06F15/18GK101253493SQ200680031305
公開日2008年8月27日 申請(qǐng)日期2006年8月17日 優(yōu)先權(quán)日2005年8月31日
發(fā)明者S·普里 申請(qǐng)人:微軟公司