1. 程式人生 > >深度學習---深度學習筆記(七):Encoder-Decoder模型和Attention模型

深度學習---深度學習筆記(七):Encoder-Decoder模型和Attention模型

這兩天在看attention模型,看了下知乎上的幾個回答,很多人都推薦了一篇文章Neural Machine Translation by Jointly Learning to Align and Translate 我看了下,感覺非常的不錯,裡面還大概闡述了encoder-decoder(編碼)模型的概念,以及傳統的RNN實現。然後還闡述了自己的attention模型。我看了一下,自己做了一些摘錄,寫在下面

1.Encoder-Decoder模型及RNN的實現

所謂encoder-decoder模型,又叫做編碼-解碼模型。這是一種應用於seq2seq問題的模型

那麼seq2seq又是什麼呢?簡單的說,就是根據一個輸入序列x,來生成另一個輸出序列y。seq2seq有很多的應用,例如翻譯,文件摘取,問答系統等等。在翻譯中,輸入序列是待翻譯的文字,輸出序列是翻譯後的文字;在問答系統中,輸入序列是提出的問題,而輸出序列是答案。

為了解決seq2seq問題,有人提出了encoder-decoder模型,也就是編碼-解碼模型。所謂編碼,就是將輸入序列轉化成一個固定長度的向量;解碼,就是將之前生成的固定向量再轉化成輸出序列。 


此處輸入圖片的描述

當然了,這個只是大概的思想,具體實現的時候,編碼器和解碼器都不是固定的,可選的有CNN/RNN/BiRNN/GRU/LSTM等等,你可以自由組合。比如說,你在編碼時使用BiRNN,解碼時使用RNN,或者在編碼時使用RNN,解碼時使用LSTM等等。

這邊為了方便闡述,選取了編碼和解碼都是RNN的組合。在RNN中,當前時間的隱藏狀態是由上一時間的狀態和當前時間輸入決定的,也就是 

ht=f(ht1,xt)ht=f(ht−1,xt)

獲得了各個時間段的隱藏層以後,再將隱藏層的資訊彙總,生成最後的語義向量 

C=q(h1,h2,h3,,hTx)C=q(h1,h2,h3,…,hTx)

一種簡單的方法是將最後的隱藏層作為語義向量C,即 

C=q(h1,h2,h3,,hTx)=hTxC=q(h1,h2,h3,…,hTx)=hTx

解碼階段可以看做編碼的逆過程。這個階段,我們要根據給定的語義向量C和之前已經生成的輸出序列y1,y2,yt1y1,y2,…yt−1來預測下一個輸出的單詞ytyt,即 

yt=argmaxP(yt)=t=1Tp(yt|{y1,,yt1},C)yt=argmax⁡P(yt)=∏t=1Tp(yt|{y1,…,yt−1},C)

也可以寫作 

yt=g({y1,,yt1},C)yt=g({y1,…,yt−1},C)

而在RNN中,上式又可以簡化成 

yt=g(yt1,st,C)yt=g(yt−1,st,C)

其中ss是輸出RNN中的隱藏層,C代表之前提過的語義向量,yt1yt−1表示上個時間段的輸出,反過來作為這個時間段的輸入。而g則可以是一個非線性的多層的神經網路,產生詞典中各個詞語屬於ytyt的概率。

encoder-decoder模型雖然非常經典,但是侷限性也非常大。最大的侷限性就在於編碼和解碼之間的唯一聯絡就是一個固定長度的語義向量C。也就是說,編碼器要將整個序列的資訊壓縮排一個固定長度的向量中去。但是這樣做有兩個弊端,一是語義向量無法完全表示整個序列的資訊,還有就是先輸入的內容攜帶的資訊會被後輸入的資訊稀釋掉,或者說,被覆蓋了。輸入序列越長,這個現象就越嚴重。這就使得在解碼的時候一開始就沒有獲得輸入序列足夠的資訊, 那麼解碼的準確度自然也就要打個折扣了

2.Attention模型

為了解決這個問題,作者提出了Attention模型,或者說注意力模型。簡單的說,這種模型在產生輸出的時候,還會產生一個“注意力範圍”表示接下來輸出的時候要重點關注輸入序列中的哪些部分,然後根據關注的區域來產生下一個輸出,如此往復。模型的大概示意圖如下所示 


此處輸入圖片的描述

相比於之前的encoder-decoder模型,attention模型最大的區別就在於它不在要求編碼器將所有輸入資訊都編碼進一個固定長度的向量之中。相反,此時編碼器需要將輸入編碼成一個向量的序列,而在解碼的時候,每一步都會選擇性的從向量序列中挑選一個子集進行進一步處理。這樣,在產生每一個輸出的時候,都能夠做到充分利用輸入序列攜帶的資訊。而且這種方法在翻譯任務中取得了非常不錯的成果。

在這篇文章中,作者提出了一個用於翻譯任務的結構。解碼部分使用了attention模型,而在編碼部分,則使用了BiRNN(bidirectional RNN,雙向RNN)

2.1 解碼

我們先來看看解碼。解碼部分使用了attention模型。類似的,我們可以將之前定義的條件概率寫作 

p(yi|y1,,yi1,X)=g(

相關推薦

深度學習---深度學習筆記()Encoder-Decoder模型Attention模型

這兩天在看attention模型,看了下知乎上的幾個回答,很多人都推薦了一篇文章Neural Machine Translation by Jointly Learning to Align and Translate 我看了下,感覺非常的不錯,裡面還大概闡述了encoder

深度學習筆記(六)Encoder-Decoder模型Attention模型

這兩天在看attention模型,看了下知乎上的幾個回答,很多人都推薦了一篇文章Neural Machine Translation by Jointly Learning to Align and Translate 我看了下,感覺非常的不錯,裡面還大

Encoder-Decoder模型Attention模型

1.Encoder-Decoder模型及RNN的實現 所謂encoder-decoder模型,又叫做編碼-解碼模型。這是一種應用於seq2seq問題的模型。 那麼seq2seq又是什麼呢?簡單的說,就是根據一個輸入序列x,來生成另一個輸出序列y。seq2seq有很多的應用

Tensorflow深度學習之二十tf.nn.conv1d

一、conv1d   在NLP領域,甚至影象處理的時候,我們可能會用到一維卷積(conv1d)。所謂的一維卷積可以看作是二維卷積(conv2d)的簡化,二維卷積是將一個特徵圖在width和height兩個方向上進行滑窗操作,對應位置進行相乘並求和;而一維卷積則

手把手教你用深度學習做物體檢測()YOLOv3介紹

YOLOv3 論文:《 YOLOv3: An Incremental Improvement 》 地址: https://arxiv.org/pdf/1804.02767.pdfyolov3 相比之前版本的改進 網路的特徵提取部分 由 Darknet-19改成了&n

Python學習筆記文件操作

dex enc 只讀 python nco 打印 如何 == continue 文件操作 對照一個word文件的操作方式,來體會文件操作的內容 打開文件:f=open(“file”),提示編碼錯誤,windows默認是GBK f=open(“file”,encoding=”

MYSQL初級學習筆記MySQL中使用正則表達式!(視頻序號初級_44)

value opened 序號 eight 方式 字符 用戶 包括 學習 知識點九:MySQL中使用正則表達式(44) (1):REGEXP‘匹配方式’: (2):常用匹配方式: 模式字符 ^ 匹配字符開始的部分 $ 匹配字符串結尾的

分散式學習筆記基於zookeeper實現分散式鎖

一、分散式鎖介紹         分散式鎖主要用於在分散式環境中保護跨程序、跨主機、跨網路的共享資源實現互斥訪問,以達到保證資料的一致性。 二、架構介紹     &nb

TK1學習筆記配置SSH遠端訪問

   有時候我們需要通過ssh遠端訪問TK1,這裡需要對TK1稍作配置 1.安裝ssh         sudo apt-get install openssh-server 2.檢視ssh服務是否啟動  

Typescript 學習筆記泛型

中文網:https://www.tslang.cn/ 官網:http://www.typescriptlang.org/ 目錄: Typescript 學習筆記一:介紹、安裝、編譯 Typescript 學習筆記二:資料型別 Typescript 學習筆記三:函式 Type

Caffe學習筆記()使用訓練好的model做預測(mnist)

一、前言     在之前的筆記中,已經生成了訓練好的mnist.cafffemodel,接下來我們就可以利用這個model做預測了。在這之前,我們還需要一個檔案:deploy.prototxt。那麼,就讓我們從deploy.prototxt開始說起。 二

OpenGL學習筆記()建立第一個Qt5.9.3 OpenGL工程模版(與平臺無關)

        main.cpp中輸入原始碼,原始碼如下: #include <iostream> #include <process.h> #include <GLFW/glfw3.h> #include <glad/glad.h> #include <

《機器學習實戰》學習筆記Logistics迴歸(梯度上升法)

1 Logistics迴歸概念 迴歸是指將一對資料擬合為一條直線的過程,而Logistics迴歸則是將回歸用於分類,其主要思想為:根據現有的資料對分類邊界線建立迴歸公式,依次為依據進行分類,在這裡最關鍵的一步是尋找最佳的擬合引數,這一步將會用到一些最優化的方法

EF6學習筆記程式碼遷移

要專業系統地學習EF前往《你必須掌握的Entity Framework 6.x與Core 2.0》這本書的作者(汪鵬,Jeffcky)的部落格:https://www.cnblogs.com/CreateMyself/  這裡主要記錄一下我常用的幾個遷移,還要其他的很多命令,我不去弄了 常用的就

RabbitMQ學習筆記交換機、佇列、訊息的持久化

一、概述     在生產過程中,難免會發生伺服器宕機的事情,RabbitMQ也不例外,可能由於某種特殊情況下的異常而導致RabbitMQ宕機從而重啟,那麼這個時候對於訊息佇列裡的資料,包括交換機、佇列以及佇列中存在訊息恢復就顯得尤為重要了。RabbitMQ本身帶有持久化機制

Docker學習筆記Docker網路

網路配置 安裝Docker預設自動建立三個網路: $ docker network ls NETWORK ID NAME DRIVER 7fca4eb8c647 bridge

tensorflow學習筆記引數初始化(initializer)

CNN中最重要的就是引數了,包括W,b。 我們訓練CNN的最終目的就是得到最好的引數,使得目標函式取得最小值。引數的初始化也同樣重要,因此微調受到很多人的重視,那麼tf提供了哪些初始化引數的方法呢,我們能不能自己進行初始化呢?1、tf.constant_initializer

STM32學習及應用筆記一次運算符優先級造成的錯誤

位與 指向 cells 偏移 getchar() 取地址 大於 沒有 事情 本人在最近一個項目的開發中,出現一個應為疏忽運算符優先級造成的問題,檢查了很久才發現問題,所以覺得運算符的優先級問題還是有必要再研究一下。具體的問題是這樣的,我采集了傳感器的原始數據,然後會

Head First Python 學習筆記-Chapter3文件讀取異常處理

獲取 for循環 文件 處理 pyhton find ont ren app 第三章中主要介紹了簡單的文件讀取和簡單的異常處理操作。 首先建立文件文件夾:HeadFirstPython\chapter3,在Head First Pythong官方站

輕松學習JavaScript二十DOM編程學習之事件模型

經歷 學習 不存在 obj 發生 rip gb2 article 不支持 在介紹事件模型之前,我們先來看什麽是事件和什麽是event對象。 一事件介紹 JavaScript事件是由訪問Web頁面的用戶引起的一系列操作,使