DeepLearning.ai 提煉筆記(5-1)-- 循環神經網絡

參考博客

Class 5: 序列模型Sequence Models

Week 1: 循環神經網絡RNN (Recurrent)

文章目錄

  • Class 5: 序列模型Sequence Models
  • Week 1: 循環神經網絡RNN (Recurrent)
  • 目錄
    • 序列模型-循環神經網絡
      • 1.序列模型的應用
      • 2.數學符號
      • 3.循環神經網絡模型
        • 傳統標準的神經網絡
        • 循環神經網絡的前向傳播
      • 4.穿越時間的反向傳播
      • 5.不同類型的RNN
      • 6.語言模型和序列生成
        • 什么是語言模型
      • 7.新序列采樣
      • 8.RNN的梯度消失
      • 9.GRU單元
      • 10.LSTM
      • 11. 雙向RNN
      • 12.深層RNN

目錄

本課程將教你如何建立自然語言,音頻和其他序列數據的模型。 由于深入的學習,序列算法的運行速度遠遠超過兩年前,這使得語音識別,音樂合成,聊天機器人,機器翻譯,自然語言理解等許多令人興奮的應用成為可能。

通過本課程你將學到

  • 了解常見的序列模型是如何創建的
  • 能夠知道如何選擇常見的序列模型,并知道如何訓練他們
  • 知道如何將序列模型應用在常見的應用上,如:文本的翻譯,自然語言處理,文本的合成等等

序列模型-循環神經網絡

1.序列模型的應用

循環神經網絡(RNN)之類的模型在語音識別、自然語言處理和其他領域中引起變革。

  • 語音識別:將輸入的語音信號直接輸出相應的語音文本信息。無論是語音信號還是文本信息均是序列數據。
  • 音樂生成:生成音樂樂譜。只有輸出的音樂樂譜是序列數據,輸入可以是空或者一個整數。
  • 情感分類:將輸入的評論句子轉換為相應的等級或評分。輸入是一個序列,輸出則是一個單獨的類別。
  • DNA序列分析:找到輸入的DNA序列的蛋白質表達的子序列。
  • 機器翻譯:兩種不同語言之間的想換轉換。輸入和輸出均為序列數據。
  • 視頻行為識別:識別輸入的視頻幀序列中的人物行為。
  • 命名實體識別:從輸入的句子中識別實體的名字
    在這里插入圖片描述
  • 在進行語音識別時,給定了一個輸入音頻片段 ,并要求輸出對應的文字記錄 。這個例子里輸入和輸出數據都是序列模型,因為 是一個按時播放的音頻片段,輸出 是一系列單詞。所以之后將要學到的一些序列模型,如循環神經網絡等等在語音識別方面是非常有用的。
  • 音樂生成問題是使用序列數據的另一個例子,在這個例子中,只有輸出數據 是序列,而輸入數據可以是空集,也可以是個單一的整數,這個數可能指代你想要生成的音樂風格,也可能是你想要生成的那首曲子的頭幾個音符。輸入的 可以是空的,或者就是個數字,然后輸出序列 。
  • 在處理情感分類時,輸入數據 是序列,你會得到類似這樣的輸入:“There is nothing to like in this movie.”,你認為這句評論對應幾星?
  • 序列模型在DNA序列分析中也十分有用,你的DNA可以用A、C、G、T四個字母來表示。所以給定一段DNA序列,你能夠標記出哪部分是匹配某種蛋白質的嗎?
  • 在機器翻譯過程中,你會得到這樣的輸入句:“Voulez-vou chante avecmoi?”(法語:要和我一起唱么?),然后要求你輸出另一種語言的翻譯結果。
  • 在進行視頻行為識別時,你可能會得到一系列視頻幀,然后要求你識別其中的行為。
  • 在進行命名實體識別時,可能會給定一個句子要你識別出句中的人名。

所以這些問題都可以被稱作使用標簽數據 作為訓練集的監督學習。但從這一系列例子中你可以看出序列問題有很多不同類型。有些問題里,輸入數據 和輸出數據都是序列,但就算在那種情況下,和有時也會不一樣長。或者像上圖編號1所示和上圖編號2的和有相同的數據長度。在另一些問題里,只有 或者只有是序列。

2.數學符號

本節先從定義符號開始一步步構建序列模型。
在這里插入圖片描述

比如說你想要建立一個序列模型,它的輸入語句是這樣的:“Harry Potter and Herminoe Granger invented a new spell.”,(這些人名都是出自于J.K.Rowling筆下的系列小說Harry Potter)。假如你想要建立一個能夠自動識別句中人名位置的序列模型,那么這就是一個命名實體識別問題,這常用于搜索引擎,比如說索引過去24小時內所有新聞報道提及的人名,用這種方式就能夠恰當地進行索引。命名實體識別系統可以用來查找不同類型的文本中的人名、公司名、時間、地點、國家名和貨幣名等等。
在這里插入圖片描述
現在給定這樣的輸入數據,假如你想要一個序列模型輸出,使得輸入的每個單詞都對應一個輸出值,同時這個能夠表明輸入的單詞是否是人名的一部分。技術上來說這也許不是最好的輸出形式,還有更加復雜的輸出形式,它不僅能夠表明輸入詞是否是人名的一部分,它還能夠告訴你這個人名在這個句子里從哪里開始到哪里結束。比如Harry Potter(上圖編號1所示)、Hermione Granger(上圖標號2所示)。

更簡單的那種輸出形式:

這個輸入數據是9個單詞組成的序列,所以最終我們會有9個特征集和來表示這9個單詞,并按序列中的位置進行索引,、、等等一直到來索引不同的位置,我將用來索引這個序列的中間位置。意味著它們是時序序列,但不論是否是時序序列,我們都將用來索引序列中的位置。

輸出數據也是一樣,我們還是用、、等等一直到來表示輸出數據。同時我們用來表示輸入序列的長度,這個例子中輸入是9個單詞,所以。我們用來表示輸出序列的長度。在這個例子里,上個視頻里你知道和可以有不同的值。

你應該記得我們之前用的符號,我們用來表示第個訓練樣本,所以為了指代第個元素,或者說是訓練樣本i的序列中第個元素用這個符號來表示。如果是序列長度,那么你的訓練集里不同的訓練樣本就會有不同的長度,所以就代表第個訓練樣本的輸入序列長度。同樣代表第個訓練樣本中第個元素,就是第個訓練樣本的輸出序列的長度。

所以在這個例子中,,但如果另一個樣本是由15個單詞組成的句子,那么對于這個訓練樣本,。

既然我們這個例子是NLP,也就是自然語言處理,這是我們初次涉足自然語言處理,一件我們需要事先決定的事是怎樣表示一個序列里單獨的單詞,你會怎樣表示像Harry這樣的單詞,實際應該是什么?

接下來我們討論一下怎樣表示一個句子里單個的詞。想要表示一個句子里的單詞,第一件事是做一張詞表,有時也稱為詞典,意思是列一列你的表示方法中用到的單詞。這個詞表(下圖所示)中的第一個詞是a,也就是說詞典中的第一個單詞是a,第二個單詞是Aaron,然后更下面一些是單詞and,再后面你會找到Harry,然后找到Potter,這樣一直到最后,詞典里最后一個單詞可能是Zulu。
在這里插入圖片描述
因此a是第一個單詞,Aaron是第二個單詞,在這個詞典里,and出現在367這個位置上,Harry是在4075這個位置,Potter在6830,詞典里的最后一個單詞Zulu可能是第10,000個單詞。所以在這個例子中我用了10,000個單詞大小的詞典,這對現代自然語言處理應用來說太小了。對于商業應用來說,或者對于一般規模的商業應用來說30,000到50,000詞大小的詞典比較常見,但是100,000詞的也不是沒有,而且有些大型互聯網公司會用百萬詞,甚至更大的詞典。許多商業應用用的詞典可能是30,000詞,也可能是50,000詞。不過我將用10,000詞大小的詞典做說明,因為這是一個很好用的整數。

如果你選定了10,000詞的詞典,構建這個詞典的一個方法是遍歷你的訓練集,并且找到前10,000個常用詞,你也可以去瀏覽一些網絡詞典,它能告訴你英語里最常用的10,000個單詞,接下來你可以用one-hot表示法來表示詞典里的每個單詞。

舉個例子,在這里表示Harry這個單詞,它就是一個第4075行是1,其余值都是0的向量(上圖編號1所示),因為那是Harry在這個詞典里的位置。

同樣是個第6830行是1,其余位置都是0的向量(上圖編號2所示)。

and在詞典里排第367,所以就是第367行是1,其余值都是0的向量(上圖編號3所示)。如果你的詞典大小是10,000的話,那么這里的每個向量都是10,000維的。

因為a是字典第一個單詞,對應a,那么這個向量的第一個位置為1,其余位置都是0的向量(上圖編號4所示)。

所以這種表示方法中,指代句子里的任意詞,它就是個one-hot向量,因為它只有一個值是1,其余值都是0,所以你會有9個one-hot向量來表示這個句中的9個單詞,目的是用這樣的表示方式表示,用序列模型在和目標輸出之間學習建立一個映射。我會把它當作監督學習的問題,我確信會給定帶有標簽的數據。

那么還剩下最后一件事,我們將在之后的視頻討論,如果你遇到了一個不在你詞表中的單詞,答案就是創建一個新的標記,也就是一個叫做Unknow Word的偽造單詞,用作為標記,來表示不在詞表中的單詞,我們之后會討論更多有關這個的內容。

總結一下本節課的內容,我們描述了一套符號用來表述你的訓練集里的序列數據和,在下節課我們開始講述循環神經網絡中如何構建到的映射。

3.循環神經網絡模型

傳統標準的神經網絡

對于學習X和Y的映射,我們可以很直接的想到一種方法就是使用傳統的標準神經網絡。也許我們可以將輸入的序列X以某種方式進行字典編碼以后,如one-hot編碼,輸入到一個多層的深度神經網絡中,最后得到對應的輸出Y。如下圖所示:
在這里插入圖片描述
但是,結果表明這種方法并不好,主要是存在下面兩個問題:

一、是輸入和輸出數據在不同例子中可以有不同的長度,不是所有的例子都有著同樣輸入長度或是同樣輸出長度的。即使每個句子都有最大長度,也許你能夠填充(pad)或零填充(zero pad)使每個輸入語句都達到最大長度,但仍然看起來不是一個好的表達方式。

二、一個像這樣單純的神經網絡結構,它并不共享從文本的不同位置上學到的特征。具體來說,如果神經網絡已經學習到了在位置1出現的Harry可能是人名的一部分,那么如果Harry出現在其他位置,比如時,它也能夠自動識別其為人名的一部分的話,這就很棒了。這可能類似于你在卷積神經網絡中看到的,你希望將部分圖片里學到的內容快速推廣到圖片的其他部分,而我們希望對序列數據也有相似的效果。和你在卷積網絡中學到的類似,用一個更好的表達方式也能夠讓你減少模型中參數的數量。

之前我們提到過這些(上圖編號1所示的…………)都是10,000維的one-hot向量,因此這會是十分龐大的輸入層。如果總的輸入大小是最大單詞數乘以10,000,那么第一層的權重矩陣就會有著巨量的參數。但循環神經網絡就沒有上述的兩個問題。

循環神經網絡作為一種新型的網絡結構,在處理序列數據問題上則不存在上面的兩個缺點。在每一個時間步中,循環神經網絡會傳遞一個激活值到下一個時間步中,用于下一時間步的計算。如下圖所示:

在這里插入圖片描述
這里需要注意在零時刻,我們需要編造一個激活值,通常輸入一個零向量,有的研究人員會使用隨機的方法對該初始激活向量進行初始化。同時,上圖中右邊的循環神經網絡的繪制結構與左邊是等價的。

循環神經網絡是從左到右掃描數據的,同時共享每個時間步的參數。

在這里插入圖片描述

上述循環神經網絡結構的缺點:每個預測輸出y^t僅使用了前面的輸入信息,而沒有使用后面的信息。Bidirectional RNN(雙向循環神經網絡)可以解決這種存在的缺點。

循環神經網絡的前向傳播

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

RNN前向傳播示意圖:
在這里插入圖片描述

4.穿越時間的反向傳播

之前我們已經學過了循環神經網絡的基礎結構,在本節視頻中我們將來了解反向傳播是怎樣在循環神經網絡中運行的。和之前一樣,當你在編程框架中實現循環神經網絡時,編程框架通常會自動處理反向傳播。但我認為,在循環神經網絡中,對反向傳播的運行有一個粗略的認識還是非常有用的,讓我們來一探究竟

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

5.不同類型的RNN

對于RNN,不同的問題需要不同的輸入輸出結構。

#### 多對多()
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

6.語言模型和序列生成

在自然語言處理中,構建語言模型是最基礎的也是最重要的工作之一,并且能用RNN很好地實現。

什么是語言模型

對于下面的例子,兩句話有相似的發音,但是想表達的意義和正確性卻不相同,如何讓我們的構建的語音識別系統能夠輸出正確地給出想要的輸出。也就是對于語言模型來說,從輸入的句子中,評估各個句子中各個單詞出現的可能性,進而給出整個句子出現的可能性。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

7.新序列采樣

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

8.RNN的梯度消失

在這里插入圖片描述
在這里插入圖片描述
對于梯度消失問題,在RNN的結構中是我們首要關心的問題,也更難解決;雖然梯度爆炸在RNN中也會出現,但對于梯度爆炸問題,因為參數會指數級的梯度,會讓我們的網絡參數變得很大,得到很多的Nan或者數值溢出,所以梯度爆炸是很容易發現的,我們的解決方法就是用梯度修剪,也就是觀察梯度向量,如果其大于某個閾值,則對其進行縮放,保證它不會太大。

9.GRU單元

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

10.LSTM

GRU能夠讓我們在序列中學習到更深的聯系,長短期記憶(long short-term memory, LSTM)對捕捉序列中更深層次的聯系要比GRU更加有效。
在這里插入圖片描述
在這里插入圖片描述

11. 雙向RNN

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

12.深層RNN

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445434.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445434.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445434.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

常見人工智能比賽平臺總結

目錄1.kaggle比賽1.1 kaggle比賽是什么?1.2 為什么舉辦kaggle比賽?1.3 kaggle比賽形式是什么?1.4 kaggle比賽的獎勵制度是什么?2.阿里天池比賽2.1 阿里天池比賽是什么?2.2 為什么舉辦阿里天池比賽?2.3 阿里…

機器學習模型評分總結(sklearn)

文章目錄目錄模型評估評價指標1.分類評價指標acc、recall、F1、混淆矩陣、分類綜合報告1.準確率方式一:accuracy_score方式二:metrics2.召回率3.F1分數4.混淆矩陣5.分類報告6.kappa scoreROC1.ROC計算2.ROC曲線3.具體實例2.回歸評價指標3.聚類評價指標1.…

kaggle (02) - 房價預測案例(進階版)

房價預測案例(進階版) 這是進階版的notebook。主要是為了比較幾種模型框架。所以前面的特征工程部分內容,我也并沒有做任何改動,重點都在后面的模型建造section Step 1: 檢視源數據集 import numpy as np import pandas as pd讀…

《Head First設計模式》第二章筆記 觀察者模式

背景 客戶有一個WeatherData對象,負責追蹤溫度、濕度和氣壓等數據。現在客戶給我們提了個需求,讓我們利用WeatherData對象取得數據,并更新三個布告板:目前狀況、氣象統計和天氣預報。 WeatherData對象提供了4個接口: …

libsvm總結

1. 訓練 格式:model libsvmtrain(training_label_vector, training_instance_matrix [, libsvm_options]); 這個函數有三個參數,其中 -training_label_vector:訓練樣本的類標,如果有m個樣本,就是m x 1的矩陣(類型必須…

《Head First設計模式》第三章筆記 裝飾者模式

裝飾者模式(Decorator Pattern) *利用組合(composition)和委托(delegation)可以在運行時實現繼承行為的效果,動態地給對象加上新的行為。 *利用繼承擴展子類的行為,是在編譯時靜態決定的&#x…

機器學習中如何解決數據不平衡問題?

文章目錄目錄什么是數據不平衡問題?數據不平衡會造成什么影響?如何處理數據不平衡問題?1、重新采樣訓練集1.1隨機欠抽樣1.2.基于聚類的過采樣2.使用K-fold交叉驗證3.轉化為一分類問題4.組合不同的重采樣數據集5.用不同比例重新采樣6.多模型Ba…

《Head First設計模式》第四章筆記 工廠模式

之前我們一直在使用new操作符,但是實例化這種行為并不應該總是公開的進行,而且初始化經常會造成耦合問題,工廠模式將擺脫這種復雜的依賴,本次內容包括簡單工廠,工廠方法和抽象工廠三種情況。 1 2 3 4 5 6 Duck duck&a…

《Head First設計模式》第五章筆記-單件模式

單件模式 定義:確保一個類只有一個實例,并提供全局訪問點。 編寫格式: 1 2 3 4 5 6 public class MyClass{ private MyClass(){}//構造方法私有化 public static MyClass getInstance(){ //提供全局訪問點 return new My…

處理機器學習大數據的7種方法

文章目錄目錄1.分配更多的內存2.使用較小的樣本3.將數據提交至服務器上4.更改數據格式5.使用數據流方式或者逐行讀入的方法6.使用關系數據庫7.使用大數據平臺目錄 在實際的生產過程中,我們經常會遇到數據文件太大,而無法直接讀入到計算機中進行處理&…

《Head First設計模式》第六章筆記-命令模式

封裝調用-命令模式 命令模式可將“動作的請求者”從“動作的執行者”對象中解耦。 本篇中將不再描述書中所引入的“巴斯特家電自動化公司”的遙控器控制案例,而使用簡單易懂的餐廳案例。 在開始之前,讓我們通過一個現實中的例子來了解命令模式。 理解…

kaggle(04)---avazu_ctr_predictor(baseline)

比賽的目的: 通過分析網上的系統日志和用戶行為信息,來預測某些網頁上項目的點擊率。是一個二分類的問題,只需要預測出用戶是否點擊即可最好能夠輸出某個概率,比如:用戶點擊某個廣告的概率。 比賽官網 文件信息&…

一文讀懂機器學習庫graphLab

文章目錄目錄什么是graphlab為什么使用graphlab?如何安裝graphlab?graphlab的簡單使用。目錄 什么是graphlab GraphLab 是由CMU(卡內基梅隆大學)的Select 實驗室在2010 年提出的一個基于圖像處理模型的開源圖計算框架,框架使用C語言開發實…

《Head First設計模式》第七章-適配器模式、外觀模式

適配器模式 適配器模式是什么,你一定不難理解,因為現實中到處都是。比如說: 如果你需要在歐洲國家使用美國制造的筆記本電腦,你可能需要使用一個交流電的適配器…… 當你不想改變現有的代碼,解決接口不適配問題&#…

《Head First設計模式》第八章筆記-模板方法模式

模板方法模式 之前所學習的模式都是圍繞著封裝進行,如對象創建、方法調用、復雜接口的封裝等,這次的模板方法模式將深入封裝算法塊,好讓子類可以在任何時候都將自己掛接進運算里。 模板方法定義:模板方法模式在一個方法中定義一…

機器學習基礎-吳恩達-coursera-(第一周學習筆記)----Introduction and Linear Regression

課程網址:https://www.coursera.org/learn/machine-learning Week 1 —— Introduction and Linear Regression 目錄 Week 1 Introduction and Linear Regression目錄一 介紹1-1 機器學習概念及應用1-2 機器學習分類 二 單變量的線性回歸2-1 假設函數hypothesis2…

常見8種機器學習算法總結

簡介 機器學習算法太多了,分類、回歸、聚類、推薦、圖像識別領域等等,要想找到一個合適算法真的不容易,所以在實際應用中,我們一般都是采用啟發式學習方式來實驗。通常最開始我們都會選擇大家普遍認同的算法,諸如SVM&a…

redis——數據結構(字典、鏈表、字符串)

1 字符串 redis并未使用傳統的c語言字符串表示,它自己構建了一種簡單的動態字符串抽象類型。 在redis里,c語言字符串只會作為字符串字面量出現,用在無需修改的地方。 當需要一個可以被修改的字符串時,redis就會使用自己實現的S…

Hotspot虛擬機的對象

創建 Step1:類加載檢查 虛擬機遇到一條 new 指令時,首先將去檢查這個指令的參數是否能在常量池中定位到這個類的符號引用,并且檢查這個符號引用代表的類是否已被加載過、解析和初始化過。如果沒有,那必須先執行相應的類加載過程。 Step2:分…

劍指offer(刷題1-10)--c++,Python版本

文章目錄目錄第一題:解題思路:代碼實現:c順序查找二分查找Python第二題:解題思路:代碼實現:cpython第三題:解題思路:代碼實現:c使用棧輔助反轉鏈表python第四題&#xff…