1. 程式人生 > >王小草【深度學習】筆記第七彈--RNN與應用案例:注意力模型與機器翻譯

王小草【深度學習】筆記第七彈--RNN與應用案例:注意力模型與機器翻譯

標籤(空格分隔): 王小草深度學習筆記

1. 注意力模型

1.2 注意力模型概述

注意力模型(attention model)是一種用於做影象描述的模型。在筆記6中講過RNN去做影象描述,但是精準度可能差強人意。所以在工業界,人們更喜歡用attention model。

結合下圖,先簡單地講一下,注意力模型的運作原理。
第一步:進來一張圖片
第二步:圖片進入卷積神經網路,進行前向運算,將某個卷積層的結果輸出。注意,上一個筆記中講的RNN做影象描述,用的是全連結層的輸出。至於說哪個層的輸出好,沒法下結論,這個需要去不同的場景中做實驗比較。比如這個實驗中選擇了輸出卷積層的第5層結果進行輸出。
第三步

:卷積層中的輸出作為輸入,進入了RNN,這個RNN的運作與之前講的有所不同,因為加進了“注意力”的因素,會去注意圖片中的某一塊趨於,具體的邏輯下文詳述。
第四步:輸出,生成描述性的文字。

QQ截圖20160902150810.png-193kB

1.1.2 注意力模型的結構

QQ截圖20160902162541.png-178.4kB

現在,我們來針對上圖中的結構,仔細地講述注意力模型的運作原理。

第一步:
還是一樣,輸入一張圖片。當然不是一張原始的圖片,而是圖片轉換成的H * W * 3維的矩陣,H和W是畫素的高度和寬度,3是3個顏色指標。

第二步:
這個矩陣進入了卷積神經網路CNNN,做前向運算,在第五層卷基層的時候輸出結果。這個結果是一個L * D的矩陣。D是這一層卷基層中神經元的個數,比如有512個。L是每個神經元中的feature map,比如是14 * 14維的。那麼L * D 就是 196 * 512維的向量了。

第三步:
自己先人為建立一個D * 1維的權重向量W(這個權重的最優值在後向求導的時候會算出來的,一開始可以先隨便初始化一個)。
拿從CNN出來的feature向量L * D 去乘以 這個權重向量W,得到的是L * 1的向量。也就是圖中的h0,h0經過一個sotmax,會得到L * 1的概率,也就是說,對一個L 維的feature map(14 * 14)求出196個相對應的概率向量,就是圖中的a1。

第四步:
a1是196維的概率向量,把它再與 L * D的feature向量相乘,求加權。也就是說,對521層神經元上的feature map都乘以一組概率,得到的是圖中的z1。
這是至關重要的一步,也是注意力模型的核心,因為概率的大小重新調整了feature向量中每個值的大小。概率大的就會放更多的注意力上去,概率小的,注意力就減小了。
這個z1直接作用於第二次迴圈中的h1.

第五步:
現在來到了h1這一層,這一層的輸入除了剛剛說的z1,還有原來就有的y1,和h0,y1是上一次迴圈的輸出,h0是上一時刻的記憶。h1也會進入一個softmax的運算,輸出一組概率,這組概率會再回到feature向量那裡做權重加和,於是feature向量又進行了一輪的調整,再作用到了h2上,也就是我們看到的z2。h1出來生成一個概率向量外,還會輸出一組每個詞的概率,然後選取概率最大的那個詞作為本輪迴圈的最終輸出。(所有詞以one-hot的形式維護在詞典中)。

迴圈往復以上兩步,實現了在每一輪的迴圈中都輸入了新的feature向量,注意力也會改變。比如第一輪注意力是在bird,第二輪注意力在sea.

2. 翻譯系統

2.1 背景

傳統的機器翻譯是基於統計的

2.2 初版的神經網路翻譯系統

初版的翻譯系統由兩部分組成:encode與decode
encode:將輸入的語言以一種方式表徵,比如說one-hot形式,將源語言資訊壓縮到“記憶”中。
decode:從“記憶”中解碼輸出另一種語言。

如下圖,encode和decode分別是一個RNN。第一個encode的RNN,在迭代到h3的時候完成,這個h3中包含了所有的記憶。接著,h3作為第二個decode的RNN的輸入進行解碼,每一次迭代的輸出是翻譯成的另一種語言的word。
QQ截圖20161027140850.png-75.6kB

下面是具體的公式:
編碼的過程:
QQ截圖20161027141211.png-6.3kB
解碼的過程:
QQ截圖20161027141218.png-9.8kB
最小化交叉熵損失:
QQ截圖20161027141224.png-6.7kB

2.3 小小改進後的神經網路翻譯系統

後來對初版的翻譯系統做了小小的改進。
第一個改進是將輸入的稀疏向量變成了稠密向量,即用one-hot向量乘以一個權重矩陣後變成了embedding dense vector.這個嵌入向量並不是通過其他語料庫學習到直接使用的,而是在這個翻譯的神經網路裡現場學到的。

第二個改進是在decode的RNN中,每次迭代,輸入到隱藏層的不僅僅是當前時刻的輸入Xt,上一時刻的記憶,還有encode RNN輸出的那個記憶。也就是說這個記憶不僅僅是隻傳給了第二個RNN中的第一層h1,而是施加給了每詞迭代中的h。

兩個改進可在下圖的結構中看出:
QQ截圖20161027142818.png-196.3kB

那麼你可能要問了,這樣的RNN做出來翻譯的效果如何呢?
有點小小的慚愧,這種方式的NMT模型,比傳統的SMT模型要差。當句子越長的時候,效果就越差,如果詞表越大,UNK越少(UNK只詞頻比較少的詞),翻譯效果就越好。

2.4 雙向RNN的神經網路翻譯系統

首先來回顧一下雙向RNN:
有些情況下,當前的輸出不止依賴於之前的序列元素,還可能依賴之後的序列元素。比如做英文完形填空的時候,需要依據上下文才能判斷所填的是什麼。
雙向RNN的結構與公式如下:
QQ截圖20161027145243.png-34.2kB
當前的記憶不僅來自於上一個時刻的記憶,還受影響於下一個時刻的記憶。

在翻譯系統中,雙向RNN用於捕獲周邊(兩側的資訊),不僅如此,改進後的模型中還加入了“注意力”模型,用於關注當前正在翻譯的詞。

下面我們來看一下改進後模型的結構與原理。
(1) encode部分
隱藏層hj是受兩個方向的記憶一起作用的。

前後兩個記憶的計算方式都是一樣的。第一個是由這個時刻的輸入xj乘以權重W,和上一時刻的記憶hj-1乘以權重U組成;第二個是這個時刻的輸入xj乘以權重W,和下一時刻的記憶hj+1乘以權重U組成的。注意兩邊的w,U權重是不同的。

為什麼要用分段函式表示呢,因為在起始點的詞是沒有前一時刻的記憶的,所以計為0

QQ截圖20161027145659.png-20.6kB

encode的結構:
QQ截圖20161027151606.png-65.3kB

(2) decode部分
解碼的過程也是一個RNN,但不是雙向的。

si是它的隱藏層,也就是記憶體,它有三個輸入,一個是前一時刻的輸出詞作為這一時刻的輸入,第二個是前一時刻的記憶,第三個是注意力矩陣ci。

ti是經過選擇的輸出

yi是輸出層,它是經過一個softmax實現的,所以輸出的是概率向量。sh

QQ截圖20161027145714.png-21.7kB

(3) Attention 部分
句子是變化長度的,要集中經理在某個部分上。
和影象處理中的注意力模型一樣,有一個注意力矩陣V,(這個矩陣中的引數也是在模型訓練中需要學習的),將這個矩陣乘以tanh函式再放進一個soaftmax中,變成了一個概率向量,重要的需要關注的位置的概率會比較大,無需關注的地方的概率比較小。然後將它乘以隱藏層的記憶,就體現出來關注的資訊。
QQ截圖20161027145724.png-18.3kB

3.RNN生成模型的其他應用

RNN生成模型的應用有許多有趣的案例,下面羅列了一些,並且附上了相關程式碼與案例原文的連結。

3.1 生成字元級別的語言模型

上一個筆記中將的語言生成模型是針對word來做的,這裡的原理是完全一樣的,只是針對chart來做。將所有chart,包括標點符號全部作為輸入。大致的結構如下:

![QQ截圖20161027132426.png-71.6kB][131]

來看一下模型在學習過程中的進展是如何的:
學習第100輪的時候,還很混亂
QQ截圖20161027132843.png-14.7kB

學習第300輪之後,已經能正確得插入詞與詞之間的空格
QQ截圖20161027132851.png-20.2kB

第500輪之後,知道了要加句號在某個位置,並且句號之後加一個空格
QQ截圖20161027132858.png-14.7kB

700-900輪時,已經非常像英文的句子,已經學會了使用引號,省略號等,學出來的詞也已經是標準的英文單詞
QQ截圖20161027132905.png-11.4kB

1200輪的時候,能識別人名要大寫,並且單詞和句子也幾乎是正確的。
QQ截圖20161027132912.png-21.7kB

所以,RNN與學習的時候是一個逐步學習的過程。

3.2 生成維基百科

同樣的原理,如果餵給RNN的是維基百科的內容,那麼它也能在學習之後模仿寫出維基百科。
已經有小夥伴整理了一部分維基百科的資料做成text的格式,有興趣的小夥伴可以去下載資料測試一下。
資料地址:http://cs.stanford.edu/people/karpathy/char-rnn/wiki.txt

3.3 生成模型寫食譜

3.4 生成模型寫奧巴馬演講稿

3.5 合成音樂

[13lqh7xlyv2owk5rw4fyslus2d/QQ%E6%88%AA%E5%9B%BE20161027145714.png

相關推薦

深度學習筆記--RNN應用案例注意力模型機器翻譯

標籤(空格分隔): 王小草深度學習筆記 1. 注意力模型 1.2 注意力模型概述 注意力模型(attention model)是一種用於做影象描述的模型。在筆記6中講過RNN去做影象描述,但是精準度可能差強人意。所以在工業界,人們更喜歡用atten

深度學習筆記--卷積神經網路遷移學習

標籤(空格分隔): 王小草深度學習筆記 1. 影象識別與定位 影象的相關任務可以分成以下兩大類和四小類: 影象識別,影象識別+定位,物體檢測,影象分割。 影象的定位就是指在這個圖片中不但識別出有只貓,還把貓在圖片中的位置給精確地摳出來今天我們來講

機器學習筆記--主題模型LDA實踐應用

標籤(空格分隔): 王小草機器學習筆記 筆記整理時間:2016年12月30日 筆記整理者:王小草 1. LDA的實現工具 在主題模型LDA的理論篇,長篇大幅的公式與推導也許實在煩心,也不願意自己去寫程式碼實現一遍的話,不妨用一用一些已經開源和

機器學習筆記--無監督演算法之聚類

標籤(空格分隔): 王小草機器學習筆記 1. 聚類的概述 存在大量未標註的資料集,即只有特徵,沒有標籤的資料。 根據這些特徵資料計算樣本點之間的相似性。 根據相似性將資料劃分到多個類別中。 使得,同一個類別內的資料相似度大,類別之間的資料相似度小。

機器學習筆記--EM演算法

標籤(空格分隔): 王小草機器學習筆記 EM演算法的英文全稱是Expectation Maximization Algorithm,也就是求期望最大化,也就是我們常說的目標函式求最大值的演算法。EM演算法,直觀的說,就是有一堆未知的資料(比如一些特徵值),

機器學習筆記--支援向量機SVM

標籤(空格分隔): 王小草機器學習筆記 1.SVM的原理與目標 1.1 分割超平面 來看上圖,假設C和D是兩個不想交的凸集,則存在一個超平面P,這個P可以將C和D分離。 這兩個集合的距離,定義為兩個集合間元素的最短距離。 做集合C和集合

深度學習筆記16 windows下SSD網路在caffe中的配置(CPU版本)筆記2

************************************************************************************************************* 檔案說明: windows下SSD網路

深度學習基於caffe的表情識別(四)在Intel AI DevCloud上訓練模型

一、註冊申請Intel AI DevCloud   2.填寫註冊資訊:   3.Submit提交,提交後會出現下面的介面:   4.說明已經申請成功了,大概等2個工作日左右,會收到一封郵件,郵件長這樣:   第一個紅框內的連結是使用教程,教你怎麼連線到dev

神經網絡和深度學習筆記 - 第二章 反向傳播算法

討論 固定 特征 array sed 並不會 思想 隨機梯度 相關 上一章中我們遺留了一個問題,就是在神經網絡的學習過程中,在更新參數的時候,如何去計算損失函數關於參數的梯度。這一章,我們將會學到一種快速的計算梯度的算法:反向傳播算法。 這一章相較於後面的章節涉及到的數學

深度學習Pytorch 學習筆記

chang www. ans 如何 ret == 筆記 etc finished 目錄 Pytorch Leture 05: Linear Rregression in the Pytorch Way Logistic Regression 邏輯回歸 - 二分類 Lect

深度學習線性迴歸(二)批量隨機梯度下降及其python實現

文章目錄 概述 小批量隨機梯度下降 解析解和數值解 小批量隨機梯度下降 python實現 需要的先驗知識 程式碼和實驗 概述 本文

深度學習論文筆記Deep Neural Networks for Object Detection

       論文:<<Deep Neural Networks for Object Detection>>       作者:Christian Szegedy Al

神經網路和深度學習筆記

文章導讀: 1.交叉熵損失函式   1.1 交叉熵損失函式介紹   1.2 在MNIST數字分類上使用交叉熵損失函式   1.3 交叉熵的意義以及來歷   1.4 Softmax 2. 過擬合和正則化   2.1 過擬合   2.2 正則化   2.3 為什麼正則化可以減輕

深度學習讀書筆記第一章 引言

在人工智慧的早期,那些對人類智力來說非常困難、但對計算機來說相對簡單的問題得到迅速解決,比如,那些可以通過一系列形式化的數學規則來描述的問題。人工智慧的真正挑戰在於解決那些對人來說很容易執行、但很難形式化描述的任務,如識別人們所說的話或影象中的臉。 讓計算機從

深度學習caffe實用工具3筆記25 Windows下caffe中將影象資料集合轉換為DB(LMDB/LEVELDB)檔案格式之convert_imageset

/********************************************************************************************************************************* 檔案說明:

深度學習白也能看懂的卷積神經網路

小編在市面看了很多介紹計算機視覺的知識,感覺都非常深奧,難以理解和入門。因此總結出了一套容易理解的教程,希望能夠和大家分享。 一.人工神經網路 人工神經網路是一種模擬人腦構建出來的神經網路,每一個神經元都具有一定的權重和閾值。僅有單個神經元的圖例如下所示:     從中可以看到每一個神

深度學習詞的向量化表示

model ref res font 技術 訓練 lin 挖掘 body 如果要一句話概括詞向量的用處,就是提供了一種數學化的方法,把自然語言這種符號信息轉化為向量形式的數字信息。這樣就把自然語言理解的問題要轉化為機器學習的問題。 其中最常用的詞向量模型無非是 one-h

深度學習批歸一化(Batch Normalization)

學習 src 試用 其中 put min 平移 深度 優化方法 BN是由Google於2015年提出,這是一個深度神經網絡訓練的技巧,它不僅可以加快了模型的收斂速度,而且更重要的是在一定程度緩解了深層網絡中“梯度彌散”的問題,從而使得訓練深層網絡模型更加容易和穩定。所以目前

深度學習常用的模型評估指標

是我 初學者 cnblogs 沒有 線下 均衡 顯示 總數 效果 “沒有測量,就沒有科學。”這是科學家門捷列夫的名言。在計算機科學中,特別是在機器學習的領域,對模型的測量和評估同樣至關重要。只有選擇與問題相匹配的評估方法,我們才能夠快速的發現在模型選擇和訓練過程中可能出現的

深度學習吳恩達網易公開課練習(class2 week1 task2 task3)

公開課 網易公開課 blog 校驗 過擬合 limit 函數 its cos 正則化 定義:正則化就是在計算損失函數時,在損失函數後添加權重相關的正則項。 作用:減少過擬合現象 正則化有多種,有L1範式,L2範式等。一種常用的正則化公式 \[J_{regularized}