国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

AIGC實(shí)戰(zhàn)——GPT(Generative Pre-trained Transformer)

這篇具有很好參考價(jià)值的文章主要介紹了AIGC實(shí)戰(zhàn)——GPT(Generative Pre-trained Transformer)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

0. 前言

注意力機(jī)制能夠用于構(gòu)建先進(jìn)的文本生成模型,Transformer 是用于序列建模的強(qiáng)大神經(jīng)網(wǎng)絡(luò),該神經(jīng)網(wǎng)絡(luò)不需要復(fù)雜的循環(huán)或卷積架構(gòu),而只依賴(lài)于注意力機(jī)制。這種方法克服了循環(huán)神經(jīng)網(wǎng)絡(luò) (Recurrent Neural Network, RNN) 方法難以并行化的缺陷( RNN 必須逐符號(hào)處理序列)。Transformers 高度可并行化運(yùn)算,能夠在大規(guī)模數(shù)據(jù)集上進(jìn)行訓(xùn)練。在本節(jié)中,我們將學(xué)習(xí)文本生成模型如何利用 Transformer 架構(gòu)提高文本性能,并介紹自回歸模型 GPT (Generative Pre-Trained transformer)。

1. GPT 簡(jiǎn)介

OpenAI2018 年提出 GPT (Generative Pre-Trained transformer),將 Transformer 架構(gòu)用于訓(xùn)練大規(guī)模文本數(shù)據(jù),以預(yù)測(cè)序列數(shù)據(jù)中的下一個(gè)單詞,然后再針對(duì)特定的下游任務(wù)進(jìn)行微調(diào)。
GPT 的預(yù)訓(xùn)練過(guò)程使用大型文本語(yǔ)料庫(kù) BookCorpus (來(lái)自 7000 本不同類(lèi)型書(shū)籍的 4.5GB 文本)訓(xùn)練模型。在預(yù)訓(xùn)練過(guò)程中,模型會(huì)根據(jù)先前的單詞預(yù)測(cè)序列中的下一個(gè)單詞,這一過(guò)程稱(chēng)為語(yǔ)言建模 (language modeling),用于訓(xùn)練模型理解自然語(yǔ)言的結(jié)構(gòu)和模式。
在預(yù)訓(xùn)練之后,通過(guò)使用一個(gè)特定任務(wù)的小規(guī)模數(shù)據(jù)集,可以對(duì) GPT 模型進(jìn)行微調(diào)。微調(diào)表示調(diào)整模型的參數(shù)以更好地適應(yīng)當(dāng)前任務(wù)。例如,可以針對(duì)分類(lèi)、問(wèn)答等任務(wù)對(duì)模型進(jìn)行微調(diào)。
OpenAI 對(duì) GPT 架構(gòu)進(jìn)行了改進(jìn)和擴(kuò)展,后續(xù)提出了 GPT-2、GPT-3、GPT-3.5GPT-4 等模型。這些模型在更大的數(shù)據(jù)集上進(jìn)行訓(xùn)練,具有更大的容量,因此可以生成更復(fù)雜、更連貫的文本,GPT 模型已經(jīng)被廣泛應(yīng)用于自然語(yǔ)言處理相關(guān)任務(wù)中。
在本節(jié)中,我們將使用相同的組件和基本原理構(gòu)建 GPT 模型,不同的是,我們使用較少的數(shù)據(jù)進(jìn)行訓(xùn)練。

2. 葡萄酒評(píng)論數(shù)據(jù)集

在本節(jié)中,使用 Kaggle 中的葡萄酒評(píng)論數(shù)據(jù)集訓(xùn)練 GPT 模型,數(shù)據(jù)集中包含超過(guò) 130,000 條葡萄酒評(píng)論,以及相關(guān)描述和價(jià)格等元數(shù)據(jù)。
可以在 Kaggle 中下載數(shù)據(jù)集,解壓后,將葡萄酒評(píng)論和相關(guān)元數(shù)據(jù)保存到 ./data 文件夾中。數(shù)據(jù)準(zhǔn)備流程與使用 LSTM 訓(xùn)練生成模型中所用的數(shù)據(jù)準(zhǔn)備步驟相同:

  • 加載數(shù)據(jù)并創(chuàng)建一個(gè)包含所有葡萄酒文本描述的字符串列表
  • 用空格分隔標(biāo)點(diǎn)符號(hào),以便每個(gè)標(biāo)點(diǎn)符號(hào)被視為一個(gè)單獨(dú)的單詞
  • 通過(guò) TextVectorization 層將字符串進(jìn)行分詞,并將每個(gè)字符串填充/截?cái)酁楣潭ㄩL(zhǎng)度
  • 創(chuàng)建訓(xùn)練集,其中輸入是分詞后的文本字符串,輸出是將相同字符串向后移動(dòng)一個(gè)符號(hào)的字符串

AIGC實(shí)戰(zhàn)——GPT(Generative Pre-trained Transformer),AIGC,gpt,transformer,生成模型

3. 注意力機(jī)制

理解 GPT 工作原理的第一步是理解注意力機(jī)制 (attention mechanism),注意力機(jī)制使得 Transformer 架構(gòu)在語(yǔ)言建模方面與循環(huán)神經(jīng)網(wǎng)絡(luò)有所不同。理解了注意力機(jī)制后,便能了解如何在 Transformer 架構(gòu)(如 GPT )中使用注意力機(jī)制。
當(dāng)我們寫(xiě)作時(shí),句子中的下一個(gè)單詞受到已經(jīng)寫(xiě)完的其他單詞的影響。例如,假設(shè)以以下方式開(kāi)始一個(gè)句子:

"The write elephant tried to get into the boat but it was too"

顯然,下一個(gè)詞應(yīng)該是與 “big” 意思相近的單詞。句子中的其他詞對(duì)于下一單詞的選擇非常重要。例如,它是 elephant 而不是 bird,這意味著我們更傾向于選取 “big” 而不是 “small”,如果句中使用 “pool” 而不是 “boat”,我們可能會(huì)選擇 “scared” 替代 “big”。最后,把 “elephant” 放進(jìn)小船里意味著尺寸是問(wèn)題所在,如果大象試圖摧毀小船,我們可能會(huì)選擇 “flexible” 作為最后一個(gè)詞,其中 “it” 指的是 “boat”。
除此之外,句子中的其他詞則并不重要。例如,大象是 “white” 或“black”對(duì)于選擇最后一個(gè)詞沒(méi)有任何影響。同樣,句子中的其他單詞,如 thebutit 等,為句子構(gòu)成了正確的語(yǔ)法形式,但對(duì)于確定下一個(gè)所需單詞并不重要。換句話(huà)說(shuō),我們只關(guān)注句子中的某些單詞,而對(duì)其他詞只付出少量關(guān)注,我們希望深度學(xué)習(xí)模型同樣能夠做到這一點(diǎn)。
Transformer 中的注意力機(jī)制(也稱(chēng)為注意力頭)就是為了實(shí)現(xiàn)這一目的。它能夠決定在輸入中從哪些部分中獲取信息,以便高效地提取有用的信息而不被無(wú)關(guān)細(xì)節(jié)所干擾。這使得它能夠適應(yīng)各種情況,因?yàn)樗梢栽谕评頃r(shí)決定在哪些部分中尋找信息。
相比之下,循環(huán)層試圖構(gòu)建一個(gè)通用的隱藏狀態(tài),用以在每個(gè)時(shí)間步捕捉輸入的整體表示。這種方法的一個(gè)缺點(diǎn)是,合并到隱藏向量中的許多單詞對(duì)于當(dāng)前任務(wù)(如預(yù)測(cè)下一個(gè)單詞)可能并不直接相關(guān)。注意力頭則可以避免此問(wèn)題,因?yàn)樗鼈兛梢赃x擇如何結(jié)合上下文的信息。

3.1 查詢(xún)、鍵和值

接下來(lái),我們介紹注意力機(jī)制如何決定在哪里尋找信息,我們繼續(xù)使用上一節(jié)中所用示例。
為了能夠預(yù)測(cè)單詞 “too” 之后的內(nèi)容,前面的其他單詞都會(huì)有所貢獻(xiàn),但它們的貢獻(xiàn)取決于它們對(duì)于預(yù)測(cè) “too” 后續(xù)單詞的能力的自信程度。例如,單詞 “elephant” 可能會(huì)自信地貢獻(xiàn)出與尺寸相關(guān)的詞,而單詞 “was” 沒(méi)有提供太多的信息來(lái)縮小可能性。
換句話(huà)說(shuō),我們可以將注意力頭看作一種信息檢索系統(tǒng),其中查詢(xún)(“接在 too 之后的詞是什么?”)被轉(zhuǎn)化為鍵/值存儲(chǔ)(句子中的其他單詞),輸出結(jié)果是值的總和,并根據(jù)查詢(xún)與每個(gè)鍵之間的相關(guān)度進(jìn)行加權(quán)。此過(guò)程詳細(xì)步驟如下圖所示,我們的仍然使用上一節(jié)所用示例。

AIGC實(shí)戰(zhàn)——GPT(Generative Pre-trained Transformer),AIGC,gpt,transformer,生成模型

查詢(xún) (query, Q) 可以表示當(dāng)前任務(wù)(例如,“接在 too 之后的詞是什么?”)。在本例中,通過(guò)將單詞 “too” 的嵌入傳遞到權(quán)重矩陣 W Q W_Q WQ? 中,從維度 d e d_e de? 變換為維度 d k d_k dk?,得到了查詢(xún)。
鍵向量 (key, K) 是句子中每個(gè)單詞的表示,可以將其視為每個(gè)單詞可以幫助完成的預(yù)測(cè)任務(wù)的貢獻(xiàn)。它們與查詢(xún)的產(chǎn)生方式類(lèi)似,通過(guò)將每個(gè)嵌入傳遞到權(quán)重矩陣 W K W_K WK? 中,將每個(gè)向量的維度從 d e d_e de? 變換為 d k d_k dk?,鍵和查詢(xún)的長(zhǎng)度相同。
在注意力頭中,使用每對(duì)向量 ( Q K Q_K QK?) 之間的點(diǎn)積將每個(gè)鍵與查詢(xún)進(jìn)行比較(這就是鍵和查詢(xún)必須具有相同的長(zhǎng)度的原因)。鍵/查詢(xún)對(duì)的點(diǎn)積結(jié)果數(shù)值越高,鍵與查詢(xún)的相關(guān)度就越強(qiáng),因此允許它對(duì)注意力頭的輸出做出更大的貢獻(xiàn)。得到的向量乘以 d k d_k dk?,以保持向量和的方差穩(wěn)定(大約等于 1),并應(yīng)用 softmax 函數(shù)確保貢獻(xiàn)總和為 1,這便是注意力權(quán)重向量。
值向量 (value, V) 也是句子中單詞的表示,可以將其視為每個(gè)單詞的未加權(quán)貢獻(xiàn)。通過(guò)將每個(gè)嵌入傳遞到權(quán)重矩陣 W V W_V WV? 中,將每個(gè)向量的維度從 d e d_e de? 變換為 d v d_v dv?,得到值向量。需要注意的是,值向量不一定與鍵和查詢(xún)具有相同的長(zhǎng)度(但通常為簡(jiǎn)單起見(jiàn),使用相同長(zhǎng)度)。
值向量乘以注意力權(quán)重,得到給定 Q Q Q、 K K K V V V 的注意力:
A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q,K,V)=softmax(\frac {QK^T} {\sqrt {d_k}})V Attention(Q,K,V)=softmax(dk? ?QKT?)V
為了從注意力頭獲得最終輸出向量,將注意力進(jìn)行求和,得到長(zhǎng)度為 d v d_v dv? 的向量。這個(gè)上下文向量捕捉了句子中的單詞對(duì)于預(yù)測(cè)接在 too 之后的詞的任務(wù)的共同意見(jiàn)。

3.2 多頭注意力

Keras 中,可以構(gòu)建 MultiHeadAttention 層,該層將多個(gè)注意力頭的輸出連接起來(lái)構(gòu)成多頭注意力 (Multihead Attention),允許每個(gè)頭學(xué)習(xí)不同的注意力機(jī)制,以便整個(gè)層可以學(xué)習(xí)更復(fù)雜的關(guān)系。
連接后的輸出通過(guò)最終的權(quán)重矩陣 W O W_O WO? 進(jìn)行投影,將向量投影到期望的輸出維度上。在本節(jié)下,輸出維度與查詢(xún)的輸入維度相同 ( d e d_e de?),以便可以將層按順序堆疊在一起。下圖顯示了 MultiHeadAttention 層輸出的構(gòu)建方式。

AIGC實(shí)戰(zhàn)——GPT(Generative Pre-trained Transformer),AIGC,gpt,transformer,生成模型

Keras 中創(chuàng)建 MultiHeadAttention 層:

layers.MultiHeadAttention(
    # 此多頭注意力層有四個(gè)注意力頭
    num_heads = 4,
    # 鍵(和查詢(xún))是長(zhǎng)度為 128 的向量
    key_dim = 128,
    # 值(也是每個(gè)頭的輸出)是長(zhǎng)度為 64 的向量
    value_dim = 64,
    # 輸出向量的長(zhǎng)度為 256
    output_shape = 256
)

3.3 因果掩碼

在以上介紹中,我們假設(shè)注意力頭的查詢(xún)輸入是一個(gè)單一的向量。然而,為了在訓(xùn)練期間提高效率,理想情況下我們希望注意力層能夠同時(shí)處理輸入中的每個(gè)單詞,為每個(gè)單詞預(yù)測(cè)后續(xù)的單詞。換句話(huà)說(shuō),我們希望我們的 GPT 模型能夠同時(shí)處理一組查詢(xún)向量(即矩陣)。
為了將向量批處理成一個(gè)矩陣,并使用線(xiàn)性代數(shù)進(jìn)行處理,我們需要一個(gè)額外的步驟,我們需要對(duì)查詢(xún)/鍵的點(diǎn)積應(yīng)用掩碼,以避免未來(lái)單詞的信息泄漏,這稱(chēng)為因果掩碼 (Causal Masking),如下圖所示。

AIGC實(shí)戰(zhàn)——GPT(Generative Pre-trained Transformer),AIGC,gpt,transformer,生成模型

如果沒(méi)有這個(gè)掩碼,GPT 模型將能夠完美地猜出句子中的下一個(gè)單詞,因?yàn)樗鼘⑹褂脕?lái)自單詞本身的鍵作為一個(gè)特征。使用 Keras 創(chuàng)建因果掩碼,下圖顯示了 Numpy 形式的結(jié)果數(shù)組(為了與圖相匹配,將結(jié)果數(shù)組進(jìn)行了轉(zhuǎn)置)。

def causal_attention_mask(batch_size, n_dest, n_src, dtype):
    i = tf.range(n_dest)[:, None]
    j = tf.range(n_src)
    m = i >= j - n_src + n_dest
    mask = tf.cast(m, dtype)
    mask = tf.reshape(mask, [1, n_dest, n_src])
    mult = tf.concat(
        [tf.expand_dims(batch_size, -1), tf.constant([1, 1], dtype=tf.int32)], 0
    )
    return tf.tile(mask, mult)

print(np.transpose(causal_attention_mask(1, 10, 10, dtype=tf.int32)[0]))

因果掩碼僅在解碼器 Transformer(如 GPT )中需要,在這些模型中,任務(wù)是根據(jù)先前的符號(hào)順序生成符號(hào),在訓(xùn)練期間掩碼掉未來(lái)的符號(hào)是至關(guān)重要的。
其他類(lèi)型的 Transformer (例如編碼器 Transformer )不需要因果掩碼,因?yàn)樗鼈儾皇峭ㄟ^(guò)預(yù)測(cè)下一個(gè)符號(hào)來(lái)訓(xùn)練的。例如,GoogleBERT 在給定句子中預(yù)測(cè)待填空的單詞,因此它可以使用該詞前后的上下文。
Transformer 中的多頭注意力機(jī)制中,層的可學(xué)習(xí)參數(shù)僅由每個(gè)注意力頭的三個(gè)權(quán)重矩陣 ( W Q W_Q WQ?、 W K W_K WK? W V W_V WV?) 和一個(gè)用于重塑輸出的權(quán)重矩陣 ( W O W_O WO?) 組成,在多頭注意力層中完全沒(méi)有卷積或循環(huán)機(jī)制。
下一節(jié)中,我們將介紹如何使用多頭注意力層構(gòu)建 Transformer 塊。

4. Transformer

4.1 Transformer 塊

Transformer 塊是 Transformer 內(nèi)的一個(gè)組件,它在多頭注意力層間應(yīng)用了跳躍連接、前饋(全連接)層 (Feed-forward layers) 和歸一化,Transformer 塊的結(jié)構(gòu)如下圖所示。

AIGC實(shí)戰(zhàn)——GPT(Generative Pre-trained Transformer),AIGC,gpt,transformer,生成模型

首先,將查詢(xún)傳遞到多頭注意力層并直接添加到輸出中,這是一種跳躍連接,可以用其構(gòu)建非常深的神經(jīng)網(wǎng)絡(luò),而不會(huì)受到梯度消失問(wèn)題的影響,因?yàn)樘S連接提供了一個(gè)無(wú)梯度的數(shù)據(jù)通道,使網(wǎng)絡(luò)能夠直接傳遞信息。
其次,在 Transformer 塊中的層歸一化用于提高訓(xùn)練過(guò)程的穩(wěn)定性。我們已經(jīng)介紹了如何使用批歸一化層,在批歸一化中,每個(gè)通道的輸出被歸一化為均值為 0,標(biāo)準(zhǔn)差為 1,歸一化統(tǒng)計(jì)信息是根據(jù)批和空間維度計(jì)算的。
而在 Transformer 塊中的層歸一化通過(guò)在通道維度上計(jì)算歸一化統(tǒng)計(jì)信息,對(duì)批數(shù)據(jù)中每個(gè)序列的每個(gè)位置進(jìn)行歸一化。就統(tǒng)計(jì)信息的計(jì)算方式而言,它與批歸一化完全相反,下圖展示了批歸一化和層歸一化之間的差異。
層歸一化常用于基于文本的任務(wù)中,以避免在批處理中跨序列創(chuàng)建歸一化依賴(lài)關(guān)系。然而,Shen 等人表明在 Transformer 內(nèi)部可以使用一種形式的批歸一化進(jìn)行調(diào)整,從而優(yōu)于傳統(tǒng)的層歸一化方法。

AIGC實(shí)戰(zhàn)——GPT(Generative Pre-trained Transformer),AIGC,gpt,transformer,生成模型

最后,在 Transformer 塊中包含了一組前饋(全連接)層( Feed-forward layers ),以使組件能夠在網(wǎng)絡(luò)中深入提取更高級(jí)別的特征。
使用 Keras 實(shí)現(xiàn)一個(gè) Transformer 塊。

class TransformerBlock(layers.Layer):
    # 在初始化函數(shù)中定義構(gòu)成 TransformerBlock 層的子層
    def __init__(self, num_heads, key_dim, embed_dim, ff_dim, dropout_rate=0.1):
        super(TransformerBlock, self).__init__()
        self.num_heads = num_heads
        self.key_dim = key_dim
        self.embed_dim = embed_dim
        self.ff_dim = ff_dim
        self.dropout_rate = dropout_rate
        self.attn = layers.MultiHeadAttention(
            num_heads, key_dim, output_shape=embed_dim
        )
        self.dropout_1 = layers.Dropout(self.dropout_rate)
        self.ln_1 = layers.LayerNormalization(epsilon=1e-6)
        self.ffn_1 = layers.Dense(self.ff_dim, activation="relu")
        self.ffn_2 = layers.Dense(self.embed_dim)
        self.dropout_2 = layers.Dropout(self.dropout_rate)
        self.ln_2 = layers.LayerNormalization(epsilon=1e-6)

    def call(self, inputs):
        input_shape = tf.shape(inputs)
        batch_size = input_shape[0]
        seq_len = input_shape[1]
        # 創(chuàng)建因果掩碼,以隱藏查詢(xún)中未來(lái)的鍵
        causal_mask = causal_attention_mask(
            batch_size, seq_len, seq_len, tf.bool
        )
        # 創(chuàng)建多頭注意力層,并指定注意力掩碼
        attention_output, attention_scores = self.attn(
            inputs,
            inputs,
            attention_mask=causal_mask,
            return_attention_scores=True,
        )
        attention_output = self.dropout_1(attention_output)
        # 第一個(gè) add 和歸一化層
        out1 = self.ln_1(inputs + attention_output)
        # 前饋層
        ffn_1 = self.ffn_1(out1)
        ffn_2 = self.ffn_2(ffn_1)
        # 第二個(gè) add 和歸一化層
        ffn_output = self.dropout_2(ffn_2)
        return (self.ln_2(out1 + ffn_output), attention_scores)

4.2 位置編碼

在訓(xùn)練 GPT 模型之前,還有一個(gè)最后一步需要處理。在多頭注意力層中,并沒(méi)有關(guān)注鍵的順序。每個(gè)鍵與查詢(xún)之間的點(diǎn)積是并行計(jì)算的,而非像循環(huán)神經(jīng)網(wǎng)絡(luò)那樣順序計(jì)算。這樣可以并行化處理以提高效率,但也帶來(lái)了一個(gè)問(wèn)題,因?yàn)槲覀冃枰⒁饬幽軌蚩紤]文本的上下文信息,例如,針對(duì)以下兩個(gè)句子預(yù)測(cè)不同的輸出:

The dog looked at the boy and … (barked?)
The boy looked at the dog and … (smiled?)

為了解決這個(gè)問(wèn)題,在創(chuàng)建初始的 Transformer 塊的輸入時(shí),我們使用一種稱(chēng)為位置編碼 (positional encoding) 的技術(shù)。我們不僅使用符號(hào)嵌入 (token embedding) 來(lái)編碼每個(gè)符號(hào),還使用位置嵌入 (position embedding) 來(lái)編碼符號(hào)的位置。
符號(hào)嵌入使用標(biāo)準(zhǔn)的嵌入層將每個(gè)符號(hào)轉(zhuǎn)換為一個(gè)可學(xué)習(xí)向量。我們可以使用相同的方式創(chuàng)建位置編碼,使用標(biāo)準(zhǔn)的嵌入層將每個(gè)整數(shù)位置轉(zhuǎn)換為一個(gè)可學(xué)習(xí)向量。雖然 GPT 使用嵌入層來(lái)嵌入位置信息,但原始 Transformer 論文使用三角函數(shù)。
為了構(gòu)建聯(lián)合的符號(hào)-位置編碼,將符號(hào)嵌入添加到位置嵌入中,如下圖所示。這樣,就可以在一個(gè)向量中同時(shí)捕捉序列中每個(gè)詞的含義和位置信息。

AIGC實(shí)戰(zhàn)——GPT(Generative Pre-trained Transformer),AIGC,gpt,transformer,生成模型

使用 Keras 定義 TokenAndPositionEmbedding 層:

class TokenAndPositionEmbedding(layers.Layer):
    def __init__(self, max_len, vocab_size, embed_dim):
        super(TokenAndPositionEmbedding, self).__init__()
        self.max_len = max_len
        self.vocab_size = vocab_size
        self.embed_dim = embed_dim
        # 符號(hào)使用 Embedding 層獲取嵌入
        self.token_emb = layers.Embedding(
            input_dim=vocab_size, output_dim=embed_dim
        )
        # 符號(hào)的位置同樣使用 Embedding 層獲取嵌入
        self.pos_emb = layers.Embedding(input_dim=max_len, output_dim=embed_dim)

    def call(self, x):
        maxlen = tf.shape(x)[-1]
        positions = tf.range(start=0, limit=maxlen, delta=1)
        positions = self.pos_emb(positions)
        x = self.token_emb(x)
        # TokenAndPositionEmbedding 層的輸出是符號(hào)嵌入和位置嵌入之和
        return x + positions

5. 訓(xùn)練GPT

接下來(lái),構(gòu)建并訓(xùn)練 GPT 模型。將輸入文本通過(guò)符號(hào)和位置嵌入層,然后通過(guò) Transformer 塊,網(wǎng)絡(luò)的最終輸出是一個(gè)使用 softmax 激活函數(shù)的 Dense 層,輸出的維度是詞匯表中的單詞數(shù)。為了簡(jiǎn)單起見(jiàn),我們僅使用一個(gè) Transformer塊( GPT 論文中使用 12 個(gè)),整體架構(gòu)如下圖所示。

AIGC實(shí)戰(zhàn)——GPT(Generative Pre-trained Transformer),AIGC,gpt,transformer,生成模型

使用 Keras 實(shí)現(xiàn)此架構(gòu):

# 用 0 填充輸入
inputs = layers.Input(shape=(None,), dtype=tf.int32)
# 文本使用 TokenAndPositionEmbedding 層獲取嵌入
x = TokenAndPositionEmbedding(MAX_LEN, VOCAB_SIZE, EMBEDDING_DIM)(inputs)
# 嵌入通過(guò) TransformerBlock 進(jìn)行傳遞
x, attention_scores = TransformerBlock(N_HEADS, KEY_DIM, EMBEDDING_DIM, FEED_FORWARD_DIM)(x)
# 轉(zhuǎn)換后的輸出通過(guò)使用 softmax 激活函數(shù)的 Dense 層進(jìn)行傳遞,以預(yù)測(cè)后續(xù)單詞的分布
outputs = layers.Dense(VOCAB_SIZE, activation="softmax")(x)
# 模型以單詞符號(hào)序列作為輸入,并輸出預(yù)測(cè)的后續(xù)單詞分布。還返回了 Transformer 塊的輸出,以便檢查模型中注意力機(jī)制的作用
gpt = models.Model(inputs=inputs, outputs=[outputs, attention_scores])
# 模型使用 SparseCategoricalCrossentropy 損失函數(shù)編譯并訓(xùn)練
gpt.compile("adam", loss=[losses.SparseCategoricalCrossentropy(), None])
print(gpt.summary())
gpt.fit(train_ds,epochs=EPOCHS,)

6. GPT 分析

訓(xùn)練 GPT 模型后,就可以使用 GPT 生成長(zhǎng)文本,還可以獲取 TransformerBlock 輸出的注意力權(quán)重,以了解 Transformer 在生成過(guò)程中不同位置尋找信息的方式。

6.1 生成文本

我們可以通過(guò)以下過(guò)程生成新文本:

  • 將現(xiàn)有的單詞序列輸入到網(wǎng)絡(luò)中,以預(yù)測(cè)下一個(gè)單詞
  • 將此單詞附加到現(xiàn)有序列中,并重復(fù)此過(guò)程

從網(wǎng)絡(luò)輸出的一組概率中進(jìn)行抽樣,使文本生成過(guò)程具有隨機(jī)性,而不是確定性的。
為了控制采樣過(guò)程的確定性程度,重用 LSTM 文本生成中的 TextGenerator 類(lèi),其使用溫度參數(shù)來(lái)指定采樣過(guò)程中的確定性程度,使用兩個(gè)不同的溫度值對(duì)比生成結(jié)果。溫度為 1.0 的生成文本比溫度為 0.5 的樣本具有更高的隨機(jī)性,因此準(zhǔn)確率較低。由于模型從方差較大的概率分布中進(jìn)行抽樣,因此使用溫度為 1.0 生成多個(gè)樣本將具有更多的多樣性。

6.2 注意力分?jǐn)?shù)

我們還可以令模型輸出,在決定句子中的下一個(gè)單詞時(shí),每個(gè)單詞的注意力分?jǐn)?shù)。TransformerBlock 輸出每個(gè)注意力頭的注意力權(quán)重,該權(quán)重是句子中前面單詞的 softmax 分布。
為了進(jìn)行說(shuō)明,下圖顯示了對(duì)于三個(gè)不同的輸入,具有最高概率的前五個(gè)符號(hào),以及相對(duì)于前面每個(gè)單詞,兩個(gè)注意力頭的平均注意力。根據(jù)其注意力分?jǐn)?shù)對(duì)前面的單詞進(jìn)行著色,較深的顏色表示對(duì)該單詞的注意力更高。

AIGC實(shí)戰(zhàn)——GPT(Generative Pre-trained Transformer),AIGC,gpt,transformer,生成模型

以這種方式查看網(wǎng)絡(luò),可以準(zhǔn)確地了解網(wǎng)絡(luò)從何處獲取信息,以便對(duì)隨后的每個(gè)單詞做出準(zhǔn)確預(yù)測(cè)。通過(guò)修改輸入,觀(guān)察是否可以使模型關(guān)注到句子中相距較遠(yuǎn)的單詞,以充分證明基于注意力的模型相對(duì)于傳統(tǒng)的循環(huán)模型更強(qiáng)大。

小結(jié)

在本節(jié)中,我們介紹了 Transformer 模型架構(gòu),并構(gòu)建了一個(gè) GPT 模型,以實(shí)現(xiàn)文本生成。GPT 利用了注意力機(jī)制,消除了對(duì)循環(huán)層(如長(zhǎng)短時(shí)記憶網(wǎng)絡(luò))的需求。注意力機(jī)制類(lèi)似于一個(gè)信息檢索系統(tǒng),利用查詢(xún)、鍵和值來(lái)決定從每個(gè)輸入符號(hào)中提取多少信息。

系列鏈接

AIGC實(shí)戰(zhàn)——生成模型簡(jiǎn)介
AIGC實(shí)戰(zhàn)——深度學(xué)習(xí) (Deep Learning, DL)
AIGC實(shí)戰(zhàn)——卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network, CNN)
AIGC實(shí)戰(zhàn)——自編碼器(Autoencoder)
AIGC實(shí)戰(zhàn)——變分自編碼器(Variational Autoencoder, VAE)
AIGC實(shí)戰(zhàn)——使用變分自編碼器生成面部圖像
AIGC實(shí)戰(zhàn)——生成對(duì)抗網(wǎng)絡(luò)(Generative Adversarial Network, GAN)
AIGC實(shí)戰(zhàn)——WGAN(Wasserstein GAN)
AIGC實(shí)戰(zhàn)——條件生成對(duì)抗網(wǎng)絡(luò)(Conditional Generative Adversarial Net, CGAN)
AIGC實(shí)戰(zhàn)——自回歸模型(Autoregressive Model)
AIGC實(shí)戰(zhàn)——改進(jìn)循環(huán)神經(jīng)網(wǎng)絡(luò)
AIGC實(shí)戰(zhàn)——像素卷積神經(jīng)網(wǎng)絡(luò)(PixelCNN)
AIGC實(shí)戰(zhàn)——?dú)w一化流模型(Normalizing Flow Model)
AIGC實(shí)戰(zhàn)——能量模型(Energy-Based Model)
AIGC實(shí)戰(zhàn)——擴(kuò)散模型(Diffusion Model)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-838870.html

到了這里,關(guān)于AIGC實(shí)戰(zhàn)——GPT(Generative Pre-trained Transformer)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 深入理解深度學(xué)習(xí)——GPT(Generative Pre-Trained Transformer):GPT-2與Zero-shot Learning

    深入理解深度學(xué)習(xí)——GPT(Generative Pre-Trained Transformer):GPT-2與Zero-shot Learning

    分類(lèi)目錄:《深入理解深度學(xué)習(xí)》總目錄 相關(guān)文章: · GPT(Generative Pre-Trained Transformer):基礎(chǔ)知識(shí) · GPT(Generative Pre-Trained Transformer):在不同任務(wù)中使用GPT · GPT(Generative Pre-Trained Transformer):GPT-2與Zero-shot Learning · GPT(Generative Pre-Trained Transformer):GPT-3與Few-shot Learning

    2024年02月10日
    瀏覽(33)
  • 【論文閱讀筆記】Pre-trained Universal Medical Image Transformer

    【論文閱讀筆記】Pre-trained Universal Medical Image Transformer

    Luo L, Chen X, Tang B, et al. Pre-trained Universal Medical Image Transformer[J]. arXiv preprint arXiv:2312.07630, 2023.【代碼開(kāi)源】 【論文概述】 本文介紹了一種名為“預(yù)訓(xùn)練通用醫(yī)學(xué)圖像變換器(Pre-trained Universal Medical Image Transformer,簡(jiǎn)稱(chēng)PUMIT)”的新型算法,該算法旨在解決標(biāo)記醫(yī)學(xué)圖像數(shù)據(jù)稀缺

    2024年02月04日
    瀏覽(29)
  • GPT(Generative Pre-Training)論文解讀及實(shí)現(xiàn)(一)

    GPT(Generative Pre-Training)論文解讀及實(shí)現(xiàn)(一)

    Given an unsupervised corpus of tokens U = {u1, . . . , un}, we use a standard language modeling objective to maximize the following likelihood: 在給定語(yǔ)料上下文環(huán)境下,目標(biāo)時(shí)最大化下面的語(yǔ)言模型,即在給定前 i-1個(gè)詞和參數(shù)θ前提下,使第 i 個(gè)詞出現(xiàn)的概率最大。 we use a multi-layer Transformer decoder [34] for

    2024年02月15日
    瀏覽(30)
  • Solving 3D Inverse Problems using Pre-trained 2D Diffusion Models

    Solving 3D Inverse Problems using Pre-trained 2D Diffusion Models

    論文鏈接:https://arxiv.org/abs/2211.10655 GitHub鏈接:https://github.com/HJ-harry/DiffusionMBIR 【score-MRI作者】 擴(kuò)散模型已成為具有高質(zhì)量樣本的新的藝術(shù)生成模型,具有模式覆蓋和高靈活性等有趣的特性。它們也被證明是有效的逆問(wèn)題求解器,充當(dāng)分布的先驗(yàn),而正演模型的信息可以在采

    2024年02月09日
    瀏覽(26)
  • [ACL2023] Exploring Lottery Prompts for Pre-trained Language Models

    [ACL2023] Exploring Lottery Prompts for Pre-trained Language Models

    文章鏈接 清深的工作,比較有意思的一篇。作者先給出假設(shè),對(duì)于分類(lèi)問(wèn)題,在有限的語(yǔ)料空間內(nèi)總能找到一個(gè)prompt讓這個(gè)問(wèn)題分類(lèi)正確,作者稱(chēng)之為lottery prompt。為此,作者組織了一個(gè)prompt集合,每個(gè)prompt的組成都很簡(jiǎn)單,名詞+動(dòng)詞+介詞/形容詞/副詞+MASK,語(yǔ)料都是從常用

    2024年02月11日
    瀏覽(31)
  • A Survey of Knowledge-Enhanced Pre-trained Language Models

    本文是LLM系列的文章,針對(duì)《A Survey of Knowledge-Enhanced Pre-trained Language Models》的翻譯。 預(yù)訓(xùn)練語(yǔ)言模型(PLM)通過(guò)自監(jiān)督學(xué)習(xí)方法在大文本語(yǔ)料庫(kù)上進(jìn)行訓(xùn)練,在自然語(yǔ)言處理(NLP)的各種任務(wù)中都取得了良好的性能。然而,盡管具有巨大參數(shù)的PLM可以有效地?fù)碛袕拇罅坑?xùn)練

    2024年02月09日
    瀏覽(41)
  • A Survey on Knowledge-Enhanced Pre-trained Language Models

    自然語(yǔ)言處理(NLP)已經(jīng)通過(guò)使用BERT等預(yù)訓(xùn)練語(yǔ)言模型(plm)發(fā)生了革命性的變化。盡管幾乎在每個(gè)NLP任務(wù)中都創(chuàng)造了新的記錄, 但plm仍然面臨許多挑戰(zhàn),包括可解釋性差,推理能力弱,以及在應(yīng)用于下游任務(wù)時(shí)需要大量昂貴的注釋數(shù)據(jù)。通過(guò)將外部知識(shí)集成到plm中,知識(shí)增強(qiáng)預(yù)

    2024年02月11日
    瀏覽(23)
  • Pre-trained Language Models Can be Fully Zero-Shot Learners

    本文是LLM系列文章,針對(duì)《Pre-trained Language Models Can be Fully Zero-Shot Learners》的翻譯。 在沒(méi)有標(biāo)記或額外的未標(biāo)記數(shù)據(jù)的情況下,我們?nèi)绾螌㈩A(yù)先訓(xùn)練的模型擴(kuò)展到許多語(yǔ)言理解任務(wù)?經(jīng)過(guò)預(yù)訓(xùn)練的語(yǔ)言模型(PLM)對(duì)于廣泛的NLP任務(wù)是有效的。然而,現(xiàn)有的方法要么需要對(duì)下游

    2024年02月07日
    瀏覽(23)
  • 【論文閱讀24】Better Few-Shot Text Classification with Pre-trained Language Model

    【論文閱讀24】Better Few-Shot Text Classification with Pre-trained Language Model

    論文標(biāo)題:Label prompt for multi-label text classification(基于預(yù)訓(xùn)練模型對(duì)少樣本進(jìn)行文本分類(lèi)) 發(fā)表時(shí)間:2021 領(lǐng)域:多標(biāo)簽文本分類(lèi) 發(fā)表期刊:ICANN(頂級(jí)會(huì)議) 相關(guān)代碼:無(wú) 數(shù)據(jù)集:無(wú) 最近,預(yù)先訓(xùn)練過(guò)的語(yǔ)言模型在許多基準(zhǔn)測(cè)試上都取得了非凡的性能。通過(guò)從一個(gè)大型的

    2024年02月14日
    瀏覽(33)
  • 【論文筆記】Improving Language Understanding by Generative Pre-Training

    【論文筆記】Improving Language Understanding by Generative Pre-Training

    背景: 自然語(yǔ)言理解 包括廣泛的不同任務(wù),如文本蘊(yùn)涵、QA問(wèn)答、語(yǔ)義相似性評(píng)估和文檔分類(lèi)。 問(wèn)題: 盡管 大型未標(biāo)記文本語(yǔ)料庫(kù) (corpora)非常豐富;但用于 學(xué)習(xí)特定任務(wù)的標(biāo)記數(shù)據(jù) 卻很少,這使得采用傳統(tǒng)的有監(jiān)督深度學(xué)習(xí)方法訓(xùn)練得到的模型表現(xiàn)較差。 解決: 通過(guò)

    2024年03月24日
    瀏覽(35)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包