国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

如何在公司服務(wù)器建個內(nèi)部 網(wǎng)站網(wǎng)站結(jié)構(gòu)

如何在公司服務(wù)器建個內(nèi)部 網(wǎng)站,網(wǎng)站結(jié)構(gòu),廈門博客網(wǎng)站制作,做產(chǎn)品推廣有網(wǎng)站比較好的第3集:循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)與序列建模 引言 在深度學(xué)習(xí)領(lǐng)域,處理序列數(shù)據(jù)(如文本、語音、時間序列等)是一個重要的研究方向。傳統(tǒng)的全連接網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)(CNN)難以直接捕捉序列中…

第3集:循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)與序列建模


引言

在深度學(xué)習(xí)領(lǐng)域,處理序列數(shù)據(jù)(如文本、語音、時間序列等)是一個重要的研究方向。傳統(tǒng)的全連接網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)(CNN)難以直接捕捉序列中的時序依賴關(guān)系,而循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network, RNN)應(yīng)運而生。它通過引入“記憶”機(jī)制,能夠有效建模序列數(shù)據(jù)的動態(tài)特性。然而,隨著任務(wù)復(fù)雜度的提升,RNN 的局限性也逐漸顯現(xiàn),這促使了 LSTM 和 GRU 等改進(jìn)模型的誕生。本集將深入探討 RNN 的基本原理及其改進(jìn)版本,并結(jié)合實戰(zhàn)項目展示其應(yīng)用價值。最后,我們還將討論 Transformer 如何逐步取代 RNN 成為序列建模的新寵。


1. RNN 的基本原理與局限性

1.1 什么是 RNN?

RNN(Recurrent Neural Network)是一類適合處理序列數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò)。與傳統(tǒng)的前饋神經(jīng)網(wǎng)絡(luò)不同,RNN具有循環(huán)結(jié)構(gòu),可以將前一個時刻的信息傳遞到當(dāng)前時刻,從而記憶序列中的歷史信息。

RNN的工作原理:

  • 在每個時間步,RNN通過接收當(dāng)前輸入和上一時刻的隱藏狀態(tài),更新當(dāng)前的隱藏狀態(tài),并計算當(dāng)前的輸出。
  • 這種結(jié)構(gòu)允許RNN處理具有時序依賴關(guān)系的數(shù)據(jù),如語音、文本和時間序列。

基本原理
RNN 的核心思想是通過一個循環(huán)結(jié)構(gòu),將當(dāng)前時刻的輸入與上一時刻的隱藏狀態(tài)結(jié)合起來,從而實現(xiàn)對序列信息的記憶。具體來說,RNN 的計算公式如下:

h t = σ ( W h h t ? 1 + W x x t + b ) h_t = \sigma(W_h h_{t-1} + W_x x_t + b) ht?=σ(Wh?ht?1?+Wx?xt?+b)

其中:

  • h t 是當(dāng)前時刻的隱藏狀態(tài); h_t 是當(dāng)前時刻的隱藏狀態(tài); ht?是當(dāng)前時刻的隱藏狀態(tài);
  • x t 是當(dāng)前時刻的輸入; x_t 是當(dāng)前時刻的輸入; xt?是當(dāng)前時刻的輸入;
  • W h 和 W x 是權(quán)重矩陣; W_h 和 W_x 是權(quán)重矩陣; Wh?Wx?是權(quán)重矩陣;
  • b 是偏置項; b 是偏置項; b是偏置項;
  • σ 是激活函數(shù)(通常為 t a n h 或 R e L U )。 \sigma 是激活函數(shù)(通常為 tanh 或 ReLU)。 σ是激活函數(shù)(通常為tanhReLU)。

通過這種遞歸計算,RNN 能夠捕捉序列中的時序依賴關(guān)系。

局限性
盡管 RNN 在理論上可以處理任意長度的序列,但在實際訓(xùn)練中存在以下問題:

  1. 梯度消失/爆炸問題:由于反向傳播過程中梯度需要通過時間維度傳遞,長序列會導(dǎo)致梯度指數(shù)級縮小或放大。當(dāng)序列較長時,RNN的梯度容易在反向傳播過程中消失或爆炸,使得模型難以學(xué)習(xí)長期依賴關(guān)系
  2. 長期依賴問題:RNN 難以記住距離較遠(yuǎn)的信息,因為隱藏狀態(tài)會隨著時間被覆蓋或遺忘。RNN在捕捉較長時間依賴時效果較差,尤其是在長序列中,它無法保持足夠的信息。

這些問題限制了 RNN 在復(fù)雜任務(wù)中的表現(xiàn)。


1.2 LSTM 和 GRU 的改進(jìn)

為了克服 RNN 的局限性,研究者提出了兩種改進(jìn)模型:LSTM(Long Short-Term Memory)長短期記憶網(wǎng)絡(luò)和 GRU(Gated Recurrent Unit)門控循環(huán)單元。它們通過引入門控機(jī)制,增強(qiáng)了模型對長期依賴的建模能力。

  • LSTM(長短期記憶網(wǎng)絡(luò))
    在這里插入圖片描述

LSTM通過引入“記憶單元”和“門控機(jī)制”來控制信息流動,克服了傳統(tǒng)RNN在長時間序列建模中的不足。LSTM的核心組件包括:

  • 遺忘門:決定當(dāng)前時間步的記憶單元中哪些信息需要遺忘。
  • 輸入門:控制當(dāng)前時間步的輸入信息如何更新到記憶單元中。
  • 輸出門:控制記憶單元的信息如何影響輸出。

通過這些門控機(jī)制,LSTM能夠有效地保持長期依賴信息,避免梯度消失問題。

  • GRU(門控循環(huán)單元)
    在這里插入圖片描述

GRU是LSTM的簡化版本,它將LSTM中的遺忘門和輸入門合并為一個更新門,減少了參數(shù)量,使得訓(xùn)練更加高效。GRU的結(jié)構(gòu)較LSTM更為簡單,但在很多任務(wù)上,GRU與LSTM的表現(xiàn)相差不大。

LSTM 公式解釋
LSTM 引入了三個門(輸入門、遺忘門、輸出門)以及一個細(xì)胞狀態(tài)(cell state),用于控制信息的流動。其核心公式如下:

  1. 遺忘門:決定哪些信息需要從細(xì)胞狀態(tài)中丟棄。
    f t = σ ( W f ? [ h t ? 1 , x t ] + b f ) f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f) ft?=σ(Wf??[ht?1?,xt?]+bf?)

  2. 輸入門:決定哪些新信息需要添加到細(xì)胞狀態(tài)中。
    i t = σ ( W i ? [ h t ? 1 , x t ] + b i ) i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i) it?=σ(Wi??[ht?1?,xt?]+bi?)
    C ~ t = tanh ? ( W C ? [ h t ? 1 , x t ] + b C ) \tilde{C}_t = \tanh(W_C \cdot [h_{t-1}, x_t] + b_C) C~t?=tanh(WC??[ht?1?,xt?]+bC?)

  3. 更新細(xì)胞狀態(tài)
    C t = f t ⊙ C t ? 1 + i t ⊙ C ~ t C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_t Ct?=ft?Ct?1?+it?C~t?

  4. 輸出門:決定當(dāng)前時刻的隱藏狀態(tài)。
    o t = σ ( W o ? [ h t ? 1 , x t ] + b o ) o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o) ot?=σ(Wo??[ht?1?,xt?]+bo?)
    h t = o t ⊙ tanh ? ( C t ) h_t = o_t \odot \tanh(C_t) ht?=ot?tanh(Ct?)

GRU公式解釋
GRU 是 LSTM 的簡化版本,將遺忘門和輸入門合并為更新門,并移除了單獨的細(xì)胞狀態(tài)。其核心公式如下:

  1. 更新門
    z t = σ ( W z ? [ h t ? 1 , x t ] + b z ) z_t = \sigma(W_z \cdot [h_{t-1}, x_t] + b_z) zt?=σ(Wz??[ht?1?,xt?]+bz?)

  2. 重置門
    r t = σ ( W r ? [ h t ? 1 , x t ] + b r ) r_t = \sigma(W_r \cdot [h_{t-1}, x_t] + b_r) rt?=σ(Wr??[ht?1?,xt?]+br?)

  3. 候選隱藏狀態(tài)
    h ~ t = tanh ? ( W ? [ r t ⊙ h t ? 1 , x t ] + b ) \tilde{h}_t = \tanh(W \cdot [r_t \odot h_{t-1}, x_t] + b) h~t?=tanh(W?[rt?ht?1?,xt?]+b)

  4. 最終隱藏狀態(tài)
    h t = ( 1 ? z t ) ⊙ h t ? 1 + z t ⊙ h ~ t h_t = (1 - z_t) \odot h_{t-1} + z_t \odot \tilde{h}_t ht?=(1?zt?)ht?1?+zt?h~t?

LSTM 和 GRU 的門控機(jī)制使得它們能夠更好地捕捉長期依賴關(guān)系,同時緩解了梯度消失問題。


1.3 序列建模的應(yīng)用場景

RNN 及其變體廣泛應(yīng)用于以下領(lǐng)域:

  1. 語言建模:語言建模是自然語言處理中的一個重要任務(wù),目標(biāo)是根據(jù)前文的單詞預(yù)測下一個單詞。RNN、LSTM和GRU在語言建模中表現(xiàn)優(yōu)異,能夠捕捉句子中各個單詞之間的時序依賴關(guān)系,可預(yù)測下一個單詞的概率分布,常用于機(jī)器翻譯、文本生成等任務(wù)。
  2. 時間序列預(yù)測:時間序列預(yù)測是使用歷史數(shù)據(jù)預(yù)測未來的一個典型應(yīng)用場景。例如,在股票市場中,我們希望基于歷史價格數(shù)據(jù)預(yù)測未來的股價趨勢。RNN、LSTM和GRU被廣泛應(yīng)用于金融領(lǐng)域的時間序列預(yù)測任務(wù),也常用于天氣預(yù)測等領(lǐng)域。
  3. 語音識別:將音頻信號轉(zhuǎn)化為文本。
  4. 視頻分析:捕捉視頻幀之間的時序關(guān)系。

2. 實戰(zhàn)項目:使用 LSTM 預(yù)測股票價格趨勢

2.1 項目背景

我們將使用LSTM模型來預(yù)測股票價格趨勢。數(shù)據(jù)來源于Yahoo Finance,我們將使用過去的股票數(shù)據(jù)來預(yù)測未來幾天的股票價格變化。

2.2 數(shù)據(jù)準(zhǔn)備

首先,安裝所需的庫:

pip install yfinance pandas numpy matplotlib tensorflow scikit-learn

接著,獲取股票數(shù)據(jù)并進(jìn)行預(yù)處理:

import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler# 獲取股票數(shù)據(jù)
data = yf.download('AAPL', start='2010-01-01', end='2023-01-01', auto_adjust=True)# 使用收盤價
closing_prices = data['Close'].values.reshape(-1, 1)# 數(shù)據(jù)歸一化
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(closing_prices)# 創(chuàng)建訓(xùn)練數(shù)據(jù)(使用過去60天的數(shù)據(jù)預(yù)測下一天的價格)
def create_dataset(data, time_step=60):X, y = [], []for i in range(len(data)-time_step-1):X.append(data[i:(i+time_step), 0])y.append(data[i + time_step, 0])return np.array(X), np.array(y)X, y = create_dataset(scaled_data)# 重塑輸入數(shù)據(jù)的形狀為 [樣本數(shù), 時間步長, 特征數(shù)]
X = X.reshape(X.shape[0], X.shape[1], 1)# 劃分訓(xùn)練集和測試集
train_size = int(len(X) * 0.8)
X_train, X_test = X[:train_size], X[train_size:]
y_train, y_test = y[:train_size], y[train_size:]

2.3 構(gòu)建LSTM模型

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout# 構(gòu)建LSTM模型
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1], 1)))
model.add(Dropout(0.2))
model.add(LSTM(units=50, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(units=1))# 編譯模型
model.compile(optimizer='adam', loss='mean_squared_error')# 訓(xùn)練模型
model.fit(X_train, y_train, epochs=10, batch_size=32)

2.4 預(yù)測與可視化

# 使用模型進(jìn)行預(yù)測
predictions = model.predict(X_test)# 反歸一化預(yù)測結(jié)果
predictions = scaler.inverse_transform(predictions)
y_test = scaler.inverse_transform(y_test.reshape(-1, 1))# 可視化結(jié)果
plt.figure(figsize=(12, 6))
plt.plot(y_test, color='blue', label='Actual Stock Price')
plt.plot(predictions, color='red', label='Predicted Stock Price')
plt.title('Stock Price Prediction using LSTM')
plt.xlabel('Time')
plt.ylabel('Stock Price')
plt.legend()
plt.show()

** 代碼匯總:**

import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler# 獲取股票數(shù)據(jù)
data = yf.download('AAPL', start='2010-01-01', end='2023-01-01', auto_adjust=True)if data.empty:print("No data found, check the stock symbol or try again later.")
else:# 使用收盤價closing_prices = data['Close'].values.reshape(-1, 1)# 數(shù)據(jù)歸一化scaler = MinMaxScaler(feature_range=(0, 1))scaled_data = scaler.fit_transform(closing_prices)# 創(chuàng)建訓(xùn)練數(shù)據(jù)(使用過去60天的數(shù)據(jù)預(yù)測下一天的價格)def create_dataset(data, time_step=60):X, y = [], []for i in range(len(data)-time_step-1):X.append(data[i:(i+time_step), 0])y.append(data[i + time_step, 0])return np.array(X), np.array(y)X, y = create_dataset(scaled_data)# 重塑輸入數(shù)據(jù)的形狀為 [樣本數(shù), 時間步長, 特征數(shù)]X = X.reshape(X.shape[0], X.shape[1], 1)# 劃分訓(xùn)練集和測試集train_size = int(len(X) * 0.8)X_train, X_test = X[:train_size], X[train_size:]y_train, y_test = y[:train_size], y[train_size:]from tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import LSTM, Dense, Dropout# 構(gòu)建LSTM模型model = Sequential()model.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1], 1)))model.add(Dropout(0.2))model.add(LSTM(units=50, return_sequences=False))model.add(Dropout(0.2))model.add(Dense(units=1))# 編譯模型model.compile(optimizer='adam', loss='mean_squared_error')# 訓(xùn)練模型model.fit(X_train, y_train, epochs=10, batch_size=32)# 使用模型進(jìn)行預(yù)測predictions = model.predict(X_test)# 反歸一化預(yù)測結(jié)果predictions = scaler.inverse_transform(predictions)y_test = scaler.inverse_transform(y_test.reshape(-1, 1))# 可視化結(jié)果plt.figure(figsize=(12, 6))plt.plot(y_test, color='blue', label='Actual Stock Price')plt.plot(predictions, color='red', label='Predicted Stock Price')plt.title('Stock Price Prediction using LSTM')plt.xlabel('Time')plt.ylabel('Stock Price')plt.legend()plt.show()

代碼輸出結(jié)果:

[*********************100%***********************]  1 of 1 completed
2025-02-25 22:43:23.883004: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.
2025-02-25 22:43:26.821365: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.
2025-02-25 22:43:29.733373: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
D:\python_projects\lstm_demo\Lib\site-packages\keras\src\layers\rnn\rnn.py:200: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.super().__init__(**kwargs)
Epoch 1/10
81/81 ━━━━━━━━━━━━━━━━━━━━ 4s 19ms/step - loss: 0.0037
Epoch 2/10
81/81 ━━━━━━━━━━━━━━━━━━━━ 2s 19ms/step - loss: 3.0320e-04
Epoch 3/10
81/81 ━━━━━━━━━━━━━━━━━━━━ 2s 19ms/step - loss: 2.5178e-04
Epoch 4/10
81/81 ━━━━━━━━━━━━━━━━━━━━ 2s 19ms/step - loss: 2.8054e-04
Epoch 5/10
81/81 ━━━━━━━━━━━━━━━━━━━━ 2s 19ms/step - loss: 2.1884e-04
Epoch 6/10
81/81 ━━━━━━━━━━━━━━━━━━━━ 2s 19ms/step - loss: 1.9784e-04
Epoch 7/10
81/81 ━━━━━━━━━━━━━━━━━━━━ 2s 19ms/step - loss: 1.7942e-04
Epoch 8/10
81/81 ━━━━━━━━━━━━━━━━━━━━ 2s 19ms/step - loss: 1.9470e-04
Epoch 9/10
81/81 ━━━━━━━━━━━━━━━━━━━━ 2s 19ms/step - loss: 1.5350e-04
Epoch 10/10
81/81 ━━━━━━━━━━━━━━━━━━━━ 2s 19ms/step - loss: 2.8230e-04
21/21 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step

輸出預(yù)測對比圖片:
在這里插入圖片描述

2.5 圖解RNN和LSTM

  1. RNN 展開圖

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

  2. LSTM 單元結(jié)構(gòu)
    ( LSTM 單元結(jié)構(gòu)圖,標(biāo)注輸入門、遺忘門、輸出門和細(xì)胞狀態(tài)。)
    在這里插入圖片描述


3. 前沿關(guān)聯(lián):Transformer 在序列建模中的崛起

盡管LSTM和GRU在序列建模中取得了顯著成果,但隨著Transformer模型的出現(xiàn),序列建模的格局發(fā)生了變化。Transformer模型通過自注意力機(jī)制能夠并行處理序列數(shù)據(jù),且在處理長距離依賴時更加高效。如今,Transformer模型已廣泛應(yīng)用于自然語言處理任務(wù),如BERT和GPT系列模型。Transformer 模型憑借其自注意力機(jī)制(Self-Attention)徹底改變了序列建模領(lǐng)域。相比于 RNN,Transformer 具有以下優(yōu)勢:

  1. 并行化訓(xùn)練:無需按時間順序處理序列,大幅提高了訓(xùn)練效率。
  2. 長程依賴建模:自注意力機(jī)制能夠直接捕捉全局依賴關(guān)系。
  3. 廣泛應(yīng)用:Transformer 已成為 GPT、BERT 等大模型的核心架構(gòu)。

盡管如此,RNN 仍然在某些特定任務(wù)(如實時序列處理)中具有不可替代的價值。理解 RNN 的原理及其改進(jìn)版本,有助于我們更好地掌握現(xiàn)代深度學(xué)習(xí)技術(shù)的發(fā)展脈絡(luò)。


總結(jié)

本集聚焦于循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的基本原理及其改進(jìn)模型 LSTM 和 GRU,并通過實戰(zhàn)項目展示了它們在時間序列預(yù)測中的應(yīng)用。同時,我們也探討了 Transformer 的崛起如何推動序列建模進(jìn)入新時代。下一集,我們將深入探討 Transformer 的工作原理及其在自然語言處理中的革命性應(yīng)用。敬請期待!


http://aloenet.com.cn/news/45911.html

相關(guān)文章:

  • seopc流量排名網(wǎng)站百度詞條優(yōu)化工作
  • 河南省住房和城鄉(xiāng)建設(shè)廳官方網(wǎng)站海外廣告優(yōu)化師
  • 西安未央?yún)^(qū)網(wǎng)站建設(shè)百度優(yōu)化是什么意思
  • 廢品回收在哪個網(wǎng)站做效果好app推廣工作是做什么的
  • 手機(jī)網(wǎng)站開發(fā)工具6培訓(xùn)學(xué)校
  • 培訓(xùn)方案網(wǎng)站建設(shè)山東建站
  • 山西省網(wǎng)站備案寧波seo服務(wù)快速推廣
  • 免費 網(wǎng)站 如何做關(guān)鍵詞seo優(yōu)化軟件
  • logo設(shè)計說明東莞網(wǎng)站優(yōu)化
  • 橙子建站免費注冊公司推廣網(wǎng)站的方法
  • 哪些網(wǎng)站容易收錄阿里巴巴國際站關(guān)鍵詞推廣
  • 網(wǎng)站收錄查詢主要由哪幾個網(wǎng)站百度推廣非企代理
  • 云網(wǎng)站注冊數(shù)據(jù)分析師一般一個月多少錢
  • 企業(yè)宣傳網(wǎng)站設(shè)計論文seo關(guān)鍵詞排名軟件流量詞
  • 網(wǎng)站右側(cè)廣告代碼微信營銷案例
  • 惠州熱門的網(wǎng)站線上推廣渠道
  • 做字體的網(wǎng)站西安seo霸屏
  • 國內(nèi)做視頻的網(wǎng)站有哪些搜索引擎營銷的四種方式
  • 網(wǎng)站的類型和特色青島seo外包公司
  • 做網(wǎng)站月度總結(jié)seo推廣教程
  • 游戲網(wǎng)站模板下載aso優(yōu)化排名違法嗎
  • 關(guān)于網(wǎng)站優(yōu)化的文章百度云搜索引擎入口手機(jī)版
  • 白鷺引擎做h5網(wǎng)站cba目前排名
  • 合肥網(wǎng)站建站報廣告代理在線之家
  • 菲律賓有做網(wǎng)站的嗎電腦上突然出現(xiàn)windows優(yōu)化大師
  • 建設(shè)一個網(wǎng)站多少錢游戲推廣怎么快速拉人
  • 做外貿(mào)沒有網(wǎng)站可以嗎江蘇提升關(guān)鍵詞排名收費
  • 廣州專業(yè)的網(wǎng)站建設(shè)公司play商店
  • 深圳做網(wǎng)站d廣州推廣優(yōu)化
  • 九口袋網(wǎng)站建設(shè)免費b站推廣