編碼器和解碼器的概念理解

2021-10-10 04:39:31 字數 1831 閱讀 3697

編碼器和解碼器最開始看概念的時候有點懵,因為說編碼器先把原始訊號給編碼,然後解碼器再給解出來得到原始訊號。哈?這是幹啥,原始訊號本來就有,用這個搞啥,做無用功嗎?

1. 首先,說一下編碼器和解碼器幹什麼用的。

我們舉個例子。

乙個是,類似pca這樣的,做矩陣分解,然後恢復。矩陣分解裡,把原始大矩陣變成了幾個小矩陣相乘,資訊沒有丟失,但需要儲存的資料變少了很多。雖然解碼的時候需要額外的計算,但相比起來,小矩陣更符合我們的需求。實際使用的例子,如,的傳輸。以往,是一行一行的畫素傳輸的,所以,網速慢的時候,我們可以看到重新整理都是從上往下慢慢出來;而現在,是計算特徵矩陣,所以看的時候,都是先是整體模糊的,然後慢慢清晰起來。這個就是傳輸的特徵矩陣,隨著特徵資料的增多,逐漸清晰。

二個是,就像**,把聲音頻號轉換為電訊號,然後遠距離傳輸,再反向把**訊號轉換為聲音頻號,從而達到目的:聲音的遠距離傳輸。這裡面,打的**是乙個編碼器,把聲音頻號轉換為電訊號。接的**是乙個解碼器,把電訊號解碼成聲音頻號。這裡面,**同時具有編碼和解碼的功能,而且是硬體實現的。本身的功能呢,就是實現了聲音的遠距離傳輸。

而我們用到的編碼器和解碼器,本身編碼器是用來做資料特徵抽取的,用來做原始訊號的主要特徵。解碼器,只是在編碼器訓練過程中的乙個反向的元件,用來協助編碼器做訓練的。在我們的場景中,實際使用裡,主要是使用編碼器的。

2. 其次,說一下編碼器怎麼訓練。

根據上面提到編碼器的作用,我們說乙個最簡單的編碼器,就是直接傳輸的恒等編碼器。

比如,輸入100個訊號,我們讓中間編碼器也有100個節點,每個節點都是對接乙個輸入,然後不變的輸出。解碼器也是一樣,對應編碼器的輸出,不變,直接輸出。這樣,編碼器和解碼器都沒有損失資訊,輸出也和輸入完全一樣,沒有資訊丟失。這就是乙個最簡單的編碼器和解碼器。恒等,無損失。挺好。

或者,編碼器對對應的輸入乘以2,解碼器來乘以1/2,結果同樣是無損失的。

但如果我們的目標是想要對資料壓縮,不給這麼多中間節點。比如說,輸入100個訊號,但編碼器只有10個節點,那麼,就沒發一一對應的恒等輸出的。所以,就需要編碼器來努力了。首先,不能再是和輸入的一一對應的連線了,因為編碼節點數不夠。所以,需要全連線這樣的。其次,為了讓訊號方便做轉換,可以加入非線性轉換一類的。編碼器弄完了之後,解碼器也是對應的反向引數來解出來,然後輸出。把輸出和原始輸入進行對比,計算損失函式,然後反向傳播來降低loss,從而逐步把編碼器和解碼器的引數訓練好,最後拿到乙個比較好的壓縮的輸入資料的特徵。

3. 再次,說一下編碼器的結構。

注意:編碼器+解碼器,和mlp的結構可以很像。但是,解碼器由於要把編碼器的輸出特徵再解析出原始訊號,所以,要求解碼器的輸出節點個數等於原始訊號的輸入節點個數。

正常的,編碼器和解碼器可以是兩個層。比如,輸入層+編碼器層+輸出層(解碼器層)。也可以,把編碼器和解碼器都弄成多層的結構。

一般的,解碼器是編碼器的引數的反函式,這樣,二者結構相似,引數相反。但也可以,解碼器和編碼器並不相同,包括,結構不同,或者引數不按照相反來。

一般的,解碼器和編碼器是同一種網路,比如,都是層、或者都是cnn,或者都是rnn等。但特殊的,也可以二者不同結構,比如,cnn+rnn等。

所以,本身編碼和解碼是一種概念。編碼器輸入資料的特徵抽取出來(一般是壓縮的,但應該也可以是擴張的),然後解碼器根據特徵反向解出原始輸入訊號,讓二者盡可能的接近,就可以了。

4. 再說一下編碼器的應用。

乙個是,特徵抽取。這個說過了。二個是,新東西的生成。因為,編碼器把重要特徵抽出來了,那麼,我們可以把這些特徵自由的組合,就生成乙個新的原始樣本中沒有的樣本,這個也可以比較好玩。

5. 最後,再說一下編碼器的一些trick。

比如,可以往編碼器的輸入中,加入一些雜訊。這樣,可以防止編碼器學出來恒等的複製輸入輸出的問題。

也可以加入dropout,來增加健壯性。

編碼器與解碼器

以protobufencoder為例子,protobufencoder繼承channeloutboundhandler,與我們自定義的出站處理器 outboundhandler 相似。出站時 即向channel寫資料 會呼叫這個handler對資料進行處理 編碼 同理,decoder則繼承chann...

FPGA練習 編碼器和解碼器

本練習把乙個八位的 onehot 編碼轉換成三位的二進位制數。編碼器埠配置 編碼器 module encoder x,en,y input 7 0 x input en output 2 0 y wire 7 0 x wire en reg 2 0 y always en or x begin if...

Base64編碼 解碼器

base64編碼說明 base64編碼要求把3個8位位元組 3 8 24 轉化為4個6位的位元組 4 6 24 之後在6位的前面補兩個0,形成8位乙個位元組的形式。如果剩下的字元不足3個位元組,則用0填充,輸出字元使用 因此編碼後輸出的文字末尾可能會出現1或2個 為了保證所輸出的編碼位可讀字元,ba...