1. 程式人生 > >降噪自動編碼器(Denoising Autoencoder)

降噪自動編碼器(Denoising Autoencoder)

起源:PCA、特徵提取....

隨著一些奇怪的高維資料出現,比如影象、語音,傳統的統計學-機器學習方法遇到了前所未有的挑戰。

資料維度過高,資料單調,噪聲分佈廣,傳統方法的“數值遊戲”很難奏效。資料探勘?已然挖不出有用的東西。

為了解決高維度的問題,出現的線性學習的PCA降維方法,PCA的數學理論確實無懈可擊,但是卻只對線性資料效果比較好。

於是,尋求簡單的、自動的、智慧的特徵提取方法仍然是機器學習的研究重點。比如LeCun在1998年CNN總結性論文中就概括了今後機器學習模型的基本架構。

當然CNN另闢蹊徑,利用卷積、降取樣兩大手段從訊號資料的特點上很好的提取出了特徵。對於一般非訊號資料,該怎麼辦呢??

Part I  自動編碼器(AutoEncoder)

自動編碼器基於這樣一個事實:原始input(設為x)經過加權(W、b)、對映(Sigmoid)之後得到y,再對y反向加權映射回來成為z。

通過反覆迭代訓練兩組(W、b),使得誤差函式最小,即儘可能保證z近似於x,即完美重構了x。

那麼可以說正向第一組權(W、b)是成功的,很好的學習了input中的關鍵特徵,不然也不會重構得如此完美。結構圖如下:

從生物的大腦角度考慮,可以這麼理解,學習和重構就好像編碼和解碼一樣。

這個過程很有趣,首先,它沒有使用資料標籤來計算誤差update引數,所以是無監督學習。

其次,利用類似神經網路的雙隱層的方式,簡單粗暴地提取了樣本的特徵。 

這個雙隱層是有爭議的,最初的編碼器確實使用了兩組(W,b),但是Vincent在2010年的論文中做了研究,發現只要單組W就可以了。

即W'=WT, W和W’稱為Tied Weights。實驗證明,W'真的只是在打醬油,完全沒有必要去做訓練。

逆向重構矩陣讓人想起了逆矩陣,若W-1=WT的話,W就是個正交矩陣了,即W是可以訓成近似正交陣的。

由於W'就是個醬油,訓練完之後就沒它事了。正向傳播用W即可,相當於為input預先編個碼,再匯入到下一layer去。所以叫自動編碼器,而不叫自動編碼解碼器。

Part II 降噪自動編碼器(Denoising Autoencoder)

Vincent在2008年的

論文中提出了AutoEncoder的改良版——dA。推薦首先去看這篇paper。

論文的標題叫 "Extracting and Composing Robust Features",譯成中文就是"提取、編碼出具有魯棒性的特徵"

怎麼才能使特徵很魯棒呢?就是以一定概率分佈(通常使用二項分佈)去擦除原始input矩陣,即每個值都隨機置0,  這樣看起來部分資料的部分特徵是丟失了。

以這丟失的資料x'去計算y,計算z,並將z與原始x做誤差迭代,這樣,網路就學習了這個破損(原文叫Corruputed)的資料。

這個破損的資料是很有用的,原因有二:

其之一,通過與非破損資料訓練的對比,破損資料訓練出來的Weight噪聲比較小。降噪因此得名。

原因不難理解,因為擦除的時候不小心把輸入噪聲給×掉了。

其之二,破損資料一定程度上減輕了訓練資料與測試資料的代溝。由於資料的部分被×掉了,因而這破損資料

一定程度上比較接近測試資料。(訓練、測試肯定有同有異,當然我們要求同舍異)。

這樣訓練出來的Weight的魯棒性就提高了。圖示如下:

關鍵是,這樣胡亂擦除原始input真的很科學?真的沒問題?  Vincent又從大腦認知角度給瞭解釋:

paper中這麼說到:人類具有認知被阻擋的破損影象能力,此源於我們高等的聯想記憶感受機能。

我們能以多種形式去記憶(比如影象、聲音,甚至如上圖的詞根記憶法),所以即便是資料破損丟失,我們也能回想起來。

另外,就是從特徵提取的流形學習(Manifold Learning)角度看:

破損的資料相當於一個簡化的PCA,把特徵做一個簡單的降維預提取。

Part III  自動編碼器的奇怪用法

自動編碼器相當於建立了一個隱層,一個簡單想法就是加在深度網路的開頭,作為原始訊號的初級filter,起到降維、提取特徵的效果。

當然Bengio在2007年論文中仿照DBN較之於RBM做法:作為深度網路中各個layer的引數初始化值,而不是用隨機小值。

當然,這種做法就有一個問題,AutoEncoder可以看作是PCA的非線性補丁加強版,PCA的取得的效果是建立在降維基礎上的。

仔細想想CNN這種結構,隨著layer的推進,每層的神經元個數在遞增,如果用了AutoEncoder去預訓練,豈不是增維了?真的沒問題?

paper中給出的實驗結果認為AutoEncoder的增維效果還不賴,原因可能是非線性網路能力很強,儘管神經元個數增多,但是每個神經元的效果在衰減。

同時,隨機梯度演算法給了後續監督學習一個良好的開端。整體上,增維是利大於弊的。

Part IV  程式碼與實現

有幾個注意點說下:

①cost函式可以使用交錯熵(Cross Entroy)設計,對於定義域在[0,1]這類的資料,交錯熵可用來設計cost函式。

也可以使用最小二乘法設計。

②RandomStreams函式存在多個,因為要與非Tensor量相乘,必須用shared版本。

所以是  from theano.tensor.shared_randomstreams import RandomStreams

而不是 from theano.tensor import RandomStreams

相關推薦

自動編碼(Autoencoder)、自動編碼Denoising Autoencoder)詳解

在瞭解降噪自動編碼器之前,我們先了解一下自動編碼器。 自動編碼器(Autoencoder): 自動編碼器和PCA等方法都屬於降維方法。PCA降維方法有著一定侷限性,主要是隻對線性可分的資料降維效果較好。這種情況下,人們希望提出一種新的簡單的、自動的、可以對非線性可分資料進行的特徵提取方法

自動編碼Denoising Autoencoder)

起源:PCA、特徵提取.... 隨著一些奇怪的高維資料出現,比如影象、語音,傳統的統計學-機器學習方法遇到了前所未有的挑戰。 資料維度過高,資料單調,噪聲分佈廣,傳統方法的“數值遊戲”很難奏效。資料探勘?已然挖不出有用的東西。 為了解決高維度的問題,出現的線性學習的PCA降維方法,PCA的數學理論確實無

生成模型--編碼(denoising autoencoder,DAE)

降噪自編碼器(denoising autoencoder,DAE)   這裡不是通過對損失函式施加懲罰項,而是通過改變損失函式的重構誤差項來學習一些有用資訊。   向輸入的訓練資料加入噪聲,並使自編碼器學會去除這種噪聲來獲得沒有被噪聲汙染過的真實輸入。因此,這就

DenoisingAutoencoder影象去自動編碼

本文主要介紹使用TensorFlow實現DenoisingAutoencoder(影象去噪自動編碼器)。 下面是示例程式碼: # 匯入相關模組 import numpy as np import sys import tensorflow as tf import matplotlib.

自動編碼Autoencoder)keras實現---轉載

1. 單隱含層自編碼器 建立一個全連線的編碼器和解碼器。也可以單獨使用編碼器和解碼器,在此使用Keras的函式式模型API即Model可以靈活地構建自編碼器。 50個epoch後,看起來我們的自編碼器優化的不錯了,損失val_loss: 0.1037。 from ke

『TensorFlow』讀書筆記_編碼

沒有 tutorials oftp transfer 初始化 hot nis gauss ant 『TensorFlow』降噪自編碼器設計 之前學習過的代碼,又敲了一遍,新的收獲也還是有的,因為這次註釋寫的比較詳盡,所以再次記錄一下,具體的相關知識查閱之前寫的文章即可(見

深度學習 —— 自動編碼

降噪自動編碼機(dA)是傳統自動編碼機的延伸,在深度網路 [Vincent08]中被引入,我們先簡單討論一下自動編碼機。 自動編碼機 自動編碼機接受輸入,首先通過確定對映使用編碼機把它對映到隱藏層的y屬於,例如 這裡s是非線性例如sigmoid。隱藏的y,或程式碼然後通過解碼機映射回與x有相同形狀的重構z

自動編碼Auto Encoder)

1.初識Auto Encoder 1986 年Rumelhart 提出自動編碼器的概念,並將其用於高維複雜資料處理,促進了神經網路的發展。自編碼神經網路是一種無監督學習演算法,它使用了反向傳播演算法,

Deep Learning深度學習)學習筆記整理系列之六)AutoEncoder自動編碼

轉處:http://blog.csdn.net/zouxy09/article/details/8775524 Deep Learning(深度學習)學習筆記整理系列 作者:Zouxy version 1.0 2013-04-08 宣告: 1)該Deep

Recursive Autoencoders遞迴自動編碼

1. 前言 今天主要介紹用在NLP中比較常見的AutoEncoder的模型,Recursive Autoencoders(遞迴自動編碼模型)。這篇文章主要討論RAE在序列化的資料中,如何把資料降維並且用向量表示。 2. 矩陣表示 假設我們有一個矩陣\(L\)的表示向量,一個有序的有\(m\)個元素的序列

棧式自動編碼(Stacked AutoEncoder)

起源:自動編碼器 單自動編碼器,充其量也就是個強化補丁版PCA,只用一次好不過癮。 仿照stacked RBM構成的DBN,提出Stacked AutoEncoder,為非監督學習在深度網路的應用又添了猛將。 這裡就不得不提  “逐層初始化”(Layer-wise Pre-training),目的是

基於深度神經網路的高光譜影響分類方法研究---MNF+自動編碼+Softmax 準確率比較低,17年的論文)

論文地址基於深度神經網路的高光譜影響分類方法研究裝備學院學報遙感影像分類的問題:預處理複雜,高維特徵提取困難,分類不夠精確等缺陷首先採用最大噪聲分數來降低特徵空間維度,然後將自動編碼器與softmax多

深度學習:什麼是自編碼Autoencoder

Autoencoderautoencoder是一種無監督的學習演算法,主要用於資料的降維或者特徵的抽取,在深度學習中,autoencoder可用於在訓練階段開始前,確定權重矩陣WW的初始值。神經網路中的權重矩陣WW可看作是對輸入的資料進行特徵轉換,即先將資料編碼為另一種形式,

編碼AutoEncoder)入門及TensorFlow實現

自編碼器(Autoencoder,AE),是一種利用反向傳播演算法使得輸出值等於輸入值的神經網路,它先將輸入壓縮成潛在空間表徵,然後通過這種表徵來重構輸出。自編碼器由兩部分組成:編碼器(encoder):這部分能將輸入壓縮成潛在空間表徵,可以用編碼函式h=f(x)表示。解碼器

16、【李巨集毅機器學習2017)】Unsupervised Learning: Deep Auto-encoder無監督學習:深度自動編碼

本篇部落格將介紹無監督學習演算法中的 Deep Auto-encoder。 目錄 Deep Auto-encoder 輸入28*28維度的影象畫素,由NN encoder輸出code,code的維度往往小於784,但我們並不知道code的

Android視音頻編碼2)——cameraYUV、AudioRecordPCM分別編碼後muxer成mp4

效率 androi mar 視音頻 pop 采集 con 文章 cpu 參考下面這篇文章: http://blog.csdn.net/a992036795/article/details/54286654 一、前言 上一篇文章我講到,我用libx264對視頻

變分貝葉斯自編碼VAE) 匯總

coder das not 匯總 ash http var csdn tps 讀論文《Auto-Encoding Variational Bayes》(加精) VAE(1)——從KL說起 VAE(2)——基本思想 VAE

pytorch 實現變分自動編碼

本來以為自動編碼器是很簡單的東西,但是也是看了好多資料仍然不太懂它的原理。先把程式碼記錄下來,有時間好好研究。 這個例子是用MNIST資料集生成為例子。 # -*- coding: utf-8 -*- """ Created on Fri Oct 12 11:42:19 2018 @a

pytorch 自動編碼

這裡主要使用自動編碼器實現生成資料,以MNIST資料為例。 # -*- coding: utf-8 -*- """ Created on Thu Oct 11 20:34:33 2018 @author: www """ import os import torch from torc

卷積去編碼專案實現

import numpy as np import tensorflow as tf import matplotlib.pyplot as plt from tensorflow.examples.tutorials.mnist import input_data mnist = input