【自然語言處理(NLP)】深度循環神經網絡(Deep Recurrent Neural Network,DRNN)原理和實現

文章目錄

  • 介紹
  • 深度循環神經網絡(DRNN)原理和實現
    • 結構特點
    • 工作原理
      • 符號含義
      • 公式含義
    • 應用領域
    • 優勢與挑戰
    • DRNN 代碼實現

個人主頁:道友老李
歡迎加入社區:道友老李的學習社區

介紹

**自然語言處理(Natural Language Processing,NLP)**是計算機科學領域與人工智能領域中的一個重要方向。它研究的是人類(自然)語言與計算機之間的交互。NLP的目標是讓計算機能夠理解、解析、生成人類語言,并且能夠以有意義的方式回應和操作這些信息。

NLP的任務可以分為多個層次,包括但不限于:

  1. 詞法分析:將文本分解成單詞或標記(token),并識別它們的詞性(如名詞、動詞等)。
  2. 句法分析:分析句子結構,理解句子中詞語的關系,比如主語、謂語、賓語等。
  3. 語義分析:試圖理解句子的實際含義,超越字面意義,捕捉隱含的信息。
  4. 語用分析:考慮上下文和對話背景,理解話語在特定情境下的使用目的。
  5. 情感分析:檢測文本中表達的情感傾向,例如正面、負面或中立。
  6. 機器翻譯:將一種自然語言轉換為另一種自然語言。
  7. 問答系統:構建可以回答用戶問題的系統。
  8. 文本摘要:從大量文本中提取關鍵信息,生成簡短的摘要。
  9. 命名實體識別(NER):識別文本中提到的特定實體,如人名、地名、組織名等。
  10. 語音識別:將人類的語音轉換為計算機可讀的文字格式。

NLP技術的發展依賴于算法的進步、計算能力的提升以及大規模標注數據集的可用性。近年來,深度學習方法,特別是基于神經網絡的語言模型,如BERT、GPT系列等,在許多NLP任務上取得了顯著的成功。隨著技術的進步,NLP正在被應用到越來越多的領域,包括客戶服務、智能搜索、內容推薦、醫療健康等。

深度循環神經網絡(DRNN)原理和實現

深度循環神經網絡(Deep Recurrent Neural Network,DRNN)是在循環神經網絡(RNN)基礎上發展而來的一種深度學習模型。

結構特點

  • 多層循環結構:普通的RNN通常只有一層循環層,而DRNN包含多個循環層堆疊在一起。每一層循環層都可以學習到不同層次和粒度的序列特征。底層的循環層可以捕捉到序列中的局部短期依賴關系,隨著層數的增加,高層的循環層能夠逐漸提取出更抽象、更長期的依賴關系。
  • 豐富的連接方式:除了循環層之間的堆疊,DRNN還可以有多種連接方式。例如,每一層循環層的輸出可以直接連接到下一層循環層的輸入,也可以采用跳躍連接的方式,將底層循環層的輸出直接連接到高層循環層,甚至可以連接到輸出層,這種連接方式有助于信息的快速傳遞和融合,增強模型的表達能力。

工作原理

  • 信息傳遞與處理:在每個時間步,DRNN的每一層循環單元都會接收當前的輸入以及上一層循環單元在前一個時間步的隱藏狀態。然后,通過特定的計算(如矩陣乘法和非線性激活函數)來更新當前層的隱藏狀態。這個過程在所有的時間步和所有的循環層中依次進行,使得模型能夠對序列中的信息進行逐步深入的處理和分析。
  • 梯度傳播與學習:在訓練過程中,DRNN使用時間反向傳播算法(BPTT)來計算梯度并更新參數。由于深度結構的存在,梯度在反向傳播過程中需要經過多個循環層和時間步。這可能會導致梯度消失或梯度爆炸的問題,即梯度在傳播過程中變得非常小或非常大,使得模型難以訓練。為了緩解這些問題,通常會采用一些技巧,如使用合適的激活函數、進行梯度裁剪、采用正則化方法等。

在這里插入圖片描述
在這里插入圖片描述
某一層在時間步 t t t的隱藏狀態計算以及最終輸出計算:

符號含義

  • 隱藏狀態
    • H t ( l ) \mathbf{H}_t^{(l)} Ht(l)?:表示在第 l l l層、時間步 t t t的隱藏狀態矩陣,維度一般為 [ b a t c h _ s i z e , h i d d e n _ s i z e ( l ) ] [batch\_size, hidden\_size^{(l)}] [batch_size,hidden_size(l)] b a t c h _ s i z e batch\_size batch_size是批量大小, h i d d e n _ s i z e ( l ) hidden\_size^{(l)} hidden_size(l)是第 l l l層隱藏層神經元數量。
    • H t ( l ? 1 ) \mathbf{H}_t^{(l - 1)} Ht(l?1)?:第 l ? 1 l - 1 l?1層、時間步 t t t的隱藏狀態矩陣,維度為 [ b a t c h _ s i z e , h i d d e n _ s i z e ( l ? 1 ) ] [batch\_size, hidden\_size^{(l - 1)}] [batch_size,hidden_size(l?1)],用于為當前層提供輸入信息。
    • H t ? 1 ( l ) \mathbf{H}_{t - 1}^{(l)} Ht?1(l)?:第 l l l層、時間步 t ? 1 t - 1 t?1的隱藏狀態矩陣,維度是 [ b a t c h _ s i z e , h i d d e n _ s i z e ( l ) ] [batch\_size, hidden\_size^{(l)}] [batch_size,hidden_size(l)],體現循環特性。
  • 輸出
    • O t \mathbf{O}_t Ot?:時間步 t t t的最終輸出矩陣,維度為 [ b a t c h _ s i z e , o u t p u t _ s i z e ] [batch\_size, output\_size] [batch_size,output_size] o u t p u t _ s i z e output\_size output_size是輸出層神經元數量。
  • 權重矩陣和偏置項
    • W x h ( l ) \mathbf{W}_{xh}^{(l)} Wxh(l)?:第 l ? 1 l - 1 l?1層隱藏狀態到第 l l l層隱藏狀態的權重矩陣,維度為 [ h i d d e n _ s i z e ( l ? 1 ) , h i d d e n _ s i z e ( l ) ] [hidden\_size^{(l - 1)}, hidden\_size^{(l)}] [hidden_size(l?1),hidden_size(l)],負責將上一層隱藏狀態信息轉換到當前層隱藏狀態空間。
    • W h h ( l ) \mathbf{W}_{hh}^{(l)} Whh(l)?:第 l l l層自身隱藏狀態到隱藏狀態的權重矩陣,維度是 [ h i d d e n _ s i z e ( l ) , h i d d e n _ s i z e ( l ) ] [hidden\_size^{(l)}, hidden\_size^{(l)}] [hidden_size(l),hidden_size(l)],用于在前一時刻隱藏狀態與當前輸入共同作用時,對當前層隱藏狀態計算進行變換。
    • W h q \mathbf{W}_{hq} Whq?:第 L L L層(最后一層)隱藏狀態到輸出層的權重矩陣,維度為 [ h i d d e n _ s i z e ( L ) , o u t p u t _ s i z e ] [hidden\_size^{(L)}, output\_size] [hidden_size(L),output_size],將最后一層隱藏狀態表示轉換為輸出。
    • b h ( l ) \mathbf{b}_{h}^{(l)} bh(l)?:第 l l l層隱藏層的偏置向量,維度為 [ h i d d e n _ s i z e ( l ) ] [hidden\_size^{(l)}] [hidden_size(l)] ,給第 l l l層隱藏層計算增加可學習的偏置值。
    • b q \mathbf{b}_{q} bq?:輸出層的偏置向量,維度是 [ o u t p u t _ s i z e ] [output\_size] [output_size] ,給輸出層計算增加偏置。
  • 激活函數
    • ? l \phi_l ?l?:第 l l l層使用的激活函數,常見的有sigmoid、tanh、ReLU等,為計算引入非線性。

公式含義

  • 隱藏狀態計算:公式 H t ( l ) = ? l ( H t ( l ? 1 ) W x h ( l ) + H t ? 1 ( l ) W h h ( l ) + b h ( l ) ) \mathbf{H}_t^{(l)} = \phi_l(\mathbf{H}_t^{(l - 1)}\mathbf{W}_{xh}^{(l)} + \mathbf{H}_{t - 1}^{(l)}\mathbf{W}_{hh}^{(l)} + \mathbf{b}_{h}^{(l)}) Ht(l)?=?l?(Ht(l?1)?Wxh(l)?+Ht?1(l)?Whh(l)?+bh(l)?)表示在第 l l l層、時間步 t t t,先將上一層(第 l ? 1 l - 1 l?1層)在時間步 t t t的隱藏狀態 H t ( l ? 1 ) \mathbf{H}_t^{(l - 1)} Ht(l?1)?與權重矩陣 W x h ( l ) \mathbf{W}_{xh}^{(l)} Wxh(l)?相乘,同時將本層(第 l l l層)上一時間步 t ? 1 t - 1 t?1的隱藏狀態 H t ? 1 ( l ) \mathbf{H}_{t - 1}^{(l)} Ht?1(l)?與權重矩陣 W h h ( l ) \mathbf{W}_{hh}^{(l)} Whh(l)?相乘,然后把這兩個乘積結果相加,再加上偏置 b h ( l ) \mathbf{b}_{h}^{(l)} bh(l)?,最后通過激活函數 ? l \phi_l ?l?對其進行非線性變換,得到第 l l l層在時間步 t t t的隱藏狀態 H t ( l ) \mathbf{H}_t^{(l)} Ht(l)? 。這一過程在各層和各時間步重復進行,實現對序列信息的多層處理。
  • 輸出計算:公式 O t = H t ( L ) W h q + b q \mathbf{O}_t = \mathbf{H}_t^{(L)}\mathbf{W}_{hq} + \mathbf{b}_{q} Ot?=Ht(L)?Whq?+bq?用于計算最終輸出。在經過多層循環層處理后,取最后一層(第 L L L層)在時間步 t t t的隱藏狀態 H t ( L ) \mathbf{H}_t^{(L)} Ht(L)?,與隱藏層到輸出層的權重矩陣 W h q \mathbf{W}_{hq} Whq?相乘,再加上輸出層偏置 b q \mathbf{b}_{q} bq?,得到時間步 t t t的最終輸出 O t \mathbf{O}_t Ot?

應用領域

  • 自然語言處理:在機器翻譯中,能夠處理源語言和目標語言的復雜序列信息,實現更準確的翻譯;在文本生成任務中,可以生成更連貫、更有邏輯的文本內容;在情感分析中,能更好地捕捉文本中的情感線索,提高情感分類的準確率。
  • 語音識別:可以對語音信號的時間序列進行建模,更好地識別語音中的單詞和句子,提高語音識別的精度。
  • 時間序列預測:在金融領域,對股票價格、匯率等時間序列數據進行預測;在氣象領域,預測氣溫、降水等氣象數據;在工業領域,對設備的運行狀態、生產數據等進行預測和監控。
  • 視頻處理:可以用于視頻中的動作識別、視頻內容分類、視頻生成等任務,通過對視頻幀序列的學習,理解視頻中的語義信息和時空關系。

優勢與挑戰

  • 優勢:相比普通的RNN,能夠學習到更復雜、更深入的序列特征,對長序列數據中的長期依賴關系有更好的建模能力,在各種序列數據處理任務中通常能取得更好的性能表現。
  • 挑戰:訓練難度較大,由于深度結構和循環特性,訓練過程中容易出現梯度問題,導致模型難以收斂或過擬合;計算復雜度較高,需要更多的計算資源和時間來進行訓練和推理;模型的可解釋性較差,難以直觀地理解模型是如何做出決策和預測的。

DRNN 代碼實現

雙層隱藏層的循環神經網絡 訓練和預測:

import torch
from torch import nn
import dltoolsbatch_size, num_steps = 32, 35
train_iter, vocab = dltools.load_data_time_machine(batch_size, num_steps)vocab_size, num_hiddens, num_layers = len(vocab), 256, 2
num_inputs = vocab_size
device = dltools.try_gpu()
rnn_layer = nn.RNN(num_inputs, num_hiddens, num_layers)
model = dltools.RNNModel(rnn_layer, len(vocab))
model = model.to(device)num_epochs, lr = 500, 1
dltools.train_ch8(model, train_iter, vocab, lr, num_epochs, device)

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

在這里插入圖片描述

在這里插入圖片描述

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

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

相關文章

Niagara學習筆記

橙色 發射器 , 綠色 粒子, 紅色 渲染器 Emitter State 發射器狀態 Life Cycle Mode(生命周期模式) 選擇Self就是發射器自身管理生命周期 Loop Behavior 決定粒子發射次數 一次(Once):發射器只播放一次多次&#…

17 一個高并發的系統架構如何設計

高并發系統的理解 第一:我們設計高并發系統的前提是該系統要高可用,起碼整體上的高可用。 第二:高并發系統需要面對很大的流量沖擊,包括瞬時的流量和黑客攻擊等 第三:高并發系統常見的需要考慮的問題,如內存不足的問題,服務抖動的…

2025數學建模美賽|F題成品論文

國家安全政策與網絡安全 摘要 隨著互聯網技術的迅猛發展,網絡犯罪問題已成為全球網絡安全中的重要研究課題,且網絡犯罪的形式和影響日益復雜和嚴重。本文針對網絡犯罪中的問題,基于多元回歸分析和差異中的差異(DiD)思…

適配Android16

Android16新特性 Android 16帶來了許多新特性和改進,提升了系統的流暢度、用戶體驗和安全性。對于應用開發者來說,適配Android 16可以確保應用在該版本上的兼容性和性能,同時也可以利用其新特性為用戶提供更好的服務。以下是Android 16的一些…

【C++數論】880. 索引處的解碼字符串|2010

本文涉及知識點 數論:質數、最大公約數、菲蜀定理 LeetCode880. 索引處的解碼字符串 給定一個編碼字符串 s 。請你找出 解碼字符串 并將其寫入磁帶。解碼時,從編碼字符串中 每次讀取一個字符 ,并采取以下步驟: 如果所讀的字符是…

【MQ】如何保證消息隊列的高可用?

RocketMQ NameServer集群部署 Broker做了集群部署 主從模式 類型:同步復制、異步復制 主節點返回消息給客戶端的時候是否需要同步從節點 Dledger:要求至少消息復制到半數以上的節點之后,才給客戶端返回寫入成功 slave定時從master同步數據…

ESP32 I2S音頻總線學習筆記(二):I2S讀取INMP441音頻數據

簡介 在這個系列的上一篇文章中,我們介紹了ESP32 I2S音頻總線的相關知識,簡要了解了什么是I2S總線、它的通信格式,以及相關的底層API函數。沒有看過上篇文章的可以點擊文章進行回顧: ESP32 I2S音頻總線學習筆記(一&a…

EasyExcel使用詳解

文章目錄 EasyExcel使用詳解一、引言二、環境準備與基礎配置1、添加依賴2、定義實體類 三、Excel 讀取詳解1、基礎讀取2、自定義監聽器3、多 Sheet 處理 四、Excel 寫入詳解1、基礎寫入2、動態列與復雜表頭3、樣式與模板填充 五、總結 EasyExcel使用詳解 一、引言 EasyExcel 是…

objection的簡單使用

objection環境配置 下載以下版本 objection1.11.0 frida-tools9.2.4 python3.8.8 報錯的話看這里: 在這個網站下載frida-tools14.2.18的離線包Links for frida 然后放入C:\Users\Asus\frida-14.2.18-py3.8-win-amd64.egg文件夾下 執行poetry add frida-tools14.2.18 ob…

危機13小時:追蹤一場GitHub投毒事件

事件概要 自北京時間 2024.12.4 晚間6點起, GitHub 上不斷出現“幽靈倉庫”,倉庫中沒有任何代碼,只有誘導性的病毒文件。當天,他們成為了 GitHub 上 star 增速最快的倉庫。超過 180 個虛假僵尸賬戶正在傳播病毒,等待不…

【Redis】緩存+分布式鎖

目錄 緩存 Redis最主要的使用場景就是作為緩存 緩存的更新策略: 1.定期生成 2.實時生成 面試重點: 緩存預熱(Cache preheating): 緩存穿透(Cache penetration) 緩存雪崩 (Cache avalan…

記錄 | MaxKB創建本地AI智能問答系統

目錄 前言一、重建MaxKBStep1 復制路徑Step2 刪除MaxKBStep3 創建數據存儲文件夾Step4 重建 二、創建知識庫Step1 新建知識庫Step2 下載測試所用的txtStep3 上傳本地文檔Step4 選擇模型補充智譜的API Key如何獲取 Step5 查看是否成功 三、創建應用Step1 新建應用Step2 配置AI助…

C#新語法

目錄 頂級語句(C#9.0) using 全局using指令(C#10.0) using資源管理問題 using聲明(C#8.0) using聲明陷阱 錯誤寫法 正確寫法 文件范圍的命名空間聲明(C#10.0) 可空引用類型…

基于dlib/face recognition人臉識別推拉流實現

目錄 一.環境搭建 二.推拉流代碼 三.人臉檢測推拉流 一.環境搭建 1.下載RTSP服務器MediaMTX與FFmpeg FFmpeg是一款功能強大的開源多媒體處理工具,而MediaMTX則是一個輕量級的流媒體服務器。兩者結合,可以實現將本地視頻或者實時攝像頭畫面推送到RTSP流,從而實現視頻…

Couchbase UI: Analytics

Couchbase 的 Analytics 頁面是用于執行分析查詢的部分,允許用戶對存儲在 Couchbase 中的數據進行復雜的分析和聚合。Analytics 提供了 SQL-like 查詢語言(N1QL for Analytics),使得用戶能夠輕松地執行數據分析任務。以下是關于 C…

梯度下降優化算法-Adam

Adam(Adaptive Moment Estimation)是一種結合了動量法(Momentum)和 RMSProp 的自適應學習率優化算法。它通過計算梯度的一階矩(均值)和二階矩(未中心化的方差)來調整每個參數的學習率…

論文筆記(六十三)Understanding Diffusion Models: A Unified Perspective(六)(完結)

Understanding Diffusion Models: A Unified Perspective(六)(完結) 文章概括指導(Guidance)分類器指導無分類器引導(Classifier-Free Guidance) 總結 文章概括 引用: …

【PySide6快速入門】信號與槽的使用

文章目錄 前言什么是信號與槽信號與槽的功能最簡單的信號與槽控件連接信號與信號的連接總結 前言 在 PySide6 中,信號與槽機制是核心概念之一,它是 Qt 庫中事件通信的基礎。通過信號與槽,開發者能夠實現不同組件之間的解耦,從而使…

GOGOGO 枚舉

含義:一種類似于類的一種結構 作用:是Java提供的一個數據類型,可以設置值是固定的 【當某一個數據類型受自身限制的時候,使用枚舉】 語法格式: public enum 枚舉名{…… }有哪些成員? A、對象 public …

AWTK 骨骼動畫控件發布

Spine 是一款廣泛使用的 2D 骨骼動畫工具,專為游戲開發和動態圖形設計設計。它通過基于骨骼的動畫系統,幫助開發者創建流暢、高效的角色動畫。本項目是基于 Spine 實現的 AWTK 骨骼動畫控件。 代碼:https://gitee.com/zlgopen/awtk-widget-s…