日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

rnn神经网络模型_一文读懂序列建模(deeplearning.ai)之循环神经网络(RNNs)

發(fā)布時間:2023/12/10 循环神经网络 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rnn神经网络模型_一文读懂序列建模(deeplearning.ai)之循环神经网络(RNNs) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者:Pulkit Sharma,2019年1月21日

翻譯:陳之炎

校對:丁楠雅

本文為你詳細介紹序列模型,并分析其在不同的真實場景中的應(yīng)用。

簡介

如何預(yù)測一個序列中接下來要發(fā)生什么事情是一個非常吸引人的課題,這是我對數(shù)據(jù)科學如此著迷的原因之一!有趣的是——人類的頭腦確實擅長于此,但是機器卻不是這樣的。如果一本書中有一個神秘的情節(jié),人類的大腦就會開始預(yù)測出結(jié)果,然而,如何教會機器來做類似的事情呢?

多虧了深度學習,我們今天能做的事情比幾年前要多的多。處理序列數(shù)據(jù)的能力,如音樂歌詞、句子翻譯、理解評論或構(gòu)建聊天機器人-所有這些都要歸功于序列建模

這便是我們在本文中需要學習的內(nèi)容,由于這是deeplearning.ai專業(yè)系列課程的一部分,我希望讀者能夠了解到某些概念。如果你還沒有讀過前幾篇文章,或者還需要快速復(fù)習一下,可以訪問以下鏈接:

  • 深度學習和神經(jīng)網(wǎng)絡(luò)入門指南(deeplearning.ai第1課)
  • https://www.analyticsvidhya.com/blog/2018/10/introduction-neuric-networks-deep-learning/
  • 改進神經(jīng)網(wǎng)絡(luò)–超參數(shù)調(diào)整、正則化和其他(deeplearning.ai第2課)
  • https://www.analyticsvidhya.com/blog/2018/11/neuric-networks-hyperparameter-tuning-regularization-deeplearning/
  • 從零開始學習卷積神經(jīng)網(wǎng)絡(luò)的綜合教程(deeplearning.ai第4課)
  • https://www.analyticsvidhya.com/blog/2018/11/neuric-networks-hyperparameter-tuning-regularization-deeplearning/

在本節(jié)課程中,我們將看到如何將序列模型應(yīng)用到不同的真實場景中去,如情感分類、圖像字幕等。

課程目錄

  • 課程結(jié)構(gòu)
  • 課程內(nèi)容:序列模型

序列模型課程內(nèi)容如下:

一、模塊1:循環(huán)神經(jīng)網(wǎng)絡(luò)(RNNs)

二、模塊2:自然語言處理(NLP)和單詞嵌入

2.1 單詞嵌入簡介

2.2 學習單詞嵌入:Word2vec & GloVe

2.3 單詞嵌入的應(yīng)用程序

三、模塊3:序列模型與注意力(Attention)機制

到目前為止,我們已經(jīng)在這個系列課程中涵蓋了相當多的內(nèi)容,以下是對所學概念的簡要概括:

  • 深度學習和神經(jīng)網(wǎng)絡(luò)基礎(chǔ)。
  • 淺層和深層神經(jīng)網(wǎng)絡(luò)的工作原理。
  • 如何通過超參數(shù)調(diào)整、正則化和優(yōu)化來提高深度神經(jīng)網(wǎng)絡(luò)的性能。
  • 如何通過scratch實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)。

現(xiàn)在我們把重點轉(zhuǎn)向序列建模,本課程分為三個模塊(官方課程名稱為:Andrew Ng教授的深度學習專業(yè)課程第5課):

  • 模塊1中,我們將學習循環(huán)神經(jīng)網(wǎng)絡(luò)及其工作原理,此外,還將在本模塊中介紹GRU和LSTM。
  • 模塊2中,重點學習自然語言處理和單詞嵌入。我們將學到如何將Word2vec和Glove框架應(yīng)用于學習單詞嵌入
  • 最后,模塊3將介紹注意力(Attention)模型的概念。我們將學到如何將大而復(fù)雜的句子從一種語言翻譯成另一種語言。

準備好了嗎?那我們便從模塊1開始第5課序列模型的學習吧!由于平臺系統(tǒng)字數(shù)限制,后續(xù)推出模塊2:自然語言處理(NLP)和單詞嵌入、模塊3:序列模型與注意力(Attention)機制,敬請關(guān)注!

一、模塊1:循環(huán)神經(jīng)網(wǎng)絡(luò)

第5課第一模塊的目標是:

  • 了解什么是循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)
  • 學習包括LSTM、GRUS和雙向RNN在內(nèi)的多種算法

如果這些縮寫聽起來令人生畏,不要擔心——我們會很快把它們解決掉。

1. 首先,為什么是序列模型?

為回答這個問題,將向你展示一些在真實場景中應(yīng)用到的序列模型示例。

  • 語音識別:

這是一個很常見的應(yīng)用(每個有智能手機的人都會知道這一點),在這里,輸入是一個音頻剪輯板,模型生成文本轉(zhuǎn)錄。在這里,音頻被認為是一個序列,隨著時間的推移,輸出為一系列單詞。

  • 情感分類:

序列模型的另一個流行應(yīng)用是情感分類。我們將一個文本句子作為輸入,模型必須預(yù)測出句子的情感(積極、消極、憤怒、興奮等),輸出可以為分級或標星。

  • DNA序列分析:

給定一個DNA序列作為輸入,期望模型能夠預(yù)測出哪一部分DNA屬于哪一種蛋白質(zhì)。

  • 機器翻譯:

用一種語言輸入一個句子,比如法語,希望模型能把它轉(zhuǎn)換成另一種語言,比如英語。在這里,輸入和輸出都是序列:

  • 視頻活動識別:

這實際上是利用序列模型對即將到來的事件(和當前的趨勢)進行預(yù)測,該模型用來預(yù)測給定視頻中正在進行的活動,在這里,輸入是一個幀序列。

  • 名稱實體識別:

這當然是我最喜歡的序列模型示例。如下圖所示,我們用一句話作為輸入,并希望模型能識別出該句子中的人名:

現(xiàn)在,在做進一步深入探討之前,需要討論幾個重要的符號,你會在整個文章中看到這些符號。

2. 將在本文中使用到的符號

我們用“x”來表示一個句子,為方便理解,以下面的示例句子為例:

X:哈利和赫敏發(fā)明了一種新的咒語。

現(xiàn)在,我們用x來表示句子中的每個詞:

  • x<1> = 哈利
  • x<2>=赫敏,等等

上述句子的輸出將是:

Y=1 0 1 0 0 0 0

在這里,1表示這個單詞代表一個人的名字(0表示它是其他)。下面是我們經(jīng)常用到的一些常用符號:

  • Tx = 輸入句長度
  • Ty = 輸出句長度
  • x(i) = ith 訓(xùn)練樣本
  • x(i) = ith訓(xùn)練樣本的tth訓(xùn)練
  • Tx(i) = ith輸入句長度

此時,我們或許會問——如何在一個序列中表示一個單獨的單詞呢?嗯,這里,我們要依靠詞匯表或字典,即我們在句子中使用到的單詞列表,詞匯表結(jié)構(gòu)如下所示:

詞匯表的大小因不同的應(yīng)用而異,通常從訓(xùn)練集中挑選出現(xiàn)頻度最高的單詞來制作詞匯表。

現(xiàn)在,假設(shè)我們想表示單詞“Harry”這個詞,它在詞匯表中的位置是4075th 位,我們對這個詞匯進行一次編碼,以表示“Harry”:

通常,x是一個獨熱編碼向量,我們將1放在第4075t位置,所有其余的單詞將表示為0。

如果單詞不出現(xiàn)在詞匯表中,會創(chuàng)建一個未知的標記,并將其添加到詞匯表中。就這么簡單!

3. 循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)模型

當X,Y之中有一個是序列,或者X和Y都是序列時,我們使用循環(huán)神經(jīng)網(wǎng)絡(luò)來學習從X到Y(jié)的映射。但是,為什么不能用一個標準的神經(jīng)網(wǎng)絡(luò)來解決這些序列問題呢?

問得太好了!下面,讓我用一個例子來做出解釋。假設(shè)我們需要構(gòu)建下述神經(jīng)網(wǎng)絡(luò):

這里主要有兩個問題:

  • 輸入和輸出沒有固定的長度,也就是說,一些輸入語句可以是10個單詞,而其他的可以是<>10(大于或小于)。最終輸出也是如此
  • 如果使用一個標準的神經(jīng)網(wǎng)絡(luò),我們將無法在不同的文本位置上共享所學的特征。

為此,需要建立一種表示,用它來解析不同長度的句子,并減少模型中的參數(shù)數(shù)量。這就是我們要用到循環(huán)神經(jīng)網(wǎng)絡(luò)的地方,這便是典型RNN:

RNN獲取第一個單詞(x<1>),并將其饋送到預(yù)測輸出(y‘<1>)的神經(jīng)網(wǎng)絡(luò)層。重復(fù)此過程,直到最后一步x生成最后的輸出y‘,這是輸入字數(shù)和輸出字數(shù)相等的網(wǎng)絡(luò)。

RNN按從左到右的順序掃描數(shù)據(jù)。注意,RNN在每個時間步長中使用的參數(shù)是共享的,在每個輸入層和隱藏層(Wax)之間、每個時間步長(Waa)之間以及隱藏層和輸出層(Wya)之間共享參數(shù)。

因此,如果需要對x<3>進行預(yù)測,我們也會得到關(guān)于x<1>和x<2>的信息。RNN的一個潛在缺點是:它只從先前的時間步長獲取信息,而不是從后續(xù)的時間步長獲取信息。這個問題可以用雙向RNN來解決,我們會在稍后進行討論。現(xiàn)在,我們來看看RNN模型中的前向傳播的步驟:

a<0> 是一個全零向量,我們計算與標準神經(jīng)網(wǎng)絡(luò)相類似的激活函數(shù):

  • a<0> = 0
  • a<1> = g(Waa * a<0> + Wax * x<1> + ba)
  • y<1> = g’(Wya * a<1> + by)

同樣,我們可以計算每個時間步長的輸出。這些公式的一般形式可以寫成:

可以用更為簡潔的方法列出這些方程:

水平疊加Waa 和Wya 以獲得Wa,a和x垂直疊加。目前只有一個矩陣,而不是帶著兩個參數(shù)的矩陣。簡言之,這便是循環(huán)神經(jīng)網(wǎng)絡(luò)的前向傳播原理。

3.1 時間軸上的反向傳播

接下來,你可能會看到這種情況-反向傳播步驟與前向傳播的方向正好相反。我們有一個損失函數(shù),為了得到準確的預(yù)測,需要將它最小化。損失函數(shù)由以下公式給出:

我們計算每個時間步長里的損失,最后對所有這些損失求和,以計算序列的最終損失:

在前向傳播中,我們從左向右移動,即增加時間t的步長。在反向傳播中,我們從右向左移動,即在時間軸上向后移動(因此稱為時間反向傳播)。

到目前為止,我們看到的是輸入和輸出序列長度相等的應(yīng)用場景。但是如果輸入和輸出序列長度不等的情況又如何呢?我們將在下一節(jié)中看到這些不同的應(yīng)用場景。

3.2 不同種類的RNN

可以用多種不同類型的RNN來處理序列長度不同的示例。這些問題可分為以下幾類:

  • 多對多

前面看到的名稱實體識別示例屬于這個類別。假設(shè)我們有一系列的單詞,對于每個單詞,我們必須預(yù)測它是否是一個人名。針對此類問題的RNN架構(gòu)如下:

對于每個輸入字,我們預(yù)測它對應(yīng)的輸出字。

  • 多對一

來看看情緒分類問題:我們將一個句子傳遞給模型,它將返回與該句子對應(yīng)的情感或評級。這是一個多對一的問題,輸入序列可以有不同的長度,而輸出只有一個。針對此類問題的RNN架構(gòu)如下所示:

這里,我們在句子結(jié)束時會得到一個輸出。

  • 一對多

以音樂生成為例,我們希望用音樂作為輸入來預(yù)測歌詞。在這種情況下,輸入只是一個單詞(或一個整數(shù)),輸出的長度可變。這類問題的RNN體系結(jié)構(gòu)如下所示:

還有一種RNN在工業(yè)上廣泛使用,即機器翻譯,將一種語言的輸入句翻譯成另一種語言。這是一個多對多的問題,輸入序列的長度可能等于也可能不等于輸出序列的長度。

在這種情況下,我們有編碼器和解碼器。編碼器讀取輸入語句,解碼器將其轉(zhuǎn)換為輸出語句:

3.3 語言模型和序列生成

假設(shè)需要建立一個語音識別系統(tǒng),我們聽到一句話:“蘋果和梨沙拉很好吃”。該模型將預(yù)測什么——“蘋果配梨沙拉很美味”還是“蘋果和梨沙拉是美味”?

我希望是第二句話!語音識別系統(tǒng)通過預(yù)測每個句子的概率來選擇句子。

但是又如何來構(gòu)建語言模型呢?

假設(shè)有一個輸入語句:

貓平均每天睡15小時

構(gòu)建語言模型的步驟如下:

  • 第1步:標記輸入,即創(chuàng)建字典
  • 第2步:將這些單詞映射到一個編碼向量,可以添加的標記來表示句子的結(jié)束。
  • 第3步:構(gòu)建RNN模型

我們?nèi)〉谝粋€輸入詞并對其進行預(yù)測,輸出會告訴我們字典中任意單詞的概率是多少。第二個輸出會告訴我們給定第一個輸入字的預(yù)測詞的概率:

RNN模型中的每一步都會查看前面的一組單詞,以預(yù)測下一個單詞。訓(xùn)練RNN模型會遇到各種各樣的挑戰(zhàn),這將在下一節(jié)進行討論。

3.4 RNN的梯度消失

循環(huán)神經(jīng)網(wǎng)絡(luò)的最大問題之一是它會陷入梯度消失。怎么回事?我們來考慮這兩個句子:

那只貓吃了一堆食物,已經(jīng)吃飽了。

貓已經(jīng)吃了一堆食物之后,都已經(jīng)吃飽了。

以上兩個句子中哪一句語法正確?是第一句。(如果你錯過了請再讀一遍!)

基本RNN不擅長捕獲長期依賴項,這是因為在反向傳播過程中,來自輸出Y的梯度將很難傳播回來,從而影響先期層的權(quán)重。因此,在基本RNN中,輸出受到更接近該單詞的那個輸入的影響。

為避免這種情況的發(fā)生,我們可以通過設(shè)置一個預(yù)先定義的閾值來對它們進行剪輯。

3.5 門控循環(huán)單元(GRU)

GRU是RNN的一種改進形式。它們在捕獲更長范圍的依賴關(guān)系方面非常有效,并且有助于解決梯度消失問題。在時間步長t中計算激活的公式為:

RNN的隱藏單元如下圖所示:

一個單元的輸入是來自前一個單元的激活和該時間步長的輸入字。在計算該步長的激活和輸出的時候,我們在這個RNN中添加一個存儲單元,以便記住當前單詞以外的單詞。來看看GRU的方程:

c = a

其中c是一個存儲單元。

在每個時間步長內(nèi),將c

這便是更新c值的候選值。我們還定義了一個更新門,利用這個門的值來決定是否更新存儲單元,更新門的方程為:

請注意,因為使用sigmoid來計算更新值,所以,更新門的輸出總是在0和1之間。我們使用先前的存儲單元值和更新門輸出來更新存儲單元。c的更新方程如下:

當門值為0時,c = c,即不更新c;;當門值為1時,c = c,對值進行更新。舉一個例子來理解這一概念:

當遇到cat這個詞時,門(gate)值為1;對于序列中的所有其他單詞,門(gate)值為0,因此cat的信息將被攜帶到單詞“was”。我們期望模型能預(yù)測到單詞were的地方應(yīng)該是was。

GRUS就是通過這種方式來助力于記憶長期依賴關(guān)系,下面是這個可視化工具,會有助于你理解GRU工作原理:

每個單元均有三個輸入:a, c 和x,以及三個輸出:a, c 和 y(hat)。

3.6 長期短期記憶(LSTM)

當前,LSTM在深度學習中非常流行。由于它們的復(fù)雜性,現(xiàn)在可能沒有很多工業(yè)應(yīng)用程序,但請相信我,它們很快就會出現(xiàn)。花點時間學習這個概念是值得的——將來它會派上用場。

為了更好地理解LSTM,讓我們一起回顧一下在GRU那個小節(jié)中看到的所有方程:

在計算c的相關(guān)性時,只是添加了一個門(gate),而這個門(gate)告訴我們c與c的更新值之間是如何相關(guān)的,對于GRUs來說, a = c。

LSTM是增強版的GRU,它的應(yīng)用更為普遍。LSTM的方程式為:

這和GRU的類似,對吧?我們只是使用a取代了c。更新門的公式也可以寫為:

在LSTM中,還有一個遺忘門和一個輸出門。這些門的方程與更新門的方程相類似:

最后,將c的值更新為:

下一層的激活將是:

你會使用哪種算法——GRU還是 LSTM?

每種算法都有各自的優(yōu)點。你會發(fā)現(xiàn):它們的準確度取決于你試圖解決的問題的類型。GRU的優(yōu)勢在于它有一個更簡捷的架構(gòu),因此我們可以用它來構(gòu)建一些大的模型,然而, LSTM則更為強大和有效,因為它有3個門。

3.7 雙向RNN

到目前為止,我們看到的RNN架構(gòu)只關(guān)注序列中先前的信息。如果我們的模型能夠同時考慮到序列的先前信息和后續(xù)信息,同時在特定的時間步長中進行預(yù)測,那會有多棒啊?

是的,這完全有可能做到!歡迎來到雙向RNN的世界。但是在介紹雙向RNN以及它們的工作原理之前,還是讓我們先看看為什么需要它。

來看看一個命名實體識別問題,我們想知道序列中的一個單詞是否代表一個人名。看看下面這個例子:

他說:“泰迪熊在打折!“

如果我們把這個句子輸入一個簡單的RNN,模型會預(yù)測“Teddy”是一個人的名字。它沒有考慮到這個詞后面會發(fā)生什么。通過雙向RNN,可以解決這個問題。

現(xiàn)在假設(shè)我們有一個4個單詞的輸入序列,雙向RNN看起來像:

利用以下公式,計算RNN單元的輸出:

同樣,可以有雙向GRU和雙向LSTM。使用雙向RNN的缺點是,在進行預(yù)測之前,必須先查看整個數(shù)據(jù)序列。但是,標準的B-RNN算法對于構(gòu)建和設(shè)計大多數(shù)NLP應(yīng)用程序時,效率是非常高的。

3.8 深度RNN

還記得深度神經(jīng)網(wǎng)絡(luò)的樣子嗎?

它有一個輸入層,一些隱藏層和一個輸出層。深度RNN也類似,它采用相似的網(wǎng)絡(luò)架構(gòu)并在時間軸上展開:

這里,激活函數(shù)的表示法如下:

假設(shè)需要計算a[2]<3> :

這是為深度RNN準備的。深呼吸,這些內(nèi)容是不是不難消化?后續(xù)請關(guān)注模塊2:自然語言處理(NLP)和單詞嵌入的學習!

譯者簡介

陳之炎,北京交通大學通信與控制工程專業(yè)畢業(yè),獲得工學碩士學位,歷任長城計算機軟件與系統(tǒng)公司工程師,大唐微電子公司工程師,現(xiàn)任北京吾譯超群科技有限公司技術(shù)支持。目前從事智能化翻譯教學系統(tǒng)的運營和維護,在人工智能深度學習和自然語言處理(NLP)方面積累有一定的經(jīng)驗。業(yè)余時間喜愛翻譯創(chuàng)作,翻譯作品主要有:IEC-ISO 7816、伊拉克石油工程項目、新財稅主義宣言等等,其中中譯英作品“新財稅主義宣言”在GLOBAL TIMES正式發(fā)表。能夠利用業(yè)余時間加入到THU 數(shù)據(jù)派平臺的翻譯志愿者小組,希望能和大家一起交流分享,共同進步

— 完 —

關(guān)注清華-青島數(shù)據(jù)科學研究院官方微信公眾平臺“THU數(shù)據(jù)派”及姊妹號“數(shù)據(jù)派THU”獲取更多講座福利及優(yōu)質(zhì)內(nèi)容。

總結(jié)

以上是生活随笔為你收集整理的rnn神经网络模型_一文读懂序列建模(deeplearning.ai)之循环神经网络(RNNs)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。