本發(fā)明涉及神經(jīng)網(wǎng)絡(luò)運算技術(shù)領(lǐng)域,更具體地涉及一種用于執(zhí)行hessian-free訓(xùn)練算法的裝置和方法。
背景技術(shù):
梯度下降法在函數(shù)逼近、優(yōu)化計算、模式識別和圖像處理等領(lǐng)域被廣泛應(yīng)用。目前主流的神經(jīng)網(wǎng)絡(luò)的訓(xùn)練方法是梯度下降法(結(jié)合bp算法),但是這種方法忽略了誤差函數(shù)的曲率信息,不僅容易出現(xiàn)參數(shù)變化過度平緩,從而無法收斂到局部最優(yōu)點的情況,而且無法很好的處理“病態(tài)曲率”的誤差函數(shù)(比如rosenbrock函數(shù))。hessian-free訓(xùn)練算法很好的解決了這個問題,并且通過一些細節(jié)改進,使之沒有出現(xiàn)運算量關(guān)于參數(shù)數(shù)量平方增長(和梯度下降法一樣是線性增長)的情況。
目前,一種執(zhí)行hessian-free訓(xùn)練算法的已知方法是使用通用處理器。該方法通過使用通用寄存器堆和通用功能部件執(zhí)行通用指令來支持上述算法。該方法的缺點之一是單個通用處理器的運算性能較低。而多個通用處理器并行執(zhí)行時,通用處理器之間相互通信又成為了性能瓶頸。另外,通用處理器需要把hessian-free訓(xùn)練算法對應(yīng)的相關(guān)運算譯碼成一長列運算及訪存指令序列,處理器前端譯碼帶來了較大的功耗開銷。
另一種執(zhí)行hessian-free訓(xùn)練算法的已知方法是使用圖形處理器(gpu)。該方法通過使用通用寄存器堆和通用流處理單元執(zhí)行通用simd指令來支持上述算法。由于gpu是專門用來執(zhí)行圖形圖像運算以及科學(xué)計算的設(shè)備,沒有對hessian-free訓(xùn)練算法相關(guān)運算的專門支持,仍然需要大量的前端譯碼工作才能執(zhí)行hessian-free訓(xùn)練算法中相關(guān)的運算,帶來了大量的額外開銷。另外,gpu只有較小的片上緩存,運算中所需數(shù)據(jù)(如高斯-牛頓矩陣等)需要反復(fù)從片外搬運,片外帶寬成為了主要性能瓶頸,同時帶來了巨大的功耗開銷。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明的目的在于提供一種用于執(zhí)行hessian-free訓(xùn)練算法的裝置和方法,以期堅決上述技術(shù)問題中的至少之一。
為了實現(xiàn)上述目的,作為本發(fā)明的一個方面,本發(fā)明提供了一種用于執(zhí)行hessian-free訓(xùn)練算法的裝置,包括:
控制器單元,用于將讀取的指令譯碼為控制相應(yīng)模塊的微指令,并將其發(fā)送給相應(yīng)模塊;
數(shù)據(jù)緩存單元,用于存儲運算過程中的中間變量,并對所述中間變量執(zhí)行初始化及更新操作;
數(shù)據(jù)處理模塊,用于在所述控制器單元的控制下執(zhí)行運算操作,并將中間變量存儲于所述數(shù)據(jù)緩存單元中。
其中,所述數(shù)據(jù)處理模塊包括運算控制子模塊、梯度運算子模塊、阻尼項運算子模塊、高斯-牛頓矩陣運算子模塊、共軛梯度法運算子模塊及基本運算子模塊;其中,所述基本運算子模塊進行的是矩陣、向量之間的加、乘基礎(chǔ)運算;
作為優(yōu)選,所述梯度運算子模塊、阻尼項運算子模塊、高斯-牛頓矩陣運算子模塊、共軛梯度法運算子模塊均能夠調(diào)用所述基本運算子模塊,且根據(jù)情況所述梯度運算子模塊、阻尼項運算子模塊、高斯-牛頓矩陣運算子模塊、共軛梯度法運算子模塊之間允許互相調(diào)用。
其中,所述數(shù)據(jù)緩存單元在裝置初始化時初始化f(θ)的二階估計
其中,所述數(shù)據(jù)緩存單元在初始化
所述數(shù)據(jù)處理模塊從所述數(shù)據(jù)緩存單元中讀取
作為本發(fā)明的另一個方面,本發(fā)明還提供了一種執(zhí)行hessian-free訓(xùn)練算法的方法,包括以下步驟:
步驟(1),通過指令,完成數(shù)據(jù)緩存單元的初始化操作,即初始化f(θ)的二階估計
步驟(2),通過io指令,完成直接內(nèi)存訪問單元從外部空間讀取待更新參數(shù)向量的操作;
步驟(3),數(shù)據(jù)處理模塊根據(jù)相應(yīng)指令,在θn處對誤差函數(shù)f(θ)進行二階泰勒展開,并添加阻尼項
其中,gf是f在θn處的高斯-牛頓矩陣;阻尼系數(shù)λ通過lm式啟發(fā)式方法求得;阻尼函數(shù)
步驟(4),數(shù)據(jù)處理模塊根據(jù)相應(yīng)的指令,進行有預(yù)條件的共軛梯度法求δn使得
θn+1=θn+δn;
步驟(5),數(shù)據(jù)處理單元判斷更新后的參數(shù)向量是否收斂,若收斂,運算結(jié)束,否則,轉(zhuǎn)到步驟(2)處繼續(xù)執(zhí)行。
其中,步驟(1)中所述完成數(shù)據(jù)緩存單元的初始化操作的步驟包括:對梯度
其中,步驟(3)中當進行rnn訓(xùn)練時,
阻尼函數(shù)
其中s和f均是距離函數(shù),gs是s在θn處的高斯-牛頓矩陣,μ是一個預(yù)先確定好的正數(shù)。
其中,步驟(4)所述進行有預(yù)條件的共軛梯度法求δn使得
作為本發(fā)明的再一個方面,本發(fā)明還提供了一種執(zhí)行hessian-free訓(xùn)練算法的方法,其特征在于,包括以下步驟:
步驟s1,在指令緩存單元的首地址處預(yù)先存入一條io指令。
步驟s2,運算開始,控制器單元從指令緩存單元的首地址讀取該條io指令,根據(jù)譯出的微指令,直接內(nèi)存訪問單元從外部地址空間讀取所有與hessian-free計算有關(guān)的所有指令,并將其緩存入指令緩存單元中;
步驟s3,控制器單元從指令緩存單元讀入一條io指令,根據(jù)譯出的微指令,直接內(nèi)存訪問單元從外部空間讀取初始待更新參數(shù)向量θ0到數(shù)據(jù)處理模塊中;
步驟s4,控制器單元從指令緩存單元讀入賦值指令,根據(jù)譯出的微指令,數(shù)據(jù)緩存單元中的
步驟s5,控制器單元從指令緩存單元讀入一條io指令,根據(jù)譯出的微指令,直接內(nèi)存訪問單元從外部空間讀取待更新參數(shù)向量θn傳入到數(shù)據(jù)處理模塊中;
步驟s6,控制器單元從指令緩存單元讀入一條對誤差函數(shù)在當前參數(shù)向量值附近進行二階估計的指令,根據(jù)譯出的微指令,進行求f(θ)在θn附近的二階估計
步驟s7,控制器單元從指令緩存單元讀取一條數(shù)據(jù)傳輸指令,根據(jù)譯出的微指令,將
步驟s8,控制器單元從指令緩存單元讀取一條參數(shù)更新運算指令,根據(jù)譯出的微指令,進行用有預(yù)條件的共軛梯度法求δn使得
步驟s9,控制器單元從指令緩存單元讀取一條io指令,根據(jù)譯出的微指令,更新后的參數(shù)向量θn+1從數(shù)據(jù)處理單元通過直接內(nèi)存訪問單元傳送至外部指定空間;
步驟s10,控制器單元從指令緩存單元讀取一條收斂判斷指令,根據(jù)譯出的微指令,數(shù)據(jù)處理單元判斷更新后的參數(shù)向量θn+1是否收斂:若收斂,運算結(jié)束;否則,迭代次數(shù)n的值增長1,轉(zhuǎn)回執(zhí)行步驟s5。
作為本發(fā)明的還一個方面,本發(fā)明還提供了一種執(zhí)行hessian-free訓(xùn)練算法的裝置,所述裝置的控制器中固化有執(zhí)行如上所述的執(zhí)行hessian-free訓(xùn)練算法的方法的程序。
基于上述技術(shù)方案可知,本發(fā)明的裝置和方法具有如下有益效果:使用該裝置可以實現(xiàn)hessian-free訓(xùn)練算法,完成對各種神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,如自動編碼器(auto-encoders)、卷積神經(jīng)網(wǎng)絡(luò)(rnn)等;通過采用專門用于執(zhí)行hessian-free訓(xùn)練算法的設(shè)備,可以解決數(shù)據(jù)的通用處理器運算性能不足,前段譯碼開銷大的問題,加速相關(guān)應(yīng)用的執(zhí)行速度;同時,對數(shù)據(jù)緩存單元的應(yīng)用,避免了反復(fù)向內(nèi)存讀取數(shù)據(jù),降低了內(nèi)存訪問的帶寬。
附圖說明
圖1為根據(jù)本發(fā)明一實施例的用于實現(xiàn)hessian-free訓(xùn)練算法相關(guān)應(yīng)用的裝置的整體結(jié)構(gòu)示例框圖;
圖2為根據(jù)本發(fā)明一實施例的用于實現(xiàn)hessian-free訓(xùn)練算法相關(guān)應(yīng)用的裝置中數(shù)據(jù)處理模塊的示例框圖;
圖3為根據(jù)本發(fā)明一實施例的用于實現(xiàn)hessian-free訓(xùn)練算法相關(guān)應(yīng)用的運算流程圖。
具體實施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,以下結(jié)合具體實施例,并參照附圖,對本發(fā)明作進一步的詳細說明。通過以下詳細描述,本發(fā)明的其它方面、優(yōu)勢和突出特征對于本領(lǐng)域技術(shù)人員將變得顯而易見。
在本說明書中,下述用于描述本發(fā)明原理的各種實施例只是說明,不應(yīng)該以任何方式解釋為限制發(fā)明的范圍。參照附圖的下述描述用于幫助全面理解由權(quán)利要求及其等同物限定的本發(fā)明的示例性實施例。下述描述包括多種具體細節(jié)來幫助理解,但這些細節(jié)應(yīng)認為僅僅是示例性的。因此,本領(lǐng)域普通技術(shù)人員應(yīng)認識到,在不背離本發(fā)明的范圍和精神的情況下,可以對本文中描述的實施例進行多種改變和修改。此外,為了清楚和簡潔起見,省略了公知功能和結(jié)構(gòu)的描述。此外,貫穿附圖,相同參考數(shù)字用于相似功能和操作。
本發(fā)明公開了一種用于執(zhí)行hessian-free訓(xùn)練算法的裝置,包括指令緩存單元、指令譯碼單元、直接內(nèi)存訪問單元、數(shù)據(jù)處理模塊和數(shù)據(jù)緩存模塊。使用該裝置可以實現(xiàn)hessian-free訓(xùn)練算法,完成對各種神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,如自動編碼器(auto-encoders)、卷積神經(jīng)網(wǎng)絡(luò)(rnn)等。每次迭代時,對誤差函數(shù)(目標函數(shù))做二階泰勒展開,并且添加阻尼項,作為目標函數(shù)的估計,之后根據(jù)當前的梯度、高斯-牛頓矩陣、阻尼函數(shù)(damplingfunction)和阻尼系數(shù)(damplingconstant),用有預(yù)條件的共軛梯度法(preconditioningcg-minimize)求得更新向量,更新待更新參數(shù)。持續(xù)迭代直至待更新參數(shù)向量收斂。
更具體地,本發(fā)明的裝置包括直接內(nèi)存控制單元、指令緩存單元、控制器單元、數(shù)據(jù)緩存單元和數(shù)據(jù)處理模塊。其中,直接內(nèi)存訪問單元能夠訪問外部地址空間,可以向裝置內(nèi)部各個緩存單元讀寫數(shù)據(jù),完成數(shù)據(jù)的加載和存儲,具體包括向指令緩存單元讀取指令,從指定存儲單元之間讀取待更新參數(shù)和對應(yīng)的梯度值到數(shù)據(jù)處理單元,將更新后的參數(shù)向量從數(shù)據(jù)處理模塊直接寫入外部指定空間;指令緩存單元通過直接內(nèi)存訪問單元讀取指令,并緩存讀入的指令;控制器單元從指令緩存單元中讀取指令,將指令譯碼為控制其他模塊行為的微指令并將其發(fā)送給其他模塊如直接內(nèi)存訪問單元、數(shù)據(jù)緩存單元、數(shù)據(jù)處理模塊等;數(shù)據(jù)緩存單元存儲裝置運行中需要的一些中間變量,并對這些變量做初始化及更新操作;數(shù)據(jù)處理模塊根據(jù)指令做相應(yīng)的運算操作。
此外,本發(fā)明還公開了一種執(zhí)行hessian-free訓(xùn)練算法的方法,包括以下步驟:
步驟(1),通過指令,完成數(shù)據(jù)緩存單元的初始化操作,即初始化f(θ)的二階估計
步驟(2),通過io指令,完成直接內(nèi)存訪問單元從外部空間讀取待更新參數(shù)向量的操作。
步驟(3),數(shù)據(jù)處理模塊根據(jù)相應(yīng)指令,在θn處對誤差函數(shù)f(θ)進行二階泰勒展開,并添加阻尼項
其中,gf是f在θn處的高斯-牛頓矩陣;δn是更新向量;阻尼系數(shù)λ是用lm式啟發(fā)式(levenburg-marquardtstyleheuristics)的方法求得;阻尼函數(shù)
步驟(4),數(shù)據(jù)處理模塊根據(jù)相應(yīng)的指令,進行有預(yù)條件的共軛梯度法求δn使得
θn+1=θn+δn;
值得一提的是,在進行用有預(yù)條件的共軛梯度法過程中,只用“mini-batch”而不是所有樣本,并且其中涉及的高斯-牛頓矩陣乘向量的運算都是通過
步驟(5),數(shù)據(jù)處理單元判斷更新后的參數(shù)向量是否收斂,若收斂,運算結(jié)束,否則,轉(zhuǎn)到步驟(2)處繼續(xù)執(zhí)行。
根據(jù)本發(fā)明實施例實現(xiàn)的hessian-free訓(xùn)練算法的裝置,可以用以支持使用hessian-free訓(xùn)練算法方面的應(yīng)用。在數(shù)據(jù)緩存單元開辟一個空間存儲誤差函數(shù)在每一代待更新參數(shù)附近的二階估計,在每次進行有預(yù)條件的共軛梯度法時,利用該二階估計計算一個更新向量,然后進行對待更新向量的更新操作。重復(fù)進行上述步驟,直至待更新向量收斂。
下面結(jié)合附圖的本發(fā)明的技術(shù)方案進行進一步闡述說明。
圖1示出了根據(jù)本發(fā)明一實施例的用于實現(xiàn)hessian-free訓(xùn)練算法的裝置的整體結(jié)構(gòu)示例框圖。如圖1所示,該裝置包括直接內(nèi)存訪問單元1、指令緩存單元2、控制器單元3、數(shù)據(jù)緩存單元4和數(shù)據(jù)處理模塊5,均可以通過硬件電路實現(xiàn)。
直接內(nèi)存訪問單元1能夠訪問外部地址空間,可以向裝置內(nèi)部各個緩存單元讀寫數(shù)據(jù),完成數(shù)據(jù)的加載和存儲。具體包括向指令緩存單元2讀取指令,從指定存儲單元之間讀取待更新參數(shù)到數(shù)據(jù)處理單元5,將更新后的參數(shù)向量從數(shù)據(jù)處理模塊5直接寫入外部指定空間。
指令緩存單元2通過直接內(nèi)存訪問單元1讀取指令,并緩存讀入的指令。
控制器單元3從指令緩存單元2中讀取指令,將指令譯碼為控制其他模塊行為的微指令并將其發(fā)送給其他模塊如直接內(nèi)存訪問單元1、數(shù)據(jù)緩存單元4、數(shù)據(jù)處理模塊5等。
數(shù)據(jù)緩存單元4在裝置初始化時初始化
數(shù)據(jù)處理模塊5從數(shù)據(jù)緩存單元4中讀取
圖2示出了根據(jù)本發(fā)明實施例的用于實現(xiàn)hessian-free訓(xùn)練算法相關(guān)應(yīng)用的裝置中數(shù)據(jù)處理模塊的示例框圖。如圖2所示,數(shù)據(jù)處理模塊包括運算控制子模塊51、梯度運算子模塊52、阻尼項運算子模塊53、高斯-牛頓矩陣運算子模塊54、共軛梯度法運算子模塊55以及基本運算子模塊56。其中,基本運算子模塊56進行的是矩陣、向量之間的加乘等基礎(chǔ)運算,52、53、54、55子模塊都會調(diào)用56子模塊,并且根據(jù)情況,這些模塊互相之間也允許互相調(diào)用。
圖3示出了根據(jù)hessian-free訓(xùn)練算法進行相關(guān)運算的裝置的總體流程圖。
在步驟s1,在指令緩存單元2的首地址處預(yù)先存入一條io指令。
在步驟s2,運算開始,控制單元3從指令緩存單元2的首地址讀取該條io指令,根據(jù)譯出的微指令,直接內(nèi)存訪問單元1從外部地址空間讀取所有與hessian-free計算有關(guān)的所有指令,并將其緩存入指令緩存單元2中。
在步驟s3,控制器單元3從指令緩存單元2讀入一條io指令,根據(jù)譯出的微指令,直接內(nèi)存訪問單元1從外部空間讀取初始待更新參數(shù)向量θ0到數(shù)據(jù)處理模塊5中。
在步驟s4,控制器單元3從指令緩存單元2讀入賦值指令,根據(jù)譯出的微指令,數(shù)據(jù)緩存單元4中的
在步驟s5,控制器單元3從指令緩存單元2讀入一條io指令,根據(jù)譯出的微指令,直接內(nèi)存訪問單元1從外部空間讀取待更新參數(shù)向量θn傳入到數(shù)據(jù)處理模塊5中。
在步驟s6,控制器單元3從指令緩存單元2讀入一條對誤差函數(shù)在當前參數(shù)向量值附近進行二階估計的指令,根據(jù)譯出的微指令,進行求f(θ)在θn附近的二階估計
在步驟s7,控制器單元3從指令緩存單元2讀取一條數(shù)據(jù)傳輸指令,根據(jù)譯出的微指令,將
在步驟s8,控制器單元3從指令緩存單元2讀取一條參數(shù)更新運算指令,根據(jù)譯出的微指令,進行用有預(yù)條件的共軛梯度法求δn使得
在步驟s9,控制器單元3從指令緩存單元2讀取一條io指令,根據(jù)譯出的微指令,更新后的參數(shù)向量θn+1從數(shù)據(jù)處理單元5通過直接內(nèi)存訪問單元1傳送至外部指定空間。
在步驟s10,控制器單元從指令緩存單元2讀取一條收斂判斷指令,根據(jù)譯出的微指令,數(shù)據(jù)處理單元判斷更新后的參數(shù)向量θn+1是否收斂:若收斂,運算結(jié)束;否則,迭代次數(shù)n的值增長1,轉(zhuǎn)回執(zhí)行步驟s5。
前面的附圖中所描繪的進程或方法可通過包括硬件(例如,電路、專用邏輯等)、固件、軟件(例如,被承載在非瞬態(tài)計算機可讀介質(zhì)上的軟件),或兩者的組合的處理邏輯來執(zhí)行。雖然上文按照某些順序操作描述了進程或方法,但是,應(yīng)該理解,所描述的某些操作能以不同順序來執(zhí)行。此外,可并行地而非順序地執(zhí)行一些操作。
在前述的說明書中,參考其特定示例性實施例描述了本發(fā)明的各實施例。顯然,可對各實施例做出各種修改,而不悖離所附權(quán)利要求所述的本發(fā)明的更廣泛的精神和范圍。相應(yīng)地,說明書和附圖應(yīng)當被認為是說明性的,而不是限制性的。