深度學習(1)——sae(稀疏自動編碼機)_第1頁
深度學習(1)——sae(稀疏自動編碼機)_第2頁
深度學習(1)——sae(稀疏自動編碼機)_第3頁
深度學習(1)——sae(稀疏自動編碼機)_第4頁
深度學習(1)——sae(稀疏自動編碼機)_第5頁
已閱讀5頁,還剩10頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、深度學習深度學習(1)稀疏自動編碼機(稀疏自動編碼機(SAE)網絡)網絡 廣東工業大學 13級控制工程 傳統神經網絡 1)比較容易過擬合,參數比較難調整; 2)訓練速度比較慢,在層次比較少(小于等于3)的情況下效果并不比其它方法更優;BP算法存在的問題:(1)梯度越來越稀疏:從頂層越往下,誤差校正信號越來越小;(2)收斂到局部最小值:尤其是從遠離最優區域開始的時候(隨機值初始化會導致這種情況的發生);(3)一般,我們只能用有標簽的數據來訓練:但大部分的數據是沒標簽的,而大腦可以從沒有標簽的的數據中學習;一、針對過擬合現象的處理1.懲罰項(Penalty,正則化方法,正則化的一般形式是在整個目標

2、函數后增加一個正則項,以使經驗風險最小化。把不重要的項的參數保留,但是令其系數為零)2.給輸入層a1加噪,以及對隱含層ai進行Dropout (按比例隨機清零。)二、針對訓練快慢與穩定性的矛盾 應用權值動量輔助調整權值三、針對以往一個bp網絡不能太多層 先逐個逐個隱含層進行無監督訓練(實際還是用bp),即調用saesetup.m以及saetrain.m。 然后得到各個隱含層的參數才對完整的網絡進行有監督訓練。test_example_SAE.m一、訓練隱含層(例中為單個隱含層) 1.調用saesetup設置網絡參數( 結構為784 100的兩層網絡) 2.在第1步基礎上修改網絡參數(這里是修改

3、第一組的 激活函數類型、學習率、輸入加噪率、訓練迭代次數、batchsize) 3.調用saetrain,讓它對各個隱含層進行逐層訓練(例子中給的隱含層數為1層,100個節點,輸入輸出同是train_x。每次進行nntrain來訓練隱含層都為三層網絡,輸入層和輸出層一樣) 4.對第一組權值進行可視化,看看學習結果。(由于例中的網絡只有一個100節點隱含層,故可視化為一張100個特征塊圖片。第一組權值W1用于編碼,第二組W2用于解碼)二、初始化網絡(為第三步初始化) 1.調用nnsetup,設置整個網絡(結構是784 100 10) 2.設置網絡的激活函數和學習率 3.第一步中,把用于編碼的W(

4、實際包括閾值b和權值W)賦給此網絡。三、訓練前向網絡1. 設置訓練次數、batchsize。2.調用nntrain訓練整個網絡(此時因期望輸出是train_y,為有監督的訓練)3.調用nntest測試整個網絡saesetup.m這里sae.setup中的輸入是784 100,令architecture=784 10 784 ,調用nnsetup進行網絡參數設置。xhxW1b1W1b1saetrain.m逐個隱含層逐個隱含層進行nntrain(sae.aei, x, x, opts)訓練更新sae.aei參數,其實就是更新sae.aei.W1、sae.aei.W2實驗中,這里的i=1,因而就是得

5、到sae.ae1.W1、sae.ae1.W2,而最后只取用sae.ae1.W1784+1100+1784+1+1這里a1=train_xa2=sigm(nn.a1 * nn.W1),作為訓練第二個隱含層的輸入,但是這里只有一個隱含層,所以a2在這里并沒用a1a2若是需要訓練兩個隱含層,那么這里的a2則作為下個三層網絡的輸入以及輸出a1a2閾值Bnnsetup.mnn.size = architecture; %要設置的各層節點結構,如784 100 784 nn.n = numel(nn.size); %層數,當784 100 784,則為3 nn.activation_function =

6、tanh_opt; %激活函數,或稱傳遞函數nn.learningRate = 2; %學習率,或稱步長,就是決定每次梯度下降的長度nn.momentum = 0.5; % 權值動量nn.scaling_learningRate = 1; %在nntrain中出現,是每代間,學習率的關系倍數nn.weightPenaltyL2 = 0; %權值懲罰(L2正則化),在nnapplygrads中用到nn.nonSparsityPenalty = 0; %稀疏懲罰項,在nnbp中用到。nn.sparsityTarget = 0.05; %稀疏目標,在nnbp中用到。nn.inputZeroMaske

7、dFraction = 0; %用于加噪nn.dropoutFraction = 0; %每一次mini-batch樣本輸入訓練時,隨機扔掉0%的隱含層節點nn.testing = 0; %設置此時網絡有無測試nn.output = sigm; %輸出接什么函數,還有softmax and linear以下i 為從第 2 到最后一層 nn.n nn.Wi - 1 隨機給出網絡權值初始值nn.vWi - 1 讓它初值=0 %用于更新參數時的臨時參數nn.pi 讓它初值=0 稀疏nntrain(這里無驗證數據輸入)大循環逐numepochs(訓練代數)小循環逐numbatches(每代的樣本批次,

8、每批樣本100個,它們共同決定更新一次權值。不同代的同個批次中的樣本不會相同,因為被隨機打亂了。)1 故有numepochs* numbatches次執行下列(這么多次更新權值)判斷inputZeroMaskedFraction,看看是否要加噪,是的話,按此比例隨機把輸入值清零。 nn = nnff(nn, batch_x, batch_y);%前向網絡 nn = nnbp(nn); % 反向傳播網絡nn = nnapplygrads(nn); %梯度下降L(n)=nn.L;%保存每次訓練的誤差,總共訓練了10*600次,故有6000個誤差2 每代更新損失值和學習率loss = nneval(

9、nn, loss, train_x, train_y);%誤差值 nn.learningRate = nn.learningRate * nn.scaling_learningRate;%調整改變下一次訓練的學習率nntrain.mxhyW2b2W1b1結果得到每層的激活值,一、輸入層a1=ones(m,1) x,這里m=size(x,1)=100二、隱含層(這里只考慮s函數)從第2到第n-1層,ai = sigm(nn.ai - 1 * nn.Wi - 1);dropoutFraction用在訓練隱含層中,隨機將激活值按比例清零(為了讓權值不起作用)dropoutFraction用在測試中,

10、將激活值nn.ai = nn.ai.*(1 - nn.dropoutFraction)if(nn.nonSparsityPenalty0)% 在nnbp中用到 nn.pi = 0.99 * nn.pi + 0.01 * mean(nn.ai, 1);三、輸出層1。當輸出不接softmax時 nn.an = sigm(nn.an - 1 * nn.Wn - 1);2。當輸出接分類器softmax時(此次實驗沒用到它) 得到誤差值e=y-an當輸出不接softmax時,平均誤差平方為L = sum(sum(1/2 * nn.e . 2) / m;nnff.m為了得到n-1組dW,用于調節n-1個W

11、。在求dW過程中用到了中間變量 di,d_act一、求di 1.輸出層的dn當 nn.output=sigm時,dn = - nn.e .* (nn.an .* (1 - nn.an); (即1/2 *nn.e2的復合函數求導,其中變量是nn.an) 2.隱含層的diif(nn.nonSparsityPenalty0) pi = repmat(nn.pi, size(nn.ai, 1), 1); sparsityError = zeros(size(nn.ai,1),1) nn.nonSparsityPenalty * (-nn.sparsityTarget ./ pi + (1 - nn.s

12、parsityTarget) ./ (1 - pi);if i+1=n % 倒數第二層,即最后一個隱含層 di = (di + 1 * nn.Wi + sparsityError) .* d_act; % d_act = nn.ai .* (1 - nn.ai);else %此外 di = (di + 1(:,2:end) * nn.Wi + sparsityError) .* d_act; if(nn.dropoutFraction0)% nn.dropOutMaski在nnff中已求得,必須與它相同 di = di .* ones(size(di,1),1) nn.dropOutMaski

13、;(清零)二、求dWiif i+1=n nn.dWi = (di + 1 * nn.ai) / size(di + 1, 1); else nn.dWi = (di + 1(:,2:end) * nn.ai) / size(di + 1, 1); (以往的bp網絡,W=-*de/dw,這里多了稀疏項,以及Dropout 的處理,在下一步的nnapplygrads中還多了權值懲罰以及權值動量)nnbp.m nnapplygrads.m梯度下降法計算作為更新值的nn.W。當當設置nn.weightPenaltyL20,則 dW = nn.dWi + nn.weightPenaltyL2 * zer

14、os(size(nn.Wi,1),1) nn.Wi(:,2:end);當當設置nn.weightPenaltyL2=0,則dW = nn.dWi再再讓dW乘以學習率(或稱 步長)如果如果權值動量momentum0,則 nn.vWi = nn.momentum*nn.vWi + dW; dW = nn.vWi;最后最后nn.Wi = nn.Wi - dW;1。懲罰項方法是一種間接修剪網絡的辦法,其原理是在傳統的誤差函數中加入一衡量網絡結構復雜程度的“復雜度項”。應用到權值更新規則后,該項在訓練過程中起到防止權值增長太大和驅使不重要權值逐漸減小到零的作用防止權值增長太大和驅使不重要權值逐漸減小到零的作用。盡管那些接近零的連接權沒有從網絡中被刪除。但它們對網絡輸出幾乎沒有影響,已相當于從網絡中被刪除了。這樣一來,訓練后的神經網絡實際上已是被修剪過的小網絡了。可見,懲罰項法在沒有破壞網絡結構的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論