謝佳砼
(西安市宇航中學,陜西西安,710038)
卷積神經(jīng)網(wǎng)絡已經(jīng)廣泛運用與識別,模仿生物識別有較高的準確,最近深度學習的算法受到廣泛關注,基于軟件硬件的加速方法相繼提出,軟件算法中較為突出的為二值網(wǎng)絡的加速,硬件FPFA的并行性得到了廣泛的應用。
二值神經(jīng)網(wǎng)絡自從1943年提出以來,由于缺乏有效的從訓練數(shù)據(jù)中學習網(wǎng)絡系數(shù)的算法,而且相關理論的發(fā)展沒有引起足夠的關注,從而迅速被單精度神經(jīng)網(wǎng)絡迅速超越,未成為神經(jīng)網(wǎng)絡研究應用的主流,然而直至今日二值神經(jīng)網(wǎng)絡的使用價值被發(fā)現(xiàn)出來。在日新月異的現(xiàn)代社會里,科技日益更新?lián)Q代,互聯(lián)網(wǎng)信息的傳輸?shù)乃俣蕊@得格外重要,這時便少不了二值神經(jīng)網(wǎng)絡。
而二值卷積神經(jīng)網(wǎng)絡和普通的神經(jīng)網(wǎng)路相比有什么樣的優(yōu)點或缺點呢?從優(yōu)勢上來講,最大的一點就是其計算的簡單性,相較于普通的神經(jīng)網(wǎng)絡,二值神經(jīng)網(wǎng)絡的運算簡單性體現(xiàn)在網(wǎng)絡中間值與網(wǎng)絡參數(shù)的簡單性,將浮點運算簡化成為了整數(shù)計算,這無疑大大提升了其運算的速度,由于計算的量減少,所以其功耗也大大減少,這也其另一個優(yōu)點。但是,二值神經(jīng)網(wǎng)絡的缺點也很明顯,由于其算法將參數(shù)約束到+1和-1之間,所以其反在向傳播中存在求導的問題,導致其預測準確率不夠高,而這也是我們要解決的一個問題。用如何方式運算得到更高精度的深度卷積網(wǎng)絡,成為了一大難題。
二值神經(jīng)網(wǎng)絡的發(fā)展和改進會大大的改造人類現(xiàn)在的生活情況,造福于社會生活,同時二值神經(jīng)網(wǎng)絡的原理十分新穎,走在時代的前沿,專家認為二值神經(jīng)網(wǎng)絡的發(fā)展會使完全的自動駕駛成為現(xiàn)實,其中二值神經(jīng)網(wǎng)絡的運輸簡便性則是信息快速運輸?shù)幕A,從而進一步實現(xiàn)實時傳遞。同時,想通過前沿文獻的閱讀基本了解二值網(wǎng)絡神經(jīng)的運行機制,并且通過計算機的幫助進一步加深對二值神經(jīng)網(wǎng)絡的了解。
雖然深度卷積神經(jīng)網(wǎng)絡在許多計算機視覺任務中已經(jīng)取得了相當好的性能,但是大的復雜的計算和參數(shù)大小阻礙了其在移動設備上的應用。 所以提出了各種方法來緩解這些問題:
(1)網(wǎng)絡的修剪
從原理上來講,神將網(wǎng)絡的層數(shù)越多參數(shù)越多,最后所接受到的信息就會越精確,但是越精確也就意味著我們需要消耗更多的時間去進行計算,所以想要減少計算量就需要利用到網(wǎng)絡修建技術,也就是把傳遞的信息中作用不大的信息給修剪掉,進而使得運算速率變快。若過多的參數(shù)會使得網(wǎng)絡過擬合,訓練起來過慢效果不佳,使得測試集誤差過大,若過少的參數(shù)會使得網(wǎng)絡無法訓練,使得訓練集誤差無法縮減。選取合適的參數(shù)是一個很重要的問題,需要得到一個性價比最好的參數(shù)。
(2)網(wǎng)絡的數(shù)據(jù)降維
在平時的生活中會利用計算機去處理一些復雜的問題,但是處理的文件越復雜其維度也就越高也就越難處理,所以數(shù)據(jù)降維也就是把數(shù)據(jù)的維度降低了,再進一步理解就是有用數(shù)據(jù)的保留和無關數(shù)據(jù)的丟棄,便于計算的可視化,其方法則是將高緯度的的數(shù)據(jù)特征映射到低維度再進行處理。選取合適的維度是一個重要的裁剪網(wǎng)絡的方式,可以大大的降低網(wǎng)絡的復雜度。
(3)哈希與神經(jīng)網(wǎng)絡
哈希算法是平時解決網(wǎng)絡數(shù)據(jù)處理問題的一個重要的方法,而在這里又將哈希算法與神經(jīng)網(wǎng)絡加以結合,能夠使神經(jīng)網(wǎng)絡的計算速度變快,將原來的浮點型權值映射到二值。哈希算法是一個映射,應用哈希映射在深度卷積網(wǎng)絡是一個較為有效的方式。如何在網(wǎng)絡中完成哈希運算是我們需要深思的問題。
BNN在本節(jié)中我們詳細介紹了二值化函數(shù),以及我們?nèi)绾斡盟鼇碛嬎銋?shù)梯度,以及我們?nèi)绾畏聪騻鞑ニ?。反向傳播遇到了無法求導的問題,如何解決這個問題是一個我們需要解決的難點。
訓練BNN時,我們將權值和激活值約束在+1和-1之間,從硬件角度來看,這兩只是十分有利于計算的,所以,為了將變量轉(zhuǎn)換稱這兩個值,我們使用了兩種不同的二值化函數(shù)。
我們第一個使用的是確定性的
其中 Xb是二值化變量(權值或激活值),x是實值變量。它實現(xiàn)起來非常簡單,并且在實踐中運行得十分良好。
我們第二個使用的是隨機性的:
其中σ是一個硬性的sigmoid函數(shù):
隨機二值化函數(shù)比符號函數(shù)更具吸引力,但實際上更難實現(xiàn),因為它需要硬件在量化時生成隨機的數(shù)值。 因此,我們主要使用確定性二值化函數(shù)(即符號函數(shù))。
雖然我們的訓練是用二值化的權值和激活值來計算參數(shù)梯度的,但是根據(jù)確定性算法,在每次的參數(shù)計算后都需要權重的積累和更新。由于梯度具有累加效果,也就是說梯度是帶有一定噪音的。所以通過在每個權重中累積的隨機梯度貢獻來平均噪聲,多次累加梯度才能把噪音平均消耗掉。而且,二值化也就是給權值和激活值增添了噪聲,而這樣的量化噪聲是能夠很好的去調(diào)節(jié)權值,可以防止模型過擬合。我們訓練BNN的方法可以看作是Dropout的一種變型,在計算參數(shù)梯度時,我們不是將激活值的一半隨機設置為零,而是將激活和權重二值化,二值化則是將另一半變成1,所以可以看做是進一步的Dropout。
由決定式算法我們可以看出,對其直接求導得出的值全部是零,很顯然它對于反向傳播來說很不合適,對于權值就無法進行一個更新,所以說我們引入了一個硬性的寬松函數(shù),對Sign(x)函數(shù)進行一個寬松,這樣我們就可以進行求導了。
我們遵循類似的方法考慮到了符號函數(shù)的量化,并假設已獲得梯度的估計量g,然后我們對于的估算就q會很簡單。
即:
圖1 sign(x)函數(shù)以及Htanh(x)函數(shù)
其中1|r|<=1的計算公式就是Htanh。
對于隱藏層,我們使用符號函數(shù)非線性來獲得二值化的激活值,對于權重,我們將兩個成分組合在一起:
W 投影到-1或1。 否則,權值會變得非常大,而不會對二值化的權重產(chǎn)生任何影響。
再向前傳遞的過程中,我們先需要對權值進行一個二值化處理,處理之后,對二值化的權值進行一個伸縮處理,之后會得到一個中間值以及網(wǎng)絡參數(shù)θ,最后對于中間量和參數(shù)進行歸一化處理更新伸縮量。
再向后傳遞的過程中,因為我們之前把二值函數(shù)轉(zhuǎn)化成為了一個可導的函數(shù),所以我們要先求出其參數(shù)梯度,然后將參數(shù)梯度、中間量、網(wǎng)絡系數(shù)三個值進行反歸一化處理,就能夠得到中間量和系數(shù)的導數(shù),由于:
所以我們可以得到:
而在梯度參數(shù)的積累中,我們先利用網(wǎng)絡的參數(shù)θ及其導數(shù)和學習值η去更新網(wǎng)絡的參 數(shù),進而的到所需的權值,最后再用一個λ去逐漸減少學習值η,進而達到信息反向傳遞的目的。
而h( x)和g( w)則是x和w的哈希函數(shù),也就是說將x和w映射到+1和-1上,在之前曾經(jīng)提到過:
這是最原始的二值函數(shù),也就是將二值的權重與哈希結合在了一起,但是在這里并不使用這個函數(shù),而去借用哈希進行一個映射,而關于這個映射則需要使:
達到最小,在這里我受到了Rastegari的啟發(fā),引入了一個A,進而得到了:
其中A是對角矩陣, ai=Aii是Bi的縮放因子,最后我們的目標函數(shù)是:
由上一個公式我們又可以得到:
而在這里需要的是將αi看成常數(shù),用這個公式去更新Bi,則令Z=α·X, q=α·XSi,且 T r()是一個求跡函數(shù),代換后可以得到:
所以用這樣的一個公式就可以很容易地進行求導,進而對Bi進行更新,那么對于α的更新也同樣需要上面所說的函數(shù)對α進行更新,首先要對其求導:
令其導數(shù)等于零,則得到:
最后對α進行更新。
再回歸到求最小值上,還是由于二值函數(shù)求導是沒有辦法算出參數(shù)梯度的,所以我又通過運用Shen等人在2015年所推導出的公式去進行一個最小值的運算:
在這個式子里Bi代表著在B這個矩陣中只有第i列在不斷更新,而就是把Bi去掉后B中的所有數(shù)據(jù), 而則是將Z的第j行給去掉后的所有數(shù)據(jù),v就是Z的第j行,qj是q向量中的第j個元素。
若要取得最小值,就要使其乘積為負值,那么就得到了:
本文從解決實際生活中因計算量過大無法進行實時傳播,以及功耗過大導致其無法很好的運用到移動設備上,從而提出了二值化卷積神經(jīng)網(wǎng)絡,以及運用哈希映射簡化了其運算的復雜程度,BNN大幅減少內(nèi)存和訪問所需的大小,并重新將大多數(shù)算術運算放在逐位運算中,這可能會使功耗大大降低,使得其在小的智能設備上使用,以及實時傳遞的實現(xiàn)。
可以在未來應用可以實時自動駕駛,以及監(jiān)控拍攝,道路預測。