BP神經(jīng)網(wǎng)絡(luò)現(xiàn)在來(lái)說(shuō)是一種比較成熟的網(wǎng)絡(luò)模型了,因?yàn)樯窠?jīng)網(wǎng)絡(luò)對(duì)于數(shù)字圖像處理的先天優(yōu)勢(shì),特別是在圖像壓縮方面更具有先天的優(yōu)勢(shì),因此,我這一段時(shí)間在研究神經(jīng)網(wǎng)絡(luò)的時(shí)候同時(shí)研究了一下關(guān)于BP網(wǎng)絡(luò)實(shí)現(xiàn)圖像壓縮的原理和過(guò)程,并且是在MATLAB上進(jìn)行了仿真的實(shí)驗(yàn),結(jié)果發(fā)現(xiàn)設(shè)計(jì)的BP神經(jīng)網(wǎng)絡(luò)具有不錯(cuò)的泛化能力,對(duì)于用于圖像壓縮方面的效果還不錯(cuò).
1:BP神經(jīng)網(wǎng)絡(luò)的模型的架構(gòu)和訓(xùn)練的原理
BP神經(jīng)網(wǎng)絡(luò)是現(xiàn)在目前的發(fā)展的比較成熟的神經(jīng)網(wǎng)絡(luò)之一了,也是一種比較給力的非線性的可微分函數(shù)進(jìn)行權(quán)值修正和調(diào)整的多層前饋人工神經(jīng)網(wǎng)絡(luò),經(jīng)得住嚴(yán)密的數(shù)學(xué)邏輯推導(dǎo),在很多的模式識(shí)別的書(shū)中和很多的數(shù)據(jù)壓縮的論文中得以大量的廣泛和認(rèn)同.BP神經(jīng)網(wǎng)絡(luò)算法主要的特點(diǎn)是輸入信號(hào)的正向傳遞,誤差的反向傳播.BP網(wǎng)絡(luò)的學(xué)習(xí)算法的本質(zhì)其實(shí)就是把樣本集合的輸入輸出問(wèn)題變換為一個(gè)非線性?xún)?yōu)化的問(wèn)題.其中分為三層的網(wǎng)絡(luò)結(jié)構(gòu),包括輸入層,隱藏層,輸出層這樣的三層.典型的一個(gè)網(wǎng)絡(luò)模型的結(jié)構(gòu)可以由下邊的部分構(gòu)成:
首先說(shuō)一下前向傳播:
首先在BP的神經(jīng)網(wǎng)絡(luò)模型中我們現(xiàn)在假設(shè)為L(zhǎng)層,其中他的輸入層是第1層,輸出層是最后一層也就是L層,隱藏層的話其實(shí)就是從第2層到第L-1層了.要是在輸出層的第K個(gè)神經(jīng)單元,就可以簡(jiǎn)單的表示為
這個(gè)上標(biāo)表示為層數(shù),下標(biāo)表示為第K個(gè)神經(jīng)元,同理,其他的層數(shù)和神經(jīng)元也都可以如此概述.這樣的話對(duì)于第L層的神經(jīng)元個(gè)數(shù)就可以用|L|來(lái)表示.即第L層的第J個(gè)神經(jīng)元的輸入與輸出的關(guān)系如下圖所示:
其中
b表示為第L層的第J個(gè)神經(jīng)元與L-1層第J個(gè)神經(jīng)元的鏈接權(quán)重.
而其輸出的Oij如下所示,其中f是激勵(lì)函數(shù)
在神經(jīng)網(wǎng)絡(luò)中我們有很多的激活函數(shù)可以選擇,但是我們?cè)谶@里還是選擇使用sigmood函數(shù),為什么選用這個(gè)函數(shù)?因?yàn)樵谖宜鸭撕芏噘Y源來(lái)看,如果我們使用一些其他的激活函數(shù)或者直接放棄使用激活函數(shù),不過(guò)我們使用多少次隱藏層,我們最終得到的仍然是一個(gè)線性的函數(shù),但是在使用非線性的sigmoid函數(shù)以后,就不會(huì)有這個(gè)問(wèn)題,我們的網(wǎng)絡(luò)也可以去擬合非線性的函數(shù).
在這里我們只需要記住sigmoid函數(shù)的推導(dǎo),因?yàn)樵诮酉聛?lái)的反向傳播中我們要去使用.
求導(dǎo)以后:
反向傳播
關(guān)于反向傳播,這個(gè)部分大概是整個(gè)BP神經(jīng)網(wǎng)絡(luò)的精華所在了.那么反向傳播究竟是個(gè)什么東西呢?其實(shí)反向傳播就是通過(guò)最后的誤差來(lái)更新權(quán)值.打個(gè)比方,你現(xiàn)在是個(gè)學(xué)生,學(xué)校里搞了一大堆試卷,發(fā)給你們考試以后你們考完發(fā)現(xiàn)取得的效果并不好,當(dāng)校長(zhǎng)看到成績(jī)單后,校長(zhǎng)很生氣,校長(zhǎng)就說(shuō)了,年級(jí)主任你去給我找問(wèn)題,年級(jí)主任然后就跟班主任說(shuō)你給我去找問(wèn)題,,,一直到你們這些學(xué)生,老師讓你們?nèi)ジ?這樣對(duì)應(yīng)的就是我們神經(jīng)網(wǎng)絡(luò)的輸入層一直改到輸出層.在這里使用到的一個(gè)重要的法則就是梯度下降法則.
梯度下降法,大學(xué)高數(shù)的知識(shí),其實(shí)就是你更新權(quán)重的同時(shí)不能更新,而是按照梯度的方向更新才能夠給更新權(quán)重,能夠獲得更多的收斂.公式如下:
這里有一個(gè)負(fù)梯度方向需要說(shuō)明一下,因?yàn)槟愕膶W(xué)習(xí)速率是大于0的,對(duì)于誤差E來(lái)說(shuō),他對(duì)W的偏導(dǎo)數(shù)就必須要大于0這樣也就是說(shuō),誤差隨著權(quán)重的增大而增大,那我們就需要通過(guò)減少權(quán)重來(lái)減小誤差,所以W的變化率需要小于0,當(dāng)然,如果我們要求某某某的最大值的話,也可以使用正梯度.
直觀上來(lái)看神經(jīng)網(wǎng)絡(luò)的每個(gè)神經(jīng)元的權(quán)重更新都是通過(guò)誤差的偏導(dǎo)來(lái)更新的,在這里我們引入一個(gè)新的變量誤差,對(duì)于第l層的第j個(gè)神經(jīng)元的誤差定義為
這樣的權(quán)重更新過(guò)程可以為:
在這里我們需要用到的就是鏈?zhǔn)角髮?dǎo)法則,具體如下:
根據(jù)sigmoid函數(shù)的求導(dǎo)公式,并且對(duì)于誤差進(jìn)行偏導(dǎo),我們就可以得到第L層的神經(jīng)元的誤差項(xiàng):
所以就能夠得到輸出層上一層與輸出的權(quán)重更新公式:
所以就能夠得到輸出層上一層與輸出的權(quán)重更新公式:
對(duì)于隱藏層,我們需要在求導(dǎo)時(shí)對(duì)于他的輸出層單元的每個(gè)誤差影響進(jìn)行疊加,與輸出層類(lèi)似,不再贅述.
對(duì)于第L-1層的第j個(gè)神經(jīng)元的誤差項(xiàng)來(lái)說(shuō),由于每個(gè)神經(jīng)元連接到輸出層的每個(gè)單元,因此我們要對(duì)輸出層的|L|個(gè)單元進(jìn)行求和,從而得到了誤差項(xiàng)的計(jì)算公式:
所以便得到了L-2與L-1層的鏈接權(quán)重的公式:
而對(duì)于其他層,我們進(jìn)行推廣就可以得到第I層第J個(gè)的神經(jīng)單元的誤差公式額權(quán)重更新公式:
對(duì)于推導(dǎo)過(guò)程,簡(jiǎn)單的來(lái)說(shuō)就是鏈?zhǔn)角髮?dǎo),由上面公式我們可以看出反向傳播也是求導(dǎo)熏瞄,只是對(duì)于隱層以及輸入層來(lái)說(shuō)牵触,它們所產(chǎn)生的誤差在傳播過(guò)程中能夠影響每一個(gè)最終的輸出層單元处铛,所以我們需要對(duì)其產(chǎn)生的誤差求和错蝴。反向傳播的前提是前向傳播果覆,而前向傳播的公式相信大家很容易都能記住呜笑,而反向傳播其實(shí)就是對(duì)前向傳播的公式鏈?zhǔn)角髮?dǎo),只需要注意到求導(dǎo)過(guò)程中對(duì)于w對(duì)輸出層的影響來(lái)判斷什么時(shí)候需要進(jìn)行求和操作就可以.
2:BP神經(jīng)網(wǎng)絡(luò)的圖像壓縮原理
數(shù)字圖像壓縮實(shí)際上是以較少的比特?cái)?shù)有損或者無(wú)損的來(lái)表示原來(lái)像素矩陣的一種圖像處理技術(shù),實(shí)際上就是減少圖像數(shù)據(jù)中的時(shí)間冗余,空間冗余,頻譜冗余等等作為目的,從而同過(guò)減少上述的一種或者多種冗余的信息而達(dá)到更加高效的存儲(chǔ)與傳輸數(shù)據(jù).圖像的壓縮系統(tǒng)其實(shí)無(wú)論采用什么樣的具體的架構(gòu)或者技術(shù)方法,基本的過(guò)程都是一致的,主要還是可以概述為編碼,量化,解碼這三個(gè)部分,流程圖如下:
從理論上講,編解碼問(wèn)題其實(shí)就可以歸結(jié)為映射與優(yōu)化的問(wèn)題,從神經(jīng)網(wǎng)絡(luò)的方面來(lái)看無(wú)非就是實(shí)現(xiàn)了從輸入到輸出的一個(gè)非線性的映射關(guān)系,并且衡量性能的標(biāo)準(zhǔn)可以從并行處理能力是否高效,容錯(cuò)率是否合適,以及是否具有魯棒性.分析圖像壓縮的基本原理其實(shí)和上述的BP神經(jīng)網(wǎng)絡(luò)的原理一樣:如下圖所示:
在BP網(wǎng)絡(luò)中,輸入層到隱藏層之間的映射關(guān)系相當(dāng)于編碼器,用于對(duì)于圖像信號(hào)進(jìn)行線性或者非線性的變換,而隱藏層到輸出層之間的映射關(guān)系相當(dāng)于編碼器,通過(guò)對(duì)于壓縮后的信號(hào)數(shù)據(jù)進(jìn)行反變換來(lái)達(dá)到重建圖像數(shù)據(jù).壓縮比率S=輸入層神經(jīng)元個(gè)數(shù)/隱藏層神經(jīng)元節(jié)點(diǎn)數(shù).BP神經(jīng)網(wǎng)絡(luò)的輸入層與輸出層的神經(jīng)元節(jié)點(diǎn)數(shù)從理論上說(shuō)是一致的.而隱含層的神經(jīng)元數(shù)目比輸出層輸入層的數(shù)目要少得多.這樣理論上就可以通過(guò)調(diào)節(jié)隱藏層神經(jīng)元節(jié)點(diǎn)數(shù)目來(lái)達(dá)到對(duì)于不同圖像壓縮比的效果.
3:基于MATLAB的BP神經(jīng)網(wǎng)絡(luò)圖像壓縮過(guò)程的分析:
因?yàn)樵贛ATLAB上應(yīng)用BP神經(jīng)網(wǎng)絡(luò)對(duì)于數(shù)字圖像進(jìn)行壓縮主要包括訓(xùn)練樣本構(gòu)造,仿真以及圖像重建這三個(gè)環(huán)節(jié).
1:訓(xùn)練樣本的構(gòu)建
因?yàn)槲业臋C(jī)器的性能不夠,考慮到需要將整幅圖像中的所有像素?cái)?shù)據(jù)都需要作為BP網(wǎng)絡(luò)的輸入數(shù)據(jù),為了控制整個(gè)網(wǎng)絡(luò)的訓(xùn)練規(guī)模和訓(xùn)練速度,因此對(duì)于圖像進(jìn)行分塊化處理,但是考慮到臨近像素之間的相關(guān)性和差異性,因此小圖像的所占的像素比例不應(yīng)該太大,假設(shè)一個(gè)圖像是由N*N個(gè)像素構(gòu)成,將整個(gè)圖像切割為M個(gè)規(guī)則大小的小圖像塊,其中每個(gè)圖像由n*n個(gè)像素構(gòu)成,將每個(gè)小圖像的數(shù)據(jù)重構(gòu)為一個(gè)列向量,作為樣本的訓(xùn)練向量,然后進(jìn)行歸一化數(shù)據(jù)處理.
這里用的是最值線性函數(shù)轉(zhuǎn)換法,即:
Y(k)={X(k)-X(min)}/{X(max)-X(min)}
其中X(k)是轉(zhuǎn)換之前的數(shù)據(jù),Y(k)是轉(zhuǎn)換之后的數(shù)據(jù),X(min),X(max)是整個(gè)數(shù)據(jù)集合里邊的最小值和最大值.通過(guò)歸一化,可以將每個(gè)訓(xùn)練向量的像素值歸一到[0,1]的范圍內(nèi).
2:在創(chuàng)建并且訓(xùn)練好符合條件的BP網(wǎng)絡(luò)后,使用上邊提到Sigmoid對(duì)于歸一化后的處理的圖像數(shù)據(jù)進(jìn)行仿真壓縮,輸出仿真向量,然后通過(guò)圖像重建來(lái)還原為一幅完整的圖像數(shù)據(jù).
3:現(xiàn)在以靜態(tài)的圖像進(jìn)行試驗(yàn),控制大小為128*128,先將整幅圖像分隔成為4*4的小圖像快,再將每個(gè)小圖像轉(zhuǎn)化為16*1的列向量,統(tǒng)一歸一化處理進(jìn)行作為網(wǎng)絡(luò)的輸入的樣本,按照上述的操作進(jìn)行分析,創(chuàng)建BP網(wǎng)絡(luò),進(jìn)行訓(xùn)練,這一次壓縮比為4,結(jié)果所示如下:
從壓縮后的視覺(jué)效果來(lái)看,隱藏層的神經(jīng)網(wǎng)絡(luò)節(jié)點(diǎn)數(shù)一定范圍內(nèi)影響了圖像的壓縮效果,當(dāng)隱藏層節(jié)點(diǎn)的數(shù)目較多時(shí),壓縮比較低,壓縮的重建的圖像的質(zhì)量比較好,但是這樣的影響不是成線性的.同時(shí)網(wǎng)絡(luò)的訓(xùn)練的好壞也是對(duì)圖像壓縮有很顯著的影響,算是個(gè)有損壓縮吧.
具體的代碼修改后放出,有興趣的可以留意
參考資料:
1:數(shù)字圖像處理 賈永紅
2:人工神經(jīng)網(wǎng)絡(luò)導(dǎo)論 蔣宗禮
3:機(jī)器學(xué)習(xí) 周志華