最近在學習Adaptive Style Transfer並進行工程化實踐,順便總結一下深度學習中的Encoder-Decoder Architecture。算法
Encoder-Decoder(編碼-解碼)是深度學習中很是常見的一個模型框架,一個encoder是一個接收輸入,輸出特徵向量的網絡(FC, CNN, RNN, etc)。這些特徵向量其實就是輸入的特徵和信息的另外一種表示。網絡
編碼實際上就是對內容的另外一種表示框架
decoder一樣也是一個網絡(一般與編碼器相同的網絡結構,但方向相反),它從編碼器獲取特徵向量,並輸出與實際輸入或預期輸出最近似的結果,好比下圖 機器學習
準確的說,Encoder-Decoder並非一個具體的模型,而是一類框架。Encoder和Decoder部分能夠是任意的文字,語音,圖像,視頻數據,模型能夠採用CNN,RNN,BiRNN、LSTM、GRU等等。因此基於Encoder-Decoder,咱們能夠設計出各類各樣的應用算法。函數
encoder使用decoder進行訓練,而且沒有label(無監督)。損失函數中包含實際輸入(actual input)和重構輸入(reconstructed input)之間的差別(delta)。學習
一旦通過訓練,encoder將給出輸入的特徵向量,解碼器可使用該特徵重構輸入。this
這種技術被用於很是多不一樣的應用中,好比翻譯、生成模型(generative models)等。編碼
不過一般應用都不會從新構建原有的輸入,而是 map/translate/associate 輸入至特定的輸出。好比把法語翻譯成英語等。.net
自動編碼器神經網絡是一種無監督機器學習算法、有三層的神經網絡:輸入層、隱藏層(編碼層)和解碼層。該網絡的目的是重構其輸入,使其隱藏層學習到該輸入的良好表徵。其應用了反向傳播,可將目標值設置成與輸入值相等。自動編碼器屬於無監督預訓練網絡(Unsupervised Pretained Networks)的一種。其結構以下圖所示:翻譯
In a CNN, an encoder-decoder network typically looks like this (a CNN encoder and a CNN decoder):
In an RNN, an encoder-decoder network typically looks like this (an RNN encoder and an RNN decoder):
中文一個指導性文章 blog.csdn.net/xbinworld/a…
機器之心的 www.jiqizhixin.com/graph/techn…
What is an Encoder/Decoder in Deep Learning? www.quora.com/What-is-an-…
Is there a difference between autoencoders and encoder-decoder in deep learning? www.quora.com/Is-there-a-…