深度網路的預訓練

2021-07-10 09:55:31 字數 1651 閱讀 7067

無監督學習得到資料特徵,可以在最高層加入乙個分類器並通過監督學習進行微調。

輸入層神經元個數等於輸出層神經元的個數。

sigmoid

其他以方差代價為例,單個樣本的損失函式為: j(

w,b;

x,y)

=12|

|hw,

b(x)

−y||

2 對包含m

個樣本的資料集,訓練的目標函式為 j(

w,b)

=[1m

∑i=1

mj(w

,b;x

(i),

y(i)

)]+λ

2∑l=

1nl−

1∑i=

1sl∑

j=1s

l+1w

i,j(

l)=[

1m∑i

=1m1

2||h

w,b(

x(i)

)−y(

i)||

2]+λ

2∑l=

1nl−

1∑i=

1sl∑

j=1s

l+1w

i,j(

l)(1)上式中第一項表示所有樣本的平均損失,第二項是乙個規則化項(或稱為權值衰減項),防止過擬合。

如果只有最小化重構誤差這個限制,那麼autoencoder可能不會抽取到最有效的特徵,致使隱藏層的結點個數大於輸入神經元的數目,解決這個問題有多種不同的方式。如增加稀疏性限制、增加雜訊。

當隱藏層的神經元較多時,則希望盡可能多的隱藏神經元被抑制。如果啟用函式為sigmoid,則神經元輸出接近1時為啟用狀態,接近0時為抑制狀態。

在給定輸入

x 的情況下,神經元

j的啟用度為aj

(x) ,則

j 的平均啟用度為ρ^

j=1m

∑i=1

maj(

x(i)

)給自編碼器增加稀疏性限制ρ^

=ρ其中

ρ 為稀疏性係數,取接近0的值,如0.001。

可以使用相對熵(kl divergence)來表示ρ^

和ρ的接近程度,∑j

=1s2

kl(ρ

||ρ^

j)=∑

j=1s

2ρlogρρ^

j+(1

−ρ)log1−

ρ1−ρ

^j(2) 其中s

2 表示隱藏層神經元的個數。將相對熵加入式(1)的目標函式中得js

pars

e=j(

w,b)

+β∑j

=1s2

kl(ρ

||ρ^

j)(3)

這樣發展為當隱藏層的神經元的數目較少時,即少於輸入神經元的數目,可以得到原始資料的壓縮表示。

在特徵學習過程中增加隨機雜訊,這就是denoise autoencoder,這樣得到的隱藏層更具有魯棒性。通常的做法是對輸入資料進行一定的「破壞」,比如隨機選取一些輸入項並將其他的項置為0.(注意對比rbm的cd訓練演算法中對輸入資料的隨機破壞)

參考

神經網路,預訓練

神經網路 最易懂最清晰的一篇文章 深度神經網路結構以及pre training的理解 深度信念網路 有乙個 預訓練 pre training 的過程,這可以方便的讓神經網路中的權值找到乙個接近最優解的值,之後再使用 微調 fine tuning 技術來對整個網路進行優化訓練。這兩個技術的運用大幅度減...

深度學習5 使用預訓練模型(1)

如果資料集太小的話不管怎麼去加工處理,總會出現過擬合問題,使得精度不會那麼的高,所以就要引入預訓練過的模型了,預訓練的模型通常是大數量的資料訓練過的,而且特點就在於挑選的預訓練模型是和現有問題有著相似性的。這裡使用的是乙個簡單且老的模型vgg16,這個模型和我們之前使用的架構很相似。使用預訓練的網路...

Pytorch 修改預訓練網路結構

我們以 inceptionv3 為例 pytorch裡我們如何使用設計好的網路結構,比如inceptionv3 import torchvision.models as models inception models.inception v3 pretrained true pytorch提供了個叫...