當前位置:
首頁 > 最新 > 【進階篇】Recurrent Group教程

【進階篇】Recurrent Group教程

導語

PaddlePaddle 高度支持靈活和高效的循環神經網路配置。接下來的進階篇推文將圍繞RNN模型展開,指導你如何在 PaddlePaddle 中配置和使用循環神經網路。本部分推文目錄如下:

2.11:【進階篇】RNN配置

2.12:【進階篇】Recurrent Group教程

2.13:【進階篇】支持雙層序列作為輸入的Layer

2.14:【進階篇】單雙層RNN API對比介紹

編寫|PaddlePaddle

排版|wangp

1

概述

序列數據是自然語言處理任務面對的一種主要輸入數據類型。

一句話是由詞語構成的序列,多句話進一步構成了段落。因此,段落可以看作是一個嵌套的雙層的序列,這個序列的每個元素又是一個序列。

雙層序列是PaddlePaddle支持的一種非常靈活的數據組織方式,幫助我們更好地描述段落、多輪對話等更為複雜的語言數據。基於雙層序列輸入,我們可以設計搭建一個靈活的、層次化的RNN,分別從詞語和句子級別編碼輸入數據,同時也能夠引入更加複雜的記憶機制,更好地完成一些複雜的語言理解任務。

在PaddlePaddle中,recurrent_group是一種任意複雜的RNN單元,用戶只需定義RNN在一個時間步內完成的計算,PaddlePaddle負責完成信息和誤差在時間序列上的傳播。

更進一步,recurrent_group同樣可以擴展到雙層序列的處理上。通過兩個嵌套的recurrent_group分別定義子句級別和詞語級別上需要完成的運算,最終實現一個層次化的複雜RNN。

目前,在PaddlePaddle中,能夠對雙向序列進行處理的有recurrent_group和部分Layer。

2

相關概念

(1)基本原理

recurrent_group是PaddlePaddle支持的一種任意複雜的RNN單元。使用者只需要關注於設計RNN在一個時間步之內完成的計算,PaddlePaddle負責完成信息和梯度在時間序列上的傳播。

PaddlePaddle中,recurrent_group的一個簡單調用如下:

recurrent_group(step,input, reverse)

使用recurrent_group的核心是設計step函數的計算邏輯。step函數內部可以自由組合PaddlePaddle支持的各種layer,完成任意的運算邏輯。recurrent_group的輸入(即input)會成為step函數的輸入,由於step 函數只關注於RNN一個時間步之內的計算,在這裡recurrent_group替我們完成了原始輸入數據的拆分。

(2)輸入

recurrent_group處理的輸入序列主要分為以下三種類型:

(3)輸入示例

序列生成任務大多遵循encoder-decoer架構,encoder和decoder可以是能夠處理序列的任意神經網路單元,而RNN是最流行的選擇。

給定encoder輸出和當前詞,decoder每次預測產生下一個最可能的詞語。在這種結構中,decoder接受兩個輸入:

在序列生成任務中,decoder RNN總是引用上一時刻預測出的詞的詞向量,作為當前時刻輸入。GeneratedInput自動完成這一過程。

(4)輸出

step函數必須返回一個或多個Layer的輸出,這個Layer的輸出會作為整個recurrent_group 最終的輸出結果。在輸出的過程中,recurrent_group會將每個時間步的輸出拼接,這個過程對用戶也是透明的。

(5)memory

memory只能在recurrent_group中定義和使用。memory不能獨立存在,必須指向一個PaddlePaddle定義的Layer。引用memory得到這layer上一時刻輸出,因此,可以將memory理解為一個時延操作。

可以顯示地指定一個layer的輸出用於初始化memory。不指定時,memory默認初始化為0。

3

雙層RNN介紹

recurrent_group幫助我們完成對輸入序列的拆分,對輸出的合併,以及計算邏輯在序列上的循環展開。利用這種特性,兩個嵌套的recurrent_group能夠處理雙層序列,實現詞語和句子兩個級別的雙層RNN結構。

為了描述方便,下文以NLP任務為例,將含有子句(subseq)的段落定義為一個雙層序列,將含有詞語的句子定義為一個單層序列,那麼0層序列即為一個詞語。

4

雙層RNN的使用

(1)訓練流程的使用方法

使用recurrent_group需要遵循以下約定:

A.單進單出:輸入和輸出都是單層序列。

B.雙進雙出:輸入和輸出都是雙層序列。

C.雙進單出:目前還未支持,會報錯」In hierachical RNN, all out links should be from sequences now」。

(2)生成流程的使用方法

使用beam_search需要遵循以下約定:

*原創貼,版權所有,未經許可,禁止轉載

*值班小Paddle:wangp

*歡迎在留言區分享您的觀點

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 PaddlePaddle 的精彩文章:

【使用指南】用pip安裝paddlepaddle

TAG:PaddlePaddle |