BP神經(jīng)網(wǎng)絡現(xiàn)在來說是一種比較成熟的網(wǎng)絡模型了,因為神經(jīng)網(wǎng)絡對于數(shù)字圖像處理的先天優(yōu)勢,特別是在圖像壓縮方面更具有先天的優(yōu)勢,因此,我這一段時間在研究神經(jīng)網(wǎng)絡的時候同時研究了一下關于BP網(wǎng)絡實現(xiàn)圖像壓縮的原理和過程,并且是在MATLAB上進行了仿真的實驗,結果發(fā)現(xiàn)設計的BP神經(jīng)網(wǎng)絡具有不錯的泛化能力,對于用于圖像壓縮方面的效果還不錯.
1:BP神經(jīng)網(wǎng)絡的模型的架構和訓練的原理
BP神經(jīng)網(wǎng)絡是現(xiàn)在目前的發(fā)展的比較成熟的神經(jīng)網(wǎng)絡之一了,也是一種比較給力的非線性的可微分函數(shù)進行權值修正和調(diào)整的多層前饋人工神經(jīng)網(wǎng)絡,經(jīng)得住嚴密的數(shù)學邏輯推導,在很多的模式識別的書中和很多的數(shù)據(jù)壓縮的論文中得以大量的廣泛和認同.BP神經(jīng)網(wǎng)絡算法主要的特點是輸入信號的正向傳遞,誤差的反向傳播.BP網(wǎng)絡的學習算法的本質(zhì)其實就是把樣本集合的輸入輸出問題變換為一個非線性優(yōu)化的問題.其中分為三層的網(wǎng)絡結構,包括輸入層,隱藏層,輸出層這樣的三層.典型的一個網(wǎng)絡模型的結構可以由下邊的部分構成:

首先說一下前向傳播:
首先在BP的神經(jīng)網(wǎng)絡模型中我們現(xiàn)在假設為L層,其中他的輸入層是第1層,輸出層是最后一層也就是L層,隱藏層的話其實就是從第2層到第L-1層了.要是在輸出層的第K個神經(jīng)單元,就可以簡單的表示為

這個上標表示為層數(shù),下標表示為第K個神經(jīng)元,同理,其他的層數(shù)和神經(jīng)元也都可以如此概述.這樣的話對于第L層的神經(jīng)元個數(shù)就可以用|L|來表示.即第L層的第J個神經(jīng)元的輸入與輸出的關系如下圖所示:

其中

b表示為第L層的第J個神經(jīng)元與L-1層第J個神經(jīng)元的鏈接權重.

而其輸出的Oij如下所示,其中f是激勵函數(shù)

在神經(jīng)網(wǎng)絡中我們有很多的激活函數(shù)可以選擇,但是我們在這里還是選擇使用sigmood函數(shù),為什么選用這個函數(shù)?因為在我搜集了很多資源來看,如果我們使用一些其他的激活函數(shù)或者直接放棄使用激活函數(shù),不過我們使用多少次隱藏層,我們最終得到的仍然是一個線性的函數(shù),但是在使用非線性的sigmoid函數(shù)以后,就不會有這個問題,我們的網(wǎng)絡也可以去擬合非線性的函數(shù).
在這里我們只需要記住sigmoid函數(shù)的推導,因為在接下來的反向傳播中我們要去使用.

求導以后:


反向傳播
關于反向傳播,這個部分大概是整個BP神經(jīng)網(wǎng)絡的精華所在了.那么反向傳播究竟是個什么東西呢?其實反向傳播就是通過最后的誤差來更新權值.打個比方,你現(xiàn)在是個學生,學校里搞了一大堆試卷,發(fā)給你們考試以后你們考完發(fā)現(xiàn)取得的效果并不好,當校長看到成績單后,校長很生氣,校長就說了,年級主任你去給我找問題,年級主任然后就跟班主任說你給我去找問題,,,一直到你們這些學生,老師讓你們?nèi)ジ?這樣對應的就是我們神經(jīng)網(wǎng)絡的輸入層一直改到輸出層.在這里使用到的一個重要的法則就是梯度下降法則.
梯度下降法,大學高數(shù)的知識,其實就是你更新權重的同時不能更新,而是按照梯度的方向更新才能夠給更新權重,能夠獲得更多的收斂.公式如下:


這里有一個負梯度方向需要說明一下,因為你的學習速率是大于0的,對于誤差E來說,他對W的偏導數(shù)就必須要大于0這樣也就是說,誤差隨著權重的增大而增大,那我們就需要通過減少權重來減小誤差,所以W的變化率需要小于0,當然,如果我們要求某某某的最大值的話,也可以使用正梯度.
直觀上來看神經(jīng)網(wǎng)絡的每個神經(jīng)元的權重更新都是通過誤差的偏導來更新的,在這里我們引入一個新的變量誤差,對于第l層的第j個神經(jīng)元的誤差定義為

這樣的權重更新過程可以為:

在這里我們需要用到的就是鏈式求導法則,具體如下:

根據(jù)sigmoid函數(shù)的求導公式,并且對于誤差進行偏導,我們就可以得到第L層的神經(jīng)元的誤差項:

所以就能夠得到輸出層上一層與輸出的權重更新公式:

所以就能夠得到輸出層上一層與輸出的權重更新公式:


對于隱藏層,我們需要在求導時對于他的輸出層單元的每個誤差影響進行疊加,與輸出層類似,不再贅述.

對于第L-1層的第j個神經(jīng)元的誤差項來說,由于每個神經(jīng)元連接到輸出層的每個單元,因此我們要對輸出層的|L|個單元進行求和,從而得到了誤差項的計算公式:

所以便得到了L-2與L-1層的鏈接權重的公式:

而對于其他層,我們進行推廣就可以得到第I層第J個的神經(jīng)單元的誤差公式額權重更新公式:


對于推導過程,簡單的來說就是鏈式求導,由上面公式我們可以看出反向傳播也是求導,只是對于隱層以及輸入層來說,它們所產(chǎn)生的誤差在傳播過程中能夠影響每一個最終的輸出層單元,所以我們需要對其產(chǎn)生的誤差求和。反向傳播的前提是前向傳播,而前向傳播的公式相信大家很容易都能記住,而反向傳播其實就是對前向傳播的公式鏈式求導,只需要注意到求導過程中對于w對輸出層的影響來判斷什么時候需要進行求和操作就可以.
2:BP神經(jīng)網(wǎng)絡的圖像壓縮原理
數(shù)字圖像壓縮實際上是以較少的比特數(shù)有損或者無損的來表示原來像素矩陣的一種圖像處理技術,實際上就是減少圖像數(shù)據(jù)中的時間冗余,空間冗余,頻譜冗余等等作為目的,從而同過減少上述的一種或者多種冗余的信息而達到更加高效的存儲與傳輸數(shù)據(jù).圖像的壓縮系統(tǒng)其實無論采用什么樣的具體的架構或者技術方法,基本的過程都是一致的,主要還是可以概述為編碼,量化,解碼這三個部分,流程圖如下:

從理論上講,編解碼問題其實就可以歸結為映射與優(yōu)化的問題,從神經(jīng)網(wǎng)絡的方面來看無非就是實現(xiàn)了從輸入到輸出的一個非線性的映射關系,并且衡量性能的標準可以從并行處理能力是否高效,容錯率是否合適,以及是否具有魯棒性.分析圖像壓縮的基本原理其實和上述的BP神經(jīng)網(wǎng)絡的原理一樣:如下圖所示:

在BP網(wǎng)絡中,輸入層到隱藏層之間的映射關系相當于編碼器,用于對于圖像信號進行線性或者非線性的變換,而隱藏層到輸出層之間的映射關系相當于編碼器,通過對于壓縮后的信號數(shù)據(jù)進行反變換來達到重建圖像數(shù)據(jù).壓縮比率S=輸入層神經(jīng)元個數(shù)/隱藏層神經(jīng)元節(jié)點數(shù).BP神經(jīng)網(wǎng)絡的輸入層與輸出層的神經(jīng)元節(jié)點數(shù)從理論上說是一致的.而隱含層的神經(jīng)元數(shù)目比輸出層輸入層的數(shù)目要少得多.這樣理論上就可以通過調(diào)節(jié)隱藏層神經(jīng)元節(jié)點數(shù)目來達到對于不同圖像壓縮比的效果.
3:基于MATLAB的BP神經(jīng)網(wǎng)絡圖像壓縮過程的分析:
因為在MATLAB上應用BP神經(jīng)網(wǎng)絡對于數(shù)字圖像進行壓縮主要包括訓練樣本構造,仿真以及圖像重建這三個環(huán)節(jié).
1:訓練樣本的構建
因為我的機器的性能不夠,考慮到需要將整幅圖像中的所有像素數(shù)據(jù)都需要作為BP網(wǎng)絡的輸入數(shù)據(jù),為了控制整個網(wǎng)絡的訓練規(guī)模和訓練速度,因此對于圖像進行分塊化處理,但是考慮到臨近像素之間的相關性和差異性,因此小圖像的所占的像素比例不應該太大,假設一個圖像是由N*N個像素構成,將整個圖像切割為M個規(guī)則大小的小圖像塊,其中每個圖像由n*n個像素構成,將每個小圖像的數(shù)據(jù)重構為一個列向量,作為樣本的訓練向量,然后進行歸一化數(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)是整個數(shù)據(jù)集合里邊的最小值和最大值.通過歸一化,可以將每個訓練向量的像素值歸一到[0,1]的范圍內(nèi).
2:在創(chuàng)建并且訓練好符合條件的BP網(wǎng)絡后,使用上邊提到Sigmoid對于歸一化后的處理的圖像數(shù)據(jù)進行仿真壓縮,輸出仿真向量,然后通過圖像重建來還原為一幅完整的圖像數(shù)據(jù).
3:現(xiàn)在以靜態(tài)的圖像進行試驗,控制大小為128*128,先將整幅圖像分隔成為4*4的小圖像快,再將每個小圖像轉(zhuǎn)化為16*1的列向量,統(tǒng)一歸一化處理進行作為網(wǎng)絡的輸入的樣本,按照上述的操作進行分析,創(chuàng)建BP網(wǎng)絡,進行訓練,這一次壓縮比為4,結果所示如下:

從壓縮后的視覺效果來看,隱藏層的神經(jīng)網(wǎng)絡節(jié)點數(shù)一定范圍內(nèi)影響了圖像的壓縮效果,當隱藏層節(jié)點的數(shù)目較多時,壓縮比較低,壓縮的重建的圖像的質(zhì)量比較好,但是這樣的影響不是成線性的.同時網(wǎng)絡的訓練的好壞也是對圖像壓縮有很顯著的影響,算是個有損壓縮吧.
具體的代碼修改后放出,有興趣的可以留意
參考資料:
1:數(shù)字圖像處理 賈永紅
2:人工神經(jīng)網(wǎng)絡導論 蔣宗禮
3:機器學習 周志華