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

萬(wàn)字帶你了解ChatGLM

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

本文分享自華為云社區(qū)《【云駐共創(chuàng)】華為云之昇思MindSpore大模型專題(第二期)-第一課:ChatGLM》,作者: 愚公搬代碼。

前言

1.昇思MindSpore

昇思MindSpore是華為公司推出的一款全場(chǎng)景AI計(jì)算框架。它提供了自動(dòng)微分、分布式訓(xùn)練和推理、模型部署等功能,支持多種硬件平臺(tái),包括CPU、GPU和Ascend AI 處理器。MindSpore采用圖和算子相結(jié)合的編程模型,能夠高效地處理復(fù)雜的深度學(xué)習(xí)任務(wù)。它具有靈活的設(shè)計(jì)、高效的性能和易于使用的接口,使開發(fā)者能夠更快地開發(fā)和部署AI應(yīng)用。MindSpore還支持自定義操作和算法,可以滿足不同場(chǎng)景下的需求。

2.大模型

大模型是指具有數(shù)百萬(wàn)到數(shù)十億個(gè)參數(shù)的深度學(xué)習(xí)模型。這些模型通常用于處理大規(guī)模數(shù)據(jù)集,并能夠在各種任務(wù)上取得出色的性能。大模型通常需要大量的計(jì)算資源進(jìn)行訓(xùn)練,并且需要更長(zhǎng)的時(shí)間來(lái)收斂。然而,由于其具有更多的參數(shù),大模型可以更好地捕捉數(shù)據(jù)中的復(fù)雜關(guān)系,從而提升模型的預(yù)測(cè)性能。大模型的應(yīng)用范圍非常廣泛,包括自然語(yǔ)言處理、計(jì)算機(jī)視覺(jué)、語(yǔ)音識(shí)別等領(lǐng)域。

3.ChatGLM

ChatGLM是一種生成式語(yǔ)言模型,用于聊天和對(duì)話任務(wù)。它是基于OpenAI的GPT模型框架構(gòu)建的,采用了大規(guī)模的預(yù)訓(xùn)練數(shù)據(jù)集來(lái)學(xué)習(xí)語(yǔ)言模式和生成文本的能力。ChatGLM可以理解上下文并生成連貫、自然的回復(fù)。它可以用于構(gòu)建對(duì)話系統(tǒng)、智能客服、聊天機(jī)器人等應(yīng)用,能夠提供更加交互性和人性化的對(duì)話體驗(yàn)。ChatGLM模型的訓(xùn)練和優(yōu)化過(guò)程需要大量的計(jì)算資源和數(shù)據(jù),而且模型的生成性質(zhì)也需要進(jìn)行適當(dāng)?shù)谋O(jiān)督和過(guò)濾,以確保生成的回復(fù)符合預(yù)期的行為準(zhǔn)則和標(biāo)準(zhǔn)。

一、GLM Model Architecture

1.Evolution Tree of LLMs

Evolution Tree of LLMs(Language Model Megasuite的演化樹)是指由OpenAI發(fā)布的一系列語(yǔ)言模型的歷史和演化關(guān)系圖。

OpenAI的LLMs系列是一系列基于深度學(xué)習(xí)的語(yǔ)言模型,旨在生成人類語(yǔ)言的自然文本。這些模型中的每一個(gè)都是通過(guò)對(duì)大量文本進(jìn)行訓(xùn)練而得到的,可以用于自動(dòng)回答問(wèn)題、生成文章、翻譯文本等自然語(yǔ)言處理任務(wù)。

Evolution Tree of LLMs圖中展示了這些模型的發(fā)展歷程。從最早的模型開始,每個(gè)后續(xù)模型都是在前一個(gè)模型的基礎(chǔ)上進(jìn)行改進(jìn)和擴(kuò)展。這些改進(jìn)可能涉及模型的規(guī)模增加、訓(xùn)練數(shù)據(jù)的增加、架構(gòu)的改進(jìn)等。通過(guò)不斷地改進(jìn)和提升模型,OpenAI致力于推動(dòng)語(yǔ)言模型的發(fā)展,使其在各種自然語(yǔ)言處理任務(wù)上表現(xiàn)更加出色。

Evolution Tree of LLMs圖不僅展示了各個(gè)模型之間的關(guān)系,還反映了OpenAI在不同時(shí)間點(diǎn)的研究重點(diǎn)和技術(shù)進(jìn)展。這個(gè)圖可以幫助研究人員和開發(fā)者了解LLMs系列的發(fā)展歷程,從而更好地理解和應(yīng)用這些語(yǔ)言模型。

2.Autoregressive Blank Infilling

2.1 Autoregressive、Autoencoding、Encoder-Decoder

“Autoregressive”、"Autoencoding"和"Encoder-Decoder"是三種常見的神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu),用于處理序列數(shù)據(jù)或生成模型。

Autoregressive(自回歸)模型是一種生成模型,它將序列數(shù)據(jù)的生成建模為一個(gè)逐步預(yù)測(cè)每個(gè)元素的條件概率的過(guò)程。在每個(gè)時(shí)間步,模型根據(jù)之前生成的元素預(yù)測(cè)當(dāng)前元素的概率分布。常見的Autoregressive模型包括語(yǔ)言模型,如OpenAI GPT模型,它可以生成與輸入序列相似的新文本。

Autoencoding(自編碼)模型是一類無(wú)監(jiān)督學(xué)習(xí)方法,用于學(xué)習(xí)輸入數(shù)據(jù)的緊湊表示。它由一個(gè)編碼器和一個(gè)解碼器組成。編碼器將輸入數(shù)據(jù)映射到低維表示,解碼器將該低維表示恢復(fù)到原始數(shù)據(jù)空間。Autoencoding模型的目標(biāo)是盡可能準(zhǔn)確地重建輸入數(shù)據(jù),同時(shí)學(xué)習(xí)到有用的特征表示。常見的Autoencoding模型包括Variational Autoencoder (VAE)和Denoising Autoencoder。

Encoder-Decoder(編碼器-解碼器)模型是一種常用的序列到序列(Sequence-to-Sequence)模型,用于處理輸入和輸出都是序列數(shù)據(jù)的任務(wù)。它由兩個(gè)部分組成:編碼器和解碼器。編碼器將輸入序列映射為固定大小的向量表示,解碼器使用該向量表示生成輸出序列。Encoder-Decoder模型可以在不同長(zhǎng)度的輸入和輸出序列之間進(jìn)行轉(zhuǎn)換,例如機(jī)器翻譯和文本摘要等任務(wù)。

GLM(自回歸填空)模型是一種靈活且多樣化的語(yǔ)言模型,可以根據(jù)給定的上下文生成缺失的部分內(nèi)容。根據(jù)已知的部分文本內(nèi)容生成可能的填空內(nèi)容。它可以用于自動(dòng)文本補(bǔ)全、問(wèn)答系統(tǒng)、語(yǔ)義理解和生成等多個(gè)自然語(yǔ)言處理任務(wù)中。

2.1 OpenAI GPT系列模型

自然語(yǔ)言處理領(lǐng)域的GPT(Generative Pre-trained Transformer)系列模型是由OpenAI開發(fā)的一系列強(qiáng)大的自然語(yǔ)言處理模型。下面是GPT系列模型的發(fā)展歷程:

GPT-1: GPT模型是于2018年發(fā)布的第一代模型。它使用了Transformer架構(gòu),預(yù)訓(xùn)練了一個(gè)大規(guī)模的語(yǔ)言模型,并使用無(wú)標(biāo)簽的文本數(shù)據(jù)進(jìn)行模型訓(xùn)練。這個(gè)模型的特點(diǎn)是生成連貫的文本,能夠完成一些基礎(chǔ)的自然語(yǔ)言處理任務(wù),如語(yǔ)言模型、文本分類和文本生成等。

GPT-2: 在2019年,OpenAI發(fā)布了GPT-2模型作為GPT的后續(xù)版本。GPT-2模型采用了更大的預(yù)訓(xùn)練模型,使用無(wú)標(biāo)簽的互聯(lián)網(wǎng)文本進(jìn)行訓(xùn)練。這個(gè)模型在生成文本方面取得了突破性的進(jìn)展,可以生成高質(zhì)量、連貫的文本,使得生成的文本內(nèi)容更具有逼真性。由于考慮到模型被濫用可能帶來(lái)的風(fēng)險(xiǎn),OpenAI最初限制了GPT-2的訪問(wèn),并未發(fā)布完整的模型。

GPT-3: GPT-3是在2020年發(fā)布的GPT系列的第三代模型。參數(shù)量達(dá)到了1750億個(gè),訓(xùn)練了十幾萬(wàn)小時(shí)。GPT-3在文本生成、文本補(bǔ)全、問(wèn)答系統(tǒng)等任務(wù)上表現(xiàn)出色,其生成的文本能夠接近人類水平的表達(dá)能力。GPT-3還可以通過(guò)提供一些文本提示來(lái)理解并回答問(wèn)題,具有較強(qiáng)的語(yǔ)言理解和推理能力。

GPT-4:在2023年,OpenAI發(fā)布了GPT-4,這是GPT系列的第四個(gè)模型。GPT-4比GPT-3系列大得多,具有1.8萬(wàn)億個(gè)參數(shù),而GPT-3只有1750億個(gè)參數(shù)。GPT4是一種多模態(tài)模型,而GPT3系列是一種自然語(yǔ)言處理模型。自然語(yǔ)言模型只能聽或看懂語(yǔ)言,而多模態(tài)模型可以處理多種媒體數(shù)據(jù),并且將他們整合到統(tǒng)一的語(yǔ)義空間之中。GPT4可接收的文字輸入長(zhǎng)度達(dá)到了驚人的32000字,而GPT3系列,只能輸入3000字。

2.3 Autoregressive Blank Infilling

Autoregressive Blank Infilling(ABI)是一種用于填充時(shí)間序列數(shù)據(jù)中缺失值的方法。在時(shí)間序列數(shù)據(jù)中,由于種種原因,可能會(huì)存在一些缺失值,這些缺失值會(huì)影響數(shù)據(jù)的完整性和準(zhǔn)確性。ABI方法通過(guò)基于自回歸模型,利用其他已有的數(shù)據(jù)來(lái)預(yù)測(cè)并填補(bǔ)缺失值。

ABI方法的基本思想是根據(jù)時(shí)間序列數(shù)據(jù)的自相關(guān)性,使用已有的數(shù)據(jù)點(diǎn)來(lái)逐個(gè)預(yù)測(cè)缺失值。具體來(lái)說(shuō),ABI方法使用AR模型(自回歸模型)來(lái)建模時(shí)間序列數(shù)據(jù)中的缺失值和非缺失值之間的關(guān)系。然后,根據(jù)該模型,利用其他已有的數(shù)據(jù)點(diǎn)來(lái)預(yù)測(cè)缺失值的數(shù)值。

ABI方法在填充缺失值時(shí),通常還會(huì)考慮一些其他因素,如數(shù)據(jù)的趨勢(shì)、季節(jié)性和周期性等。通過(guò)綜合考慮這些因素,ABI方法能夠更準(zhǔn)確地填充缺失值,從而提高數(shù)據(jù)的完整性和可靠性。

案例片段介紹如下:

順序分為A部分和B部分:

  • A部分:帶掩碼跨度的序列

  • B部分:在A部分中被掩蓋的原始跨度

如果多個(gè)跨度被遮罩,它們將在B部分中被打亂

B部分中的每個(gè)跨度都以[S]作為輸入,以[E]作為輸出。

該模型自回歸生成B部分——它基于前一部分預(yù)測(cè)下一個(gè)令牌。

A部分可以自行處理,但不能處理B部分

B部分可以關(guān)注A及其在B中的經(jīng)歷

2.4 Multi-Task Pretraining

Multi-Task Pretraining是一種多任務(wù)預(yù)訓(xùn)練的方法。在傳統(tǒng)的預(yù)訓(xùn)練方法中,語(yǔ)言模型通過(guò)在大規(guī)模文本數(shù)據(jù)上進(jìn)行訓(xùn)練來(lái)學(xué)習(xí)語(yǔ)言的通用模式和表示。然而,在Multi-Task Pretraining中,模型同時(shí)在多個(gè)任務(wù)上進(jìn)行訓(xùn)練,這些任務(wù)需要不同類型的語(yǔ)言理解能力。

Multi-Task Pretraining的思想是通過(guò)在多個(gè)任務(wù)上訓(xùn)練語(yǔ)言模型,可以學(xué)習(xí)到更加通用和魯棒的語(yǔ)言表示。這是因?yàn)椴煌娜蝿?wù)需要不同的語(yǔ)言技能,如句法分析、語(yǔ)義理解或文檔級(jí)連貫性。通過(guò)讓模型接觸多樣化的任務(wù),它可以學(xué)習(xí)捕捉不同任務(wù)之間的共同語(yǔ)言模式,并利用這些模式更好地泛化到新任務(wù)上。

Multi-Task Pretraining已被證明可以提高語(yǔ)言模型在下游任務(wù)上的性能。例如,預(yù)訓(xùn)練在多個(gè)任務(wù)上的模型在各種自然語(yǔ)言處理基準(zhǔn)測(cè)試中取得了最先進(jìn)的結(jié)果,如問(wèn)答、文本分類和命名實(shí)體識(shí)別。

其中一種常見的Multi-Task Pretraining方法是基于Transformer的模型,如BERT(雙向編碼器表示來(lái)自Transformer的方法)和RoBERTa(經(jīng)過(guò)優(yōu)化的魯棒BERT方法)。這些模型在掩碼語(yǔ)言建模、下一個(gè)句子預(yù)測(cè)和其他輔助任務(wù)上進(jìn)行預(yù)訓(xùn)練。

案例片段介紹如下:

通過(guò)改變遮蓋內(nèi)容的長(zhǎng)度和數(shù)量,從而使模型能夠基于natural language understanding, conditional generation, unconditional generation三類任務(wù)進(jìn)行預(yù)訓(xùn)練,實(shí)現(xiàn)“三合一”

改變?nèi)笔Э缍鹊臄?shù)量和長(zhǎng)度:

2.5 Finetuning

Finetuning是指在預(yù)訓(xùn)練的基礎(chǔ)上,將模型進(jìn)一步調(diào)整和優(yōu)化以適應(yīng)特定任務(wù)或特定數(shù)據(jù)集的過(guò)程。在機(jī)器學(xué)習(xí)中,預(yù)訓(xùn)練模型通常在大規(guī)模的數(shù)據(jù)上進(jìn)行訓(xùn)練,學(xué)習(xí)到通用的模式和特征表示。然而,這些預(yù)訓(xùn)練模型可能不直接適用于特定的任務(wù)或數(shù)據(jù)集。

通過(guò)Finetuning,可以利用預(yù)訓(xùn)練模型的通用知識(shí)和特征表示來(lái)快速適應(yīng)特定的任務(wù)或數(shù)據(jù)集。這通常涉及解凍預(yù)訓(xùn)練模型的一部分或全部層,并在目標(biāo)任務(wù)上進(jìn)行進(jìn)一步的訓(xùn)練。通過(guò)在目標(biāo)任務(wù)上微調(diào)模型參數(shù),可以使其更好地適應(yīng)任務(wù)的特定要求和數(shù)據(jù)特征。

Finetuning的過(guò)程通常包括以下步驟:

  1. 選擇預(yù)訓(xùn)練模型:選擇與目標(biāo)任務(wù)相匹配的預(yù)訓(xùn)練模型,如BERT或GPT等。
  2. 初始化參數(shù):將預(yù)訓(xùn)練模型加載到模型中,并凍結(jié)所有或部分層的參數(shù)。
  3. 構(gòu)建任務(wù)特定層:根據(jù)目標(biāo)任務(wù)的需求,構(gòu)建一個(gè)或多個(gè)任務(wù)特定的層。
  4. 訓(xùn)練:使用目標(biāo)任務(wù)的數(shù)據(jù)集,通過(guò)反向傳播和梯度下降等優(yōu)化算法,更新模型的參數(shù)。
  5. 調(diào)整超參數(shù):對(duì)模型進(jìn)行驗(yàn)證和評(píng)估,并根據(jù)結(jié)果調(diào)整超參數(shù),如學(xué)習(xí)率、批大小等。
  6. 重復(fù)迭代:根據(jù)需要,多次迭代訓(xùn)練和調(diào)整模型,直到達(dá)到滿意的性能。

Finetuning可以大大減少在特定任務(wù)上的訓(xùn)練時(shí)間和樣本需求,同時(shí)利用預(yù)訓(xùn)練模型的知識(shí)提供了更好的初始參數(shù)和特征表示。它已經(jīng)被廣泛應(yīng)用于自然語(yǔ)言處理、計(jì)算機(jī)視覺(jué)和其他領(lǐng)域中的許多任務(wù),如文本分類、問(wèn)答、命名實(shí)體識(shí)別等。

案例片段介紹如下:

GLM將NLG和NLU類下游任務(wù)統(tǒng)一為完型填空的生成式任務(wù),如對(duì)于分類任務(wù),將輸入x寫成一個(gè)填空問(wèn)題c(x),后將生成的答案v(y)映射至標(biāo)簽y

2.6 LLM Reversal Curse

LLM(Large Language Model)是指一種非常大的語(yǔ)言模型,它由數(shù)十億個(gè)參數(shù)組成,具有強(qiáng)大的語(yǔ)言理解和生成能力。大模型LLM可以實(shí)現(xiàn)諸如問(wèn)答、摘要、對(duì)話生成等任務(wù),被廣泛應(yīng)用于自然語(yǔ)言處理領(lǐng)域。

LLM Reversal Curse(逆轉(zhuǎn)詛咒)是指在使用大模型LLM進(jìn)行任務(wù)生成時(shí),其生成結(jié)果出現(xiàn)明顯的逆轉(zhuǎn)或反轉(zhuǎn)現(xiàn)象。具體而言,當(dāng)模型用于生成某個(gè)任務(wù)的結(jié)果時(shí),相比原始輸入,生成的結(jié)果可能會(huì)出現(xiàn)與原始意圖相反的內(nèi)容或表達(dá)。

例如,在問(wèn)答任務(wù)中,當(dāng)用戶提出一個(gè)問(wèn)題時(shí),大模型LLM應(yīng)該生成一個(gè)準(zhǔn)確且與問(wèn)題相符的答案。然而,由于模型的復(fù)雜性和訓(xùn)練數(shù)據(jù)的特點(diǎn),有時(shí)候模型會(huì)出現(xiàn)生成與問(wèn)題相反甚至荒謬的答案的情況。

這種逆轉(zhuǎn)詛咒可能是由于模型在訓(xùn)練過(guò)程中接觸到了大量的噪聲數(shù)據(jù)、錯(cuò)誤標(biāo)注的數(shù)據(jù)或具有偏見的數(shù)據(jù),導(dǎo)致模型在生成過(guò)程中出現(xiàn)了一些意料之外的結(jié)果。

為了解決大模型LLM的逆轉(zhuǎn)詛咒問(wèn)題,需要進(jìn)一步優(yōu)化模型的訓(xùn)練數(shù)據(jù)、標(biāo)注過(guò)程和生成算法,以提高模型的生成質(zhì)量和準(zhǔn)確性。

案例片段介紹如下:

3. 2D Positional Encoding

2D positional encoding是一種將2D網(wǎng)格或圖像中元素的位置信息進(jìn)行編碼的技術(shù)。位置編碼通常在自然語(yǔ)言處理任務(wù)中使用,例如機(jī)器翻譯或語(yǔ)言建模,來(lái)表示句子中單詞的順序或位置。然而,它也可以應(yīng)用于2D網(wǎng)格或圖像。

對(duì)于2D網(wǎng)格或圖像,位置編碼可以用于編碼每個(gè)元素的空間位置。這樣,模型可以有一種對(duì)元素之間的相對(duì)位置的感知,并捕捉它們之間的空間關(guān)系。

一個(gè)常見的2D位置編碼的方法是使用不同頻率的正弦和余弦函數(shù)。其思想是創(chuàng)建一個(gè)根據(jù)網(wǎng)格或圖像內(nèi)位置而變化的正弦信號(hào)。然后將這個(gè)位置編碼作為每個(gè)元素在網(wǎng)格或圖像中的額外輸入或特征。

位置編碼可以使用以下公式定義:

PE(x,2i) = sin(x / (10000^(2i / d_model)))
PE(x,2i+1) = cos(x / (10000^(2i / d_model)))

其中,PE(x, i)表示位置i處元素x的位置編碼,d_model是模型的維度。

通過(guò)使用正弦和余弦函數(shù)的不同頻率,位置編碼可以捕捉位置信息中的不同模式或關(guān)系。

案例片段介紹如下:

模型輸入的position ids分為兩種,從而使得模型可以學(xué)習(xí)到片段生成的長(zhǎng)度

Position 1: Part A中token的絕對(duì)位置

  • Part A:從1開始排列

  • Part B:每一個(gè)span對(duì)應(yīng)Part A中[MASK]的位置

Position 2:intra-span position,masked span內(nèi)部的相對(duì)位置

  • Part A:0
  • Part B:每個(gè)span的token從1開始排列

3.1 大模型訓(xùn)練最大挑戰(zhàn):訓(xùn)練穩(wěn)定性

  • 權(quán)衡利弊:訓(xùn)練穩(wěn)定性(高精度低效)還是訓(xùn)練效率(低精度高效)

  • 目前已開源訓(xùn)練過(guò)程大模型的解決方案

    • FB OPT-175B:訓(xùn)練崩潰時(shí)反復(fù)調(diào)整學(xué)習(xí)率/跳過(guò)數(shù)據(jù)(權(quán)宜之計(jì),損失性能)
    • HF BLOOM 176B:embedding norm和BF16(損失性能,有限適配平臺(tái))

3.2 GLM-130B:穩(wěn)定訓(xùn)練方法

GLM-130B是一個(gè)穩(wěn)定訓(xùn)練方法,它是機(jī)器學(xué)習(xí)中的一種算法。GLM代表廣義線性模型,130B表示這個(gè)算法的特定版本。

穩(wěn)定訓(xùn)練方法是指通過(guò)一定的技巧和策略來(lái)增強(qiáng)模型的穩(wěn)定性和魯棒性,使其能夠更好地處理噪聲和異常數(shù)據(jù)。在訓(xùn)練過(guò)程中,穩(wěn)定訓(xùn)練方法會(huì)對(duì)輸入樣本或特征進(jìn)行一些改變或調(diào)整,以減少模型對(duì)于噪聲的敏感性。

GLM-130B的穩(wěn)定訓(xùn)練方法可能包括以下幾個(gè)方面:

  1. 數(shù)據(jù)預(yù)處理:對(duì)輸入數(shù)據(jù)進(jìn)行去噪、歸一化、特征選擇等預(yù)處理操作,以減少噪聲對(duì)模型訓(xùn)練的影響。
  2. 正則化:通過(guò)添加正則化項(xiàng)來(lái)限制模型的復(fù)雜度,防止過(guò)擬合,提高模型的泛化能力。
  3. 異常值處理:通過(guò)識(shí)別和處理異常值,減少它們對(duì)模型訓(xùn)練的影響。
  4. 隨機(jī)化:引入隨機(jī)化因素,如隨機(jī)選擇樣本、隨機(jī)初始化參數(shù)等,以增加模型的穩(wěn)定性和抗噪能力。
  5. 交叉驗(yàn)證:使用交叉驗(yàn)證來(lái)評(píng)估模型的性能,并選擇最佳的參數(shù)配置,避免對(duì)特定數(shù)據(jù)集過(guò)擬合。
  6. 集成學(xué)習(xí):通過(guò)集成多個(gè)模型的預(yù)測(cè)結(jié)果,綜合考慮它們的意見,提高整體模型的性能和穩(wěn)定性。

案例片段介紹如下:

Attention score 層:Softmax in 32 避免上下溢出

調(diào)小 Embedding 層梯度,緩解前期梯度爆炸問(wèn)題

word_embedding = word_embedding * alpha +  word_embedding .detach() * (1 ? alpha)

3.2 GLM-130B:大量實(shí)驗(yàn)確定最優(yōu)架構(gòu)

有時(shí)候需要進(jìn)行多次實(shí)驗(yàn)來(lái)確定最佳的架構(gòu)設(shè)計(jì)。這些實(shí)驗(yàn)可能包括調(diào)整不同的參數(shù)、添加或移除不同的組件,以及測(cè)試不同的配置選項(xiàng)。GLM-130B是根據(jù)這些實(shí)驗(yàn)的結(jié)果和分析,確定出的最佳架構(gòu)。

案例片段介紹如下:

DeepNorm:穩(wěn)定訓(xùn)練 1000 層 Post-LN 的方法

旋轉(zhuǎn)位置編碼(RoPE):適用于 GLM 的相對(duì)位置編碼

門控注意單元(GLU):FFN 層的替換,穩(wěn)定提升模型性能

3.3 Post LayerNorm

Post LayerNorm(后層歸一化)是一種神經(jīng)網(wǎng)絡(luò)層歸一化的方法,用于解決深層神經(jīng)網(wǎng)絡(luò)中梯度消失和梯度爆炸問(wèn)題。傳統(tǒng)的 LayerNorm(層歸一化)是在每個(gè)神經(jīng)網(wǎng)絡(luò)層的輸入上進(jìn)行歸一化操作,而 Post LayerNorm 是在每個(gè)神經(jīng)網(wǎng)絡(luò)層的輸出上進(jìn)行歸一化操作。

具體來(lái)說(shuō),在每個(gè)神經(jīng)網(wǎng)絡(luò)層的輸入和激活函數(shù)之間,先進(jìn)行 LayerNorm 的歸一化操作,然后再進(jìn)行激活函數(shù)的計(jì)算。這樣可以使得每個(gè)神經(jīng)網(wǎng)絡(luò)層的輸出都在相似的尺度上,避免了梯度消失和梯度爆炸的問(wèn)題。

與之相比,傳統(tǒng)的 LayerNorm 在每個(gè)神經(jīng)網(wǎng)絡(luò)層的輸入上進(jìn)行歸一化操作,但在深層網(wǎng)絡(luò)中,由于每層的輸入分布不穩(wěn)定,因此歸一化操作的效果可能會(huì)下降。而 Post LayerNorm 能夠在每個(gè)神經(jīng)網(wǎng)絡(luò)層的輸出上進(jìn)行歸一化操作,保證了歸一化的效果,提高了網(wǎng)絡(luò)的穩(wěn)定性和訓(xùn)練效果。

Post LayerNorm 是在 Transformer 網(wǎng)絡(luò)中被提出的,并在各個(gè)任務(wù)上取得了顯著的性能提升。它被認(rèn)為是一種更加有效和穩(wěn)定的歸一化方法,在大規(guī)模深層網(wǎng)絡(luò)的訓(xùn)練中具有重要的作用。

案例片段介紹如下:

重新排列層規(guī)范化和剩余連接的順序

3.4 GLU

GLU(Gated Linear Unit)是一種門控線性單元,用于增強(qiáng)神經(jīng)網(wǎng)絡(luò)的表示能力。通過(guò)將GLU應(yīng)用于MindSpore框架中的大型模型,可以進(jìn)一步提升模型的性能和效果。

GLU的核心思想是將輸入進(jìn)行分割成兩部分,然后通過(guò)門控機(jī)制控制兩部分的信息傳遞。這種門控機(jī)制可以幫助模型更好地理解輸入數(shù)據(jù)中的相關(guān)性,從而提高模型的表達(dá)能力和泛化能力。

在MindSpore框架中,GLU可以被用于各種任務(wù),包括自然語(yǔ)言處理、計(jì)算機(jī)視覺(jué)和語(yǔ)音識(shí)別等。通過(guò)使用MindSpore大模型GLU,研究人員和開發(fā)人員可以更輕松地構(gòu)建和訓(xùn)練復(fù)雜的模型,并獲得更好的結(jié)果。

案例片段介紹如下:

用GeLU替換ReLU激活

3.5 并行策略:高效訓(xùn)練千億模型

存下 GPT-3 模型需要 2.8T 顯存存放訓(xùn)練狀態(tài) + 中間激活函數(shù)值

挑戰(zhàn):遠(yuǎn)超單卡顯存(40GB),采取何種并行方式高效訓(xùn)練?

  • 采用 ZeRO 優(yōu)化器在數(shù)據(jù)并行組內(nèi)分?jǐn)們?yōu)化器狀態(tài) → ~25%

遠(yuǎn)超單卡顯存,如何高效訓(xùn)練?

模型并行:將模型參數(shù)分布到多個(gè) GPU 上

  • 張量并行:切分參數(shù)矩陣,每 GPU 計(jì)算一部分 → 額外通信,降低計(jì)算粒度
  • 流水線并行:將網(wǎng)絡(luò)分成多段并行 → 引入流水線氣泡
  • ZeRO-3:將參數(shù)分布到數(shù)據(jù)并行組中,算之前先取回參數(shù) → 額外通信時(shí)間

分析:流水線的氣泡占比: ????? $ 1 ,n / t << 4m 的時(shí)候可以忽略不計(jì)

并行策略:張量并行隨著模型規(guī)模增大緩慢擴(kuò)展,但不超過(guò)單機(jī)規(guī)模(
<=8),其余全部使用流水線并行,通過(guò)調(diào)整微批處理大小減少氣泡占比

其他優(yōu)化

  • 算子融合:融合多個(gè) element-wise 算子 → 提升 ~10% 計(jì)算速度
  • 流水線平衡:流水線首尾階段各少放置一個(gè)層平衡占用 → 節(jié)省 ~10% 顯存

跨平臺(tái)兼容:swDeepSpeed 訓(xùn)練庫(kù) ? 與 DeepSpeed API 兼容

  • 支持申威架構(gòu),一行代碼無(wú)縫替換兼容
  • 實(shí)現(xiàn)并行通信策略,混合精度策略,ZeRO 優(yōu)化器
  • 同一套訓(xùn)練框架可在三個(gè)集群上對(duì)齊訓(xùn)練曲線
import swDeepSpeed as deepspeed
model, optimizer, _, _ = 
    deepspeed.initialize(  
        model=model,  
        model_parameters=param_groups,  
        args=args,
        mpu=mpu,
        dist_init_required=False,  
        config_params=config_params
)

測(cè)試集群配置:

  • A100 集群(A100): 96 臺(tái) DGX-A100,每臺(tái) 2 張 200GB IB 網(wǎng)卡 硬件差異性大
  • 海光GPU(Hygon):3000 臺(tái)機(jī)器,每臺(tái) 4 張 DCU 加速卡、4 張 50G IB 網(wǎng)卡
  • 申威處理器(Sunway):8192 個(gè)節(jié)點(diǎn),每節(jié)點(diǎn)一塊 SW26010-PRO 處理器
訓(xùn)練 GPT-3 175B 規(guī)模的模型,按照相同的 300B 單詞量估計(jì)訓(xùn)練時(shí)間:

4.Rotary Positional Embedding

4.1 Introduction of Positional Embedding

Positional Embedding(位置編碼)是一種用于處理序列數(shù)據(jù)的技術(shù),主要應(yīng)用于自然語(yǔ)言處理(NLP)任務(wù)中。在序列數(shù)據(jù)中,單詞的順序和位置對(duì)于語(yǔ)義的理解非常重要。位置編碼的目的是為了將單詞的位置信息融入到模型的表示中,使得模型能夠更好地理解單詞的順序和上下文關(guān)系。

傳統(tǒng)的詞向量表示只考慮了單詞的語(yǔ)義信息,而沒(méi)有考慮單詞的位置。位置編碼通過(guò)為每個(gè)單詞分配一個(gè)唯一的位置向量來(lái)解決這個(gè)問(wèn)題。常用的位置編碼方法包括相對(duì)位置編碼、絕對(duì)位置編碼、正弦位置編碼等。

在相對(duì)位置編碼中,每個(gè)單詞的位置編碼是相對(duì)于其他單詞的位置差異而得到的。絕對(duì)位置編碼則是將每個(gè)單詞的位置映射為一個(gè)唯一的位置向量。正弦位置編碼是一種常用的絕對(duì)位置編碼方法,通過(guò)使用正弦和余弦函數(shù)來(lái)生成位置向量,從而捕捉到不同位置之間的相對(duì)關(guān)系。

位置編碼的作用是為模型提供位置信息,幫助模型在處理序列數(shù)據(jù)時(shí)更好地理解單詞的上下文和關(guān)系。它通常與注意力機(jī)制和Transformer等模型結(jié)構(gòu)一起使用,為模型提供更豐富的上下文信息。

案例片段介紹如下:

自注意力機(jī)制主要關(guān)注詞語(yǔ)之間的相互關(guān)系,在計(jì)算中,根據(jù)詞語(yǔ)之間的語(yǔ)義關(guān)系來(lái)計(jì)算注意力分?jǐn)?shù),并不會(huì)考慮詞語(yǔ)之間的位置關(guān)系。

即使打亂序列中詞語(yǔ)的順序,依舊會(huì)得到相同的語(yǔ)義表達(dá)因此需要額外增加位置信息。

The dog chased the pig. 
= The pig chased the dog. 
= chased pig The the dog.

位置信息的表示有很多種,如

absolute positional embeddings:

  • 原理:對(duì)于第k個(gè)位置的向量xk,添加位置向量pk(僅依賴于位置編號(hào)k),得到xk+pk
  • 舉例/應(yīng)用模型:sinusoidal positional embedding(Transformer)、learned absolute positional embedding(BERT/RoBERTa/GPT)

relative positional embeddings:

  • 原理:對(duì)于第m個(gè)和第n個(gè)位置的向量xm、xn,將相對(duì)位置m-n的信息添加到self-attention matrix中
  • 舉例/應(yīng)用模型:T5

rotary positional embeddings

  • 原理:使用旋轉(zhuǎn)矩陣對(duì)絕對(duì)位置進(jìn)行編碼,并同時(shí)在自注意力公式中引入了顯式的相對(duì)位置依賴。
  • 舉例/應(yīng)用模型:PaLM/GPT-Neo/GPT-J/LLaMa1&2/ChatGLM1&2

4.2 Sinusoidal Positional Embedding

Sinusoidal Positional Embedding(正弦位置編碼)是一種用于編碼序列數(shù)據(jù)中單詞位置信息的方法,最初在Transformer模型中被引入。它是一種絕對(duì)位置編碼方法,通過(guò)正弦和余弦函數(shù)來(lái)生成位置向量,從而捕捉到不同位置之間的相對(duì)關(guān)系。

在正弦位置編碼中,每個(gè)單詞的位置編碼由兩個(gè)維度的正弦和余弦函數(shù)計(jì)算得到。具體計(jì)算公式如下:

PE(pos,2i) = sin(pos / 10000^(2i/d_model))
PE(pos,2i+1) = cos(pos / 10000^(2i/d_model))

其中,pos表示單詞在序列中的位置,i表示位置向量的維度索引,d_model表示模型的維度。這樣,每個(gè)單詞的位置編碼可以由位置索引pos和維度索引i計(jì)算得到。

正弦位置編碼的特點(diǎn)是,不同位置之間的位置向量是正弦和余弦函數(shù)的周期函數(shù)。這使得不同位置之間的位置向量能夠保持一定的相似性,從而幫助模型更好地理解位置信息并捕捉到序列中的順序關(guān)系。

正弦位置編碼通常與注意力機(jī)制和Transformer模型一起使用,用于為模型提供序列數(shù)據(jù)的位置信息。它的優(yōu)點(diǎn)是簡(jiǎn)單且可解釋,能夠有效地表達(dá)不同位置之間的相對(duì)關(guān)系。

案例片段介紹如下:

通過(guò)sine和cosine函數(shù)計(jì)算每個(gè)位置的positional embedding

  • 優(yōu)點(diǎn):1. 可以反應(yīng)相對(duì)位置信息;2. 模型可以接受不同長(zhǎng)度的輸入

  • 缺點(diǎn):數(shù)值為固定值,無(wú)法參與學(xué)習(xí)

PE(pos, 2i)=sin(pos/10000^2i/d_model)

PE(pos, 2i+1)=cos?(pos/10000^2i/d_model)

4.3 Learned Positional Embedding

Learned Positional Embedding是一種在自然語(yǔ)言處理任務(wù)中用于編碼位置信息的技術(shù)。在傳統(tǒng)的Transformer模型中,位置編碼是通過(guò)固定的數(shù)學(xué)公式(如正弦函數(shù)或余弦函數(shù))來(lái)計(jì)算得到的。而Learned Positional Embedding則是通過(guò)在模型的嵌入層中引入可學(xué)習(xí)的參數(shù)來(lái)學(xué)習(xí)位置信息的表示。

傳統(tǒng)的位置編碼方法只能對(duì)句子的位置進(jìn)行大致的編碼,而Learned Positional Embedding可以更準(zhǔn)確地表示不同位置的信息。當(dāng)模型學(xué)習(xí)到不同位置的嵌入表示時(shí),它可以更好地區(qū)分不同位置的詞語(yǔ),并捕捉到位置信息對(duì)任務(wù)的影響。

Learned Positional Embedding的一個(gè)優(yōu)點(diǎn)是可以根據(jù)任務(wù)的需要進(jìn)行調(diào)整。傳統(tǒng)的位置編碼是固定的,不會(huì)隨著訓(xùn)練進(jìn)行調(diào)整。而Learned Positional Embedding可以通過(guò)反向傳播算法來(lái)優(yōu)化參數(shù),以更好地適應(yīng)不同任務(wù)的需求。

案例片段介紹如下:

將表示位置的position ids放入nn.Embedding,獲取大小為hidden size的positional embedding

  • 優(yōu)點(diǎn):可以隨模型訓(xùn)練進(jìn)行參數(shù)更新

  • 缺點(diǎn):可擴(kuò)展性差,只能表征在max_seq_length以內(nèi)的位置

4.4 Relative Positional Embedding

相對(duì)位置嵌入(Relative Positional Embedding)是一種用于編碼序列中元素之間相對(duì)位置關(guān)系的技術(shù),常用于自然語(yǔ)言處理和序列建模任務(wù)中。

在傳統(tǒng)的位置嵌入方法中,如正弦/余弦位置嵌入(Sinusoidal Positional Embedding)或?qū)W習(xí)位置嵌入(Learned Positional Embedding),每個(gè)位置的嵌入向量是固定的,不考慮其與其他位置的關(guān)系。但在很多任務(wù)中,序列中的元素之間的相對(duì)位置關(guān)系對(duì)于理解序列的語(yǔ)義和結(jié)構(gòu)非常重要。

相對(duì)位置嵌入通過(guò)將每個(gè)元素的位置嵌入向量與其他位置的偏移向量進(jìn)行組合,來(lái)編碼元素之間的相對(duì)距離。這樣,每個(gè)元素的位置嵌入向量會(huì)隨著其與其他元素的位置關(guān)系而變化,從而更好地捕捉序列中的局部結(jié)構(gòu)信息。

相對(duì)位置嵌入常用于Transformer模型中,在自注意力機(jī)制(Self-Attention)中使用。通過(guò)引入相對(duì)位置嵌入,Transformer可以更好地處理序列中元素之間的相對(duì)位置關(guān)系,從而提高序列建模的性能。在相對(duì)位置嵌入中,常見的方法是使用距離編碼矩陣(Distance Encoding Matrix)來(lái)計(jì)算偏移向量,然后與位置嵌入向量相加。

案例片段介紹如下:

在計(jì)算自注意力分?jǐn)?shù)時(shí),在query和key的dot product,以及最終注意力權(quán)重和value矩陣乘時(shí),分別額外添加一個(gè)表示位置m和位置n相對(duì)位置信息的bias,僅依賴于m-n

優(yōu)點(diǎn):

  • 可以直觀記錄詞語(yǔ)的相對(duì)位置信息

  • 模型可接受不同長(zhǎng)度的輸入

缺點(diǎn):

  • 訓(xùn)練和推理速度慢(尤其是長(zhǎng)序列的時(shí)候)

4.5 Rotary Positional Embedding

相關(guān)代碼如下:

4.5.1 2D case

Rotary Positional Embedding - 2D case是一種用于編碼二維序列中位置信息的方法,特別適用于Transformer等模型中的注意力機(jī)制。

在傳統(tǒng)的位置嵌入方法中,如正弦/余弦位置嵌入(Sinusoidal Positional Embedding)或?qū)W習(xí)位置嵌入(Learned Positional Embedding),每個(gè)位置的嵌入向量是固定的,不考慮其與其他位置的關(guān)系。但對(duì)于二維序列,僅使用位置索引的編碼方法無(wú)法很好地捕捉到元素在二維空間中的相對(duì)位置關(guān)系。

Rotary Positional Embedding - 2D case通過(guò)引入角度信息,能夠更好地編碼二維序列中元素的位置關(guān)系。具體來(lái)說(shuō),它使用了旋轉(zhuǎn)操作來(lái)編碼位置信息,這可以看作是將位置嵌入向量繞原點(diǎn)旋轉(zhuǎn)一定的角度。通過(guò)在嵌入向量中引入角度信息,可以更好地表示元素在二維空間中的相對(duì)位置。

在2D案例中,Rotary Positional Embedding通常與自注意力機(jī)制(Self-Attention)一起使用。在注意力機(jī)制中,通過(guò)將位置嵌入向量與注意力權(quán)重相乘,并進(jìn)行相應(yīng)的運(yùn)算,將位置信息引入注意力計(jì)算中。這樣,模型可以更好地理解元素之間的相對(duì)位置關(guān)系,從而提高序列建模的性能。

案例片段介紹如下:

以2D word vector為例,第m個(gè)位置的詞語(yǔ)可以用一個(gè)二維的向量xm表示,我們將它的query和key向量在2D平面上進(jìn)行逆時(shí)針旋轉(zhuǎn),旋轉(zhuǎn)角度取決于位置索引m

  • dog:?jiǎn)卧~dog在第0位,不進(jìn)行旋轉(zhuǎn)

  • The dog:?jiǎn)卧~dog在第1位,旋轉(zhuǎn)角度θ

  • The pig chased the dog:?jiǎn)卧~dog在第4位,旋轉(zhuǎn)角度4

這樣在計(jì)算xm和xnquery,key的點(diǎn)積時(shí),結(jié)果僅和(m-n)θ有關(guān),而非m或n

優(yōu)點(diǎn):

  • 計(jì)算self-attention q,k點(diǎn)積時(shí),保留了詞語(yǔ)的相對(duì)位置信息(不會(huì)因詞語(yǔ)的絕對(duì)位置發(fā)生改變)

  • 前面位置的positional embedding不受后續(xù)新增token的影響(easier to cache)

  • token之間的依賴會(huì)隨著相對(duì)距離的增長(zhǎng)而逐步衰減(符合認(rèn)知,距離越遠(yuǎn)的詞普遍關(guān)聯(lián)不大)

4.5.2 general form

Rotary Positional Embedding - general form是一種用于編碼位置信息的方法,通用形式適用于各種序列數(shù)據(jù),包括一維、二維或其他維度的序列。

在傳統(tǒng)的位置嵌入方法中,如正弦/余弦位置嵌入(Sinusoidal Positional Embedding)或?qū)W習(xí)位置嵌入(Learned Positional Embedding),每個(gè)位置的嵌入向量是固定的,不考慮其與其他位置的關(guān)系。但是,這種方法無(wú)法很好地捕捉到元素在序列中的相對(duì)位置關(guān)系。

Rotary Positional Embedding - general form通過(guò)引入旋轉(zhuǎn)操作,能夠更好地編碼序列中元素的位置關(guān)系。具體來(lái)說(shuō),它使用了旋轉(zhuǎn)矩陣來(lái)對(duì)位置嵌入進(jìn)行變換,這可以看作是將位置嵌入向量繞一個(gè)固定的軸旋轉(zhuǎn)一定的角度。通過(guò)在嵌入向量中引入旋轉(zhuǎn)信息,可以更好地表示元素在序列中的相對(duì)位置。

在一般形式中,Rotary Positional Embedding可以與注意力機(jī)制(Attention Mechanism)一起使用。在注意力機(jī)制中,通過(guò)將位置嵌入向量與注意力權(quán)重相乘,并進(jìn)行相應(yīng)的運(yùn)算,將位置信息引入注意力計(jì)算中。這樣,模型可以更好地理解元素之間的相對(duì)位置關(guān)系,從而提高序列建模的性能。

案例片段介紹如下:

  • 將單詞的詞向量大小設(shè)定為2的倍數(shù)
  • 第m個(gè)位置的詞向量在第i組2D sub-space(即向量中的2i,2i+1元素)的旋轉(zhuǎn)角度為mθ_i,θ_i與i以及詞向量的hidden size有關(guān)

二、From GLM to ChatGLM

1.傳統(tǒng)NLP的挑戰(zhàn)

1.1 挑戰(zhàn)1:傳統(tǒng)NLP vs 復(fù)雜問(wèn)題

傳統(tǒng)NLP(自然語(yǔ)言處理)方法通常用于處理簡(jiǎn)單的文本任務(wù),例如文本分類、命名實(shí)體識(shí)別和情感分析等。這些方法主要依賴于規(guī)則和模式,以及統(tǒng)計(jì)和機(jī)器學(xué)習(xí)算法。

對(duì)于復(fù)雜問(wèn)題,傳統(tǒng)NLP方法可能面臨一些挑戰(zhàn)。復(fù)雜問(wèn)題通常具有多義性、歧義性和上下文依賴性。例如,理解一個(gè)句子的意思可能需要考慮上下文信息和背景知識(shí)。此外,復(fù)雜問(wèn)題還可能涉及多種語(yǔ)言和跨語(yǔ)言的處理。

為了應(yīng)對(duì)復(fù)雜問(wèn)題,研究者們開始使用深度學(xué)習(xí)方法,如循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)和注意力機(jī)制等。這些方法能夠更好地處理語(yǔ)義理解和生成,以及更好地捕捉文本的上下文信息。

復(fù)雜問(wèn)題還可能需要結(jié)合其他領(lǐng)域的知識(shí),例如知識(shí)圖譜、計(jì)算機(jī)視覺(jué)和知識(shí)推理等。這樣可以提供更全面的語(yǔ)義理解和推理能力。

1.2 挑戰(zhàn)2:傳統(tǒng)NLP vs 動(dòng)態(tài)知識(shí)

傳統(tǒng)NLP(自然語(yǔ)言處理)是一種基于規(guī)則和模式的方法,它主要依賴于人工編碼的語(yǔ)言規(guī)則和語(yǔ)法結(jié)構(gòu)來(lái)理解和處理文本。這些規(guī)則和結(jié)構(gòu)需要事先定義,并且通常需要大量的人工工作。

動(dòng)態(tài)知識(shí)(Dynamic Knowledge)則是一種基于知識(shí)圖譜和自動(dòng)學(xué)習(xí)的方法,它能夠根據(jù)實(shí)時(shí)的數(shù)據(jù)來(lái)自動(dòng)更新和擴(kuò)展知識(shí)庫(kù)。動(dòng)態(tài)知識(shí)利用機(jī)器學(xué)習(xí)和圖譜技術(shù),可以從大量的文本和語(yǔ)料庫(kù)中自動(dòng)提取和建立知識(shí)模型。

傳統(tǒng)NLP的一個(gè)主要優(yōu)勢(shì)是其可解釋性,因?yàn)樗械囊?guī)則和模式都是人工定義的,所以可以清楚地理解其工作原理。然而,它也存在一些缺點(diǎn),例如需要大量的人工工作來(lái)編寫和維護(hù)規(guī)則,而且對(duì)于復(fù)雜的語(yǔ)言現(xiàn)象和變化的語(yǔ)言規(guī)則往往無(wú)法適應(yīng)。

相比之下,動(dòng)態(tài)知識(shí)能夠通過(guò)機(jī)器學(xué)習(xí)和自動(dòng)學(xué)習(xí)的方式,自動(dòng)地從大量的文本中提取和建立知識(shí)模型。它可以自動(dòng)學(xué)習(xí)語(yǔ)言現(xiàn)象和規(guī)則的變化,并且可以根據(jù)實(shí)時(shí)的數(shù)據(jù)來(lái)更新和擴(kuò)展知識(shí)庫(kù)。動(dòng)態(tài)知識(shí)的優(yōu)點(diǎn)是其能夠處理復(fù)雜的語(yǔ)言現(xiàn)象和變化的語(yǔ)言規(guī)則,并且具有較強(qiáng)的適應(yīng)性和靈活性。

但動(dòng)態(tài)知識(shí)也存在一些挑戰(zhàn),例如其可解釋性相對(duì)較差,因?yàn)橹R(shí)模型是通過(guò)機(jī)器學(xué)習(xí)自動(dòng)學(xué)習(xí)的,所以很難直觀地理解其工作原理。此外,動(dòng)態(tài)知識(shí)的構(gòu)建和維護(hù)也需要大量的計(jì)算資源和數(shù)據(jù)支持。

案例片段介紹如下:

千億模型的動(dòng)態(tài)知識(shí)欠缺、知識(shí)陳舊、缺乏可解釋性

  • 知識(shí)欠缺:長(zhǎng)尾知識(shí)

    • 例如: 世界第二高的山峰(答案: K2格里峰)
  • 知識(shí)陳日:GPT-3的訓(xùn)練數(shù)據(jù)截止2020年前

  • 不可解釋:缺乏答案的參考源

1.3 挑戰(zhàn)3:傳統(tǒng)NLP vs 人類對(duì)齊

傳統(tǒng)NLP是基于機(jī)器學(xué)習(xí)和統(tǒng)計(jì)的方法,利用大量已標(biāo)注的語(yǔ)料庫(kù)來(lái)訓(xùn)練模型。這些模型可以識(shí)別和理解文本的語(yǔ)法結(jié)構(gòu)、詞義和語(yǔ)義關(guān)系等。傳統(tǒng)NLP方法包括語(yǔ)法分析、詞性標(biāo)注、命名實(shí)體識(shí)別、情感分析等技術(shù)。這些技術(shù)可以自動(dòng)處理大規(guī)模的文本數(shù)據(jù),并提供一些高級(jí)的語(yǔ)言處理功能。

人類對(duì)齊是指通過(guò)人工的方式對(duì)文本進(jìn)行處理和理解。人類對(duì)齊可以是通過(guò)人工標(biāo)注和標(biāo)記的方式,也可以是通過(guò)人工閱讀和理解的方式。人類對(duì)齊可以更準(zhǔn)確地理解文本的含義和語(yǔ)境,尤其在處理一些復(fù)雜的語(yǔ)言結(jié)構(gòu)和語(yǔ)義問(wèn)題時(shí)更具優(yōu)勢(shì)。人類對(duì)齊可以包括人工智能助手和人工翻譯等應(yīng)用。

傳統(tǒng)NLP和人類對(duì)齊兩種方法各有優(yōu)缺點(diǎn)。傳統(tǒng)NLP方法可以在處理大規(guī)模數(shù)據(jù)時(shí)提供高效的處理能力,但在面對(duì)復(fù)雜語(yǔ)義問(wèn)題時(shí)可能存在理解不準(zhǔn)確或無(wú)法捕捉語(yǔ)境的問(wèn)題。而人類對(duì)齊可以更準(zhǔn)確地理解文本的含義和語(yǔ)境,但在大規(guī)模處理和實(shí)時(shí)處理方面可能存在效率和成本的問(wèn)題。

案例片段介紹如下:

例如:請(qǐng)用幾句話給一個(gè)6歲小孩解釋登月

  • 缺少高效"Prompt工程",GPT-3和GLM-130B都很難盡人意

2.從千億模型到ChatGLM的技術(shù)路線

千億模型GLM-130B是一個(gè)大規(guī)模語(yǔ)言模型,具有130億個(gè)參數(shù),用于自然語(yǔ)言處理任務(wù)。它采用了Transformer架構(gòu)和大規(guī)模預(yù)訓(xùn)練技術(shù),可以生成高質(zhì)量的文本。

GLM-130B+是在GLM-130B的基礎(chǔ)上進(jìn)行了改進(jìn)和優(yōu)化。它針對(duì)語(yǔ)言模型的訓(xùn)練過(guò)程進(jìn)行了一些調(diào)整,提升了模型的性能和效果。GLM-130B+在更多的自然語(yǔ)言處理任務(wù)上具有更好的表現(xiàn)。

GLM-130B++是在GLM-130B+的基礎(chǔ)上進(jìn)一步改進(jìn)的版本。它引入了更多的新技術(shù)和優(yōu)化策略,使得模型在處理長(zhǎng)文本、多語(yǔ)種和多任務(wù)上表現(xiàn)更出色。GLM-130B++具有更強(qiáng)大的表達(dá)能力和更好的泛化能力。

ChatGLM模型是基于GLM系列模型的一種變種,專門用于生成對(duì)話文本。它在GLM-130B++的基礎(chǔ)上進(jìn)行了一些改進(jìn),使得模型在對(duì)話生成任務(wù)上更加適用和有效。ChatGLM模型在生成對(duì)話內(nèi)容時(shí)可以更好地理解上下文和語(yǔ)境,并生成更具連貫性和合理性的對(duì)話文本。

3.ChatGLM的應(yīng)用場(chǎng)景

3.1 撰寫博客提綱

3.2 寫郵件

3.3 介紹自己的優(yōu)點(diǎn)缺點(diǎn)

3.4 寫劇本梗概

3.5 寫代碼

3.6 查詢常見知識(shí)/教程

3.7 多輪問(wèn)答

3.8 文字冒險(xiǎn)游戲

三、ChatGLM Demo

完整的課程學(xué)習(xí)地址:完整的課程學(xué)習(xí)地址

1.使用NPU+MindSpore Transformers試用ChatGLM推理

1.1 OpenI啟智運(yùn)行ChatGLM模型

1、到OpenI啟智申請(qǐng)賬號(hào),開啟云腦任務(wù)(NPU)/自己用GPU創(chuàng)建環(huán)境

OpenI啟智申請(qǐng)賬號(hào)地址:https://openi.pcl.ac.cn/user/sign_up


2、創(chuàng)建項(xiàng)目

3、打開新創(chuàng)建的項(xiàng)目,點(diǎn)擊云腦,新建調(diào)試任務(wù)

4、點(diǎn)擊調(diào)試


5、進(jìn)入終端

其他操作如下面1.2小結(jié),這邊只是用OpenI啟智NPU+MindSpore進(jìn)行在線部署調(diào)試,部署結(jié)果如下圖:

1.2 MindSpore運(yùn)行ChatGLM模型

安裝MindSpore和MindSpore Transformers

a) MindSpore安裝:參考:MindSpore官網(wǎng)(如果用OpenI啟智NPU+MindSpore,可以忽略這一步,這步屬于本地部署)

b) MindSpore Transformers安裝:

1、git clone -b dev https://gitee.com/mindspore/mindformers.git

2、cd mindformers

3、bash build.sh

4、如果使用MindSpore1.10版本,請(qǐng)安裝MindFormers 0.6版本(git clone -b r0.6 …)

c) 克隆昇思MindSpore技術(shù)公開課代碼倉(cāng):

git clone https://github.com/mindspore-courses/step_into_llm.git

d)?cd step_into_llm/Season2.step_into_llm/01.ChatGLM/

e) 下載ckpt和tokenizer文件

1、ckpt:wget https://ascend-repo-modelzoo.obs.cn-east-2.myhuaweicloud.com/XFormer_for_mindspore/glm/glm_6b.ckpt

2、tokenizer:wget https://ascend-repo-modelzoo.obs.cn-east-2.myhuaweicloud.com/XFormer_for_mindspore/glm/ice_text.model

f) 運(yùn)行推理部署文件:python cli_demo.py

import os
import platform
import signal
import numpy as np

import mindspore as ms
from mindformers.models.glm import GLMConfig, GLMChatModel
from mindformers.models.glm.chatglm_6b_tokenizer import ChatGLMTokenizer
from mindformers.models.glm.glm_processor import process_response

config = GLMConfig(
    position_encoding_2d=True,
    use_past=True,
    is_sample_acceleration=True)

ms.set_context(mode=ms.GRAPH_MODE, device_target="GPU", device_id=0)
model = GLMChatModel(config)
# https://ascend-repo-modelzoo.obs.cn-east-2.myhuaweicloud.com/XFormer_for_mindspore/glm/glm_6b.ckpt
ms.load_checkpoint("./glm_6b.ckpt", model)
# https://ascend-repo-modelzoo.obs.cn-east-2.myhuaweicloud.com/XFormer_for_mindspore/glm/ice_text.model
tokenizer = ChatGLMTokenizer('./ice_text.model')
os_name = platform.system()
clear_command = 'cls' if os_name == 'Windows' else 'clear'
stop_stream = False
def build_prompt(history):
    prompt = "歡迎使用 ChatGLM-6B 模型,輸入內(nèi)容即可進(jìn)行對(duì)話,clear 清空對(duì)話歷史,stop 終止程序"
    for query, response in history:
        prompt += f"\n\n用戶:{query}"
        prompt += f"\n\nChatGLM-6B:{response}"
    return prompt
def signal_handler():
    global stop_stream
    stop_stream = True
def main():
    history = []
    global stop_stream
    print("歡迎使用 ChatGLM-6B 模型,輸入內(nèi)容即可進(jìn)行對(duì)話,clear 清空對(duì)話歷史,stop 終止程序")
    while True:
        query = input("\n用戶:")
        if query.strip() == "stop":
            break
        if query.strip() == "clear":
            history = []
            os.system(clear_command)
            print("歡迎使用 ChatGLM-6B 模型,輸入內(nèi)容即可進(jìn)行對(duì)話,clear 清空對(duì)話歷史,stop 終止程序")
            continue
        count = 0

        inputs = tokenizer(query)
        outputs = model.generate(np.expand_dims(np.array(inputs['input_ids']).astype(np.int32), 0),
                                 max_length=config.max_decode_length, do_sample=False, top_p=0.7, top_k=1)

        response = tokenizer.decode(outputs)
        response = process_response(response[0])
        history = history + [(query, response)]

        if stop_stream:
            stop_stream = False
            break
        else:
            count += 1
            if count % 8 == 0:
                os.system(clear_command)
                print(build_prompt(history), flush=True)
                signal.signal(signal.SIGINT, signal_handler)
        os.system(clear_command)
        print(build_prompt(history), flush=True)
if __name__ == "__main__":
    main()

總結(jié)

MindSpore作為一種強(qiáng)大的深度學(xué)習(xí)框架,提供了豐富的工具和功能,使得模型的開發(fā)和訓(xùn)練更加高效和靈活。其支持端到端的深度學(xué)習(xí)解決方案,可以應(yīng)用于各種任務(wù)和場(chǎng)景。而ChatGLM作為一種生成式語(yǔ)言模型,通過(guò)對(duì)話的方式生成自然流暢的文本,可以用于智能對(duì)話和智能客服等應(yīng)用。

結(jié)合使用MindSpore和ChatGLM,我們可以實(shí)現(xiàn)更加智能和交互性的應(yīng)用。首先,MindSpore可以用來(lái)訓(xùn)練ChatGLM模型,通過(guò)大量的對(duì)話數(shù)據(jù)進(jìn)行學(xué)習(xí),使得生成的文本更加貼近真實(shí)的對(duì)話。MindSpore提供了分布式訓(xùn)練的功能,可以在多個(gè)設(shè)備和計(jì)算節(jié)點(diǎn)上進(jìn)行模型的并行訓(xùn)練,加速訓(xùn)練過(guò)程。其自動(dòng)微分功能也可以幫助優(yōu)化ChatGLM模型的訓(xùn)練效果。

通過(guò)MindSpore的強(qiáng)大功能和ChatGLM的生成式語(yǔ)言模型,我們可以構(gòu)建出高效、準(zhǔn)確和自然流暢的智能對(duì)話系統(tǒng),提升用戶體驗(yàn)并開拓更多的應(yīng)用領(lǐng)域。這種結(jié)合使用不僅有助于推動(dòng)機(jī)器學(xué)習(xí)和人工智能的發(fā)展,還為帶來(lái)更多的創(chuàng)新和可能性。

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-839259.html

點(diǎn)擊關(guān)注,第一時(shí)間了解華為云新鮮技術(shù)~

?

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

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(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)文章

  • 二十萬(wàn)字帶你入門C語(yǔ)言-史上最強(qiáng)C語(yǔ)言教程(匯總篇)

    至此,史上最強(qiáng)C語(yǔ)言教程系列已經(jīng)全部完成,今天是給大家來(lái)做一個(gè)匯總,筆者目前已經(jīng)完成了C語(yǔ)言階段的學(xué)習(xí),一直以來(lái)感謝大家的陪伴與支持,筆者后續(xù)還會(huì)繼續(xù)更新C++、數(shù)據(jù)結(jié)構(gòu)、Linux、Mysql數(shù)據(jù)庫(kù)方面的教程,希望大家能夠多做支持! 1.初識(shí)C語(yǔ)言 史上最強(qiáng)C語(yǔ)言教程

    2024年02月15日
    瀏覽(39)
  • 從零到Kafka:萬(wàn)字帶你體驗(yàn)Spring Boot整合消息驅(qū)動(dòng)的奇妙之旅

    從零到Kafka:萬(wàn)字帶你體驗(yàn)Spring Boot整合消息驅(qū)動(dòng)的奇妙之旅

    主頁(yè)傳送門:?? 傳送 Spring boot : | 基于Spring的開源框架,用于簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開發(fā)過(guò)程 特性: | 快速開發(fā)、輕量級(jí)、無(wú)代碼生成和獨(dú)立運(yùn)行等特性 優(yōu)勢(shì): | 簡(jiǎn)化配置,提供自動(dòng)配置,減少開發(fā)時(shí)間 應(yīng)用場(chǎng)景: | 適用于微服務(wù)架構(gòu)、云原生應(yīng)用等場(chǎng)景 環(huán)境

    2024年02月05日
    瀏覽(23)
  • 萬(wàn)字長(zhǎng)文帶你快速了解整個(gè)Flutter開發(fā)流程

    萬(wàn)字長(zhǎng)文帶你快速了解整個(gè)Flutter開發(fā)流程

    可以用以下提綱在短時(shí)間內(nèi)了解 Flutter 的開發(fā)流程時(shí),經(jīng)過(guò)本次培訓(xùn),你可以大致了解Flutter的開發(fā)流程 Flutter 是什么?為什么選擇 Flutter? 跨平臺(tái)開發(fā)的優(yōu)勢(shì):一套代碼多平臺(tái)運(yùn)行。 Flutter 是由 Google 開發(fā)的開源用戶界面框架,用于創(chuàng)建跨平臺(tái)移動(dòng)應(yīng)用、Web 應(yīng)用和桌面應(yīng)用。

    2024年02月11日
    瀏覽(25)
  • 800字帶你弄懂Http請(qǐng)求和響應(yīng)

    800字帶你弄懂Http請(qǐng)求和響應(yīng)

    Hello ,我是小索奇,今天給大家分享一下計(jì)算機(jī)網(wǎng)絡(luò)中的請(qǐng)求和響應(yīng),這些在javaWeb中也是必不可少的哈 HTTP是一種用于在Web應(yīng)用程序之間傳遞數(shù)據(jù)的協(xié)議,HTTP請(qǐng)求和響應(yīng)是客戶端與服務(wù)器之間進(jìn)行通信的基本單位。我們可以用一個(gè)生活中的場(chǎng)景來(lái)類比它們的工作原理。 就像你

    2024年02月01日
    瀏覽(24)
  • 初始MyBatis,w字帶你解MyBatis

    初始MyBatis,w字帶你解MyBatis

    目錄 一.什么是mybatis mybatis的概念 mybatis的優(yōu)勢(shì) 二.mybatis相對(duì)于JDBC,框架幫我們做了哪些事情? 三.對(duì)包含mybatis的程序進(jìn)行實(shí)操 1.創(chuàng)建項(xiàng)目 2.修改配置文件 3.準(zhǔn)備數(shù)據(jù)庫(kù)相關(guān)內(nèi)容 4.準(zhǔn)備對(duì)應(yīng)的xml文件和對(duì)應(yīng)的mapper接口 5.定義對(duì)應(yīng)的sql語(yǔ)句 6.準(zhǔn)備對(duì)應(yīng)的java類 四.占位符 五.多表查

    2024年02月04日
    瀏覽(26)
  • Python——狂肝兩萬(wàn)字帶你學(xué)會(huì)【類與對(duì)象】

    Python——狂肝兩萬(wàn)字帶你學(xué)會(huì)【類與對(duì)象】

    目錄 01-初始對(duì)象 生活中的數(shù)據(jù)組織 程序中的數(shù)據(jù)組織? 使用對(duì)象組織數(shù)據(jù) 總結(jié)01 02-類的成員方法 類的定義和使用 成員變量和成員方法? 成員方法的定義語(yǔ)法 ?注意事項(xiàng) 成員方法——代碼演示? 總結(jié)02 03-類和對(duì)象 現(xiàn)實(shí)世界的事物和類 類和對(duì)象 使用類和對(duì)象描述現(xiàn)實(shí)事物

    2024年02月02日
    瀏覽(17)
  • Java VS Go 還在糾結(jié)怎么選嗎,(資深后端4000字帶你深度對(duì)比)

    Java VS Go 還在糾結(jié)怎么選嗎,(資深后端4000字帶你深度對(duì)比)

    今天我們來(lái)聊一下Go 和Java,本篇文章主要是想給對(duì)后臺(tái)開發(fā)的初學(xué)者和有意向選擇Go語(yǔ)言的有經(jīng)驗(yàn)的程序員一些建議,希望能幫助各位自上而下的來(lái)了解一下Java和Go的全貌。 作為一個(gè)多年的Java后端開發(fā),用的時(shí)間久了就會(huì)發(fā)現(xiàn)Java語(yǔ)言一些問(wèn)題,所謂婚前風(fēng)花雪月,婚后柴米

    2024年02月04日
    瀏覽(26)
  • 《萬(wàn)字長(zhǎng)文帶你解讀AIGC》系列之入門篇

    《萬(wàn)字長(zhǎng)文帶你解讀AIGC》系列之入門篇

    歡迎關(guān)注『CVHub』官方微信公眾號(hào)! 隨著 ChatGPT 的病毒式傳播, 生成式人工智能 ( AIGC , a.k.a AI-generated content )因其分析和創(chuàng)造 文本 、 圖像 、 視頻 以及其他方面的出眾能力而儼然成為當(dāng)下最火熱的投資賽道,沒(méi)有之一。在如此鋪天蓋地的信息轟炸下,每個(gè)人似乎難以置身

    2024年02月09日
    瀏覽(32)
  • 萬(wàn)字長(zhǎng)文帶你重溫Elasticsearch ,這下完全懂了!

    萬(wàn)字長(zhǎng)文帶你重溫Elasticsearch ,這下完全懂了!

    生活中的數(shù)據(jù) 搜索引擎是對(duì)數(shù)據(jù)的檢索,所以我們先從生活中的數(shù)據(jù)說(shuō)起。我們生活中的數(shù)據(jù)總體分為兩種: 結(jié)構(gòu)化數(shù)據(jù) 非結(jié)構(gòu)化數(shù)據(jù) 結(jié)構(gòu)化數(shù)據(jù): 也稱作行數(shù)據(jù),是由二維表結(jié)構(gòu)來(lái)邏輯表達(dá)和實(shí)現(xiàn)的數(shù)據(jù),嚴(yán)格地遵循數(shù)據(jù)格式與長(zhǎng)度規(guī)范,主要通過(guò)關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行存

    2024年02月22日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包