【学习笔记】深度学习理论基础
深度學(xué)習(xí)的基本概念
簡(jiǎn)單概括是,使用神經(jīng)網(wǎng)絡(luò),進(jìn)行不斷學(xué)習(xí)訓(xùn)練和修正的過(guò)程。訓(xùn)練集就是有答案的習(xí)題,神經(jīng)網(wǎng)絡(luò)每一次寫(xiě)完作業(yè)都會(huì)去對(duì)答案,如果有偏差,就自動(dòng)修正參數(shù),謂之迭代,直到最后錯(cuò)誤率越接近0越好。
一、單個(gè)神經(jīng)元
數(shù)學(xué)模型(MP模型)
1943年,心理學(xué)家W.S.McCulloch和數(shù)理邏輯學(xué)家W.Pitts基于神經(jīng)元的生理特征,建立了單個(gè)神經(jīng)元的數(shù)學(xué)模型(MP模型)
神經(jīng)元的數(shù)學(xué)模型推導(dǎo)公式:
yk=φ(∑i=1mωkixi+bk)y_k = φ(\sum_{i=1}^mω_{ki}x_{i}+b_k)yk?=φ(i=1∑m?ωki?xi?+bk?)
公式參數(shù):
- x:輸入
- ω:權(quán)重
- b:偏置(b絕大部分情況下是一個(gè)向量,可以類(lèi)比一下一元一次方程y=kx+by=kx+by=kx+b的bbb,使數(shù)值產(chǎn)生整體的偏移。)
- 激活函數(shù)φ:一個(gè)非線(xiàn)性函數(shù),目的是將輸入進(jìn)行變化映射,得出輸出信號(hào)。它模擬大腦電信號(hào),對(duì)較小的刺激進(jìn)行弱化甚至抑制,對(duì)較明顯的刺激繼續(xù)傳遞。
二、神經(jīng)元的擬合原理
模型每次的學(xué)習(xí)都是為了調(diào)整W和b從而得到一個(gè)合適的值,最終由這個(gè)值配合運(yùn)算公式所形成的邏輯就是神經(jīng)網(wǎng)絡(luò)模型。這個(gè)調(diào)整的過(guò)程稱(chēng)為擬合。
正向傳播
數(shù)據(jù)是從輸入到輸出的流向傳遞過(guò)來(lái)的。當(dāng)然,它是在一個(gè)假設(shè)有合適的w和b的基礎(chǔ)上的,才可以實(shí)現(xiàn)對(duì)現(xiàn)實(shí)環(huán)境的正確擬合。但是,在實(shí)際過(guò)程中我們無(wú)法得知w和b的值具體是多少才算是正常。于是,我們加入一個(gè)訓(xùn)練過(guò)程,通過(guò)反向誤差傳遞的方法讓模型自動(dòng)來(lái)修正,最終得到合適的W和b。
反向傳播:
BP(Back Propagation process),BP是在估計(jì)權(quán)重的時(shí)候的必要過(guò)程,可被稱(chēng)為BP算法。深度學(xué)習(xí)的目的就是通過(guò)最小化損失函數(shù),來(lái)估計(jì)神經(jīng)網(wǎng)絡(luò)的權(quán)重。 在這個(gè)過(guò)程中,需要用到BP進(jìn)行反向傳播。(損失函數(shù)下文會(huì)講)
損失,指神經(jīng)網(wǎng)絡(luò)輸出結(jié)果與實(shí)際值的差值(可為均方差等形式的差值)。為了讓損失值最小化,我們選擇一個(gè)損失函數(shù),讓這個(gè)表達(dá)式有最小值,接著通過(guò)對(duì)其求導(dǎo)的方式,找到最小值時(shí)刻的函數(shù)切線(xiàn)斜率(也就是梯度),讓w和b沿著這個(gè)梯度來(lái)調(diào)整。
至于每次調(diào)整多少,我們引入一個(gè)叫做 “學(xué)習(xí)率” 的參數(shù)來(lái)控制,這樣通過(guò)不斷的迭代,使誤差逐步接近最小值,從而達(dá)到我們的目標(biāo)。
通常BP的步驟為:
- 明確損失函數(shù)
- 明確參數(shù)調(diào)整策略
可參考博客:多層神經(jīng)網(wǎng)絡(luò)BP算法的推導(dǎo)
激活函數(shù)(activation function): (同上文“一個(gè)非線(xiàn)性函數(shù),目的是將輸入進(jìn)行變化映射,得出輸出信號(hào)。它模擬大腦電信號(hào),對(duì)較小的刺激進(jìn)行弱化甚至抑制,對(duì)較明顯的刺激繼續(xù)傳遞。 ”)激活函數(shù)(也譯作激勵(lì)函數(shù))的主要作用就是加入非線(xiàn)性因素,以解決線(xiàn)性模型表達(dá)能力不足的缺陷,在整個(gè)神經(jīng)網(wǎng)絡(luò)里起到至關(guān)重要的作用。
因?yàn)樯窠?jīng)網(wǎng)絡(luò)的數(shù)據(jù)基礎(chǔ)是處處可微的,所以選取的激活函數(shù)要保證數(shù)據(jù)輸入與輸出也是可微的。在神經(jīng)網(wǎng)絡(luò)里常用的函數(shù)有Sigmoid、Tanh和Relu等,具體實(shí)現(xiàn)自行百度。
處理分類(lèi): softmax回歸,對(duì)一些數(shù)據(jù)進(jìn)行多種分類(lèi)。softmax從字面上來(lái)說(shuō),可以分成soft和max兩個(gè)部分。max故名思議就是最大值的意思。softmax的核心在于soft,而soft有軟的含義,與之相對(duì)的是hard硬。很多場(chǎng)景中需要我們找出數(shù)組所有元素中值最大的元素,實(shí)質(zhì)上都是求的hardmax。softmax的含義就在于不再唯一的確定某一個(gè)最大值,而是為每個(gè)輸出分類(lèi)的結(jié)果都賦予一個(gè)概率值,表示屬于每個(gè)類(lèi)別的可能性。如果判斷輸入屬于某一個(gè)類(lèi)的概率大于屬于其他類(lèi)的概率,那么這個(gè)類(lèi)對(duì)應(yīng)的值就逼近于1,其他類(lèi)的值就逼近于0。該算法主要應(yīng)用于多分類(lèi),而且是互斥的。公式為
softmax(zi)=ezi∑c=1Cezcsoftmax(z_i)=\frac{e^{z_i}}{\sum_{c=1}^Ce^{z_c}}softmax(zi?)=∑c=1C?ezc?ezi??
其中ziz_izi?為第i個(gè)節(jié)點(diǎn)的輸出值,C為輸出節(jié)點(diǎn)的個(gè)數(shù),即分類(lèi)的類(lèi)別個(gè)數(shù)。通過(guò)softmax函數(shù)就可以將多分類(lèi)的輸出值轉(zhuǎn)換為范圍在[0, 1]和為1的概率分布。把所有值的e的n次方計(jì)算出來(lái),求和后算每個(gè)值占的比率,保證總和為1,一般就可以認(rèn)為softmax得出的是概率。
可參考:一文詳解Softmax函數(shù)
損失函數(shù): 損失函數(shù)是決定網(wǎng)絡(luò)學(xué)習(xí)質(zhì)量的關(guān)鍵。無(wú)論什么樣的網(wǎng)絡(luò)結(jié)構(gòu),如果使用的損失函數(shù)不正確,最終都將難以訓(xùn)練出正確的模型。使用于描述模型預(yù)測(cè)值與真實(shí)值的差距大小。一般有兩種比較常見(jiàn)的算法——均值平方差(MSE)和交叉熵。
- 均值平方差(Mean Squared Error,MSE):y為真實(shí)標(biāo)簽,p即predict值。均方誤差的值越小,表明模型越好。類(lèi)似的損失算法還有均方根誤差(RMSE)(將MSE開(kāi)平方),平均絕對(duì)值誤差(MAD)(對(duì)一個(gè)真實(shí)值與預(yù)測(cè)值相減的絕對(duì)值取平均值)等。
1n∑i=1n(y?p)2\frac{1}{n}\sum_{i=1}^n(y-p)^2n1?i=1∑n?(y?p)2 - 交叉熵?fù)p失函數(shù)(Cross Entropy Loss Function):交叉熵一般用于分類(lèi)問(wèn)題上,表達(dá)的意思為預(yù)測(cè)輸入樣本屬于某一類(lèi)的概率。公式中y代表真實(shí)值分類(lèi)(0或1),a代表預(yù)測(cè)值。交叉熵也是值越小,代表預(yù)測(cè)結(jié)果越準(zhǔn)。
注意:這里用于計(jì)算的a也是通過(guò)分布統(tǒng)一化處理的(或者是經(jīng)過(guò)Sigmoid函數(shù)激活等),取值范圍在0~1之間。
c=1n∑x[ylna+(1?y)ln(1?a)]c=\frac{1}{n}\sum_{x}[ylna+(1-y)ln(1-a)]c=n1?x∑?[ylna+(1?y)ln(1?a)]
注意:損失算法的選取
損失函數(shù)的選取取決于輸入標(biāo)簽數(shù)據(jù)的類(lèi)型:如果輸入的是實(shí)數(shù)、無(wú)界的值,損失函數(shù)使用MSE;如果輸入標(biāo)簽是位矢量(分類(lèi)label),使用交叉熵會(huì)更合適。
三、多層神經(jīng)網(wǎng)絡(luò)
1、傳統(tǒng)前饋神經(jīng)網(wǎng)絡(luò)——對(duì)隱藏層概念的引入
單個(gè)神經(jīng)元的擬合僅適用于線(xiàn)性可分(可被直線(xiàn)或平面分割)的情況。
對(duì)于這類(lèi)高維非線(xiàn)性問(wèn)題,我們引入了一個(gè)隱藏層概念用來(lái)解決問(wèn)題。
對(duì)于這個(gè)隱藏層來(lái)說(shuō),它的作用就是將“線(xiàn)性不可分”的數(shù)據(jù)映射到高維空間來(lái),使映射后的數(shù)據(jù)變得“線(xiàn)性可分”。
我們通過(guò)異或數(shù)據(jù)集來(lái)介紹這種隱藏層的作用:
第一步定義變量,在網(wǎng)絡(luò)參數(shù)的定義中,輸入是“2”代表兩個(gè)數(shù),輸出是“1”代表最終的結(jié)果,再放一個(gè)隱藏層,該隱藏層里有兩個(gè)節(jié)點(diǎn)。輸入占位符為x,輸出為y,學(xué)習(xí)率為0.0001。
這里以字典的方式定義權(quán)重W和b,里面的h1代表隱藏層,h2代表最終的輸出層。
該例中模型的正向結(jié)構(gòu)入口為x,經(jīng)過(guò)與第一層的w相乘再加上b,通過(guò)Relu函數(shù)(大于0的留下,否則一律為0)進(jìn)行激活轉(zhuǎn)化,最終生成layer_1,再將layer_1代入第二層,使用Tanh激活(-1~1)函數(shù)生成最終的輸出y_pred。
模型的反向使用均值平方差(即對(duì)預(yù)測(cè)值與真實(shí)值的差取平均值)計(jì)算loss,最終使用AdamOptimizer進(jìn)行優(yōu)化。
運(yùn)行上面的程序,得到如下結(jié)果:
[[ 0.10773809] [ 0.60417336] [ 0.76470393] [ 0.26959091]] [[ 0.00000000e+00 2.32602470e-05] [ 7.25074887e-01 0.00000000e+00] [ 0.00000000e+00 9.64471161e-01] [ 2.06250161e-01 1.69421546e-05]]第一個(gè)是4行1列的數(shù)組,用四舍五入法來(lái)取值,與我們定義的輸出Y完全吻合。
第二個(gè)為4行2列的數(shù)組,為隱藏層的輸出。其中第一列為隱藏層第一個(gè)節(jié)點(diǎn)的輸出,第二列為隱藏層第二個(gè)節(jié)點(diǎn)的輸出,將它們四舍五入取整顯示如下:
可以很明顯地看出,最后一層輸出層其實(shí)是對(duì)隱藏層的AND運(yùn)算,因?yàn)樽罱K結(jié)果為[0,1,1,0]。這樣就很清楚地表現(xiàn)了,這一個(gè)隱藏層將數(shù)據(jù)轉(zhuǎn)化為線(xiàn)性可分的數(shù)據(jù)集,然后在輸出層使用一個(gè)神經(jīng)元將其分開(kāi)。
在幾何空間里,兩個(gè)點(diǎn)可以定位一條直線(xiàn),兩條直線(xiàn)可以定位一個(gè)平面,兩個(gè)平面可以定位一個(gè)三維空間,兩個(gè)三維空間可以定位更高維的空間……
在線(xiàn)性可分問(wèn)題上也可以這樣擴(kuò)展,線(xiàn)性可分是在一個(gè)平面里,通過(guò)一條線(xiàn)來(lái)分類(lèi),那么同理,如果線(xiàn)所在的平面升級(jí)到了三維空間,則需要通過(guò)一個(gè)平面將問(wèn)題分類(lèi)。如圖所示,把異或數(shù)據(jù)集的輸入x1、x2當(dāng)成平面的兩個(gè)點(diǎn),輸出y當(dāng)作三維空間里的z軸上的坐標(biāo),那么所繪制的圖形就是這樣的。
很明顯,這樣的數(shù)據(jù)集是很好分開(kāi)的。圖中,右面的比例尺指示的是縱坐標(biāo)。0刻度往下,顏色由淺藍(lán)逐漸變?yōu)樯钏{(lán);0刻度往上,顏色由淺紅逐漸變?yōu)樯罴t。作一個(gè)平行于底平面、高度為0的平面,即可將數(shù)據(jù)分開(kāi),如圖中的虛平面。我們前面使用的隱藏層的兩個(gè)節(jié)點(diǎn),可以理解成定位中間平面的兩條直線(xiàn)。其實(shí),一個(gè)隱藏層的作用,就是將線(xiàn)性可分問(wèn)題轉(zhuǎn)化成平面可分問(wèn)題。更多的隱藏層,就相當(dāng)于轉(zhuǎn)化成更高維度的空間可分問(wèn)題。所以理論上通過(guò)升級(jí)空間可分的結(jié)構(gòu),是可以將任何問(wèn)題分開(kāi)的。
那么,是不是隱藏層越多就越好呢,可以特征劃分的更清楚?
理論上是這樣的,但實(shí)際這樣會(huì)帶來(lái)兩個(gè)問(wèn)題
- 層數(shù)越多參數(shù)會(huì)爆炸式增多
- 到了一定層數(shù),再往深了加隱藏層,分類(lèi)效果的增強(qiáng)會(huì)越來(lái)越不明顯。上面那個(gè)例子,一層足以劃分異或集,再加幾層是要得到什么特征呢?這些特征對(duì)劃分沒(méi)有什么提升了。
可參考:使用隱藏層解決非線(xiàn)性問(wèn)題 - Tensorflow
2、卷積神經(jīng)網(wǎng)絡(luò)——隱藏層的常見(jiàn)功能層
但隨著神經(jīng)網(wǎng)絡(luò)發(fā)展到以卷積神經(jīng)網(wǎng)絡(luò)為基礎(chǔ)的階段,除了輸入層與輸出層之外,都可以被泛稱(chēng)隱藏層。隱藏層不直接接受外界的信號(hào),也不直接向外界發(fā)送信號(hào)。
隱藏層在神經(jīng)網(wǎng)絡(luò)中的作用,就是中間的黑盒子,可以認(rèn)為是其他的不同功能層的一個(gè)總稱(chēng)。
隱藏層的形式是任意自定義的,我們?cè)诖酥唤榻B最基礎(chǔ)的幾種隱藏層。
卷積層(convolutional layer)
卷積核(convolutional kernel)
卷積層的功能是對(duì)輸入數(shù)據(jù)進(jìn)行特征提取,其內(nèi)部包含多個(gè)卷積核,組成卷積核的每個(gè)元素都對(duì)應(yīng)一個(gè)權(quán)重系數(shù)W和一個(gè)偏差量b(bias vector),類(lèi)似于一個(gè)前饋神經(jīng)網(wǎng)絡(luò)的神經(jīng)元(neuron)。
卷積層內(nèi)每個(gè)神經(jīng)元都與前一層中位置接近的區(qū)域的多個(gè)神經(jīng)元相連,區(qū)域的大小取決于卷積核的大小,在文獻(xiàn)中被稱(chēng)為“感受野(receptive field)”,卷積核在工作時(shí),會(huì)有規(guī)律地掃過(guò)輸入特征,在感受野內(nèi)對(duì)輸入特征做矩陣元素乘法求和并疊加偏差量。
卷積層參數(shù)
卷積層參數(shù)包括卷積核大小、步長(zhǎng)和填充,三者共同決定了卷積層輸出特征圖的尺寸,是卷積神經(jīng)網(wǎng)絡(luò)的超參數(shù)。
其中卷積核大小可以指定為小于輸入圖像尺寸的任意值,卷積核越大,可提取的輸入特征越復(fù)雜。
卷積步長(zhǎng)定義了卷積核相鄰兩次掃過(guò)特征圖時(shí)位置的距離,卷積步長(zhǎng)為1時(shí),卷積核會(huì)逐個(gè)掃過(guò)特征圖的元素,步長(zhǎng)為n時(shí)會(huì)在下一次掃描跳過(guò)n-1個(gè)像素 。
由卷積核的交叉相關(guān)計(jì)算可知,隨著卷積層的堆疊,特征圖的尺寸會(huì)逐步減小,例如16×16的輸入圖像在經(jīng)過(guò)單位步長(zhǎng)、無(wú)填充的5×5的卷積核后,會(huì)輸出12×12的特征圖。為此,填充是在特征圖通過(guò)卷積核之前人為增大其尺寸以抵消計(jì)算中尺寸收縮影響的方法。常見(jiàn)的填充方法為按0填充和重復(fù)邊界值填充(replication padding)。
填充(padding)依據(jù)其層數(shù)和目的可分為四類(lèi):
· 有效填充(valid padding):即完全不使用填充,卷積核只允許訪(fǎng)問(wèn)特征圖中包含完整感受野的位置。輸出的所有像素都是輸入中相同數(shù)量像素的函數(shù)。使用有效填充的卷積被稱(chēng)為“窄卷積(narrow convolution)”,窄卷積輸出的特征圖尺寸為(L-f)/s+1。
· 相同填充/半填充(same/half padding):只進(jìn)行足夠的填充來(lái)保持輸出和輸入的特征圖尺寸相同。相同填充下特征圖的尺寸不會(huì)縮減但輸入像素中靠近邊界的部分相比于中間部分對(duì)于特征圖的影響更小,即存在邊界像素的欠表達(dá)。使用相同填充的卷積被稱(chēng)為“等長(zhǎng)卷積(equal-width convolution)”。
· 全填充(full padding):進(jìn)行足夠多的填充使得每個(gè)像素在每個(gè)方向上被訪(fǎng)問(wèn)的次數(shù)相同。步長(zhǎng)為1時(shí),全填充輸出的特征圖尺寸為L(zhǎng)+f-1,大于輸入值。使用全填充的卷積被稱(chēng)為“寬卷積(wide convolution)”
· 任意填充(arbitrary padding):介于有效填充和全填充之間,人為設(shè)定的填充,較少使用。
帶入先前的例子,若16×16的輸入圖像在經(jīng)過(guò)單位步長(zhǎng)的5×5的卷積核之前先進(jìn)行相同填充,則會(huì)在水平和垂直方向填充兩層,即兩側(cè)各增加2個(gè)像素( )變?yōu)?0×20大小的圖像,通過(guò)卷積核后,輸出的特征圖尺寸為16×16,保持了原本的尺寸。
激勵(lì)函數(shù)(activation function)
(實(shí)現(xiàn)方法同上文神經(jīng)元的擬合原理)
卷積神經(jīng)網(wǎng)絡(luò)通常使用線(xiàn)性整流函數(shù)(Rectified Linear Unit, ReLU),其它類(lèi)似ReLU的變體包括有斜率的ReLU(Leaky ReLU, LReLU)、參數(shù)化的ReLU(Parametric ReLU, PReLU)、隨機(jī)化的ReLU(Randomized ReLU, RReLU)、指數(shù)線(xiàn)性單元(Exponential Linear Unit, ELU)等。在ReLU出現(xiàn)以前,Sigmoid函數(shù)和雙曲正切函數(shù)(hyperbolic tangent)也有被使用。
激勵(lì)函數(shù)操作通常在卷積核之后,一些使用預(yù)激活(preactivation)技術(shù)的算法將激勵(lì)函數(shù)置于卷積核之前。
池化層(convolutional kernel)
在卷積層進(jìn)行特征提取后,輸出的特征圖會(huì)被傳遞至池化層進(jìn)行特征選擇和信息過(guò)濾。池化層包含預(yù)設(shè)定的池化函數(shù),其功能是將特征圖中單個(gè)點(diǎn)的結(jié)果替換為其相鄰區(qū)域的特征圖統(tǒng)計(jì)量。池化層選取池化區(qū)域與卷積核掃描特征圖步驟相同,由池化大小、步長(zhǎng)和填充控制。
池化(pooling) 的本質(zhì),其實(shí)就是降采樣。Pooling 對(duì)于輸入的 Feature Map,選擇某種方式對(duì)其進(jìn)行降維壓縮,以加快運(yùn)算速度。
采用較多的一種池化過(guò)程叫最大池化(Max Pooling),其具體操作過(guò)程如下:
池化還有平均池化、隨機(jī)混合池化、譜池化等類(lèi)型,具體的實(shí)現(xiàn)方法在此不在贅述。
【池化層沒(méi)有參數(shù)、池化層沒(méi)有參數(shù)、池化層沒(méi)有參數(shù)】 (重要的事情說(shuō)三遍)
池化的作用:
(1)保留主要特征的同時(shí)減少參數(shù)和計(jì)算量,防止過(guò)擬合。
(2)invariance(不變性),這種不變性包括translation(平移),rotation(旋轉(zhuǎn)),scale(尺度)。
Pooling 層說(shuō)到底還是一個(gè)特征選擇,信息過(guò)濾的過(guò)程。也就是說(shuō)我們損失了一部分信息,這是一個(gè)和計(jì)算性能的一個(gè)妥協(xié),隨著運(yùn)算速度的不斷提高,我認(rèn)為這個(gè)妥協(xié)會(huì)越來(lái)越小。
現(xiàn)在有些網(wǎng)絡(luò)都開(kāi)始少用或者不用pooling層了。
全連接層(convolutional layer)
卷積神經(jīng)網(wǎng)絡(luò)中的全連接層等價(jià)于,上文所述傳統(tǒng)前饋神經(jīng)網(wǎng)絡(luò)中的隱藏層。
每一個(gè)結(jié)點(diǎn)都與上一層的所有結(jié)點(diǎn)相連,用來(lái)把前邊提取到的特征綜合起來(lái)。由于其全相連的特性,一般全連接層的參數(shù)也是最多的。在卷積神經(jīng)網(wǎng)絡(luò)的最后,往往會(huì)出現(xiàn)一兩層全連接層,全連接一般會(huì)把卷積輸出的二維特征圖轉(zhuǎn)化成一維的一個(gè)向量。
3、過(guò)擬合與欠擬合問(wèn)題
過(guò)擬合(overfitting)與欠擬合(underfitting)是統(tǒng)計(jì)學(xué)中的一組現(xiàn)象。過(guò)擬合是在統(tǒng)計(jì)模型中,由于使用的參數(shù)過(guò)多而導(dǎo)致模型對(duì)觀測(cè)數(shù)據(jù)(訓(xùn)練數(shù)據(jù))過(guò)度擬合,以至于用該模型來(lái)預(yù)測(cè)其他測(cè)試樣本輸出的時(shí)候與實(shí)際輸出或者期望值相差很大的現(xiàn)象。欠擬合則剛好相反,是由于統(tǒng)計(jì)模型使用的參數(shù)過(guò)少,以至于得到的模型難以擬合觀測(cè)數(shù)據(jù)(訓(xùn)練數(shù)據(jù))的現(xiàn)象。
我們總是希望在機(jī)器學(xué)習(xí)訓(xùn)練時(shí),機(jī)器學(xué)習(xí)模型能在新樣本上很好的表現(xiàn)。過(guò)擬合時(shí),通常是因?yàn)槟P瓦^(guò)于復(fù)雜,學(xué)習(xí)器把訓(xùn)練樣本學(xué)得“太好了”,很可能把一些訓(xùn)練樣本自身的特性當(dāng)成了所有潛在樣本的共性了,這樣一來(lái)模型的泛化性能就下降了。欠擬合時(shí),模型又過(guò)于簡(jiǎn)單,學(xué)習(xí)器沒(méi)有很好地學(xué)到訓(xùn)練樣本的一般性質(zhì),所以不論在訓(xùn)練數(shù)據(jù)還是測(cè)試數(shù)據(jù)中表現(xiàn)都很差。
過(guò)擬合產(chǎn)生的原因與解決方法
-
欠擬合產(chǎn)生的原因:
1. 模型復(fù)雜度過(guò)低
2. 特征量過(guò)少 -
過(guò)擬合產(chǎn)生的原因:
1. 模型太復(fù)雜,對(duì)神經(jīng)網(wǎng)絡(luò)來(lái)說(shuō),參數(shù)太多或特征提取能力太強(qiáng),模型學(xué)到了一些偶然的特征。
2. 數(shù)據(jù)分布太單一,例如訓(xùn)練用的所有鳥(niǎo)類(lèi)都在籠子里,模型很容易把籠子當(dāng)成識(shí)別鳥(niǎo)的特征。
3. 數(shù)據(jù)噪聲太大或干擾信息太多,如人臉檢測(cè),訓(xùn)練圖像的分辨率都是幾百乘幾百,而人臉只占了幾十到幾百個(gè)像素,此時(shí)背景太大,背景信息都屬于干擾信息或噪聲。
4. 訓(xùn)練迭代次數(shù)太多,對(duì)數(shù)據(jù)反復(fù)地訓(xùn)練也會(huì)讓模型學(xué)到偶然的特征。 -
欠擬合的解決方法:
1. 增加新特征,可以考慮加入進(jìn)特征組合、高次特征,來(lái)增大假設(shè)空間
2. 添加多項(xiàng)式特征,這個(gè)在機(jī)器學(xué)習(xí)算法里面用的很普遍,例如將線(xiàn)性模型通過(guò)添加二次項(xiàng)或者三次項(xiàng)使模型泛化能力更強(qiáng)
3. 減少正則化參數(shù),正則化的目的是用來(lái)防止過(guò)擬合的,但是模型出現(xiàn)了欠擬合,則需要減少正則化參數(shù)
4. 使用非線(xiàn)性模型,比如核SVM 、決策樹(shù)、深度學(xué)習(xí)等模型
5. 調(diào)整模型的容量(capacity),通俗地,模型的容量是指其擬合各種函數(shù)的能力
6. 容量低的模型可能很難擬合訓(xùn)練集;使用集成學(xué)習(xí)方法,如Bagging ,將多個(gè)弱學(xué)習(xí)器Bagging -
過(guò)擬合的解決方法:
1. 換一個(gè)復(fù)雜度低一點(diǎn)的模型或正則化,對(duì)神經(jīng)網(wǎng)絡(luò)來(lái)說(shuō),使用參數(shù)量少一點(diǎn)的網(wǎng)絡(luò)。或使用正則化,通過(guò)引入范數(shù),增強(qiáng)模型的泛化能力。
2. 使用不同分布的數(shù)據(jù)來(lái)訓(xùn)練。如數(shù)據(jù)增強(qiáng),預(yù)訓(xùn)練等。
3. 使用圖像裁剪等方法對(duì)圖像進(jìn)行預(yù)處理。
4. 及時(shí)地停止訓(xùn)練。如何判斷什么時(shí)候該停止訓(xùn)練?使用K折交叉驗(yàn)證,若訓(xùn)練損失還在減少,而驗(yàn)證損失開(kāi)始增加,則說(shuō)明開(kāi)始出現(xiàn)過(guò)擬合。
5. 通過(guò)每次訓(xùn)練時(shí)舍去一些節(jié)點(diǎn)來(lái)增強(qiáng)泛化能力(dropout)。
這篇文章只是對(duì)深度學(xué)習(xí)的基礎(chǔ)理論做一個(gè)綱要式的概況,更多的內(nèi)容,筆者能力有限,請(qǐng)讀者自行深入探索。
總結(jié)
以上是生活随笔為你收集整理的【学习笔记】深度学习理论基础的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: htc one m7 linux驱动,H
- 下一篇: python数据类型之元组类型