Sigmoid函數(shù)的擬合法分析及其高效處理
摘 要: 使用分段非線性逼近算法計(jì)算超越函數(shù),以神經(jīng)網(wǎng)絡(luò)中應(yīng)用最為廣泛的Sigmoid函數(shù)為例,結(jié)合函數(shù)自身對(duì)稱的性質(zhì)及其導(dǎo)數(shù)不均勻的特點(diǎn)提出合理的分段方法,給出分段方式同逼近多項(xiàng)式階數(shù)對(duì)逼近結(jié)果精度的影響。完成算法在FPGA上的硬件實(shí)現(xiàn),給出一種使用三階多項(xiàng)式處理Sigmoid函數(shù)的擬合結(jié)果及流水線架構(gòu),處理精度達(dá)到10-5數(shù)量級(jí),最大頻率達(dá)到127.327 MHz,滿足了高速、高精度的處理要求。
0 引言
在實(shí)時(shí)圖像處理、數(shù)字信號(hào)處理等領(lǐng)域內(nèi),經(jīng)常需要對(duì)非線性函數(shù)進(jìn)行高速計(jì)算[1]。而在人工神經(jīng)網(wǎng)絡(luò)中更是需要對(duì)大量的非線性函數(shù)進(jìn)行計(jì)算。因此,在人工神經(jīng)網(wǎng)絡(luò)的研究領(lǐng)域內(nèi),研究如何高速地處理非線性函數(shù)具有十分重要的意義。在人工神經(jīng)網(wǎng)絡(luò)中應(yīng)用最為廣泛的是Sigmoid函數(shù)。目前對(duì)于Sigmoid函數(shù)實(shí)現(xiàn)技術(shù)的研究主要分為軟件實(shí)現(xiàn)和硬件實(shí)現(xiàn)兩個(gè)方面。由于軟件相比硬件而言速度較慢并且并行程度很低,所以無法滿足其快速處理的要求[2]。因此,在超大規(guī)模集成電路快速發(fā)展的當(dāng)今時(shí)期,研究如何利用硬件快速處理Sigmoid函數(shù)顯然更加有意義。
FPGA憑借其可重構(gòu)技術(shù)的靈活性,成為解決Sigmoid函數(shù)高速計(jì)算問題的有力工具。目前利用FPGA計(jì)算Sigmoid函數(shù)常用的方法有查找表法、CORDIC算法、Taylor級(jí)數(shù)展開法和分段線性逼近法。查找表法[3]提前將所有的計(jì)算結(jié)果保存在一個(gè)ROM中,這種方法計(jì)算方便且容易實(shí)現(xiàn),但是隨著函數(shù)計(jì)算精度的提高和擬合區(qū)間的增加,其所需求的存儲(chǔ)資源會(huì)顯著增加,資源消耗很高。CORDIC算法[4]通過多次迭代將一些復(fù)雜的運(yùn)算轉(zhuǎn)換成為簡(jiǎn)單的運(yùn)算,但是隨著精度增高,其算法的迭代次數(shù)也會(huì)提高,計(jì)算速度會(huì)減慢。Taylor級(jí)數(shù)展開法[5]在精度要求較高的條件下會(huì)增加乘法器和加法器的使用,資源消耗巨大。分段線性逼近法[6-7]將查找表和低階多項(xiàng)式相結(jié)合,計(jì)算速度較快,是當(dāng)前解決此問題的主流方法,然而在有限的分段區(qū)間用低階的多項(xiàng)式進(jìn)行擬合運(yùn)算,其計(jì)算結(jié)果在精度上并沒有優(yōu)勢(shì),難以實(shí)現(xiàn)高精度的運(yùn)算要求。
為了解決上述問題,本文采用傳統(tǒng)的分段非線性逼近法來處理Sigmoid函數(shù)。文獻(xiàn)[8]中使用了分段非線性逼近法來處理神經(jīng)網(wǎng)絡(luò)中常見的雙曲正切函數(shù),然而文中并沒有給出分段方法的依據(jù),同時(shí)在各小段的分段區(qū)間所得到的精度也差異很大。因此,本文針對(duì)這一問題,以Sigmoid函數(shù)為研究對(duì)象,結(jié)合Sigmoid函數(shù)自身對(duì)稱及其導(dǎo)數(shù)不均勻的性質(zhì),利用數(shù)值分析中的最小二乘法作為逼近原理,給出合理的分段方式。同時(shí)給出對(duì)比均勻分段的處理方式下逼近精度的差異情況。利用硬件描述語言實(shí)現(xiàn)硬件結(jié)構(gòu)的設(shè)計(jì),并在Xilinx Virtex-5系列的XC5VLX110T器件上完成實(shí)際驗(yàn)證和性能測(cè)試,從資源使用、運(yùn)算速度同計(jì)算精度等方面對(duì)設(shè)計(jì)結(jié)果進(jìn)行合理評(píng)估。
1 Sigmoid函數(shù)的分段非線性擬合方案及結(jié)果分析分段非線性逼近法的基本原理是用高階多項(xiàng)式來逼近曲線。首先將待逼近函數(shù)按照一定的方式進(jìn)行分段,之后對(duì)每一個(gè)小段構(gòu)建高階多項(xiàng)式近似地代替原曲線,從而將復(fù)雜的非線性函數(shù)的計(jì)算問題轉(zhuǎn)換成為多項(xiàng)式的計(jì)算問題。
由泰勒公式的原理可知,函數(shù)在某一點(diǎn)按照泰勒公式展開,隨著展開的項(xiàng)數(shù)越來越多,逼近式的誤差會(huì)越來越小。并且,隨著項(xiàng)數(shù)的增加,每一項(xiàng)在數(shù)值上逐漸遞減,并最終趨向于無窮小。函數(shù)在某一點(diǎn)按照泰勒公式展開,保留N階多項(xiàng)式時(shí),其之后的所有項(xiàng)數(shù)均影響誤差,并且(N+1)階導(dǎo)函數(shù)的數(shù)值直接影響N階多項(xiàng)式的逼近結(jié)果。具體影響的方式為:N+1階導(dǎo)數(shù)取絕對(duì)值后,其值越大,表明函數(shù)在這一點(diǎn)處使用N階多項(xiàng)式逼近的誤差越高,因此在這點(diǎn)處對(duì)應(yīng)的分段區(qū)間間隔應(yīng)該相對(duì)較小;其值越小,表明函數(shù)在這一點(diǎn)處使用N階多項(xiàng)式逼近的誤差越低,因此在這點(diǎn)處對(duì)應(yīng)的分段區(qū)間間隔應(yīng)該相對(duì)較大。在考慮分段時(shí),可以根據(jù)N+1階導(dǎo)數(shù)的數(shù)值大小,將函數(shù)的分段區(qū)間進(jìn)行動(dòng)態(tài)調(diào)整,避免造成誤差過大。通過這樣的處理方式,可以對(duì)分段方式進(jìn)行一些優(yōu)化。下面結(jié)合Sigmoid函數(shù)進(jìn)行具體分析。
首先分析Sigmoid函數(shù)及其導(dǎo)函數(shù)的性質(zhì),如圖1。F(x)為Sigmoid函數(shù),G(x)為其4階導(dǎo)函數(shù)。在保證足夠的分段區(qū)間時(shí),使用3階多項(xiàng)式就能夠得到較高的逼近精度。因此,本文使用3階多項(xiàng)式逼近Sigmoid函數(shù),4階導(dǎo)函數(shù)G(x)直接影響逼近的誤差。通過研究圖像,得出以下結(jié)論:
(1)Sigmoid函數(shù)F(x)是以點(diǎn)(0,0.5)為對(duì)稱中心的函數(shù),因此在計(jì)算Sigmoid函數(shù)值時(shí)只需計(jì)算正區(qū)間或負(fù)區(qū)間,另一半可通過對(duì)稱關(guān)系得到;
(2)以正區(qū)間為研究對(duì)象,Sigmoid函數(shù)的4階導(dǎo)數(shù)在x=1處附近取得最大值,并向兩側(cè)衰減,隨著x的不斷增大,4階導(dǎo)數(shù)最終趨向于0。