自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

LLM架構(gòu)從基礎(chǔ)到精通之門控循環(huán)單元(GRUs)

發(fā)布于 2025-1-20 11:36
瀏覽
0收藏

在之前對(duì)循環(huán)神經(jīng)網(wǎng)絡(luò)(RNNs)和長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTMs)的深入探討中,我們了解了它們?cè)谔幚硇蛄袛?shù)據(jù)方面的強(qiáng)大能力以及應(yīng)對(duì)挑戰(zhàn)的獨(dú)特方式。接下來(lái),我們將聚焦于另一種重要的神經(jīng)網(wǎng)絡(luò)架構(gòu)——門控循環(huán)單元(GRUs),它在解決標(biāo)準(zhǔn) RNN 面臨的問(wèn)題上展現(xiàn)出了獨(dú)特的優(yōu)勢(shì)。

12. 門控循環(huán)單元(GRUs)

門控循環(huán)單元(GRU)由 Cho 等人在 2014 年提出,旨在解決標(biāo)準(zhǔn)循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)面臨的梯度消失問(wèn)題。GRU 與長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)有許多共同之處,這兩種算法都使用門控機(jī)制來(lái)控制記憶過(guò)程。

LLM架構(gòu)從基礎(chǔ)到精通之門控循環(huán)單元(GRUs)-AI.x社區(qū)

想象一下,你試圖通過(guò)反復(fù)聽(tīng)一首歌來(lái)學(xué)習(xí)它。一個(gè)基本的 RNN 可能在聽(tīng)到結(jié)尾時(shí)就忘記了歌曲的開(kāi)頭。GRU 通過(guò)使用門來(lái)控制哪些信息被記住、哪些信息被遺忘,從而解決了這個(gè)問(wèn)題。

GRU 通過(guò)將輸入門和遺忘門合并為一個(gè)單一的更新門,并添加一個(gè)重置門,簡(jiǎn)化了長(zhǎng)短期記憶網(wǎng)絡(luò)的結(jié)構(gòu)。這使得它們訓(xùn)練速度更快,使用更方便,同時(shí)仍然能夠長(zhǎng)時(shí)間記住重要信息。

更新門:這個(gè)門決定了過(guò)去的信息中有多少應(yīng)該被傳遞到未來(lái)。

重置門:這個(gè)門確定了過(guò)去的信息中有多少需要被忽略。

這些門幫助 GRU 在記住重要細(xì)節(jié)和忘記不重要的信息之間保持平衡,就像你在聽(tīng)歌曲時(shí)可能會(huì)專注于記住旋律而忽略背景噪音一樣。

GRU 非常適合處理序列數(shù)據(jù)的任務(wù),如預(yù)測(cè)股票市場(chǎng)、理解語(yǔ)言,甚至生成音樂(lè)。它們可以通過(guò)跟蹤過(guò)去的信息并利用這些信息進(jìn)行更好的預(yù)測(cè)來(lái)學(xué)習(xí)數(shù)據(jù)中的模式。這使得它們?cè)谌魏涡枰斫庀惹皵?shù)據(jù)點(diǎn)上下文的應(yīng)用中都非常有用。

12.1 與 LSTMs 和普通 RNNs 的比較

為了理解 GRU 的適用場(chǎng)景,讓我們將它們與 LSTMs 和普通 RNNs 進(jìn)行比較。

LLM架構(gòu)從基礎(chǔ)到精通之門控循環(huán)單元(GRUs)-AI.x社區(qū)

普通 RNNs:可以將普通 RNNs 視為循環(huán)神經(jīng)網(wǎng)絡(luò)的基本版本。它們通過(guò)將信息從一個(gè)時(shí)間步傳遞到下一個(gè)時(shí)間步來(lái)工作,就像接力賽中每個(gè)賽跑者將接力棒傳遞給下一個(gè)人一樣。然而,它們有一個(gè)很大的缺陷:在長(zhǎng)序列中它們往往會(huì)忘記信息。這是由于梯度消失問(wèn)題,這使得它們難以學(xué)習(xí)數(shù)據(jù)中的長(zhǎng)期依賴關(guān)系。

LSTMs:長(zhǎng)短期記憶網(wǎng)絡(luò)旨在解決這個(gè)問(wèn)題。它們使用更復(fù)雜的結(jié)構(gòu),包含三種類型的門:輸入門、遺忘門和輸出門。這些門就像一個(gè)復(fù)雜的文件系統(tǒng),決定哪些信息要保留、哪些信息要更新、哪些信息要丟棄。這使得 LSTMs 能夠長(zhǎng)時(shí)間記住重要信息,使它們非常適合處理需要跨多個(gè)時(shí)間步的上下文的任務(wù),如理解文本段落或識(shí)別長(zhǎng)時(shí)間序列中的模式。

GRUs:門控循環(huán)單元是 LSTMs 的簡(jiǎn)化版本。它們通過(guò)將輸入門和遺忘門合并為一個(gè)單一的更新門,并添加一個(gè)重置門來(lái)簡(jiǎn)化結(jié)構(gòu)。這使得 GRUs 比 LSTMs 計(jì)算強(qiáng)度更低,訓(xùn)練速度更快,同時(shí)仍然能夠有效地處理長(zhǎng)期依賴關(guān)系。

12.2 是什么使 GRU 比傳統(tǒng) RNN 更特殊和有效?

GRU 支持門控和隱藏狀態(tài)來(lái)控制信息的流動(dòng)。為了解決 RNN 中出現(xiàn)的問(wèn)題,GRU 使用兩個(gè)門:更新門和重置門。

你可以將它們視為兩個(gè)向量條目(0,1),可以執(zhí)行凸組合。這些組合決定了哪些隱藏狀態(tài)信息應(yīng)該被更新(傳遞)或在需要時(shí)重置隱藏狀態(tài)。同樣,網(wǎng)絡(luò)學(xué)會(huì)跳過(guò)不相關(guān)的臨時(shí)觀察。

LSTM 由三個(gè)門組成:輸入門、遺忘門和輸出門。與 LSTM 不同,GRU 沒(méi)有輸出門,并且將輸入門和遺忘門合并為一個(gè)單一的更新門。

接下來(lái),讓我們更詳細(xì)地了解更新門和重置門。

12.2.1 更新門

更新門()負(fù)責(zé)確定需要傳遞到下一個(gè)狀態(tài)的先前信息(先前時(shí)間步)的數(shù)量。它是一個(gè)重要的單元。下面的示意圖展示了更新門的結(jié)構(gòu)。

LLM架構(gòu)從基礎(chǔ)到精通之門控循環(huán)單元(GRUs)-AI.x社區(qū)

這里, 是網(wǎng)絡(luò)單元中的輸入向量,它與參數(shù)權(quán)重()矩陣相乘。 中的  表示它保存了前一個(gè)單元的信息,并與它的權(quán)重相乘。接下來(lái),將這些參數(shù)的值相加,并通過(guò) sigmoid 激活函數(shù)。在這里,sigmoid 函數(shù)將生成介于 0 和 1 之間的值。

12.2.2 重置門

重置門()用于決定需要忽略多少過(guò)去的信息。其公式與更新門相同,但它們的權(quán)重和門的使用方式有所不同。下面的示意圖表示了重置門。

LLM架構(gòu)從基礎(chǔ)到精通之門控循環(huán)單元(GRUs)-AI.x社區(qū)

有兩個(gè)輸入, 和 。將它們與各自的權(quán)重相乘,進(jìn)行逐點(diǎn)相加,并通過(guò) sigmoid 函數(shù)。

13. 門的作用

LLM架構(gòu)從基礎(chǔ)到精通之門控循環(huán)單元(GRUs)-AI.x社區(qū)

14. 簡(jiǎn)單 GRU 的實(shí)現(xiàn)

為了強(qiáng)化我們所涵蓋的概念,讓我們通過(guò)實(shí)踐,在 Python 中從頭開(kāi)始實(shí)現(xiàn)一個(gè)基本的門控循環(huán)單元(GRU)。

下面的代碼片段展示了一個(gè)簡(jiǎn)化的 GRU 類,突出了 GRU 架構(gòu)中前向和后向傳播的基本功能。

import numpy as np

class SimpleGRU:
    def __init__(self, input_size, hidden_size, output_size):
        self.input_size = input_size
        self.hidden_size = hidden_size
        self.output_size = output_size
        self.W_z = np.random.randn(hidden_size, input_size)
        self.U_z = np.random.randn(hidden_size, hidden_size)
        self.b_z = np.zeros((hidden_size, 1))
        self.W_r = np.random.randn(hidden_size, input_size)
        self.U_r = np.random.randn(hidden_size, hidden_size)
        self.b_r = np.zeros((hidden_size, 1))
        self.W_h = np.random.randn(hidden_size, input_size)
        self.U_h = np.random.randn(hidden_size, hidden_size)
        self.b_h = np.zeros((hidden_size, 1))
        self.W_y = np.random.randn(output_size, hidden_size)
        self.b_y = np.zeros((output_size, 1))

    def sigmoid(self, x):
        return1 / (1 + np.exp(-x))

    def tanh(self, x):
        return np.tanh(x)

    def softmax(self, x):
        exp_x = np.exp(x - np.max(x))
        return exp_x / exp_x.sum(axis=0, keepdims=True)

    def forward(self, x):
        T = len(x)
        h = np.zeros((self.hidden_size, 1))
        y_list = []
        for t in range(T):
            x_t = x[t].reshape(-1, 1)
            z = self.sigmoid(np.dot(self.W_z, x_t) + np.dot(self.U_z, h) + self.b_z)
            r = self.sigmoid(np.dot(self.W_r, x_t) + np.dot(self.U_r, h) + self.b_r)
            h_tilde = self.tanh(np.dot(self.W_h, x_t) + np.dot(self.U_h, r * h) + self.b_h)
            h = (1 - z) * h + z * h_tilde
            y = np.dot(self.W_y, h) + self.b_y
            y_list.append(y)
        return y_list

    def backward(self, x, y_list, target):
        T = len(x)
        dW_z = np.zeros_like(self.W_z)
        dU_z = np.zeros_like(self.U_z)
        db_z = np.zeros_like(self.b_z)
        dW_r = np.zeros_like(self.W_r)
        dU_r = np.zeros_like(self.U_r)
        db_r = np.zeros_like(self.b_r)
        dW_h = np.zeros_like(self.W_h)
        dU_h = np.zeros_like(self.U_h)
        db_h = np.zeros_like(self.b_h)
        dW_y = np.zeros_like(self.W_y)
        db_y = np.zeros_like(self.b_y)
        dh_next = np.zeros_like(y_list[0])
        for t in reversed(range(T)):
            dy = y_list[t] - target[t]
            dW_y += np.dot(dy, np.transpose(h))
            db_y += dy
            dh = np.dot(np.transpose(self.W_y), dy) + dh_next
            dh_tilde = dh * (1 - self.sigmoid(np.dot(self.W_z, x[t].reshape(-1, 1)) + np.dot(self.U_z, h) + self.b_z))
            dW_h += np.dot(dh_tilde, np.transpose(x[t].reshape(1, -1)))
            db_h += dh_tilde
            dr = np.dot(np.transpose(self.W_h), dh_tilde)
            dU_h += np.dot(dr * h * (1 - self.tanh(np.dot(self.W_h, x[t].reshape(-1, 1)) + np.dot(self.U_h, r * h) + self.b_h)), np.transpose(h))
            dW_h += np.dot(dr * h * (1 - self.tanh(np.dot(self.W_h, x[t].reshape(-1, 1)) + np.dot(self.U_h, r * h) + self.b_h)), np.transpose(x[t].respose(1, -1)))
            db_h += dr * h * (1 - self.tanh(np.dot(self.W_h, x[t].reshape(-1, 1)) + np.dot(self.U_h, r * h) + self.b_h))
            dz = np.dot(np.transpose(self.U_r), dr * h * (self.tanh(np.dot(self.W_h, x[t].reshape(-1, 1)) + np.dot(self.U_h, r * h) + self.b_h) - h_tilde))
            dU_z += np.dot(dz * h * z * (1 - z), np.transpose(h))
            dW_z += np.dot(dz * h * z * (1 - z), np.transpose(x[t].reshape(1, -1)))
            db_z += dz * h * z * (1 - z)
            dh_next = np.dot(np.transpose(self.U_z), dz * h * z * (1 - z))
        return dW_z, dU_z, db_z, dW_r, dU_r, db_r, dW_h, dU_h, db_h, dW_y, db_y

    def update_parameters(self, dW_z, dU_z, db_z, dW_r, dU_r, db_r, dW_h, dU_h, db_h, dW_y, db_y, learning_rate):
        self.W_z -= learning_rate * dW_z
        self.U_z -= learning_rate * dU_z
        self.b_z -= learning_rate * db_z
        self.W_r -= learning_rate * dW_r
        self.U_r -= learning_rate * dU_r
        self.b_r -= learning_rate * db_r
        self.W_h -= learning_rate * dW_h
        self.U_h -= learning_rate * dU_h
        self.b_h -= learning_rate * db_h
        self.W_y -= learning_rate * dW_y
        self.b_y -= learning_rate * db_y

在上述實(shí)現(xiàn)中,我們引入了一個(gè)簡(jiǎn)化的 ??SimpleGRU?? 類,以展示 GRU 的核心機(jī)制。示例用法演示了如何初始化 GRU、創(chuàng)建輸入序列和目標(biāo)輸出的隨機(jī)數(shù)據(jù)、執(zhí)行前向和后向傳播,以及隨后使用計(jì)算出的梯度更新權(quán)重和偏差。

14.1 GRUs 的優(yōu)缺點(diǎn)

GRUs 的優(yōu)點(diǎn)

  • 序列數(shù)據(jù)建模:GRUs 在處理序列方面表現(xiàn)出色,非常適合語(yǔ)言處理、語(yǔ)音識(shí)別和時(shí)間序列分析等任務(wù)。
  • 可變長(zhǎng)度輸入:GRUs 可以處理不同長(zhǎng)度的序列,適用于輸入大小不同的應(yīng)用場(chǎng)景。
  • 計(jì)算效率高:與更復(fù)雜的循環(huán)架構(gòu)(如 LSTMs)相比,由于其更簡(jiǎn)單的設(shè)計(jì),GRUs 在計(jì)算上更高效。
  • 緩解梯度消失:GRUs 比傳統(tǒng) RNNs 更有效地解決了梯度消失問(wèn)題,能夠捕獲數(shù)據(jù)中的長(zhǎng)期依賴關(guān)系。

GRUs 的局限性

  • 長(zhǎng)期記憶有限:雖然 GRUs 在捕獲長(zhǎng)期依賴關(guān)系方面比標(biāo)準(zhǔn) RNNs 更好,但對(duì)于具有復(fù)雜依賴關(guān)系的非常長(zhǎng)的序列,它們可能不如 LSTMs 有效。
  • 表達(dá)能力較弱:在某些情況下,GRUs 可能無(wú)法像 LSTMs 那樣有效地捕獲復(fù)雜的模式,特別是在對(duì)高度復(fù)雜的序列進(jìn)行建模時(shí)。
  • 特定應(yīng)用:對(duì)于需要顯式內(nèi)存控制或復(fù)雜上下文建模的任務(wù),LSTMs 或更高級(jí)的架構(gòu)可能更合適。

14.2 在 GRUs 和 LSTMs 之間選擇

選擇使用門控循環(huán)單元(GRUs)還是長(zhǎng)短期記憶(LSTM)網(wǎng)絡(luò)取決于你的具體問(wèn)題和數(shù)據(jù)集。以下是一些考慮因素:

使用 GRUs 的情況:

  • 計(jì)算資源有限:與 LSTMs 相比,GRUs 的計(jì)算強(qiáng)度較低,在資源受限的情況下是首選。
  • 簡(jiǎn)單性重要:如果你想要一個(gè)更簡(jiǎn)單的模型,同時(shí)仍然能夠合理地捕獲序列依賴關(guān)系,GRUs 是一個(gè)不錯(cuò)的選擇。
  • 較短序列:對(duì)于涉及較短依賴關(guān)系的序列任務(wù),GRUs 可以提供足夠的性能,而無(wú)需 LSTM 的復(fù)雜內(nèi)存管理。

使用 LSTMs 的情況:

  • 捕獲長(zhǎng)期依賴關(guān)系:LSTMs 更適合于捕獲長(zhǎng)程依賴關(guān)系至關(guān)重要的任務(wù),如語(yǔ)言建模、語(yǔ)音識(shí)別和某些時(shí)間序列預(yù)測(cè)。
  • 精細(xì)的內(nèi)存控制:LSTMs 提供了對(duì)內(nèi)存的更明確控制,在需要精確內(nèi)存處理時(shí)是更好的選擇。
  • 復(fù)雜序列:如果你的數(shù)據(jù)呈現(xiàn)出復(fù)雜的序列模式和依賴關(guān)系,LSTMs 通常在建模這些復(fù)雜性方面更有效。

在實(shí)踐中,最好在你的特定任務(wù)上對(duì) GRUs 和 LSTMs 進(jìn)行實(shí)驗(yàn),以確定哪種架構(gòu)性能更好。有時(shí),兩者之間的選擇取決于對(duì)數(shù)據(jù)集的實(shí)證測(cè)試和驗(yàn)證。

15. 結(jié)論

我們深入探討了循環(huán)神經(jīng)網(wǎng)絡(luò)(RNNs),詳細(xì)研究了它們的核心機(jī)制、訓(xùn)練挑戰(zhàn)以及提高性能的高級(jí)設(shè)計(jì)。以下是一個(gè)簡(jiǎn)要概述:

我們剖析了 RNNs 的結(jié)構(gòu),強(qiáng)調(diào)了它們通過(guò)內(nèi)部記憶狀態(tài)處理序列的能力。討論了關(guān)鍵過(guò)程,如前向傳播和時(shí)間反向傳播(BPTT),解釋了 RNNs 如何處理序列數(shù)據(jù)。

我們還強(qiáng)調(diào)了主要的訓(xùn)練挑戰(zhàn),包括梯度消失和爆炸,這些問(wèn)題可能會(huì)干擾學(xué)習(xí)。為了解決這些問(wèn)題,我們探索了諸如梯度裁剪和初始化策略等解決方案,這些方案有助于穩(wěn)定訓(xùn)練并提高網(wǎng)絡(luò)從較長(zhǎng)序列中學(xué)習(xí)的能力。

門控循環(huán)單元(GRUs)是 RNNs 的一種強(qiáng)大變體,專為高效處理序列數(shù)據(jù)而設(shè)計(jì)。它們有效地緩解了梯度消失等問(wèn)題,并擅長(zhǎng)捕獲序列中的依賴關(guān)系,使其非常適合自然語(yǔ)言處理、語(yǔ)音識(shí)別和時(shí)間序列分析等任務(wù)。

GRUs 使用門控機(jī)制來(lái)控制信息的流動(dòng),使其能夠在保持計(jì)算效率的同時(shí)捕獲長(zhǎng)期依賴關(guān)系。理解 GRUs 背后的架構(gòu)和數(shù)學(xué)原理是在機(jī)器學(xué)習(xí)任務(wù)中有效利用它們的關(guān)鍵。

在選擇 GRUs 和 LSTMs 時(shí),需要考慮多個(gè)因素,包括數(shù)據(jù)復(fù)雜性、計(jì)算資源和要建模的依賴關(guān)系的長(zhǎng)度。這兩種架構(gòu)都有其優(yōu)缺點(diǎn),因此最佳選擇取決于任務(wù)的具體要求。

本文轉(zhuǎn)載自 ??柏企閱文??,作者: 柏企

收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦