本發(fā)明屬于集成電路數(shù)字ic,特別涉及一種基于改進(jìn)cordic算法的mish函數(shù)實(shí)現(xiàn)方法。
背景技術(shù):
1、近年來,在人工智能領(lǐng)域,神經(jīng)網(wǎng)絡(luò)模型作為核心技術(shù)之一得到了迅猛的發(fā)展。激活函數(shù)作為神經(jīng)網(wǎng)絡(luò)中“神經(jīng)元”的一個重要組成部分,引入了非線性映射學(xué)習(xí)能力,對神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和泛化起到了十分關(guān)鍵的作用。mish激活函數(shù)是一個平滑的、連續(xù)的、自正則化的、非單調(diào)的激活函數(shù)。在cifar-10、imagenet-1k等數(shù)據(jù)集上,在resnet、wrn、simplenet、xceptino?net、densenet、mobilenet等十幾種神經(jīng)網(wǎng)絡(luò)模型中,相比于swish和relu等激活函數(shù),mish激活函數(shù)都取得了更高的精度和更多的最優(yōu)結(jié)果,是非常優(yōu)質(zhì)的激活函數(shù)。
2、mish激活函數(shù)的表達(dá)式為??梢钥闯觯琺ish激活函數(shù)復(fù)合了乘法、 tanh、 ln和 e指數(shù)等多個特殊運(yùn)算,在硬件電路實(shí)現(xiàn)時復(fù)雜度很高。 tanh等三角函數(shù)類、 ln和 e指數(shù)類復(fù)雜函數(shù)運(yùn)算在硬件電路上的傳統(tǒng)實(shí)現(xiàn)方法包括查找表、泰勒級數(shù)展開、cordic算法等。由于mish激活函數(shù)復(fù)合的運(yùn)算種類多,使用多級查找表存在占用較大片上存儲資源的問題,而使用多級的級數(shù)展開存在截?cái)嗪蜕崛氲扔?jì)算誤差經(jīng)多級積累導(dǎo)致計(jì)算精度低的問題。1957年提出的cordic算法有三種運(yùn)算坐標(biāo)系,每種坐標(biāo)系下有兩種工作模式,能基于簡單的移位和加法,實(shí)現(xiàn)乘法、除法、sinh/cosh/tanh等三角函數(shù)類、 ln和 e指數(shù)類復(fù)雜計(jì)算,非常適合在硬件電路上應(yīng)用。
3、cordic算法的統(tǒng)一旋轉(zhuǎn)迭代公式如下式所示:
4、;
5、其中:包含了x/y/z三條處理鏈路;坐標(biāo)系通過 m值進(jìn)行選擇,時為雙曲坐標(biāo)系,時為線性坐標(biāo)系,時為圓周坐標(biāo)系。在rotation模式(rm)中,旋轉(zhuǎn)級的旋轉(zhuǎn)方向 d i取值為:
6、;
7、在vectoring模式(vm)中,旋轉(zhuǎn)級的旋轉(zhuǎn)方向 d i取值為:
8、(雙曲/線性坐標(biāo)系);
9、(圓周坐標(biāo)系);
10、cordic算法在不同坐標(biāo)系下的固定旋轉(zhuǎn)角度表示為:
11、;
12、在硬件電路實(shí)現(xiàn)時,固定旋轉(zhuǎn)角度一般預(yù)先存放在一個小的rom表中。
13、特別第,對雙曲坐標(biāo)系下的旋轉(zhuǎn)來說,為保證收斂,旋轉(zhuǎn)級 i是(3* k+1)的旋轉(zhuǎn)級需要重復(fù)一次,典型的旋轉(zhuǎn)序列 i為1,?2,?3,?4,?4,?5,?6,?7,?7,?8,?9,?10,?10,?11,?12,13,?13。對雙曲坐標(biāo)系rotation模式來說,在此旋轉(zhuǎn)范圍下,cordic算法的收斂區(qū)間為(-1.113,1.113);雙曲坐標(biāo)系下旋轉(zhuǎn)增益為:,其中 n為旋轉(zhuǎn)總級數(shù),旋轉(zhuǎn)增益的典型值為0.828。
14、從mish激活函數(shù)的表達(dá)式可以看出,從表達(dá)式的內(nèi)層到外層,基于cordic算法的實(shí)現(xiàn)時需要調(diào)用4次cordic算法模塊,首先使用雙曲坐標(biāo)下的cordic算法模塊rotation模式來計(jì)算,然后使用雙曲坐標(biāo)下的cordic算法模塊vectoring模式來計(jì)算,然后再使用雙曲坐標(biāo)下的cordic算法模塊rotation模式來計(jì)算,最后再使用線性坐標(biāo)系下的cordic算法模塊vectoring模式來計(jì)算,得到最終的計(jì)算結(jié)果。cordic算法的基本運(yùn)算思想是迭代逼近的近似計(jì)算,這種四級串行級聯(lián)的實(shí)現(xiàn)方法顯然存在處理周期長、計(jì)算誤差大和硬件資源消耗大等問題。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明的目的在于克服現(xiàn)有技術(shù)的上述不足,針對mish函數(shù)基于cordic算法實(shí)現(xiàn)時存在的串聯(lián)模塊多導(dǎo)致處理周期長、計(jì)算精度低、硬件消耗大等問題,提供一種低延遲、高精度和硬件消耗小的實(shí)現(xiàn)方法,基于優(yōu)化的函數(shù)實(shí)現(xiàn)結(jié)構(gòu)和改進(jìn)的cordic算法,提升mish函數(shù)硬件實(shí)現(xiàn)性能。
2、為解決上述技術(shù)問題,本發(fā)明提供了一種基于改進(jìn)cordic算法的mish函數(shù)實(shí)現(xiàn)方法,包括如下步驟:
3、步驟s1:首先對mish函數(shù)表達(dá)式進(jìn)行等價(jià)轉(zhuǎn)換,即將等價(jià)轉(zhuǎn)換為;
4、步驟s2:然后對等價(jià)轉(zhuǎn)換后的mish函數(shù)表達(dá)式進(jìn)行運(yùn)算分解成、、、和除法五個部分;
5、其中部分基于雙曲坐標(biāo)下的cordic算法模塊rotation模式來計(jì)算,cordic算法模塊的輸入 x in、 y in、 z in均為 x,此時cordic算法模塊的輸出 x out為,其中 k0為雙曲cordic算法模塊的偽旋轉(zhuǎn)增益,在旋轉(zhuǎn)總級數(shù)一定時為定值常數(shù);
6、部分通過對 x乘以來實(shí)現(xiàn);考慮到cordic算法模塊帶入的增益,將部分轉(zhuǎn)換成,并與上述輸出 x out相加,即獲得;
7、部分基于雙曲坐標(biāo)下的cordic算法模塊rotation模式來實(shí)現(xiàn),cordic算法模塊的輸入 x in、 y in均為1,輸入 z in為 x時,此時cordic算法模塊的輸出 x out即為,并進(jìn)行加上的運(yùn)算,即獲得;
8、部分基于雙曲坐標(biāo)下的cordic算法模塊rotation模式來實(shí)現(xiàn),cordic算法模塊的輸入 x in、 y in均為1,輸入 z in為- x時,輸出 y out即為,并進(jìn)行乘以2的運(yùn)算處理,即獲得,對上述輸出 x out和輸出 y out相加,即獲得;
9、除法部分基于線性坐標(biāo)系下的cordic算法模塊vectoring模式來實(shí)現(xiàn),cordic算法模塊的輸入 x in為,輸入 y in為,輸入 z in為0,此時模塊的輸出 z out即為,能夠化簡為,即為mish函數(shù)的運(yùn)算結(jié)果。
10、優(yōu)選的,所述基于雙曲坐標(biāo)下的cordic算法模塊rotation模式來計(jì)算部分,此時cordic算法模塊迭代公式改進(jìn)為:
11、;
12、其中,
13、;
14、;
15、其中,上述 i表示第 i個旋轉(zhuǎn)級;表示第 i個旋轉(zhuǎn)級中x處理鏈路的輸出;表示第 i個旋轉(zhuǎn)級中x處理鏈路的輸入;表示第 i個旋轉(zhuǎn)級中z處理鏈路的輸出;表示第 i個旋轉(zhuǎn)級中z處理鏈路的輸入;表示第 i個旋轉(zhuǎn)級的旋轉(zhuǎn)方向;表示第 i個旋轉(zhuǎn)級的固定旋轉(zhuǎn)角度。
16、優(yōu)選的,所述基于雙曲坐標(biāo)下的cordic算法模塊rotation模式來計(jì)算和,此時cordic算法模塊迭代公式改進(jìn)為:
17、;
18、其中,
19、;
20、;
21、其中,上述 i表示第 i個旋轉(zhuǎn)級;表示第 i個旋轉(zhuǎn)級中x處理鏈路的輸出;表示第 i個旋轉(zhuǎn)級中x處理鏈路的輸入;表示第 i個旋轉(zhuǎn)級中y處理鏈路的輸出;表示第 i個旋轉(zhuǎn)級中y處理鏈路的輸入;表示第 i個旋轉(zhuǎn)級中z處理鏈路的輸出;表示第 i個旋轉(zhuǎn)級中z處理鏈路的輸入;表示第 i個旋轉(zhuǎn)級的旋轉(zhuǎn)方向;表示第 i個旋轉(zhuǎn)級的固定旋轉(zhuǎn)角度。
22、優(yōu)選的,所述基于雙曲坐標(biāo)下的cordic算法模塊rotation模式來計(jì)算以及和,輸入 z in均為 x,因此在運(yùn)算時僅使用一個z處理鏈路。
23、優(yōu)選的,所述基于線性坐標(biāo)系下的cordic算法模塊vectoring模式來實(shí)現(xiàn),此時cordic算法模塊迭代公式改進(jìn)為:
24、;
25、其中,輸入 x in的一定大于0,故有:
26、;
27、;
28、其中,上述 i表示第 i個旋轉(zhuǎn)級;表示第 i個旋轉(zhuǎn)級中y處理鏈路的輸出;表示第 i個旋轉(zhuǎn)級中y處理鏈路的輸入;表示cordic算法的x處理鏈路的輸入;表示第 i個旋轉(zhuǎn)級中z處理鏈路的輸出;表示第 i個旋轉(zhuǎn)級中z處理鏈路的輸入;表示第 i個旋轉(zhuǎn)級的旋轉(zhuǎn)方向;表示第 i個旋轉(zhuǎn)級的固定旋轉(zhuǎn)角度。
29、優(yōu)選的,所述mish函數(shù)的計(jì)算結(jié)構(gòu)采用級聯(lián)的第一級cordic算法模塊和第二級cordic算法模塊,以及對第一級cordic算法模塊輸入、輸出進(jìn)行整合運(yùn)算的乘法、加法和移位處理單元;
30、其中,所述第一級cordic算法模塊包括:cordic算法在雙曲坐標(biāo)系下的三個運(yùn)算模塊;所述第二級cordic算法模塊包括:cordic算法在線性坐標(biāo)系下的一個運(yùn)算模塊。
31、優(yōu)選的,所述mish函數(shù)實(shí)現(xiàn)方法使用的cordic算法模塊rotation模式,其輸入 x in和輸入 y in是相等的。
32、本發(fā)明與現(xiàn)有技術(shù)相比,具有如下有益效果:
33、本發(fā)明提出的一種基于改進(jìn)cordic算法的mish函數(shù)實(shí)現(xiàn)方法,能夠通過mish表達(dá)式的化簡和cordic算法模塊的改進(jìn),解決傳統(tǒng)方法存在的處理周期長、計(jì)算精度低、硬件消耗大等問題,其中處理周期可以由傳統(tǒng)的4個串聯(lián)cordic算法模塊,減少到2級串聯(lián)cordic算法模塊,處理周期降低一半;在硬件電路實(shí)現(xiàn)時,傳統(tǒng)方法4個cordic算法模塊需要共12個x/y/z處理鏈路,而本文所述方法只需要6個x/y/z處理鏈路,硬件資源消耗也降低一半;仿真結(jié)果顯式,在計(jì)算精度上,在相同計(jì)算位寬和旋轉(zhuǎn)次數(shù)下,本文所述方法在cordic算法收斂范圍內(nèi)都可以達(dá)到10^-5量級的計(jì)算精度,相對于傳統(tǒng)實(shí)現(xiàn)方法,本發(fā)明方法的計(jì)算范圍擴(kuò)大了近30%。