在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

PyTorch教程-9.4. 循環神經網絡

jf_pJlTbmA9 ? 來源:PyTorch ? 作者:PyTorch ? 2023-06-05 15:44 ? 次閱讀

在第 9.3 節中,我們描述了馬爾可夫模型和 n-grams 用于語言建模,其中 token 的條件概率xt在時間步t只取決于 n?1以前的令牌。如果我們想在時間步長之前合并標記的可能影響t?(n?1)在xt, 我們需要增加n. 然而,模型參數的數量也會隨之呈指數增長,因為我們需要存儲 |V|n詞匯集的數字 V. 因此,而不是建模 P(xt∣xt?1,…,xt?n+1)最好使用潛在變量模型:

(9.4.1)P(xt∣xt?1,…,x1)≈P(xt∣ht?1),

在哪里ht?1是一個隱藏狀態,存儲序列信息到時間步長t?1. 一般來說,任何時間步的隱藏狀態t可以根據當前輸入計算xt和之前的隱藏狀態ht?1:

(9.4.2)ht=f(xt,ht?1).

為了足夠強大的功能f在(9.4.2)中,潛變量模型不是近似值。畢竟, ht可以簡單地存儲到目前為止觀察到的所有數據。但是,它可能會使計算和存儲都變得昂貴。

回想一下,我們在第 5 節中討論了帶有隱藏單元的隱藏層 。值得注意的是,隱藏層和隱藏狀態指的是兩個截然不同的概念。如前所述,隱藏層是在從輸入到輸出的路徑上從視圖中隱藏的層。從技術上講,隱藏狀態是我們在給定步驟所做的任何事情的輸入,它們只能通過查看先前時間步驟的數據來計算。

遞歸神經網絡(RNN) 是具有隱藏狀態的神經網絡。在介紹 RNN 模型之前,我們首先重溫一下5.1 節介紹的 MLP 模型。

import torch
from d2l import torch as d2l

from mxnet import np, npx
from d2l import mxnet as d2l

npx.set_np()

import jax
from jax import numpy as jnp
from d2l import jax as d2l

No GPU/TPU found, falling back to CPU. (Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)

import tensorflow as tf
from d2l import tensorflow as d2l

9.4.1. 沒有隱藏狀態的神經網絡

讓我們看一下具有單個隱藏層的 MLP。令隱藏層的激活函數為?. 給定一小批示例X∈Rn×d批量大小 n和d輸入,隱藏層輸出 H∈Rn×h計算為

(9.4.3)H=?(XWxh+bh).

在(9.4.3)中,我們有權重參數 Wxh∈Rd×h, 偏置參數 bh∈R1×h, 以及隱藏單元的數量h, 對于隱藏層。因此, 在求和期間應用廣播(參見第 2.1.4 節)。接下來,隱藏層輸出H用作輸出層的輸入。輸出層由下式給出

(9.4.4)O=HWhq+bq,

在哪里O∈Rn×q是輸出變量,Whq∈Rh×q是權重參數,并且bq∈R1×q 是輸出層的偏置參數。如果是分類問題,我們可以使用softmax(O)計算輸出類別的概率分布。

這完全類似于我們之前在第 9.1 節中解決的回歸問題,因此我們省略了細節。只要說我們可以隨機選擇特征標簽對并通過自動微分和隨機梯度下降來學習我們網絡的參數就夠了。

9.4.2. 具有隱藏狀態的循環神經網絡

當我們有隱藏狀態時,事情就完全不同了。讓我們更詳細地看一下結構。

假設我們有一小批輸入 Xt∈Rn×d在時間步t. 換句話說,對于一個小批量n序列示例,每一行Xt對應于時間步長的一個例子 t從序列。接下來,表示為 Ht∈Rn×h時間步的隱藏層輸出t. 與MLP不同,這里我們保存隱藏層輸出Ht?1從上一個時間步引入一個新的權重參數 Whh∈Rh×h描述如何在當前時間步中使用上一個時間步的隱藏層輸出。具體來說,當前時間步的隱層輸出的計算是由當前時間步的輸入和上一時間步的隱層輸出共同決定的:

(9.4.5)Ht=?(XtWxh+Ht?1Whh+bh).

與(9.4.3)相比, (9.4.5)多了一項 Ht?1Whh從而實例化 (9.4.2)。從隱藏層輸出之間的關系 Ht和Ht?1相鄰時間步長,我們知道這些變量捕獲并保留了序列的歷史信息直到它們當前時間步長,就像神經網絡當前時間步長的狀態或記憶一樣。因此,這樣的隱藏層輸出稱為隱藏狀態。由于隱藏狀態在當前時間步中使用前一個時間步的相同定義,因此(9.4.5)的計算是 循環的。因此,正如我們所說,基于循環計算的具有隱藏狀態的神經網絡被稱為循環神經網絡。在 RNN 中執行(9.4.5)計算的層稱為循環層。

構建 RNN 有許多不同的方法。具有由(9.4.5)定義的隱藏狀態的 RNN非常常見。對于時間步t,輸出層的輸出類似于MLP中的計算:

(9.4.6)Ot=HtWhq+bq.

RNN 的參數包括權重 Wxh∈Rd×h,Whh∈Rh×h, 和偏差bh∈R1×h隱藏層的,連同權重 Whq∈Rh×q和偏見 bq∈R1×q的輸出層。值得一提的是,即使在不同的時間步長,RNN 也始終使用這些模型參數。因此,RNN 的參數化成本不會隨著時間步數的增加而增加。

圖 9.4.1說明了 RNN 在三個相鄰時間步的計算邏輯。隨時步t,隱藏狀態的計算可以被視為:(i)連接輸入 Xt在當前時間步t和隱藏狀態Ht?1在之前的時間步t?1; (ii) 將連接結果饋送到具有激活函數的全連接層?. 這樣一個全連接層的輸出就是隱藏狀態Ht當前時間步的t. 在這種情況下,模型參數是Wxh和Whh, 和一個偏差bh, 全部來自 (9.4.5)。當前時間步的隱藏狀態 t,Ht, 將參與計算隱藏狀態Ht+1下一個時間步t+1. 更,Ht也將被送入全連接輸出層計算輸出Ot當前時間步的t.

pYYBAGR9NnGAUPNMAAG5HkR3Kk0301.svg

圖 9.4.1具有隱藏狀態的 RNN。

我們剛剛提到計算 XtWxh+Ht?1Whh 對于隱藏狀態相當于矩陣乘法的串聯Xt和Ht?1和串聯Wxh和Whh. 雖然這可以在數學上得到證明,但在下文中我們僅使用一個簡單的代碼片段來說明這一點。首先,我們定義矩陣 X、W_xh、H和W_hh,其形狀分別為 (3, 1)、(1, 4)、(3, 4) 和 (4, 4)。分別乘以X和,然后將這兩個乘法相加,我們得到形狀為 (3, 4) 的W_xh矩陣 H。W_hh

X, W_xh = torch.randn(3, 1), torch.randn(1, 4)
H, W_hh = torch.randn(3, 4), torch.randn(4, 4)
torch.matmul(X, W_xh) + torch.matmul(H, W_hh)

tensor([[-1.6464, -8.4141, 1.5096, 3.9953],
    [-1.2590, -0.2353, 2.5025, 0.2107],
    [-2.5954, 0.8102, -1.3280, -1.1265]])

X, W_xh = np.random.randn(3, 1), np.random.randn(1, 4)
H, W_hh = np.random.randn(3, 4), np.random.randn(4, 4)
np.dot(X, W_xh) + np.dot(H, W_hh)

array([[-0.21952915, 4.256434 , 4.5812645 , -5.344988 ],
    [ 3.447858 , -3.0177274 , -1.6777471 , 7.535347 ],
    [ 2.2390068 , 1.4199957 , 4.744728 , -8.421293 ]])

X, W_xh = jax.random.normal(d2l.get_key(), (3, 1)), jax.random.normal(
                            d2l.get_key(), (1, 4))
H, W_hh = jax.random.normal(d2l.get_key(), (3, 4)), jax.random.normal(
                            d2l.get_key(), (4, 4))
jnp.matmul(X, W_xh) + jnp.matmul(H, W_hh)

Array([[-4.9585376 , -2.7011836 , 2.6214707 , 0.4295503 ],
    [ 0.85284555, 1.0258489 , -0.01304248, -0.08559555],
    [ 4.970079 , 1.1702325 , -3.1437514 , -2.7272367 ]],   dtype=float32)

X, W_xh = tf.random.normal((3, 1)), tf.random.normal((1, 4))
H, W_hh = tf.random.normal((3, 4)), tf.random.normal((4, 4))
tf.matmul(X, W_xh) + tf.matmul(H, W_hh)


現在我們連接矩陣X和H列(軸 1),以及矩陣W_xh和W_hh行(軸 0)。這兩個串聯分別產生形狀為 (3, 5) 和形狀 (5, 4) 的矩陣。將這兩個級聯矩陣相乘,我們得到與上面相同的形狀 (3, 4) 的輸出矩陣。

torch.matmul(torch.cat((X, H), 1), torch.cat((W_xh, W_hh), 0))

tensor([[-1.6464, -8.4141, 1.5096, 3.9953],
    [-1.2590, -0.2353, 2.5025, 0.2107],
    [-2.5954, 0.8102, -1.3280, -1.1265]])

np.dot(np.concatenate((X, H), 1), np.concatenate((W_xh, W_hh), 0))

array([[-0.21952918, 4.256434 , 4.5812645 , -5.344988 ],
    [ 3.4478583 , -3.0177271 , -1.677747 , 7.535347 ],
    [ 2.2390068 , 1.4199957 , 4.744728 , -8.421294 ]])

jnp.matmul(jnp.concatenate((X, H), 1), jnp.concatenate((W_xh, W_hh), 0))

Array([[-4.9585376 , -2.7011836 , 2.6214707 , 0.4295503 ],
    [ 0.85284555, 1.0258489 , -0.01304245, -0.08559557],
    [ 4.9700794 , 1.1702325 , -3.1437514 , -2.7272365 ]],   dtype=float32)

tf.matmul(tf.concat((X, H), 1), tf.concat((W_xh, W_hh), 0))


9.4.3. 基于 RNN 的字符級語言模型

回想一下9.3 節中的語言建模,我們的目標是根據當前和過去的標記預測下一個標記,因此我們將原始序列移動一個標記作為目標(標簽)。 本吉奧等。( 2003 )首次提出使用神經網絡進行語言建模。在下文中,我們將說明如何使用 RNN 來構建語言模型。設小批量大小為 1,文本序列為“機器”。為了簡化后續部分的訓練,我們將文本標記為字符而不是單詞,并考慮字符級語言模型。 圖 9.4.2演示了如何通過用于字符級語言建模的 RNN 基于當前字符和先前字符預測下一個字符。

poYBAGR9NniAeXAMAAGa8kfwFiA068.svg

圖 9.4.2基于 RNN 的字符級語言模型。輸入和目標序列分別是“機器”和“機器”。

在訓練過程中,我們對每個時間步的輸出層的輸出進行 softmax 操作,然后使用交叉熵損失來計算模型輸出與目標之間的誤差。由于隱藏層中隱藏狀態的循環計算,圖 9.4.2中時間步長 3 的輸出, O3, 由文本序列“m”、“a”和“c”確定。由于訓練數據中序列的下一個字符是“h”,時間步長3的損失將取決于基于特征序列“m”、“a”、“c”和“c”生成的下一個字符的概率分布這個時間步長的目標“h”。

實際上,每個標記都由一個d維向量,我們使用批量大小n>1. 因此,輸入 Xt在時間步t將是一個n×d 矩陣,這與我們在 第 9.4.2 節中討論的相同。

在接下來的部分中,我們將為字符級語言模型實現 RNN。

9.4.4. 概括

對隱藏狀態使用循環計算的神經網絡稱為循環神經網絡 (RNN)。RNN 的隱藏狀態可以捕獲序列到當前時間步的歷史信息。通過循環計算,RNN 模型參數的數量不會隨著時間步數的增加而增加。至于應用程序,RNN 可用于創建字符級語言模型。

9.4.5. 練習

如果我們使用循環神經網絡來預測文本序列中的下一個字符,那么任何輸出所需的維度是多少?

為什么 RNN 可以基于文本序列中所有先前的標記來表達某個標記在某個時間步的條件概率?

如果反向傳播一個長序列,梯度會發生什么變化?

與本節中描述的語言模型相關的一些問題是什么?

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 神經網絡
    +關注

    關注

    42

    文章

    4776

    瀏覽量

    100952
  • pytorch
    +關注

    關注

    2

    文章

    808

    瀏覽量

    13283
收藏 人收藏

    評論

    相關推薦

    循環神經網絡是如何工作的

    關于時間展開的循環神經網絡,在序列結束時具有單個輸出。
    發表于 07-05 14:44 ?1167次閱讀
    <b class='flag-5'>循環</b><b class='flag-5'>神經網絡</b>是如何工作的

    PyTorch教程之循環神經網絡

    電子發燒友網站提供《PyTorch教程之循環神經網絡.pdf》資料免費下載
    發表于 06-05 09:52 ?0次下載
    <b class='flag-5'>PyTorch</b>教程之<b class='flag-5'>循環</b><b class='flag-5'>神經網絡</b>

    PyTorch教程10.3之深度遞歸神經網絡

    電子發燒友網站提供《PyTorch教程10.3之深度遞歸神經網絡.pdf》資料免費下載
    發表于 06-05 15:12 ?0次下載
    <b class='flag-5'>PyTorch</b>教程10.3之深度遞歸<b class='flag-5'>神經網絡</b>

    使用PyTorch構建神經網絡

    PyTorch是一個流行的深度學習框架,它以其簡潔的API和強大的靈活性在學術界和工業界得到了廣泛應用。在本文中,我們將深入探討如何使用PyTorch構建神經網絡,包括從基礎概念到高級特性的全面解析。本文旨在為讀者提供一個完整的
    的頭像 發表于 07-02 11:31 ?743次閱讀

    卷積神經網絡循環神經網絡的區別

    在深度學習領域,卷積神經網絡(Convolutional Neural Networks, CNN)和循環神經網絡(Recurrent Neural Networks, RNN)是兩種極其重要
    的頭像 發表于 07-03 16:12 ?3567次閱讀

    循環神經網絡和遞歸神經網絡的區別

    循環神經網絡(Recurrent Neural Network,簡稱RNN)和遞歸神經網絡(Recursive Neural Network,簡稱RvNN)是深度學習中兩種重要的神經網絡
    的頭像 發表于 07-04 14:19 ?961次閱讀

    循環神經網絡和卷積神經網絡的區別

    循環神經網絡(Recurrent Neural Network,RNN)和卷積神經網絡(Convolutional Neural Network,CNN)是深度學習領域中兩種非常重要的神經網絡
    的頭像 發表于 07-04 14:24 ?1400次閱讀

    循環神經網絡的基本原理是什么

    循環神經網絡(Recurrent Neural Network,簡稱RNN)是一種具有短期記憶功能的神經網絡,它能夠處理序列數據,如時間序列、文本序列等。與傳統的前饋神經網絡不同,RN
    的頭像 發表于 07-04 14:26 ?707次閱讀

    循環神經網絡的基本概念

    循環神經網絡(Recurrent Neural Network,簡稱RNN)是一種具有循環結構的神經網絡,其核心思想是將前一個時間步的輸出作為下一個時間步的輸入,從而實現對序列數據的建
    的頭像 發表于 07-04 14:31 ?761次閱讀

    循環神經網絡算法原理及特點

    循環神經網絡(Recurrent Neural Network,簡稱RNN)是一種具有記憶功能的神經網絡,能夠處理序列數據。與傳統的前饋神經網絡(Feedforward Neural
    的頭像 發表于 07-04 14:49 ?781次閱讀

    遞歸神經網絡循環神經網絡

    遞歸神經網絡(Recurrent Neural Network,簡稱RNN)和循環神經網絡(Recurrent Neural Network,簡稱RNN)實際上是同一個概念,只是不同的翻譯方式
    的頭像 發表于 07-04 14:54 ?827次閱讀

    遞歸神經網絡循環神經網絡一樣嗎

    遞歸神經網絡(Recursive Neural Network,RvNN)和循環神經網絡(Recurrent Neural Network,RNN)是兩種不同類型的神經網絡結構,它們在
    的頭像 發表于 07-05 09:28 ?943次閱讀

    rnn是遞歸神經網絡還是循環神經網絡

    RNN(Recurrent Neural Network)是循環神經網絡,而非遞歸神經網絡循環神經網絡是一種具有時間序列特性的
    的頭像 發表于 07-05 09:52 ?610次閱讀

    PyTorch神經網絡模型構建過程

    PyTorch,作為一個廣泛使用的開源深度學習庫,提供了豐富的工具和模塊,幫助開發者構建、訓練和部署神經網絡模型。在神經網絡模型中,輸出層是尤為關鍵的部分,它負責將模型的預測結果以合適的形式輸出。以下將詳細解析
    的頭像 發表于 07-10 14:57 ?530次閱讀

    pytorch中有神經網絡模型嗎

    當然,PyTorch是一個廣泛使用的深度學習框架,它提供了許多預訓練的神經網絡模型。 PyTorch中的神經網絡模型 1. 引言 深度學習是一種基于人工
    的頭像 發表于 07-11 09:59 ?733次閱讀
    主站蜘蛛池模板: 经典三级影院| 岛国一级毛片| 素股中文字幕| 性无码专区无码| 国产精品日韩欧美亚洲另类| 午夜免费看片| 天天拍天天射| 欧美一级在线观看视频| 免费看三级黄色片| 国产99色| 好男人午夜| 91成人午夜性a一级毛片| 红色一级毛片| bt天堂在线www中文在线| 天天插天天操天天干| 国产全部理论片线观看| qvod高清在线成人观看| 最新国产在线播放| 色婷婷中文字幕| 久久综合色婷婷| 你懂的在线视频观看| 日本欧美色图| 日本色婷婷| 国内亚州视频在线观看| 精品一区二区三区免费爱 | 亚洲成a人片8888kkkk| 久热精品视频| 天天天综合| 亚洲第一区视频在线观看| 97蜜桃| luxu259在线中文字幕| 天天射干| 好大好猛好爽好深视频免费| 国产美女精品久久久久中文 | 亚洲最色网| 91久久麻豆| 欧美高清免费一级在线| 2021韩国理论片ok电影天堂 | 夜夜爱网站| 4438x五月天| 性中国videosex国产孕妇|