auto encoder 可以分為兩個部分,分別是encoder和decoder,而為了瞭解encoder和decoder的原理,我去看了transformer的原理,而我又發現transformer和self-attention息息相關,因此我將先從self-attention 介紹。 ### self-attention 是用來處理,network 的輸入是一排向量(vector set)的情況,可能是句子、聲音,或是可以改變長度的向量。 而輸出總共會有三種情況,分別是: (1)有多少輸入的 vector,就有多少輸出的 vector (2)一整個 sequence 只有一個 label 的輸出 (3)不知道輸出多少 label,機器要自己去決定,這又稱為 sequence-to-sequence 這邊以第一種情況為例  怎麼產生b1呢,先找出 a1 與其他 vector 各個的相關性,利用 α 來表示,  算相關性有很多種方法,較常見的有dot product 和additive   這邊使用dot product   再來根據 α’,抽取 sequence 的重要資訊,首先將 a*Wv 得到 v 再乘以 α’ 做加總得到 b 根據 α’(attention score)我們可以知道哪些向量和a有關,而 b2 b3 b4 也可以用相同的方式來得到,經過觀察,我們可以發現其實這一連串的運算只是矩陣乘法而已。  Multi-head Self-attention算是Self-attention的延伸, 透過計算更多的聯性來希望做出更佳的結果,但代價是計算量變大   原先的Self-attention是不包含label的位置的,因此 Positional Encoding 是為每個位置加上獨特的 vector(可以是sin or cos funciton) 而這邊有一個有趣的發現,self-attention 也可以用在影像辨識上,CNN 其實就是 self-attention 的一種特例, CNN only consider the receptive field but self-attention consider the relationship between all pixels, CNN的彈性較少,比較不會 overfitting,但在訓練資料多時,沒有辦法在其中得到好處!但self-attention所需的資料量太大  稍微介紹self-attention後,我接下來要介紹transformer Transformer 就是 Sequence-to-sequence(Seq2seq) 的 Model,特色是 Input a sequence, output a sequence, output length is determine by model. Seq2seq model 可以分為 Encoder 和 Decoder 兩個部份。  Encoder 簡單來說就是輸入一排向量,輸出一排向量 ( 其實 CNN. RNN 也可以做到),更細一點說,一個 Encoder是由很多 Block 所組成,每個 Block 所做的事情就是輸入一排向量做 Self-attention,考慮整個 Sequence 的資訊,然後做 Fully connect network,輸出另一排向量,此向量是另一個 Block 的輸入  在原始論文中,Seq2Seq 的 Block,輸入一排向量,做完 Self-attention 後,得到考慮所有 vector 的資訊後的輸出,還要加上原始輸入向量,這也稱為 Residual connection,再做 Layer normalization (非 Batch normalization),結果為 Fully connection network 的輸入,Fully connection network 也有 Residual connection 的架構,再做 Layer normalization ,這才是一個 Encoder 一個 block 的輸出  Layer normalization 就是對同個 Sample(Feature) 的不同 Dimension 計算 Standard deviation(σ) 和 Mean,與 Batch normalization 不同是,它是對不同 Sample(Feature) 的同一個 Dimension 去計算 Standard deviation(σ) 和 Mean。 Encoder 編碼完會傳給 Decoder ,分為兩種,比較常見的為 Autoregressive(AT),另一種 Decoder是 Non-autoregressive(NAT) 先介紹AT Encoder 的 Self-attention 和 Decoder 的 Masked self-attention 有什麼不同呢?  因為輸入的向量a1 a2 a3 a4 是一個個被輸入進去的而不是一起被輸入 接下來是NAT,他是一個步驟產生完整的句子,好處是平行化,較快,可以自己決定 Decoder 的輸出的長度,但通常壞於 AT,這是因為 Multi-modality。 大部分都是用AT,因為performance比較好 而這邊有一個地方是我剛剛沒有提到的,就是encoder是如何給decoder資料的呢? 是用一種叫cross attention 的技術,流程如下   最後,我們開始介紹auto encoder的原理, 首先Auto-encoder 也是self-supervised 中的一環,而self-supervised learning是指從沒有標註的資料去學習,或稱為 pre-training 將這些沒有標註,去訓練的資料,downstream 去下游去做運算就是 self-supervised(BERT. GPT…)。  auto-encoder 應用在圖片上就是其中一種,我們希望encoder 的輸入和 decoder 的輸出越接近越好,如果輸入是一個向量的話,就會希望 encoder 的輸入和 decoder 的輸出向量之間的距離越接近越好,也有人說這是 reconstruction,因為這個過程不需要標註的資料,只需要收集大量的圖片就好,所以這是一個 unsupervised 的方法,encoder 的輸出有人稱為 embedding 或representation 或 code  而這個流程其實跟cycle gan 是十分相像的  因為圖片的變化是有限的,所以可以化繁為簡來表示,而我的理解是在輸入的向量經過encoder之後,所產生的ouput vector contains many input image的重要資訊(feature),因此我認為encoder有特徵提取(extracted feature)的作用,提取了特徵的向量後再交給decoder reconstruct,  除此之外,由於所提取到的特徵向量是纏繞在一起的,有一種技術是feature disentangle 可以知道embedding 的每一個dimension 代表什麼資訊  而我們也可以發現,auto-encoder 後半段,就是一個 generator,再經過一些修改就是 VAE。 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up