任紅萍, 陳敏捷, 王子豪, 楊 春, 殷緒成
(北京科技大學(xué) 計(jì)算機(jī)與通信工程學(xué)院, 北京 100083)
網(wǎng)絡(luò)技術(shù)的飛速發(fā)展和各種電子設(shè)備成本的下降為當(dāng)今信息傳播的爆炸式發(fā)展提供了契機(jī), 我們現(xiàn)在接觸到的海量信息均依托于不同的信息載體. 其中圖片和視頻是日常生活中非常重要和直接的兩種信息來(lái)源, 在今天的社交活動(dòng)、娛樂(lè)活動(dòng)中扮演著重要的角色. 這些視覺(jué)數(shù)據(jù)除了圖形本身傳遞的信息外, 往往還包含文本元素, 這些文本能夠更加直接的傳遞信息, 也因此需要被研究人員重點(diǎn)關(guān)注.
由于近年來(lái)深度學(xué)習(xí)算法的發(fā)展, 場(chǎng)景文本識(shí)別技術(shù)取得了豐碩的成果[1]. 目前深度學(xué)習(xí)中的場(chǎng)景文本識(shí)別主要基于兩種思路. 第一種是將“檢測(cè)”和“識(shí)別”兩個(gè)模塊的算法替換成深度模型, 利用深度模型本身的優(yōu)勢(shì)解決問(wèn)題; 另一種是針對(duì)短文本行或單詞文本, 將檢測(cè)和識(shí)別兩部分在深度網(wǎng)絡(luò)中加以融合, 實(shí)現(xiàn)不依賴于切分的序列化文本識(shí)別. 兩種思路都在場(chǎng)景文本識(shí)別任務(wù)中取得了良好效果, 但是卻在落地產(chǎn)品時(shí)遇到了瓶頸.
深度神經(jīng)網(wǎng)絡(luò)(DNN)在眾多領(lǐng)域中取得了非常好的效果, 這離不開(kāi)硬件條件的支持. 但由于深度學(xué)習(xí)方法的計(jì)算復(fù)雜度過(guò)大, 導(dǎo)致算法對(duì)硬件環(huán)境(GPU、TPU等)的要求過(guò)高[2]. 而真正在使用一個(gè)深度模型時(shí),一旦脫離了GPU的支持, 運(yùn)算速度就會(huì)降低一個(gè)數(shù)量級(jí)以上, 導(dǎo)致很多任務(wù)中的復(fù)雜模型無(wú)法實(shí)時(shí)運(yùn)行[3-5],很多當(dāng)下流行的如手機(jī)、攝像機(jī)等能源儲(chǔ)量低、計(jì)算能力弱的設(shè)備無(wú)法有效使用深度神經(jīng)網(wǎng)絡(luò)模型[6-9].
因此人們開(kāi)始對(duì)計(jì)算方式進(jìn)行改進(jìn)優(yōu)化, 通過(guò)特定的處理方法, 降低深度模型在運(yùn)行時(shí)所需的乘法運(yùn)算量, 二值網(wǎng)絡(luò)[10,11]因其在速度、能耗、內(nèi)存占用等方面的優(yōu)勢(shì)日益被關(guān)注. 近兩年來(lái), 單純加入二值化操作的網(wǎng)絡(luò)主要有二值權(quán)重網(wǎng)絡(luò)和二值神經(jīng)網(wǎng)絡(luò)兩種方法.二值權(quán)重網(wǎng)絡(luò)(BWN)[12,13]是一種只針對(duì)神經(jīng)網(wǎng)絡(luò)系數(shù)二值化的算法. BWN只關(guān)心系數(shù)的二值化, 并采取了一種混和的策略, 構(gòu)建了一個(gè)混有單精度浮點(diǎn)型中間值與二值權(quán)重的BinaryConnect網(wǎng)絡(luò), 它把原始全精度浮點(diǎn)權(quán)重強(qiáng)行置為-1、+1兩個(gè)浮點(diǎn)數(shù), 同時(shí)不改變網(wǎng)絡(luò)的輸入和層之間的中間值, 保留原始精度. 權(quán)重取值的特點(diǎn)使得原本在神經(jīng)網(wǎng)絡(luò)中的乘法運(yùn)算可以被加法代替, 大大地減少了計(jì)算量. 而二值神經(jīng)網(wǎng)絡(luò)(BNN)不僅對(duì)權(quán)重做二值化, 也對(duì)網(wǎng)絡(luò)中間每層的輸入值進(jìn)行二值化, 它將二值浮點(diǎn)數(shù)“-1”、“+1”分別用一個(gè)比特“0”、“1”來(lái)表示, 這樣原本占用 32 個(gè)比特位的浮點(diǎn)數(shù)現(xiàn)在只需1個(gè)比特位就可存放. 然而大量的實(shí)驗(yàn)結(jié)果表明, BNN在大規(guī)模數(shù)據(jù)集上的效果很差. 它們?cè)谔嵘俣取⒔档湍芎?、減小內(nèi)存占用等方面存在巨大的可能性, 但這樣做會(huì)對(duì)識(shí)別精度造成一定的影響. 只有做到保持原有精度, 二值網(wǎng)絡(luò)、量化網(wǎng)絡(luò)的思路才能夠真正在應(yīng)用中得以實(shí)現(xiàn).
單純使用BWN或BNN確實(shí)會(huì)對(duì)深度網(wǎng)絡(luò)模型造成較大的精度損失. 同或網(wǎng)絡(luò)(XNOR-net)[14]的提出主要就是為了解決二值網(wǎng)絡(luò)精度損失的問(wèn)題. XNOR-net是一種針對(duì)CNN的簡(jiǎn)單、高效、準(zhǔn)確近似方法,核心思想是: 在BNN的基礎(chǔ)上, 針對(duì)二值化操作給每一層數(shù)據(jù)造成的誤差, 引入最佳的近似因子, 以此來(lái)彌補(bǔ)二值化帶來(lái)的精度損失, 提高訓(xùn)練精度的同時(shí)保持BNN在速度和能耗方面的優(yōu)勢(shì).
隨機(jī)量化算法的核心在于訓(xùn)練過(guò)程中考慮到量化誤差的因素, 只對(duì)誤差較小的部分權(quán)重采用一定的概率進(jìn)行量化, 其他權(quán)重則保留原始精度, 這樣對(duì)混合模型的訓(xùn)練達(dá)到收斂后, 再去量化剩余的權(quán)重, 逐步增加量化比例, 直到模型完全收斂, 接近原始精度的準(zhǔn)確率.隨機(jī)量化網(wǎng)絡(luò)算法能夠訓(xùn)練得到比BWN更高的準(zhǔn)確率, 但是對(duì)于BNN卻沒(méi)有做更進(jìn)一步的分析, 也沒(méi)有能夠利用XNOR-net這一算法給模型帶來(lái)準(zhǔn)確率方面的提升, 鑒于它的有效性, 我們需要更好的將其應(yīng)用到BNN中.
在文本識(shí)別任務(wù)中采用XNOR-net算法可以實(shí)現(xiàn)CPU條件下5倍以上的加速, 采用二值模型能夠?qū)崿F(xiàn)64倍的峰值內(nèi)存占用壓縮, 這就基本實(shí)現(xiàn)了低配硬件條件下深度模型的實(shí)時(shí)運(yùn)行. 雖然XNOR-net算法的目的是為了彌補(bǔ)二值網(wǎng)絡(luò)造成的識(shí)別精度下降, 但是僅采用這一算法依然不能有效的保證深度網(wǎng)絡(luò)訓(xùn)練模型的準(zhǔn)確率.
為了解決上述問(wèn)題, 提升二值網(wǎng)絡(luò)的訓(xùn)練精度, 本文提出了二值網(wǎng)絡(luò)的“分階段殘差二值化”優(yōu)化算法.實(shí)驗(yàn)表明, 該算法能顯著提升二值網(wǎng)絡(luò)訓(xùn)練效果而不會(huì)增加相關(guān)網(wǎng)絡(luò)在測(cè)試過(guò)程中的計(jì)算量, 從而保持了二值網(wǎng)絡(luò)速度快、空間小、能耗低的優(yōu)勢(shì). 本文使用整合得到的二值深度框架對(duì)文本識(shí)別任務(wù)展開(kāi)訓(xùn)練,主要工作包括: 將隨機(jī)量化網(wǎng)絡(luò)算法與XNOR-net相結(jié)合進(jìn)行分析與改進(jìn), 并對(duì)提出的“分階段殘差二值化”算法進(jìn)行研究與評(píng)估. 通過(guò)對(duì)上述算法的實(shí)驗(yàn)與改進(jìn), 得到接近全精度神經(jīng)網(wǎng)絡(luò)的識(shí)別準(zhǔn)確率.
本節(jié)將對(duì)隨機(jī)量化網(wǎng)絡(luò)和高階殘差量化網(wǎng)絡(luò)進(jìn)行概述, 并對(duì)這兩種網(wǎng)絡(luò)目前存在的問(wèn)題進(jìn)行簡(jiǎn)要的分析. 首先介紹了隨機(jī)量化網(wǎng)絡(luò)算法; 其次將隨機(jī)量化的思想與XNOR-net進(jìn)行結(jié)合, 得到“帶有近似因子”的隨機(jī)權(quán)重二值化網(wǎng)絡(luò); 接著, 進(jìn)一步對(duì)“隨機(jī)”的優(yōu)缺點(diǎn)進(jìn)行分析, 基于卷積計(jì)算的結(jié)構(gòu)進(jìn)行合理改進(jìn)得到“確定權(quán)重二值化網(wǎng)絡(luò)”; 最后, 對(duì)高階殘差量化網(wǎng)絡(luò)進(jìn)行了簡(jiǎn)要的概述和分析.
隨機(jī)量化網(wǎng)絡(luò)是一種針對(duì)BWN的訓(xùn)練優(yōu)化算法,算法設(shè)計(jì)的出發(fā)點(diǎn)是基于對(duì)二值化誤差的分析. 權(quán)重在二值化過(guò)程中被強(qiáng)制引入了較大誤差, 這一誤差將導(dǎo)致總體損失非常大, 從而致使網(wǎng)絡(luò)的訓(xùn)練過(guò)程極不穩(wěn)定, 無(wú)法收斂到最優(yōu)結(jié)果, 這也就是二值網(wǎng)絡(luò)準(zhǔn)確率較差的原因. 隨機(jī)量化網(wǎng)絡(luò)則試圖減小損失過(guò)大帶來(lái)的訓(xùn)練過(guò)程的劇烈震動(dòng), 這與調(diào)小學(xué)習(xí)率等訓(xùn)練技巧不謀而合. 圖1是隨機(jī)量化流程圖, 具體的實(shí)現(xiàn)過(guò)程如下文.
圖1 隨機(jī)量化流程圖
1) 預(yù)訓(xùn)練. 將二值化比例置0, 保留全部的原始精度權(quán)重, 以得到一個(gè)準(zhǔn)確率較高的預(yù)訓(xùn)練模型.
2) 隨機(jī)選取二值化權(quán)重. 提高二值化比例, 使得一部分訓(xùn)練中的權(quán)重會(huì)被二值化. 如何選取這些權(quán)重呢?首先統(tǒng)計(jì)二值化給不同權(quán)重帶來(lái)的誤差大小, 按“誤差越小, 被二值化的幾率越大”原則, 用“輪盤賭”的方式隨機(jī)選取一部分權(quán)重進(jìn)行二值化訓(xùn)練. 訓(xùn)練過(guò)程跟普通BWN一樣.
3) 將提高了二值化比例的網(wǎng)絡(luò)在預(yù)訓(xùn)的模型上進(jìn)行finetune, 直到訓(xùn)練的準(zhǔn)確率達(dá)到與之前全精度網(wǎng)絡(luò)模型接近的水準(zhǔn).
4) 在finetune成功的模型上繼續(xù)提高網(wǎng)絡(luò)二值化的比例, 重復(fù)2)、3)的步驟, 直到整個(gè)網(wǎng)絡(luò)中的模型權(quán)重被二值化的比例達(dá)到100%, 且finetune的結(jié)果達(dá)到可接受范圍.
以上就是隨機(jī)量化網(wǎng)絡(luò)的具體實(shí)現(xiàn), 其中需要注意的點(diǎn)在于“隨機(jī)”的概念, 即“中間每次訓(xùn)練的過(guò)程中被二值化的權(quán)重并不固定”. 這樣做會(huì)造成前期finetune的困難, 因?yàn)楸挥绊懙臋?quán)重較多, 需要大量權(quán)重基本調(diào)整好之后網(wǎng)絡(luò)才會(huì)收斂的比較好; 但是等到訓(xùn)練中后期, 大部分的權(quán)重已經(jīng)被調(diào)優(yōu)到了最佳位置, 這時(shí)候網(wǎng)絡(luò)的finetune會(huì)非常容易.
XNOR-net是一種有效的二值訓(xùn)練精度優(yōu)化算法,在這里我們考慮將“隨機(jī)量化”這一思想應(yīng)用在XNOR-net權(quán)重二值化中, 進(jìn)一步提升二值網(wǎng)絡(luò)的訓(xùn)練精度.隨機(jī)量化網(wǎng)絡(luò)在實(shí)現(xiàn)時(shí)并不會(huì)具體到每個(gè)權(quán)重, 而是以整個(gè)通道為單位來(lái)操作的, 而XNOR-net算法的處理也是通道級(jí)別的, 這就為我們研究如何將兩種訓(xùn)練優(yōu)化算法合理融合提供了便利.
要將XNOR-net的權(quán)重近似推導(dǎo)應(yīng)用于隨機(jī)量化網(wǎng)絡(luò), 最重要的是要解決兩點(diǎn)問(wèn)題: 一是在求近似因子時(shí), 確定參與求解的權(quán)重; 二是計(jì)算誤差時(shí)考慮近似因子帶來(lái)的變化, 而非單純的二值化誤差.
解決第一個(gè)問(wèn)題則必須要明確一點(diǎn): 出于實(shí)現(xiàn)簡(jiǎn)單的考慮, 隨機(jī)量化網(wǎng)絡(luò)并非針對(duì)每個(gè)權(quán)重都去判斷是否二值化, 而是通過(guò)同一個(gè)輸出通道上的一組權(quán)重的總誤差來(lái)決定的. 而我們?cè)趯?shí)現(xiàn)XNOR-net算法時(shí)也是在一組通道上求得一個(gè)近似因子. 這樣, 我們就可以通過(guò)對(duì)通道級(jí)別結(jié)構(gòu)的分析, 實(shí)現(xiàn)兩個(gè)算法的結(jié)合. 我們通過(guò)圖2所示的示意圖來(lái)簡(jiǎn)單回顧下權(quán)重矩陣的形狀, 并借此說(shuō)明隨機(jī)量化網(wǎng)絡(luò)的權(quán)重選取方法和XNOR-net近似因子的求解.
圖2 權(quán)重矩陣隨機(jī)求取示意圖
有了二值化的選取規(guī)則, 還需要解決的第二個(gè)問(wèn)題是: 存在近似因子時(shí)如何確定量化選取通道的概率.直觀的, 我們可以得到如下的量化誤差統(tǒng)計(jì)公式:
以上我們就完成了對(duì)“帶有近似因子的隨機(jī)權(quán)重二值化網(wǎng)絡(luò)”的研究, 具體來(lái)說(shuō), 在隨機(jī)量化網(wǎng)絡(luò)上加入XNOR-net的近似因子方法的實(shí)現(xiàn)過(guò)程可以總結(jié)為4個(gè)步驟:
2) 求出每組輸出通道上添加了近似因子后的權(quán)重量化、二值化誤差, 計(jì)算的定量表達(dá)見(jiàn)式(1);
3) 根據(jù)量化誤差, 計(jì)算每個(gè)通道的權(quán)重被進(jìn)行二值化的概率;
4) 以概率大小為依據(jù), 采用輪盤賭的方式選取可以進(jìn)行權(quán)重二值化的通道, 選中的通道被二值化. 在訓(xùn)練時(shí), 需要二值化這些通道的權(quán)重并乘上相應(yīng)的近似因子, 沒(méi)有被選中的通道則繼續(xù)保留全精度, 計(jì)算過(guò)程中不使用對(duì)應(yīng)的近似因子.
為了證明根據(jù)之前的介紹, 我們知道在隨機(jī)量化權(quán)重中加入近似因子這一優(yōu)化對(duì)于實(shí)現(xiàn)來(lái)說(shuō)會(huì)造成比較大的額外成本, 這主要是因?yàn)榱炕ǖ赖倪x取過(guò)程是“隨機(jī)的”, 而每個(gè)通道被選取的概率也是基于對(duì)二值化誤差的計(jì)算得到的. 因此, 每次對(duì)二值化通道的選取過(guò)程都需要對(duì)所有通道的二值化誤差進(jìn)行求解, 而當(dāng)引入XNOR-net算法中的近似因子操作后, 又增加了求每組通道上近似因子一項(xiàng), 額外的計(jì)算成本變得更高, 實(shí)現(xiàn)更加復(fù)雜.
本節(jié)提出的改進(jìn)辦法是將“隨機(jī)”改為“確定”, 只在初始時(shí)對(duì)每個(gè)通道計(jì)算一次二值化誤差, 然后確定進(jìn)行二值化的通道. 即每次訓(xùn)練給出確定的二值化通道, 這樣可以避免每次都對(duì)不需要量化的通道進(jìn)行計(jì)算, 在有效節(jié)省訓(xùn)練時(shí)間的同時(shí), 也簡(jiǎn)化了深度學(xué)習(xí)框架中對(duì)這一算法的實(shí)現(xiàn)過(guò)程. 由于“隨機(jī)量化網(wǎng)絡(luò)”結(jié)合了誤差的大小來(lái)選取量化通道, 而我們“確定二值化通道”的方法也在初始時(shí)利用了這一優(yōu)點(diǎn), 因此具有單次迭代訓(xùn)練比較容易收斂、后期迭代比前期迭代更快收斂的特點(diǎn).
但是“確定權(quán)重二值化”的方法確實(shí)也存在一定的問(wèn)題. 我們知道, “確定”方式可以有效地節(jié)省訓(xùn)練時(shí)間,在訓(xùn)練過(guò)程中, 隨著訓(xùn)練輪數(shù)的增加, 誤差較大的通道也能逐漸收斂. 雖然不能保證每次訓(xùn)練都對(duì)誤差最小的一些通道進(jìn)行二值化, 但是網(wǎng)絡(luò)最終都會(huì)收斂, 因此是否每次都選擇誤差最小的一些通道對(duì)訓(xùn)練結(jié)果影響甚微.
“階段量化”則是一種純線性的訓(xùn)練模式, 由于只在初始時(shí)對(duì)每個(gè)通道計(jì)算一次二值化誤差, 每次訓(xùn)練只二值化固定的通道, 其他通道不會(huì)出現(xiàn)二值化, 因此整體上看每次迭代的訓(xùn)練難度只與二值化比例有關(guān).這樣做雖然會(huì)導(dǎo)致每次二值化比例提升后都需要對(duì)所有新產(chǎn)生的二值化權(quán)重進(jìn)行調(diào)整, 看上去后期訓(xùn)練收斂的過(guò)程會(huì)相對(duì)變慢, 但是因?yàn)槎祷倪x取變成了確定式的, 使得前期訓(xùn)練收斂變得相對(duì)更容易, 因此整體上看并不會(huì)增加訓(xùn)練的難度. 改進(jìn)后的階段量化方式示意圖如圖3所示.
圖3 改進(jìn)后的階段量化方式示意圖
實(shí)驗(yàn)表明, 采用了這一改變后的隨機(jī)量化網(wǎng)絡(luò), 也就是“確定權(quán)重二值化網(wǎng)絡(luò)”, 通過(guò)更新二值化的比例并進(jìn)行finetune, 不僅可以有效提升二值化通道選取的效率, 同時(shí)依然能夠得到與全精度的預(yù)訓(xùn)練模型準(zhǔn)確率相近的二值網(wǎng)絡(luò)模型. 因此, 本文繼續(xù)在這一思路上展開(kāi)研究, 將“確定”的思想推廣到BNN乃至整個(gè)XNOR-net.
網(wǎng)絡(luò)量化分為輸入量化和權(quán)值量化兩種. 而同時(shí)將輸入和權(quán)值量化會(huì)造成網(wǎng)絡(luò)精度的大幅下降. 針對(duì)這個(gè)問(wèn)題, 高階殘差量化HORQ方法提出了一種針對(duì)輸入的高階殘差二值量化的方法, 既能夠利用二值化計(jì)算來(lái)加快網(wǎng)絡(luò)的計(jì)算, 又能夠保證訓(xùn)練所得的二值化網(wǎng)絡(luò)模型有較高的準(zhǔn)確率.
HORQ方法可以作為一個(gè)基礎(chǔ)的二值量化的方法用于網(wǎng)絡(luò)的輸入二值化中, 能夠在保證網(wǎng)絡(luò)模型精度的前提下, 利用二值量化的技術(shù)提升網(wǎng)絡(luò)的計(jì)算速度, 而且同時(shí)可以根據(jù)實(shí)際的硬件需要來(lái)調(diào)整殘差階數(shù)以適應(yīng)需求.
HORQ可以看做是XNOR-net的改進(jìn)版, 要對(duì)權(quán)重和輸入進(jìn)行高階殘差近似, 先按照 XNOR-net的方法對(duì)權(quán)重和輸入進(jìn)行一階二值近似, 下面以輸入為例進(jìn)行高階殘差近似的分析:
隨后, 就可以由此定義輸入殘差張量, 可以看出,R1(X)是用來(lái)表征二值化后輸入信息的損失:
繼續(xù)對(duì)殘差進(jìn)行二值量化, 就可以得到輸入X的二階二值近似:
那么, 現(xiàn)在可以定義輸入X的二階殘差近似:
類似的, 我們可以定義出輸入X的高階殘差, 以及相應(yīng)的高階殘差量化:
顯然, 如果階數(shù)越高, 輸入的信息損失會(huì)越少, 但是計(jì)算量會(huì)越大. 我們所熟悉的XNOR-net算法其實(shí)用的是一階殘差近似, 因此會(huì)有很大的精度損失. 而HORQ高階殘差算法可以極大程度上保證網(wǎng)絡(luò)的精度, 同時(shí)為了避免過(guò)于復(fù)雜的計(jì)算量, 我們一般采用二階殘差近似來(lái)進(jìn)行實(shí)驗(yàn).
這個(gè)方法有很大的發(fā)展前景. 對(duì)于一般的深度學(xué)習(xí)網(wǎng)絡(luò), HORQ 方法能夠在很大程度上加速深度網(wǎng)絡(luò)的計(jì)算速度. 由于網(wǎng)絡(luò)每一層的輸入和權(quán)值都被二值化, 模型的前向傳播時(shí)間得到大大降低, 同時(shí)存儲(chǔ)模型所需的空間也得到大大壓縮, 這就使得在資源受限的小運(yùn)算平臺(tái)(例如手機(jī)和筆記本)上運(yùn)行大規(guī)模的深度網(wǎng)絡(luò)模型成為可能. 另外, 高階殘差量化的方法能夠使得網(wǎng)絡(luò)精度得到保證, 使得網(wǎng)絡(luò)不再會(huì)因?yàn)楹?jiǎn)單的二值化方法而造成精度的大幅下降.
這一部分介紹基于高階殘差量化網(wǎng)絡(luò)所提出的二值網(wǎng)絡(luò)的“分階段殘差二值化”訓(xùn)練優(yōu)化算法, 該算法分別對(duì)權(quán)重和輸入的二值化過(guò)程分階段進(jìn)行處理, 從而提高了最終二值模型的精度. 簡(jiǎn)單來(lái)說(shuō), “分階段”也是一種確定式二值化, 但是與之前確定權(quán)重二值化不同的是, 這一算法將解決BNN的訓(xùn)練精度問(wèn)題, 分別對(duì)權(quán)重和輸入的二值化過(guò)程分階段進(jìn)行處理, 從而提高最終二值模型的精度.
本文基于高階殘差量化網(wǎng)絡(luò)的思路設(shè)計(jì)了二值網(wǎng)絡(luò)的“分階段殘差二值化”算法, 該算法使用殘差來(lái)彌補(bǔ)精度損失. 下面將分為兩個(gè)部分進(jìn)行介紹: 第一, “分階段二值化”算法的實(shí)現(xiàn); 第二, 基于高階殘差量化方法改進(jìn)的“分階段殘差二值化”算法的實(shí)現(xiàn).
2.1.1 “分階段二值化”算法的推導(dǎo)流程
在確定權(quán)重二值化的基礎(chǔ)上, 參考XNOR-net對(duì)輸入數(shù)據(jù)的處理辦法, 給二值化輸入增加近似因子,以此來(lái)彌補(bǔ)二值化給網(wǎng)絡(luò)帶來(lái)的精度損失, 確保二值模型的準(zhǔn)確率. 此項(xiàng)工作的出發(fā)點(diǎn)是由于BWN在速度性能提升方面的作用有限, 這就要求必須實(shí)現(xiàn)對(duì)BNN的分階段二值化, 以得到精度更高的模型, 實(shí)現(xiàn)深度神經(jīng)網(wǎng)絡(luò)在低配硬件下的實(shí)時(shí)、準(zhǔn)確運(yùn)行.
通過(guò)圖4的表示方式, 可以很容易發(fā)現(xiàn)分階段對(duì)中間值進(jìn)行二值化處理時(shí), 需要求近似核的部分恰好是不同通道上對(duì)應(yīng)的相同位置.
圖4 關(guān)于中間值矩陣的“分階段二值化”示意圖
對(duì)輸入近似因子的推導(dǎo)過(guò)程如下所示:
需要特別注意, 使用“分階段二值化” 算法處理中間值時(shí)與處理權(quán)重不一樣的地方:
2.1.2 “分階段二值化”算法的實(shí)現(xiàn)過(guò)程
至此, 我們通過(guò)理論分析和數(shù)值推導(dǎo)已經(jīng)得到了“分階段二值化”算法, 算法具體過(guò)程總結(jié)如下:
1) 首先, 實(shí)現(xiàn)對(duì)權(quán)重的階段二值化, 將模型在BWN結(jié)構(gòu)中達(dá)到接近單精度浮點(diǎn)數(shù)據(jù)的模型準(zhǔn)確率. 階段二值化根據(jù)網(wǎng)絡(luò)中設(shè)定的“二值化比例”ratio這一參數(shù),選取權(quán)重矩陣的前ratio行, 即總共n組通道權(quán)重中的前ratio進(jìn)行二值化,n為該層神經(jīng)網(wǎng)絡(luò)輸出的特征數(shù).
2) 然后, 當(dāng)權(quán)重二值化的比例達(dá)到 100%, 并將其模型finetune到接近全精度模型的準(zhǔn)確率后, 開(kāi)始提高中間值的二值化比例. 關(guān)于二值化中間值的選取方式與權(quán)重類似, 按照中間值矩陣的列進(jìn)行確定式選擇. 恢復(fù)到特征圖的形狀, 則可以理解成從特征圖的左上角開(kāi)始, 以滑動(dòng)窗口的方式向右、向下逐漸覆蓋整個(gè)特征圖.
3) 最后, 當(dāng)中間值的二值化比例也達(dá)到100%后,繼續(xù)finetune直到模型的準(zhǔn)確率不再提高.
在“分階段二值化”算法的基礎(chǔ)上, 本文基于高階殘差量化網(wǎng)絡(luò)的思想, 來(lái)進(jìn)一步改進(jìn)這一針對(duì)BNN和XNOR-net的訓(xùn)練優(yōu)化算法. 現(xiàn)有的XNOR-net算法在使用中間值的近似因子時(shí), 可以將其看做是一種乘法近似, 即:
這里我們使用一種新的近似因子求解方法, 即:
這樣卷積的計(jì)算過(guò)程就由式(5)變?yōu)?
本文基于高階殘差量化的思想對(duì)“分階段二值化”算法進(jìn)行了改進(jìn), 提出了二值網(wǎng)絡(luò)的“分階段殘差二值化”訓(xùn)練優(yōu)化算法, 該算法分別對(duì)權(quán)重和輸入的二值化過(guò)程“分階段”進(jìn)行處理, 從而提高了最終二值化網(wǎng)絡(luò)模型的精度.
本文的實(shí)驗(yàn)主要分為兩個(gè)部分:
第一部分是本文的重點(diǎn)部分, 即對(duì)二值網(wǎng)絡(luò)的訓(xùn)練過(guò)程進(jìn)行優(yōu)化, 使用本文所提出的二值網(wǎng)絡(luò)“分階段殘差二值化”算法, 以期在實(shí)現(xiàn)深度模型實(shí)時(shí)運(yùn)行和降低運(yùn)行內(nèi)存占用的同時(shí), 提升二值化網(wǎng)絡(luò)模型的訓(xùn)練精度, 并且達(dá)到更好的識(shí)別準(zhǔn)確率, 繼續(xù)保有深度模型的優(yōu)勢(shì).
第二部分主要是驗(yàn)證XNOR-net以及隨機(jī)量化網(wǎng)絡(luò)在特殊層上(這里以DECONV層為例)的有效性,并驗(yàn)證XNOR-net網(wǎng)絡(luò)相較于原始的全精度網(wǎng)絡(luò)在效率上的優(yōu)勢(shì).
3.1.1 數(shù)據(jù)集及評(píng)判標(biāo)準(zhǔn)
本文實(shí)驗(yàn)所使用的是CITYSCAPES數(shù)據(jù)集.CITYSCAPES評(píng)測(cè)數(shù)據(jù)集是一個(gè)大規(guī)模數(shù)據(jù)集, 在2015年由奔馳公司推動(dòng)發(fā)布, 是目前公認(rèn)的自動(dòng)駕駛領(lǐng)域內(nèi)最具權(quán)威性和專業(yè)性的圖像語(yǔ)義分割評(píng)測(cè)集之一. 其主要關(guān)注真實(shí)場(chǎng)景下的城區(qū)道路環(huán)境理解, 在任務(wù)難度更高, 并且更貼近于自動(dòng)駕駛等熱門需求.
CITYSCAPES評(píng)測(cè)集包含5000多張高質(zhì)量的像素級(jí)標(biāo)注街景圖片, 其主要被應(yīng)用在圖像語(yǔ)義分割任務(wù)[15]中, 用于評(píng)估視覺(jué)算法在城區(qū)場(chǎng)景語(yǔ)義理解方面的性能. 這其中共包含50個(gè)城市不同情況下的街景,以及30類物體標(biāo)注. CITYSCAPES主要專注于像素級(jí)別的分割和識(shí)別, 雖然其圖像相對(duì)于真實(shí)的駕駛場(chǎng)景來(lái)說(shuō)較干凈, 但像素級(jí)別的分割和識(shí)別卻提出了更高的要求. CITYSCAPES使用標(biāo)準(zhǔn)的PASCAL VOC IoU(intersection-over-union)得分來(lái)評(píng)估預(yù)測(cè)結(jié)果與真實(shí)場(chǎng)景之間的匹配準(zhǔn)確度, 每個(gè)像素點(diǎn)的預(yù)測(cè)結(jié)果都會(huì)直接影響到最終得分.
3.1.2 實(shí)驗(yàn)設(shè)置
普通的神經(jīng)網(wǎng)絡(luò)層主要包括卷積層、全連層等,一般的二值網(wǎng)絡(luò)算法也都是在CONV層上進(jìn)行研究,而且大量實(shí)驗(yàn)證明二值深度學(xué)習(xí)框架在基本層上的計(jì)算是正確的. 為了進(jìn)一步驗(yàn)證其他特殊層的實(shí)現(xiàn)沒(méi)有問(wèn)題, 本文將算法改進(jìn)拓展到其他特殊神經(jīng)網(wǎng)絡(luò)層, 這里以DECONV層為例進(jìn)行驗(yàn)證.
本文對(duì)一套利用到DECONV層的網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行了復(fù)現(xiàn), 并在CITYSCAPES數(shù)據(jù)集上進(jìn)行了訓(xùn)練. 訓(xùn)練發(fā)現(xiàn),在除最后一層之外的其他CONV、DECONV層使用XNOR-net算法和隨機(jī)量化算法實(shí)現(xiàn)的網(wǎng)絡(luò)層, 能夠使模型正常收斂, 初步證明了在特殊層中算法實(shí)現(xiàn)的正確性.
但是對(duì)于一些大型的分類網(wǎng)絡(luò)或回歸模型, 二值網(wǎng)絡(luò)往往不能滿足準(zhǔn)確率的要求, 這就導(dǎo)致無(wú)法在實(shí)際生產(chǎn)中大規(guī)模使用二值網(wǎng)絡(luò), 也就無(wú)法真正發(fā)揮它速度快、空間小、能耗低的性能優(yōu)勢(shì). 為了更好地保持深度模型在二值網(wǎng)絡(luò)中的訓(xùn)練結(jié)果, 本文結(jié)合隨機(jī)量化算法和XNOR-net進(jìn)一步提出了“分階段殘差二值化”這一訓(xùn)練優(yōu)化算法, 并通過(guò)實(shí)驗(yàn)驗(yàn)證了該算法能在不增加使用復(fù)雜度的條件下, 實(shí)現(xiàn)二值網(wǎng)絡(luò)模型在精度上的有效提升.
3.2.1 “分階段殘差二值化”算法在測(cè)試集上的性能
為了驗(yàn)證本文設(shè)計(jì)的“分階段殘差二值化”算法的有效性, 本節(jié)將對(duì)采用了“分階段殘差二值化”算法、高階殘差量化算法、隨機(jī)量化算法訓(xùn)練所得模型的分割mask效果圖與全精度模型的分割mask效果圖進(jìn)行對(duì)比, 由于采用了隨機(jī)量化算法的網(wǎng)絡(luò)在訓(xùn)練集上不能收斂, 這里將不考慮基于該算法模型的分割結(jié)果. 最終的分割mask效果如圖5所示.
通過(guò)上述實(shí)驗(yàn)可以看出: (1)高階殘差量化模型比本文設(shè)計(jì)實(shí)現(xiàn)的分階段殘差二值化模型的分割效果要差, 不能清晰地分割圖片中的物體; (2) “分階段殘差二值化”模型的分割效果接近原始全精度模型的分割效果, 皆能有效地分割圖片中的物體.
圖5 高階殘差量化、“分階段殘差二值化”、原始全精度分割模型效果對(duì)比
3.2.2 “分階段殘差二值化”算法在訓(xùn)練集上的性能
為了驗(yàn)證“分階段殘差二值化”算法的可行性與高效性, 本節(jié)將對(duì)“分階段殘差二值化”算法的訓(xùn)練結(jié)果進(jìn)行分析, 并與高階殘差量化網(wǎng)絡(luò)、隨機(jī)量化網(wǎng)絡(luò)、原始全精度網(wǎng)絡(luò)的訓(xùn)練結(jié)果進(jìn)行對(duì)比. 對(duì)于“分階段殘差二值化”網(wǎng)絡(luò)的訓(xùn)練, 首先對(duì)中間值進(jìn)行階段二值化,等模型finetune完再對(duì)權(quán)重進(jìn)行分階段二值化.
實(shí)驗(yàn)中分別設(shè)置了不同的中間值二值化比例和權(quán)重二值化比例, 并記錄了相對(duì)應(yīng)的訓(xùn)練輪數(shù). 實(shí)驗(yàn)結(jié)果如圖6所示.
圖6 分階段殘差二值化訓(xùn)練結(jié)果
通過(guò)上面的訓(xùn)練結(jié)果我們可以發(fā)現(xiàn)該算法帶來(lái)的最大好處在于能夠使二值網(wǎng)絡(luò)訓(xùn)練的模型更好地逼近原始全精度模型的效果.
除此之外, 我們還在訓(xùn)練集上對(duì)比了“分階段殘差二值化”模型與原始全精度模型、高階殘差量化模型、隨機(jī)量化模型在accuracy和loss兩大指標(biāo)上的差異, 結(jié)果如表1所示.
表1 “分階段殘差二值化”模型與原始全精度模型、高階殘差量化模型、隨機(jī)量化模型的量化指標(biāo)對(duì)比
綜合上述實(shí)驗(yàn)可以看出: (1)隨機(jī)量化模型難以收斂; (2)“分階段殘差二值化”模型比高階殘差量化模型收斂得快, 而且訓(xùn)練所得到的accuracy比高階殘差量化模型要高; (3)無(wú)論在accuracy還是在loss上, “分階段殘差二值化”模型都與單精度浮點(diǎn)模型十分接近.
3.2.3 “分階段殘差二值化”算法在特殊層上的實(shí)現(xiàn)
為了進(jìn)一步驗(yàn)證“分階段殘差二值化”算法不僅能在神經(jīng)網(wǎng)絡(luò)的基本層(例如: 卷積層, 全連層等)上實(shí)現(xiàn), 也能在其他特殊層上正常實(shí)現(xiàn), 本小節(jié)將以DECONV層為例來(lái)驗(yàn)證“分階段殘差二值化”算法的通用性.
我們對(duì)前文提到的基于隨機(jī)量化算法以及基于高階殘差量化算法的網(wǎng)絡(luò)進(jìn)行了實(shí)驗(yàn), 通過(guò)觀察實(shí)驗(yàn)結(jié)果不難發(fā)現(xiàn), 最后一層的DECONV在使用了這兩種算法的網(wǎng)絡(luò)上不能有效收斂, 而采用了“分階段殘差二值化”的訓(xùn)練方式后, 整個(gè)網(wǎng)絡(luò)的收斂結(jié)果明顯提升.
我們對(duì)比了幾種結(jié)構(gòu)下只針對(duì)最后一層特殊層,即DECONV層進(jìn)行二值化(計(jì)算量占比達(dá)到40%)的實(shí)驗(yàn)結(jié)果, 如表2所示.
表2 “分階段殘差二值化”算法的實(shí)驗(yàn)
綜合上述實(shí)驗(yàn)可以看出: (1)基于隨機(jī)量化算法和高階殘差量化算法的網(wǎng)絡(luò)不能用于特殊層; (2)基于“分階段殘差二值化”算法的網(wǎng)絡(luò)在特殊層上能正常收斂, 因此該算法能適用于特殊層.
1) 在DECONV層上的實(shí)現(xiàn)
首先, 我們對(duì)一套利用到DECONV層的網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行了復(fù)現(xiàn), 并且在CITYSCAPES數(shù)據(jù)集上進(jìn)行了訓(xùn)練. 通過(guò)訓(xùn)練, 我們發(fā)現(xiàn): 在除最后一層之外的其他CONV層、DECONV層使用“分階段殘差二值化”算法實(shí)現(xiàn)的網(wǎng)絡(luò)層能夠使模型正常收斂, 初步證明了在特殊層中算法實(shí)現(xiàn)的正確性, 實(shí)驗(yàn)結(jié)果如表3所示.
表3 對(duì)DECONV使用“分階段殘差二值化”訓(xùn)練的效果
通過(guò)分析表3中的數(shù)據(jù), 我們可以發(fā)現(xiàn), 大部分網(wǎng)絡(luò)層(包括特殊層)采用了“分階段殘差二值化”算法的模型后, 可以達(dá)到與全精度網(wǎng)絡(luò)訓(xùn)練得到的模型相近的精度效果.
2) 速度對(duì)比
其次, 除了對(duì)識(shí)別精度的驗(yàn)證外, 我們更關(guān)注的是二值模型的運(yùn)行速度, 關(guān)心它能否實(shí)現(xiàn)CPU環(huán)境下的實(shí)時(shí)運(yùn)行. 因此我們?cè)贑PU硬件環(huán)境下, 對(duì)不同規(guī)模、不同種類的神經(jīng)網(wǎng)絡(luò)進(jìn)行了速度方面的對(duì)比, 統(tǒng)計(jì)了二值模型相比于全精度權(quán)重模型的加速比. 實(shí)驗(yàn)結(jié)果如表4所示.
表 4 中, Full代表 Full precision, staged 代表“staged residual binarization”. 結(jié)合表中統(tǒng)計(jì)的實(shí)驗(yàn)結(jié)果, 分析可得: “分階段殘差二值化”所統(tǒng)計(jì)的時(shí)間不僅有異或位運(yùn)算和popcount函數(shù)所構(gòu)成的二值計(jì)算部分, 還包括對(duì)權(quán)重的按位壓縮處理, 以及對(duì)中間值按位壓縮改造過(guò)的im2col處理. 而全精度的運(yùn)行時(shí)間則只是統(tǒng)計(jì)了乘法運(yùn)算部分, 原始的im2col處理并沒(méi)有包含在內(nèi). 如果通過(guò)caffe本身的time函數(shù)計(jì)算時(shí)間以及在函數(shù)外部打印時(shí)間兩種方式去統(tǒng)計(jì)神經(jīng)網(wǎng)絡(luò)層的運(yùn)行時(shí)間, 得到的結(jié)果反映出“分階段殘差二值化” 能夠?qū)崿F(xiàn)5倍左右的提速.
表4 原始全精度模型與“分階段殘差二值化”模型在不同結(jié)構(gòu)上運(yùn)行的用時(shí)對(duì)比(單位: ms)
綜上所述, 本文基于高階殘差量化算法所設(shè)計(jì)的“分階段殘差二值化”算法, 能夠有效利用全精度的預(yù)訓(xùn)練模型, 降低了二值網(wǎng)絡(luò)的訓(xùn)練難度, 使二值網(wǎng)絡(luò)最終收斂到與原始全精度深度模型接近的準(zhǔn)確率水平.在語(yǔ)義分割等復(fù)雜任務(wù)上進(jìn)行的實(shí)驗(yàn)結(jié)果表明, 本文所提出的“分階段殘差二值化”算法對(duì)于二值網(wǎng)絡(luò)的優(yōu)化訓(xùn)練、提升模型準(zhǔn)確率有著非常明顯的作用, 而且不增加測(cè)試計(jì)算量, 從而保持了二值網(wǎng)絡(luò)速度快、空間小、能耗低的優(yōu)勢(shì).
本文主要工作有兩點(diǎn): (1) 對(duì)CNN中二值網(wǎng)絡(luò)的實(shí)現(xiàn)及訓(xùn)練技巧進(jìn)行優(yōu)化總結(jié), 構(gòu)建了“二值深度學(xué)習(xí)框架”;(2) 基于高階殘差量化網(wǎng)絡(luò)提出了一種全新的“二值網(wǎng)絡(luò)的分階段殘差二值化算法”. 前一項(xiàng)工作包含對(duì)二值網(wǎng)絡(luò)結(jié)構(gòu)的理論研究及優(yōu)化調(diào)整; 后者所提出的算法能夠顯著提升二值網(wǎng)絡(luò)訓(xùn)練效果, 得到接近全精度神經(jīng)網(wǎng)絡(luò)的識(shí)別準(zhǔn)確率, 具有較高的現(xiàn)實(shí)意義和使用價(jià)值.