1. 程式人生 > >從神經網路到卷積神經網路的瞭解

從神經網路到卷積神經網路的瞭解

date: 2016-09-14 11:02

老師提供的閱讀材,上週就應該看完,但還是沒看,這周需要看完然後看兩篇FNN的論文並做一個report。 提供的材料是CS231n
PS:才發現有翻譯,真真好人,我真真浪費時間t-T
PPS:再也不幹像一句一句翻譯這麼笨蛋的方法了。學習還是理解為主。以下僅為總結摘抄的筆記。僅供自己學習與回憶。

神經網路

神經網路是一種模仿生物神經網路(動物的中樞神經系統,特別是大腦)的結構和功能的數學模型或計算模型用於對函式進行估計或近似。

神經元就是當h大於0時輸出1,h小於0時輸出0這麼一個模型,它的實質就是把特徵空間一切兩半,認為兩半分別屬兩個類。

多層神經網路中底層神經元的輸出是高層神經元的輸入。神經網路神奇的地方在於它的每一個元件非常簡單——把空間切一刀+某種啟用函式(0-1階躍、sigmoid、max-pooling),但是可以一層一層級聯。輸入向量連到許多神經元上,這些神經元的輸出又連到一堆神經元上,這一過程可以重複很多次。

神經網路的訓練依靠反向傳播演算法:最開始輸入層輸入特徵向量,網路層層計算獲得輸出,輸出層發現輸出和正確的類號不一樣,這時它就讓最後一層神經元進行引數調整,最後一層神經元不僅自己調整引數,還會勒令連線它的倒數第二層神經元調整,層層往回退著調整。經過調整的網路會在樣本上繼續測試,如果輸出還是老分錯,繼續來一輪迴退調整,直到網路輸出滿意為止。

以下內容來自

神經網路的類別

神經網路和數學模型MP

1943年,心理學家McCulloch和數學家Pitts參考了生物神經元的結構,發表了抽象的神經元模型MP。

MP模型是按照生物神經元的結構和工作原理構造出來的一個抽象和簡化了的模型。

生物神經網路的假定特點:

  1. 每個神經元都是一個多輸入單輸出的資訊處理單元;
  2. 神經元輸入分興奮性輸入和抑制性輸入兩種型別;
  3. 神經元具有空間整合特性和閾值特性;
  4. 神經元輸入與輸出間有固定的時滯,主要取決於突觸延擱

按照生物神經元,建立M-P模型。神經元可以表示如下:

神經元

結構圖裡的關鍵不是圓圈(代表“神經元”),而是連線線(代表“神經元”之間的連線)。每個連線線對應一個不同的權重(其值稱為權值),這是需要訓練得到的。在神經元模型裡,每個有向箭頭表示的是值的加權傳遞。我們使用a來表示輸入,用w來表示權值。一個表示連線的有向箭頭可以這樣理解:在初端,傳遞的訊號大小仍然是a,端中間有加權引數w,經過這個加權後的訊號會變成a*w,因此在連線的末端,訊號的大小就變成了a*w。

將神經元圖中的所有變數用符號表示,那麼對應的公式為 神經元

但只輸出0和1,不可微,不利於數學分析,實際過程中使用sgn函式(即函式f)等。

1943年釋出的MP模型,雖然簡單,但已經建立了神經網路大廈的地基。但是,MP模型中,權重的值都是預先設定的,因此不能學習。

感知器

1958年,計算科學家Rosenblatt提出了由兩層神經元組成的神經網路。他給它起了一個名字–“感知器”(Perceptron)。

在原來MP模型的“輸入”位置新增神經元節點,標誌其為“輸入單元”。其餘不變。

單層神經網路

在“感知器”中,有兩個層次。分別是輸入層和輸出層。輸入層裡的“輸入單元”只負責傳輸資料,不做計算。輸出層裡的“輸出單元”則需要對前面一層的輸入進行計算。

我們把需要計算的層次稱之為“計算層”,並把擁有一個計算層的網路稱之為“單層神經網路”。有一些文獻會按照網路擁有的層數來命名,例如把“感知器”稱為兩層神經網路。

假如我們要預測的目標不再是一個值,而是一個向量。那麼可以在輸出層再增加一個“輸出單元”。

下圖顯示了帶有兩個輸出單元的單層神經網路,其中輸出單元h1和h2的計算公式如下圖。

單層神經網路擴充套件

使用二維的下標,用w(x ,y)來表達一個權值。下標中的x代表後一層神經元的序號,而y代表前一層神經元的序號(序號的順序從上到下)。

可以用矩陣乘法來表達這兩個公式,輸出公式可以改寫成:f(W * a) = h;這個公式就是神經網路中從前一層計算後一層的矩陣運算

與神經元模型不同,感知器中的權值是通過訓練得到的.感知器只能做簡單的線性分類任務。

兩層神經網路(多層感知器MLP)

單層神經網路無法解決異或問題。但是當增加一個計算層以後,兩層神經網路不僅可以解決異或問題,而且具有非常好的非線性分類效果。不過兩層神經網路的計算是一個問題,沒有一個較好的解法。1986年,Rumelhar和Hinton等人提出了反向傳播(Backpropagation,BP)演算法,解決了兩層神經網路所需要的複雜計算量問題,從而帶動了業界使用兩層神經網路研究的熱潮。

兩層神經網路除了包含一個輸入層,一個輸出層以外,還增加了一箇中間層。此時,中間層和輸出層都是計算層。

NN

使用矩陣運算,即
- f(W(1) * a(1)) = a(2);
- f(W(2) * a(2)) = h;

假設我們的預測目標是一個向量,那麼與前面類似,只需要在“輸出層”再增加節點即可。

需要說明的是,神經網路的結構圖中一直預設存在著偏置節點(bias unit)。它本質上是一個只含有儲存功能,且儲存值永遠為1的單元。在神經網路的每個層次中,除了輸出層以外,都會含有這樣一個偏置單元。正如線性迴歸模型與邏輯迴歸模型中的一樣。偏置單元與後一層的所有節點都有連線,我們設這些引數值為向量b,稱之為偏置。

在考慮了偏置以後的一個神經網路的矩陣運算如下:

  • f(W(1) * a(1) + b(1)) = a(2);
  • f(W(2) * a(2) + b(2)) = h;

在兩層神經網路中,我們不再使用sgn函式作為函式f,而是使用平滑函式sigmoid作為函式f。我們把函式f也稱作 啟用函式 (active function)。

事實上,神經網路的本質就是通過引數與啟用函式來擬合特徵與目標之間的真實函式關係。初學者可能認為畫神經網路的結構圖是為了在程式中實現這些圓圈與線,但在一個神經網路的程式中,既沒有“線”這個物件,也沒有“單元”這個物件。實現一個神經網路最需要的是線性代數庫。

與單層神經網路不同。理論證明,兩層神經網路可以無限逼近任意連續函式。

單層網路只能做線性分類任務。而兩層神經網路中的後一層也是線性分類層,應該只能做線性分類任務。為什麼兩個線性分類任務結合就可以做非線性分類任務?

舉例,紅色的線與藍色的線代表資料。而紅色區域和藍色區域代表由神經網路劃開的區域,兩者的分界線就是決策分界。

兩層神經網路

左圖可以看到,這個兩層神經網路的決策分界是非常平滑的曲線,而且分類的很好。右圖是單獨看輸出層的決策分界,可以看到,輸出層的決策分界仍然是直線。關鍵就是,從輸入層到隱藏層時,資料發生了空間變換。

在兩層神經網路中,隱藏層對原始的資料進行了一個空間變換,使其可以被線性分類,然後輸出層的決策分界劃出了一個線性分類分界線,對其進行分類。

這樣就匯出了兩層神經網路可以做非線性分類的關鍵–隱藏層。矩陣和向量相乘,本質上就是對向量的座標空間進行一個變換。因此,隱藏層的引數矩陣的作用就是使得資料的原始座標空間從線性不可分,轉換成了線性可分。

兩層神經網路通過兩層的線性模型模擬了資料內真實的非線性函式。因此, 多層的神經網路的本質就是複雜函式擬合。

隱藏層的節點數設計:

在設計一個神經網路時,輸入層的節點數需要與特徵的維度匹配,輸出層的節點數要與目標的維度匹配。而中間層的節點數,卻是由設計者指定的。因此,“自由”把握在設計者的手中。但是,節點數設定的多少,卻會影響到整個模型的效果。如何決定這個自由層的節點數呢?目前業界沒有完善的理論來指導這個決策。一般是根據經驗來設定。較好的方法就是預先設定幾個可選值,通過切換這幾個值來看整個模型的預測效果,選擇效果最好的值作為最終選擇。這種方法又叫做Grid Search(網格搜尋)。

兩層神經網路的訓練:

從兩層神經網路開始,神經網路的研究人員開始使用機器學習相關的技術進行神經網路的訓練。例如用大量的資料(1000-10000左右),使用演算法進行優化等等,從而使得模型訓練可以獲得性能與資料利用上的雙重優勢。

機器學習模型訓練的目的,就是使得引數儘可能的與真實的模型逼近。不過由於其多層性,還需要利用鏈式求導法則對隱含層的節點進行求導,即梯度下降+鏈式求導法則,專業名稱為反向傳播。

具體做法是這樣的。首先給所有引數賦上隨機值。我們使用這些隨機生成的引數值,來預測訓練資料中的樣本。樣本的預測目標為yp,真實目標為y。那麼,定義一個值loss,計算公式如下。

  • loss = (yp - y)^2

這個值稱之為損失(loss),我們的目標就是使對所有訓練資料的損失和儘可能的小。

如果將先前的神經網路預測的矩陣公式帶入到yp中(因為有z=yp),那麼我們可以把損失寫為關於引數(parameter)的函式,這個函式稱之為損失函式(loss function)。神經網路的輸出和預期越接近, 就越接近於0. “訓練”過程就是選擇合適的w和b,讓C(w,b)最小化。

Object Function

此時這個問題就被轉化為一個優化問題。一個常用方法就是高等數學中的求導,但是這裡的問題由於引數不止一個,求導後計算導數等於0的運算量很大,所以一般來說解決這個優化問題使用的是 梯度下降演算法 。梯度下降演算法每次計算引數在當前的梯度,然後讓引數向著梯度的反方向前進一段距離,不斷重複,直到梯度接近零時截止。一般這個時候,所有的引數恰好達到使損失函式達到一個最低值的狀態。

在神經網路模型中,由於結構複雜,每次計算梯度的代價很大。因此還需要使用 反向傳播演算法。反向傳播演算法是利用了神經網路的結構進行的計算。不一次計算所有引數的梯度,而是從後往前。首先計算輸出層的梯度,然後是第二個引數矩陣的梯度,接著是中間層的梯度,再然後是第一個引數矩陣的梯度,最後是輸入層的梯度。計算結束以後,所要的兩個引數矩陣的梯度就都有了。

優化問題只是訓練中的一個部分。機器學習問題之所以稱為學習問題,而不是優化問題,就是因為它不僅要求資料在訓練集上求得一個較小的誤差,在測試集上也要表現好。因為模型最終是要部署到沒有見過訓練資料的真實場景。提升模型在測試集上的預測效果的主題叫做 泛化 (generalization),相關方法被稱作正則化(regularization)。神經網路中常用的泛化技術有權重衰減等。

但是神經網路仍然存在若干的問題:

  1. 一次神經網路的訓練仍然耗時太久,
  2. 區域性最優解問題,這使得神經網路的訓練優化較為困難。
  3. 隱藏層的節點數需要調參,使用不太方便。

多層神經網路(深度學習)

多個神經元可以組成神經網路模型

NN

除了輸入、輸出兩層,其它的叫隱藏層。每個神經元是一個決策單元,整個神經網路是一個複雜的決策網路。它要做的事,就是通過隱藏層,把輸入層處理成我們想要的輸出層。

多層神經網路中,輸出也是按照一層一層的方式來計算。從最外面的層開始,算出所有單元的值以後,再繼續計算更深一層。只有當前層所有單元的值都計算完畢以後,才會算下一層。有點像計算向前不斷推進的感覺。所以這個過程叫做 “正向傳播”

與兩層層神經網路不同。多層神經網路中的層數增加了很多。

增加更多的層次有什麼好處? 更深入的表示特徵,以及更強的函式模擬能力。

更深入的表示特徵可以這樣理解,隨著網路的層數增加,每一層對於前一層次的抽象表示更深入。在神經網路中,每一層神經元學習到的是前一層神經元值的更抽象的表示。例如第一個隱藏層學習到的是“邊緣”的特徵,第二個隱藏層學習到的是由“邊緣”組成的“形狀”的特徵,第三個隱藏層學習到的是由“形狀”組成的“圖案”的特徵,最後的隱藏層學習到的是由“圖案”組成的“目標”的特徵。通過抽取更抽象的特徵來對事物進行區分,從而獲得更好的區分與分類能力。

更強的函式模擬能力是由於隨著層數的增加,整個網路的引數就越多。而神經網路其實本質就是模擬特徵與目標之間的真實關係函式的方法,更多的引數意味著其模擬的函式可以更加的複雜,可以有更多的容量(capcity)去擬合真正的關係。

通過研究發現,在引數數量一樣的情況下,更深的網路往往具有比淺層的網路更好的識別效率。

訓練:

在單層神經網路時,我們使用的啟用函式是sgn函式。到了兩層神經網路時,我們使用的最多的是sigmoid函式。而到了多層神經網路時,通過一系列的研究發現, ReLU函式 在訓練多層神經網路時,更容易收斂,並且預測效能更好。

ReLU函式不是傳統的非線性函式,而是分段線性函式。其表示式非常簡單,就是y=max(x,0)。簡而言之,在x大於0,輸出就是輸入,而在x小於0時,輸出就保持為0。這種函式的設計啟發來自於生物神經元對於激勵的線性響應,以及當低於某個閾值後就不再響應的模擬。

在多層神經網路中,訓練的主題仍然是優化和泛化。

備註:

損失函式loss function又稱殘差函式error function,以及代價函式cost function。這三者都是同一個意思,都是優化問題所需要求解的方程。

權重weight和引數parameter,神經網路界由於以前的慣例,一般會將訓練得到的引數稱之為權重,而不像其他機器學習方法就稱之為引數。這個需要記住就好。不過在目前的使用慣例中,也有這樣一種規定。那就是非偏置節點連線上的值稱之為權重,而偏置節點上的值稱之為偏置,兩者統一起來稱之為引數。

啟用函式active function又叫轉移函式transfer function,即疊加的非線性函式。

BP神經網路是什麼?是使用了反向傳播BP演算法的兩層前饋神經網路。也是最普遍的一種兩層神經網路。

卷積神經網路

卷積神經網路Convolutional Neural Networks,又叫CNNs或者ConvNets。CNN屬於一種特殊的多層神經網路。卷積神經網路是一種前饋神經網路,它的人工神經元可以響應一部分覆蓋範圍內的周圍單元,對於大型影象處理有出色表現。

卷積神經網路由一個或多個卷積層和頂端的全連通層(對應經典的神經網路)組成,同時也包括關聯權重和池化層(pooling layer)。這一結構使得卷積神經網路能夠利用輸入資料的二維結構。

影象處理中,往往會將影象看成是一個或多個的二維向量,如之前博文中提到的MNIST手寫體圖片就可以看做是一個28 × 28的二維向量(黑白圖片,只有一個顏色通道;如果是RGB表示的彩色圖片則有三個顏色通道,可表示為三張二維向量)。與傳統神經網路採用全連線的方式不同,CNN通過區域性連線權值共享的方法來避免參數過多。

區域性連線

一般認為人對外界的認知是從區域性到全域性的,而影象的空間聯絡也是區域性的畫素聯絡較為緊密,而距離較遠的畫素相關性則較弱。因而,每個神經元其實沒有必要對全域性影象進行感知,只需要對區域性進行感知,然後在更高層將區域性的資訊綜合起來就得到了全域性的資訊。網路部分連通的思想,也是受啟發於生物學裡面的視覺系統結構。視覺皮層的神經元就是區域性接受資訊的(即這些神經元只響應某些特定區域的刺激)。

全連線與區域性連線

左圖為全連線,輸入一個1000×1000的影象,如果隱藏層數目與輸入層一樣,那麼輸入層到隱含層的權值引數為1000 × 1000 × 10^6 = 10^12,如此數目巨大的引數幾乎難以訓練;右圖為區域性連線,隱藏層的每個神經元僅與影象中10 × 10的區域性影象相連線,那麼此時的權值引數數量為10 × 10 × 10^6 = 10^8,將直接減少4個數量級。

權值共享

影象的一部分的統計特性與其他部分是一樣的。這也意味著我們在這一部分學習的特徵也能用在另一部分上,所以對於這個影象上的所有位置,我們都能使用同樣的學習特徵。

在區域性連線中隱藏層的每一個神經元連線的是一個10 × 10的區域性影象,因此有10 × 10個權值引數,將這10 × 10個權值引數共享給剩下的神經元,也就是說隱藏層中10^6個神經元的權值引數相同,那麼此時不管隱藏層神經元的數目是多少,需要訓練的引數就是這 10 × 10個權值引數(也就是卷積核(也稱濾波器)的大小)。

權值共享

這樣僅提取了影象的一種特徵,如果要多提取出一些特徵,可以增加多個卷積核(一個卷積核包含多個卷積),不同的卷積核能夠得到影象的不同對映下的特徵,稱之為Feature Map。如果有100個卷積核,最終的權值引數也僅為100 × 100 = 10^4。另外,偏置引數也是共享的,同一種濾波器共享一個。

卷積神經網路的核心思想是:區域性感受野(local field),權值共享以及時間或空間亞取樣這三種思想結合起來,獲得了某種程度的位移、尺度、形變不變性.

CNN中主要有兩種型別的網路層,分別是卷積層和池化/取樣層(Pooling)。卷積層的作用是提取影象的各種特徵;池化層的作用是對原始特徵訊號進行抽象,從而大幅度減少訓練引數,另外還可以減輕模型過擬合的程度。

卷積

卷積層(Convolutional layer),卷積神經網路中每層卷積層由若干卷積核(卷積單元)組成,每個卷積單元的引數都是通過反向傳播演算法優化得到的。卷積運算的目的是提取輸入的不同特徵,第一層卷積層可能只能提取一些低階的特徵如邊緣、線條和角等層級,更多層的網路能從低階特徵中迭代提取更復雜的特徵。

卷積

上圖解釋了卷積過程。就是矩陣的點乘。從一個5×5的影象中學習9個特徵。

  • 全連線:5×5×9個權值引數
  • 區域性連線:3×3×9個權值引數
  • 區域性連線+權值共享:3×3×1個權值引數

池化/取樣層

池化層(Pooling layer),通常在卷積層之後會得到維度很大的特徵,為了進一步降低網路訓練引數及模型的過擬合程度,將特徵切成幾個區域,取其最大值(Max-Pooling)或平均值(Mean-Pooling),得到新的、維度較小的特徵。

池化

LeNet-5網路

LeNet-5網路是一個經典的CNN結構。其網路圖如下。
LeNet-5

每個層有多個Feature Map,每個Feature Map通過一種卷積濾波器提取輸入的一種特徵,然後每個Feature Map有多個神經元。

LeNet-5

C1層是一個卷積層(為什麼是卷積?卷積運算一個重要的特點就是,通過卷積運算,可以使原訊號特徵增強,並且降低噪音),由6個特徵圖Feature Map構成。特徵圖中每個神經元與輸入中5*5的鄰域相連。特徵圖的大小為28*28,這樣能防止輸入的連線掉到邊界之外(是為了BP反饋時的計算,不致梯度損失,個人見解)。C1有156個可訓練引數(每個濾波器5*5=25個unit引數和一個bias引數,一共6個濾波器,共(5*5+1)6=156個引數),共156(28*28)=122,304個連線。

LeNet-5

S2層是一個下采樣層(為什麼是下采樣?利用影象區域性相關性的原理,對影象進行子抽樣,可以減少資料處理量同時保留有用資訊),有6個14*14的特徵圖。特徵圖中的每個單元與C1中相對應特徵圖的2*2鄰域相連線。S2層每個單元的4個輸入相加,乘以一個可訓練引數,再加上一個可訓練偏置。結果通過sigmoid函式計算。可訓練係數和偏置控制著sigmoid函式的非線性程度。如果係數比較小,那麼運算近似於線性運算,亞取樣相當於模糊影象。如果係數比較大,根據偏置的大小亞取樣可以被看成是有噪聲的“或”運算或者有噪聲的“與”運算。每個單元的2*2感受野並不重疊,因此S2中每個特徵圖的大小是C1中特徵圖大小的1/4(行和列各1/2)。S2層有12個可訓練引數和5880個連線。

卷積和子取樣過程
上圖為卷積和子取樣過程:卷積過程包括:用一個可訓練的濾波器fx去卷積一個輸入的影象(第一階段是輸入的影象,後面的階段就是卷積特徵map了),然後加一個偏置bx,得到卷積層Cx。子取樣過程包括:每鄰域四個畫素求和變為一個畫素,然後通過標量Wx+1加權,再增加偏置bx+1,然後通過一個sigmoid啟用函式,產生一個大概縮小四倍的特徵對映圖Sx+1。

所以從一個平面到下一個平面的對映可以看作是作卷積運算,S-層可看作是模糊濾波器,起到二次特徵提取的作用。隱層與隱層之間空間解析度遞減,而每層所含的平面數遞增,這樣可用於檢測更多的特徵資訊。

LeNet-5

C3層也是一個卷積層,它同樣通過5x5的卷積核去卷積層S2,然後得到的特徵map就只有10x10個神經元,但是它有16種不同的卷積核,所以就存在16個特徵map了。這裡需要注意的一點是:C3中的每個特徵map是連線到S2中的所有6個或者幾個特徵map的,表示本層的特徵map是上一層提取到的特徵map的不同組合(這個做法也並不是唯一的)。(看到沒有,這裡是組合,就像之前聊到的人的視覺系統一樣,底層的結構構成上層更抽象的結構,例如邊緣構成形狀或者目標的部分)。

LeNet-5

剛才說C3中每個特徵圖由S2中所有6個或者幾個特徵map組合而成。為什麼不把S2中的每個特徵圖連線到每個C3的特徵圖呢?原因有2點。第一,不完全的連線機制將連線的數量保持在合理的範圍內。第二,也是最重要的,其破壞了網路的對稱性。由於不同的特徵圖有不同的輸入,所以迫使他們抽取不同的特徵(希望是互補的)。

例如,存在的一個方式是:C3的前6個特徵圖以S2中3個相鄰的特徵圖子集為輸入。接下來6個特徵圖以S2中4個相鄰特徵圖子集為輸入。然後的3個以不相鄰的4個特徵圖子集為輸入。最後一個將S2中所有特徵圖為輸入。這樣C3層有1516個可訓練引數和151600個連線。

LeNet-5

S4層是一個下采樣層,由16個5*5大小的特徵圖構成。特徵圖中的每個單元與C3中相應特徵圖的2*2鄰域相連線,跟C1和S2之間的連線一樣。S4層有32個可訓練引數(每個特徵圖1個因子和一個偏置)和2000個連線。

LeNet-5

C5層是一個卷積層,有120個特徵圖。每個單元與S4層的全部16個單元的5*5鄰域相連。由於S4層特徵圖的大小也為5*5(同濾波器一樣),故C5特徵圖的大小為1*1:這構成了S4和C5之間的全連線。之所以仍將C5標示為卷積層而非全相聯層,是因為如果LeNet-5的輸入變大,而其他的保持不變,那麼此時特徵圖的維數就會比1*1大。C5層有48120個可訓練連線。

LeNet-5

F6層有84個單元(之所以選這個數字的原因來自於輸出層的設計),與C5層全相連。有10164個可訓練引數。如同經典神經網路,F6層計算輸入向量和權重向量之間的點積,再加上一個偏置。然後將其傳遞給sigmoid函式產生單元i的一個狀態。

LeNet-5

最後,輸出層由歐式徑向基函式(Euclidean Radial Basis Function)單元組成,每類一個單元,每個有84個輸入。換句話說,每個輸出RBF單元計算輸入向量和引數向量之間的歐式距離。輸入離引數向量越遠,RBF輸出的越大。一個RBF輸出可以被理解為衡量輸入模式和與RBF相關聯類的一個模型的匹配程度的懲罰項。用概率術語來說,RBF輸出可以被理解為F6層配置空間的高斯分佈的負log-likelihood。給定一個輸入模式,損失函式應能使得F6的配置與RBF引數向量(即模式的期望分類)足夠接近。這些單元的引數是人工選取並保持固定的(至少初始時候如此)。這些引數向量的成分被設為-1或1。雖然這些引數可以以-1和1等概率的方式任選,或者構成一個糾錯碼,但是被設計成一個相應字元類的7*12大小(即84)的格式化圖片。這種表示對識別單獨的數字不是很有用,但是對識別可列印ASCII集中的字串很有用。

使用這種分佈編碼而非更常用的“1 of N”編碼用於產生輸出的另一個原因是,當類別比較大的時候,非分佈編碼的效果比較差。原因是大多數時間非分佈編碼的輸出必須為0。這使得用sigmoid單元很難實現。另一個原因是分類器不僅用於識別字母,也用於拒絕非字母。使用分佈編碼的RBF更適合該目標。因為與sigmoid不同,他們在輸入空間的較好限制的區域內興奮,而非典型模式更容易落到外邊。

RBF引數向量起著F6層目標向量的角色。需要指出這些向量的成分是+1或-1,這正好在F6 sigmoid的範圍內,因此可以防止sigmoid函式飽和。實際上,+1和-1是sigmoid函式的最大彎曲的點處。這使得F6單元執行在最大非線性範圍內。必須避免sigmoid函式的飽和,因為這將會導致損失函式較慢的收斂和病態問題。