LLM大模型學習聖經:從0到1喫透Transformer技術底座

文章很長,且持續更新,建議收藏起來,慢慢讀!瘋狂創客圈總目錄 博客園版 爲您奉上珍貴的學習資源 :

免費贈送 :《尼恩Java面試寶典》 持續更新+ 史上最全 + 面試必備 2000頁+ 面試必備 + 大廠必備 +漲薪必備
免費贈送 :《尼恩技術聖經+高併發系列PDF》 ,幫你 實現技術自由,完成職業升級, 薪酬猛漲!加尼恩免費領
免費贈送 經典圖書:《Java高併發核心編程(卷1)加強版》 面試必備 + 大廠必備 +漲薪必備 加尼恩免費領
免費贈送 經典圖書:《Java高併發核心編程(卷2)加強版》 面試必備 + 大廠必備 +漲薪必備 加尼恩免費領
免費贈送 經典圖書:《Java高併發核心編程(卷3)加強版》 面試必備 + 大廠必備 +漲薪必備 加尼恩免費領

免費贈送 資源寶庫: Java 必備 百度網盤資源大合集 價值>10000元 加尼恩領取


LLM大模型學習聖經:從0到1喫透Transformer技術底座

尼恩特別說明: 尼恩的文章,都會在 《技術自由圈》 公號 發佈, 並且維護最新版本。 如果發現圖片 不可見, 請去 《技術自由圈》 公號 查找

尼恩:LLM大模型學習聖經PDF的起源

在40歲老架構師 尼恩的讀者交流羣(50+)中,經常性的指導小夥伴們改造簡歷。

經過尼恩的改造之後,很多小夥伴拿到了一線互聯網企業如得物、阿里、滴滴、極兔、有贊、希音、百度、網易、美團的面試機會,拿到了大廠機會。

然而,其中一個成功案例,是一個9年經驗 網易的小夥伴,拿到了一個年薪近80W的大模型架構offer,逆漲50%,那是在去年2023年的 5月。

不到1年,小夥伴也在團隊站穩了腳跟,成爲了名副其實的大模型架構師。

目前,他管理了10人左右的團隊,包括一個2-3人的python算法小分隊,包括一個3-4人Java應用開發小分隊,包括一個2-3人實施運維小分隊。並且他們的產品也收到了豐厚的經濟回報, 他們的AIGC大模型產品,好像已經實施了不下10家的大中型企業客戶。

當然,尼恩更關注的,主要還是他的個人的職業身價。

小夥伴反饋,不到一年,他現在是人才市場的香饃饃。怎麼說呢?他現在職業機會,不知道有多少, 讓現在一個機會沒有的小夥伴們羨慕不已。

只要他在BOSS上把簡歷一打開, 就有大量的獵頭、甲方公司挖他,機會可以說是非常非常非常多,給他拋繡球的不知道有多少:

img

並且來找他的,很多都是按照P8標準,年薪200W來的。

相當於他不到1年時間, 職業身價翻了1倍多,可以拿到年薪 200W的offer了。

img

回想一下,去年小夥伴來找尼恩的時候, 可謂是 令人唏噓。

當時,小夥伴被網易裁員, 自己折騰 2個月,沒什麼好的offer, 才找尼恩求助。

當時,小夥伴其實並沒有做過的大模型架構, 僅僅具備一些 通用架構( JAVA 架構、K8S雲原生架構) 能力,而且這些能力還沒有完全成型。 特別說明,他當時 沒有做過大模型的架構,對大模型架構是一片空白。

尼恩在指導他做通用架構( JAVA 架構、K8S雲原生架構), 當時候也是 壯着膽子, 死馬當作活馬,指導他改造爲 大模型架構師。

回憶起當時決策的出發點,主要有兩個:

(1)架構思想和體系,本身和語言無關,和業務也關係不大,都是通的。

(2)小夥伴本身也熟悉一點點深度學習,懂python,懂點深度學習的框架,至少,demo能跑起來。

(3)大模型面試稀缺,反正面試官也不是太懂。

基於這個3個,尼恩大膽的決策,指導他往大模型架構走,先改造簡歷,然後去面試大模型的工程架構師,特別注意,這個小夥伴面的不是大模型算法架構師。

沒想到,由於尼恩的大膽指導, 小夥伴成了。

沒想到,由於尼恩的大膽指導, 小夥伴成了, 而且是大成,實現了真正的逆天改命。

既然有一個這麼成功的案例,尼恩能想到的,就是希望能幫助更多的社羣小夥伴, 成長爲大模型架構師,也去逆天改命。

於是,從2024年的4月份開始,尼恩開始寫 《LLM大模型學習聖經》,幫助大家穿透大模型,走向大模型之路。

img

《LLM大模型學習聖經》應該是一個很大的系列,包括本文 《LLM大模型學習聖經:從0到1喫透Transformer技術底座》,這個是一個基礎理論篇。另外好戲剛剛開始, 後面會有實戰篇,架構篇等等出來。

在尼恩的架構師哲學中,開宗明義:架構和語言無關,架構的思想和模式,本就是想通的。

架構思想和體系,本身和語言無關,和業務也關係不大,都是通的。

所以,尼恩用自己的架構內功,以及20年時間積累的架構洪荒之力,通過《LLM大模型學習聖經》,給大家做一下系統化、體系化的LLM梳理,使得大家內力猛增,成爲大模型架構師,然後實現”offer直提”, 逆天改命。

尼恩 《LLM大模型學習聖經》PDF 系列文檔,會延續尼恩的一貫風格,會持續迭代,持續升級。

這個文檔將成爲大家 學習大模型的殺手鐗, 此文當最新PDF版本,可以來《技術自由圈》公號獲取。

大模型定義

大語言模型(英文:Large Language Model,縮寫LLM),即大型語言模型 (LLM),

大型語言模型 (LLM) 之所以大,是指 具有大規模參數和複雜計算結構(超過 10 億個參數),LLM通常基於 Transformer 模型架構,由深度神經網絡構建,對海量數據進行預訓練處理。

LLM的特點是規模龐大,包含數十億的參數,幫助它們學習語言數據中的複雜模式。大模型的底層轉換器包含一系列神經網絡,分爲編碼器和解碼器,且具有自注意力功能。

下面是來自 維基百科的 解釋:

一個大型語言模型(LLM)以其實現通用語言理解和生成的能力而引人注目。LLM通過在計算密集的自監督和半監督訓練過程中從文本文檔中學習統計關係來獲得這些能力。LLM是遵循Transformer架構的人工神經網絡。

簡單來說,兩個特點:

(1) LLM模型基本上是一個具有大量參數/海量參數的神經網絡。

模型的大小即參數數量。 模型越大,參數越多。

例如,GPT-3有1750億個參數,而GPT-4可能有超過1萬億個參數。

(2)LLM是在大量文本數據集(如書籍、網站或用戶生成內容)上進行訓練的。

大型語言模型 (LLM) 是一種在海量文本數據上進行訓練的深度學習模型,用於學習語言的模式、語法、語義和語境。

LLM旨在理解和生成新的內容,LLM以自然的方式,按照提示,生成新文本或者其他形式的內容。

ChatGPT這類的預訓練模型在訓練過程中需使用的數據樣本較多。ChatGPT接受了從互聯網上抓取的數千億個分詞的訓練,而龐大的訓練數據集包含有害言論,會被人工智能學習。

對於ChatGPT這樣的語言模型,如果沒有人工標註來篩除一些不恰當的內容,那麼它不僅會給出一些錯誤的信息,更會對用戶造成心理不適。這就需要數據的標註。

由於樣本數非常多,數據標註的需求較高。數據標註的工作流程包括數據標註、打標籤、分類、調整和處理等,是構建AI模型的數據準備和預處理工作中不可或缺的一環。

大模型的表現形式

對很多大模型小白來說,一個直觀的問題是:大模型的表現形式,是什麼?

是一個可以執行的程序?

是一個數據庫?

實際上, 一個訓練好的大模型,是一個 特定格式的文件。

比如,Meta 開發並“開放”的LLaMA-2大模型,是其此前發佈的大模型LLaMA的升級迭代版本,是一個巨大進步的版本。
LLaMA-2是一個基礎模型,Meta開放了兩個版本,一個是純無監督訓練出來的基礎模型,另一個是在基礎模型之上進行有監督微調SFT和人類反饋的強化學習RLHF進行訓練的Chat模型。

所發佈的SFT、RLHF兩個版本中,都提供了7B、13B 和70B的三個參數規模的模型。

LLaMA-2-70B大模型,表現形式就是下面的一個文件

Llama 原始的意思是“美洲駝【A llama is a South American animal with thick hair, which looks like a small camel without a hump.】”,也因此,許多基於 LLaMA的模型都以動物名稱來命名。

在上面的圖像中,parameters 文件是 Meta's Llama-2-70b model,其大小爲140GB,包含70億個參數(以數字格式表示)。run.c 文件是推理程序,使用這些參數進行模型推理。

這是huggingface設計的一種新格式,大致就是以更加緊湊、跨框架的方式存儲Dict[str, Tensor],主要存儲的內容爲tensor的名字(字符串)及內容(權重)。

img

其官網對文件格式的詳細內容進行了解釋,本質上就是一個JSON文件加上若干binary形式的buffer。

對於tensor而言,它只存儲了數據類型、形狀、對應的數據區域起點和終點。

因此它只支持存儲dense and contiguous tensor,也就是稠密張量(沒有stride,沒有view等信息)。

本質上,它就像存儲了一大塊連續的內存,甚至可以直接把文件映射到內存裏(使用Python的mmap模塊)。

.safetensors支持五種框架,包括pytorch、TensorFlow、flax(jax)、paddle(paddlepaddle)、numpy。

對每個框架都提供了save/save_file/load/load_file這四個函數:

  • load( data: bytes, device = 'cpu' ) → Dict[str, Tensor]
  • load_file( filename: Union[str, os.PathLike], device = 'cpu' ) → Dict[str, Tensor]
  • save( tensors: Dict[str, Tensor], metadata: Optional = None ) → bytes
  • save_file( tensors: Dict, filename: Union[str, os.PathLike], metadata: Optional = None ) → None

對於numpy,函數沒有device參數;Tensor類型根據具體的框架替換成框架的具體類,例如torch.Tensor或者np.array

訓練這些超大型模型非常昂貴。像GPT-3這樣的模型的訓練成本高達數百萬美元。

Train on gpu concept

截至今日,最傑出的模型GPT-4不再是單一模型,而是由多個模型混合而成。每個模型都是在特定領域進行訓練或微調,並在推理過程中共同發揮作用,以實現最佳性能。

Transformer 深度學習架構

LLM (Large Language Model) 是怎麼來的? 或者 從何而來?

簡單來說,LLM (Large Language Model) 是通過深度學習得到的。

LLM (Large Language Model) 是指由大量參數組成的神經網絡模型,用於自然語言處理任務,例如文本生成、語言理解等。

通常情況下,LLM基於Transformer架構構建,GPT系列模型就是基於Transformer的架構。

因此,LLM和Transformer之間存在密切的關聯,LLM通常是Transformer的一種具體實現。

什麼是Transformer?

Transformer是一種常用於構建語言模型的深度學習架構,它採用自注意力機制來處理序列數據,被廣泛應用於機器翻譯、文本生成等任務中。

2018年10月,Google發出一篇論文 《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》BERT模型橫空出世,並橫掃NLP領域11項任務的最佳成績!

而在BERT中發表重要作用的結構就是Transformer,之後又相繼出現XLNET,roBERT等模型擊敗了BERT,但是他們的核心沒有變,任然是:Transformer

Transformer 網絡架構架構由 Ashish Vaswani 等人在 Attention Is All You Need一文中提出,並用於機器翻譯任務,和以往網絡架構有所區別的是,該網絡架構中,編碼器和解碼器沒有采用 RNN 或 CNN 等網絡架構,而是採用完全依賴於注意力機制的架構。

Transformer改進了RNN被人詬病的訓練慢的特點,利用self-attention可以實現快速並行,Transformer網絡架構如下所示:

img

張量(Tensor)

對於AI小白來說,咱們還是從最爲基礎的 大模型 數據類型開始講起。

和Java中的基礎操作類型 是Object類似的, LLM中,基本的操作數據類型,是張量。

img

張量(Tensor)是一種數學概念,在機器學習和深度學習領域中經常被使用。在數學上,張量可以理解爲多維數組或矩陣的推廣。

標量是0維張量,向量是1維張量,矩陣是2維張量

而在深度學習中,我們經常處理的是高維張量,它們可以是3維、4維甚至更高維的數組。

在深度學習中,張量通常用來表示數據、權重和偏差等。

例如,圖像可以表示爲三維張量,其中的每個維度分別表示圖像的高度、寬度和通道數(例如RGB顏色通道)。

神經網絡的層級和操作也可以被表示爲張量操作,這樣就可以在整個網絡中傳遞和處理數據。

因此,張量在深度學習中扮演了非常重要的角色。

張量和矩陣的關係,可以說矩陣是二維張量的一種特殊情況。

具體來說:

  1. 矩陣是二維張量:在數學上,矩陣可以被認爲是一個二維的數組,它包含行和列。因此,矩陣可以被看作是一個二維張量。
  2. 張量是矩陣的推廣:張量可以是任意維度的數組,而不僅限於二維。因此,張量是對矩陣概念的推廣,它可以是零維(標量)、一維(向量)、二維(矩陣),以及更高維度的數組。
  3. 張量包含了更多的信息:相對於矩陣而言,張量可以容納更多的維度信息,因此在處理更加複雜的數據結構時更加靈活。

總之,可以將矩陣看作是二維張量的一種特殊情況,而張量則是對矩陣概念的推廣,可以表示更加豐富和複雜的數據結構。

張量之間的點積運算矩陣乘積運算

在數學和深度學習領域中,張量的相乘通常涉及到張量之間的點積(內積)運算或張量與矩陣的乘法運算。

下面將分別介紹這兩種情況:

  • 張量之間的點積運算
  • 張量與矩陣的乘法運算

張量之間的點積運算:

以二維張量爲例。如果兩個二維張量具有相同的形狀(例如都是形狀爲 (a, b) 的張量),那麼它們之間的點積運算就等同於矩陣之間的點積運算。

點積dot product(又叫內積、數量積)

設二維空間內有兩個向量 imgimg ,定義它們的數量積(又叫內積、點積)爲以下實數:

img

更一般地,n維向量的內積定義如下:

img

張量之間的乘法運算

張量與張量的乘法運算 是將張量與張量相乘。

張量之間的乘法運算,通常需要考慮張量之間的形狀是否兼容。

以二維張量(矩陣)爲例。

Aimg 的矩陣,Bimg 的矩陣,那麼稱 img 的矩陣C爲矩陣AB的乘積,記作 img

其中矩陣C中的第 img行第 img 列元素可以表示爲:

img

矩陣相乘的前提條件:

矩陣A 的形狀是m\times p,矩陣B 的形狀是p\times n,C 的形狀是m\times n

有兩個矩陣A, B如下:

矩陣A的維數爲3x2,矩陣B的維數爲2x3,那麼A、B相乘的結果矩陣C應該爲3x3,其中m=3,p=2,n=3

img

根據公式img,其中i, j取值範圍爲[1, 3], p=2

得出矩陣C各個元素爲如下表格

img

即矩陣C爲3x3的矩陣

img

簡單地記: 結果矩陣C的第(i, j)個元素爲矩陣A的第 i 行與矩陣B的第 j 列分別相乘後求和的結果。

需要注意的是,在實際的深度學習任務中,通常會使用專門優化過的張量庫(如TensorFlow或PyTorch),這些庫提供了高效的張量操作和廣泛的運算支持,使得對於多維張量的操作更加簡潔和高效

大模型的架構

大型語言模型(LLM)通常採用 Transformer 架構。

Transformer的中文翻譯是“變換器”或“轉換器”。

Transformer是一種深度學習模型架構,最初由Vaswani等人在2017年的論文中提出,用於自然語言處理任務,如機器翻譯。

隨後,Transformer架構被廣泛應用於各種語言任務,併成爲許多大型語言模型(如GPT系列、BERT等)的基礎。

Transformer架構的核心是自注意力機制(self-attention mechanism),它使得模型能夠同時考慮輸入序列中的所有位置,從而在處理長距離依賴關係時表現出色。此外,Transformer還包括位置編碼(position encoding)和前饋神經網絡(feedforward neural network)等組件。

大型語言模型通常會對Transformer架構進行擴展和改進,以處理更大的數據集和更復雜的語言任務。

例如,GPT系列模型將Transformer架構與自監督學習相結合,通過對大規模文本數據進行預訓練,從而使模型具有廣泛的語言理解和生成能力。

總的來說,大型語言模型的架構基於Transformer,但會根據具體任務和性能需求進行調整和擴展,以實現更好的性能和效果。在LLM出現之前,基於 神經網絡的 機器學習 訓練 受到相對較小的數據集的限制,並且對於上下文理解的能力非常有限。這意味着早期的模型無法像人類一樣理解文本。

當這篇論文首次發表時,其旨在用於訓練語言翻譯模型。然而,OpenAI團隊發現變壓器架構是字符預測的關鍵解決方案。一旦在整個互聯網數據上進行了訓練,該模型有可能理解任何文本的上下文,並且能夠像人類一樣連貫地完成任何句子。

以下是一個圖示,展示了模型訓練過程中發生的情況:

Llm diagram1

Transformer由論文《Attention is All You Need》提出,現在是谷歌雲TPU推薦的參考模型。

論文相關的Tensorflow的代碼可以從GitHub獲取,其作爲Tensor2Tensor包的一部分。

哈佛的NLP團隊也實現了一個基於PyTorch的版本,並註釋該論文。

在本文中,我們將試圖把模型簡化一點,並逐一介紹裏面的核心概念,希望讓普通讀者也能輕易理解。

Attention is All You Need:Attention Is All You Need

Transformer 整體結構

首先介紹 Transformer 的整體結構,下面以 一個簡單的翻譯實例進行說明。

img

簡單梳理一下,大概包括下面的幾個部分:

img

上的圖,如果大家看不懂, 是沒有關係的。

這篇文章有3萬多字, 咱們剛開始看呢?等看完了,大家都懂了。

讓我們首先把 Transformer 模型看作一個黑盒子。 在機器翻譯應用中,它會接收一種語言的句子,並輸出其在另一種語言中的翻譯。

img

中文 "技術自由圈"的翻譯,可以是 "Technical Freedom Circle"

那麼,Transformer 怎麼進行這種翻譯呢?下圖是 Transformer 用於中英文翻譯的整體結構:

img

從圖可以看到 Transformer 的整體結構,由 Encoder 和 Decoder 兩個部分組成

左邊是 Encoder 編碼器, 右邊是 Decoder 解碼器,Encoder 和 Decoder 都包含 6 個 block。

每個編碼器都分爲兩個子層:

img

一個編碼器在結構上都是相同的(但它們不共享權重), 包括兩個子層,具體如下:

  • 自注意力層:在這一層,每個詞會觀察周圍的詞,以找出與自己相關的上下文信息。

    編碼器的輸入首先通過一個自注意力層流過 ,自注意力層 幫助編碼器在編碼特定詞語時,同時關注輸入句子的中其他分詞。

    換句話說,自注意力層使模型能夠關注序列中不同位置之間的關係(上下文信息),而不是簡單地按順序逐個處理。每個位置的輸出都可以同時受到其他位置的影響,從而幫助模型更好地理解整個序列。

    有關自注意力層 詳細內容,稍後,尼恩再給大家展開介紹。

  • 前饋神經網絡 層:在這一層,每個詞會根據自己收集到的上下文信息,進行信息的整合和處理。

    自注意力層的輸出被饋送到一個前饋神經網絡,完全相同的前饋網絡被獨立地應用到每個位置。

    前饋神經網絡層是一種由多個神經元組成的基本神經網絡結構,用於對輸入數據進行加權求和並通過激活函數處理,以產生輸出。

    前饋層由神經元組成,這些神經元是可以計算其輸入加權和的數學函數。前饋層之所以強大,是因爲它有大量的連接。例如,GPT-3 的前饋層規模很大:輸出層有 12288 個神經元(對應模型的 12288 維詞向量),隱藏層有 49152 個神經元。

    有關前饋神經網絡 層 詳細內容,稍後,尼恩再給大家展開介紹。

每個Decoder解碼器都分爲三個子層,具體如下圖:

img

每個Decoder解碼器三個子層,具體如下:

  • 自注意力層:在這一層,每個詞會觀察周圍的詞,以找出與自己相關的上下文信息。

  • Encoder-Decoder-Attention(編碼器-解碼器-注意力)層:注意力機制允許解碼器在生成目標序列的每個元素時,動態地關注輸入序列的不同部分。這使得解碼器能夠更有效地利用輸入序列的信息,提高翻譯或生成的質量。

  • 前饋神經網絡 層:在這一層,每個詞會根據自己收集到的上下文信息,進行信息的整合和處理。

40歲老架構師尼恩提示:大模型比較難,功力淺的不容易懂。 這部分內容如果不懂,可以稍後去學習技術自由圈社羣對應的配套視頻《從0到1穿透LLM大模型架構》,具體請參見尼恩的公號,技術自由圈

Transformer 的工作流程

現在我們已經瞭解了模型的主要組件,讓我們開始看看各種向量/張量以及它們在這些組件之間是如何流動的,以將經過訓練的模型的輸入轉換爲輸出。

Transformer 的工作流程大體如下:

第一步:獲取輸入句子的每一個分詞的表示向量 X

表示向量X分爲兩個部分:

  • 分詞的 Embedding(Embedding就是從原始數據提取出來的Feature)
  • 分詞位置 Embedding (位置 Feature)相加得到。

img

這些表示向量放一起,組合成一個 X 的向量矩陣。 如上圖所示,每一行是一個分詞的表示向量X。

這裏,分詞向量矩陣用 X[n,d]表示, n 是句子中分詞個數,d 是表示向量的維度 (d=4)。

上面的例子, X[3,4], 3 是句子中分詞個數,4 是表示向量的維度。

ChatGPT 的 Embedding 向量維度,可以在數百到數千之間,具體取決於模型的規模和複雜性。

例如,對於較小規模的 ChatGPT 模型,可能會選擇較低維度的 Embedding 向量,如 256 維或 512 維。而對於更大規模的 ChatGPT 模型,Embedding 向量的維度可能會更高,如 1024 維或 2048 維。

另外,Embedding 向量的維度在 ChatGPT 中是一個可以調整的超參數,通常會根據模型的性能和資源的可用性進行優化選擇。維度取決於模型的配置和訓練過程中的超參數設置。

一步登天,從小白到AI架構。對於AI小白來說,這裏有個基礎的概念: 什麼是嵌入(Embedding)Embedding?

在人工智能中,嵌入(Embedding)Embedding就是從原始數據提取出來的特徵向量(Feature)。

嵌入(Embedding)的直觀意思是將高維度的離散數據(如分詞、字符、類別等)映射到低維度的連續向量空間中。這種映射使得原始數據可以在向量空間中表示爲密集的、連續的向量,而不是稀疏的、離散的表示。

舉個例子,對於自然語言處理任務,我們可以使用嵌入技術將分詞映射到低維度的向量空間中。這樣做的好處是可以捕捉分詞之間的語義相似性和關聯性,使得模型能夠更好地理解和處理自然語言文本。

嵌入在圖像處理、推薦系統、序列建模等領域也有廣泛的應用。它們可以幫助模型更好地理解和表示數據,從而提高模型的性能和泛化能力。嵌入(Embedding)實例非常之多:

  1. 詞嵌入(Word Embedding):在自然語言處理任務中,詞嵌入是將分詞映射到低維度的向量空間中的常見技術。例如,使用詞嵌入技術可以將每個分詞表示爲一個具有固定長度的向量,使得模型能夠更好地理解分詞之間的語義關係和上下文信息。
  2. 圖像嵌入(Image Embedding):在圖像處理任務中,圖像嵌入是將圖像映射到低維度的向量空間中的技術。通過圖像嵌入,可以將每個圖像表示爲一個連續的向量,使得模型能夠更好地理解圖像的語義信息和特徵。
  3. 用戶嵌入(User Embedding):在推薦系統中,用戶嵌入是將用戶映射到低維度的向量空間中的技術。User Embedding將用戶的特徵和行爲映射到一個低維度的向量空間中,以便機器學習模型能夠更好地理解和處理用戶的特徵和行爲。通過用戶嵌入,可以將用戶的偏好和行爲表示爲一個向量,從而幫助模型更好地理解用戶的興趣和需求,提高推薦的準確性。User Embedding 嵌入可以幫助模型更好地理解用戶之間的相似性和差異性,從而提高模型在個性化推薦、用戶分類等任務上的性能。

這些是嵌入在人工智能中常見的實例,它們可以幫助模型更好地理解和表示數據,從而提高模型的性能和泛化能力。

第二步: 通過Encoders,將表示向量矩陣 X, 編碼成爲 編碼 矩陣 Y

將得到的分詞表示向量矩陣作爲input, 傳入 Encoders中,經過 6 個 Encoder block 後可以得到句子所有分詞的編碼信息矩陣 Y,如下圖。

img

分詞向量矩陣用 X[n,d]表示, n 是句子中分詞個數,d 是表示向量的維度 (d=4)。

上圖中,每一個 Encoder block 輸出的矩陣,在維度上,與輸入矩陣完全一致。

第三步:通過Decoders 將編碼矩陣Y, 依次解碼爲一個一個的目標分詞。

將 Encoder 輸出的 編碼矩陣Y傳遞到 Decoders 中,Decoders 依次會根據當前翻譯過的分詞 1~ i ,翻譯出一個分詞 i+1。

Decoders 接收了 Encoder 的編碼矩陣 編碼矩陣Y,然後首先輸入一個 "翻譯開始符",預測第一個分詞"技術", 翻譯的結果是 "Technical "

第一個分詞的翻譯過程,如下圖:

img

中文 "技術自由圈"的翻譯,可以是 "Technical Freedom Circle"

然後輸入 "翻譯開始符" 和分詞 "技術",預測分詞 "自由", 翻譯的結果是 "Freedom " 。

img

以此類推,然後輸入翻譯開始符 "" 和分詞 "技術", 分詞 "自由",預測分詞 "圈",以此類推。

在翻譯的過程中,翻譯到分詞 i+1 的時候需要通過 Mask矩陣(更準確的說是 掩碼張量) 遮蓋住 i+1 之後的分詞。

Transformer 的流程總結

到此, Transformer 翻譯中文 "技術自由圈",結果是 "Technical Freedom Circle"

這是 Transformer 使用時候的大致流程,就是下面的三步。

  • 第一步:獲取輸入句子的每一個分詞的表示向量 X

  • 第二步:通過Encoders,將表示向量矩陣 X, 編碼成爲 編碼 矩陣 Y

  • 第三步:通過Decoders 將編碼矩陣Y, 依次解碼爲一個一個的目標分詞, 就是咱們的翻譯目標。

由粗入細,由潛入深,接下來,咱們一步一步的進入細節。

Transformer 的輸入

Transformer 中分詞的輸入表示 x分詞 Embedding位置 Embedding (Positional Encoding)相加得到。

img

step1:獲取分詞的嵌入(Embedding)特徵張量

嵌入(Embedding)是將離散的符號(如單詞、字符、類別等)映射到連續向量空間的過程。嵌入是將高維離散特徵轉換爲低維連續特徵的一種方式,這種轉換有助於提取序列數據中的語義和上下文信息,從而改善序列模型的性能。

分詞的嵌入(Embedding)特徵張量 有很多種方式可以獲取,具體取決於你所使用的分詞工具、語言和需求。以下是一些常見的獲取分詞嵌入的方式。

分詞的嵌入(Embedding)特徵張量,通常用於自然語言處理(NLP)和推薦系統等任務,其中輸入數據通常是符號序列。通過嵌入,每個符號(例如單詞)被映射爲一個稠密向量,這個向量可以捕捉到符號的語義和語境信息。

在下面列出了 分詞的嵌入(Embedding)特徵張量 的一些重要應用場景:

  1. 自然語言處理(NLP):在文本處理任務中,嵌入可以將單詞或字符映射到連續的向量表示,使得模型能夠捕獲詞語之間的語義關係和上下文信息。Word2Vec、GloVe和BERT等模型都使用了嵌入技術。
  2. 推薦系統:在推薦系統中,嵌入可以用於表示用戶和物品(如商品、電影等),從而構建用戶-物品交互矩陣的表示。這種表示可以用於預測用戶對未知物品的興趣。
  3. 時間序列預測:對於時間序列數據,嵌入可以用於將時間步和歷史數據映射爲連續向量,以捕獲序列中的趨勢和模式。
  4. 序列標註:在序列標註任務中,嵌入可以用於將輸入的序列元素(如字母、音素等)映射爲向量,供序列標註模型使用。
  5. 圖像描述生成:在圖像描述生成任務中,嵌入可以將圖像中的對象或場景映射爲向量,作爲生成描述的輸入。

方式一:使用 PyTorch嵌入層的進行特徵提取

當使用 PyTorch 進行文本數據的特徵提取時,可以使用嵌入層來將單詞映射爲連續向量表示。

40歲老架構師尼恩提示:這部分後面有實操演示,可以稍後去學習技術自由圈社羣對應的配套視頻《從0到1穿透LLM大模型架構》,具體請參見尼恩的公號,技術自由圈

方式二:TensorFlow嵌入層的特徵提取

當在 TensorFlow 中使用嵌入層進行文本數據的特徵提取時,可以使用 tf.keras.layers.Embedding 層來將單詞映射爲連續向量表示。以下是一個簡單的示例代碼,演示了在 TensorFlow 中使用嵌入層進行文本數據的特徵提取的過程。

40歲老架構師尼恩提示:這部分後面有實操演示,可以稍後去學習技術自由圈社羣對應的配套視頻《從0到1穿透LLM大模型架構》,具體請參見尼恩的公號,技術自由圈

方式三:使用Word2Vec深度學習模型 進行特徵提取

Word2Vec是一種用於學習詞嵌入(word embeddings)的深度學習模型,旨在將詞彙映射到低維度的向量空間中。這種映射使得單詞的語義信息能夠以密集向量的形式被捕捉,這與傳統的詞袋模型(Bag of Words)或TF-IDF表示形式不同。Word2Vec模型的主要目標是學習具有相似語義含義的詞彙之間的相似向量表示。

40歲老架構師尼恩提示:這部分後面有實操演示,可以稍後去學習技術自由圈社羣對應的配套視頻《從0到1穿透LLM大模型架構》,具體請參見尼恩的公號,技術自由圈

step2:獲取 分詞的 位置 Embedding 嵌入

Transformer 中除了分詞的特徵 Embedding,還需要使用位置 Embedding 表示分詞出現在句子中的位置。

因爲 Transformer 不採用 RNN 的結構,不能利用分詞的順序信息,而是使用全局信息,分詞的全局信息信息對於 NLP 來說非常重要。

所以 Transformer 中使用分詞向量之間需要有一個相對位置關係,而這 位置 Embedding (位置嵌入向量)保存分詞在序列中的相對或絕對位置。位置嵌入 Embedding 用 PE(position Embedding )表示, PE 的維度與分詞 Embedding 是一樣的。

假設,一種語言每個分詞都用一個4的向量表示(長度爲4的數組)換句話說,一個分詞嵌入成長度爲4的向量。

因爲位置向量長度要和詞向量相加,需要長度保持一致,所以位置向量的維度爲也爲4。
img

如何獲得PE, 有兩種方式:

  • 方式一:通過訓練得到
  • 方式二:使用某種公式計算得到。

在 Transformer 中, 採用了方式二,通過某種公式計算PE

Transformer 中,PE(position Embedding ) 計算公式採用sin-cos函數,如下:

img

其中:

  • pos 表示分詞在句子中的位置,其中,pos範圍是0~N,最長的一句話包含的單詞個數爲N,pos表示分詞在句子裏邊的位置

  • d 表示 PE的維度 (與分詞 Embedding 一樣), 上面的例子是 4

  • 2i 表示偶數的維度,上面的例子是 維度 0,維度2

  • 2i+1 表示奇數維度 (即 2i≤d, 2i+1≤d), 上面的例子是 維度 1,維度3

以下是一個簡單的 Python 示例演示如何實現位置編碼:

import numpy as np

def positional_encoding(max_seq_len, d_model):
    position_enc = np.zeros((max_seq_len, d_model))
    for pos in range(max_seq_len):
        for i in range(0, d_model, 2):
            position_enc[pos, i] = np.sin(pos / (10000 ** ((2 * i)/d_model)))
            position_enc[pos, i + 1] = np.cos(pos / (10000 ** ((2 * (i + 1))/d_model)))
    return position_enc

max_seq_len = 10  # 最大序列長度
d_model = 512     # 嵌入維度

# 生成位置編碼
pos_enc = positional_encoding(max_seq_len, d_model)
print(pos_enc)

在這個示例中,我們定義了一個 positional_encoding 函數來生成位置編碼矩陣。

該函數接受兩個參數:max_seq_len 表示序列的最大長度,d_model 表示嵌入向量的維度。

位置編碼矩陣的大小爲 (max_seq_len, d_model)

位置編碼的計算方式通常是通過一組固定的公式來計算的。

img

位置編碼計算方法通過在正弦和餘弦函數中應用不同的頻率來生成位置編碼向量。

具體來說,我們通過在正弦函數和餘弦函數中應用不同的頻率來生成位置編碼向量的奇數和偶數索引位置上的值。

最後,將生成的位置編碼矩陣打印出來以查看結果。

使用sin-cos函數公式計算 PE 有以下的好處:

  • 使 PE 能夠適應比訓練集裏面所有句子更長的句子,假設訓練集裏面最長的句子是有 20 個分詞,突然來了一個長度爲 21 的句子,則使用公式計算的方法可以計算出第 21 位的 Embedding。
  • 可以讓模型容易地計算出相對位置,對於固定長度的間距 k,PE(pos+k) 可以用 PE(pos) 計算得到。因爲 Sin(A+B) = Sin(A)Cos(B) + Cos(A)Sin(B), Cos(A+B) = Cos(A)Cos(B) - Sin(A)Sin(B)。

正弦(sine)和餘弦(cosine)函數是三角函數中的兩個基本函數,通常用於描述週期性現象和振盪運動。它們在數學、工程、物理學等領域都有廣泛的應用。

  1. 正弦函數(sine function)

正弦函數是一個週期函數,表示單位圓上一個角的正弦值。在數學中,正弦函數通常用符號 "sin" 表示,其定義爲:

sin(α)= 對邊/斜邊

在這裏插入圖片描述

其中,α表示角度,對邊表示與角度相對應的直角三角形的斜邊的對邊(垂直邊),斜邊表示直角三角形的斜邊。
正弦函數的值域爲 [−1,1],在單位圓上,正弦函數的值等於對應角度的點在單位圓上的縱座標。

正弦函數(sine function)函數圖像

在這裏插入圖片描述

  1. 餘弦函數(cosine function):‘

    餘弦函數也是一個週期函數,表示單位圓上一個角的餘弦值。

    在數學中,餘弦函數通常用符號 "cos" 表示,其定義爲:

      cos⁡(α)= 斜邊/斜邊
    

其中,α 表示角度,鄰邊表示與角度相對應的直角三角形的斜邊的鄰邊(水平邊),斜邊表示直角三角形的斜邊。餘弦函數的值域也爲 [−1,1],在單位圓上,餘弦函數的值等於對應角度的點在單位圓上的橫座標。

餘弦函數(cosine function)函數圖像在這裏插入圖片描述

在實際應用中,正弦和餘弦函數被廣泛用於描述振動、波動、週期性運動等現象。它們在工程學、物理學、信號處理、圖像處理等領域都有重要的應用。

因爲sin cos是一個單位圓的概念,兩個構成了一個單位圓,對sin cos對的理解,可以比喻成一個時鐘的分針和時針。

Positonal Embedding 是在每兩個維度中指定了一個時鐘指針,

然後呢,如果想要另一個的Positional Embedding信息的話,我們可以去調這個時鐘的指針,讓他調整到下一個位置去

首先我們先引入一個例子,比如說我們要表示二進制數字,用16進製表示,

img

這些二進制數字,你可以看出來他們是有規律的,

  • 最低位會隨着每一個數字變化而變化,
  • 第二低的位會隨着每兩個數的變化而變化,
  • 如此類推

二進制數字,相當於把一個連續的數字變爲了有規律的離散的量!

但是,二進制對錶示無窮無盡的浮點數,不是很好表示,所以我們這裏使用了 正弦函數!

二進制數字 使用二進制函數的交替信息,其實PE用正弦函數也是用了這種二進制的思想,

正弦函數是有一定的規律性的,有周期性的,這正好符合了二進制數字表示方式這種的規律性,

所以,我們這邊用正弦函數來表示距離,也是一個模仿二進制表示法的方式;

下面的例子,來自於 文獻:Transformer Architecture: The Positional Encoding - Amirhossein Kazemnejad's Blog

img

這個是一個長度爲50個分詞的句子,每一個分詞的每一個維度所代表的 PE 矩陣。

y方向表示的是位置 position, 縱向是position, 最大之是一個句子的長度,此處是50,說明該句子包含50個單詞,即上面的N 。

x方向表示的是 維度向量的index,上圖中,每一個分詞 的向量維度是128維度,奇數用位置相關的sin值,偶數用位置相關的cos值

比如說第40行,就是表示48個分詞的 pt 向量,可以通過這個來表示位置

img

用正弦函數作爲這種位置信息的表示,可以讓模型快速的學習到 相對位置 這一特徵!這就是,爲什麼爲什麼sin cos 的組合能方便表示相對位置,

如果說,你已知一個位置的Positional Embedding,想要知道這個位置之後的第k個位置的positional Embedding,可以通過原位置的一個線性函數來求出原位置+k個位置的Positional Encoding

img

這個M 就是表示線性函數,[sin(wk,t),cos(wk,t)] 表示的是一個sin-cos 對,表示的是第wk個頻率所對應的對,可以推廣到一個多維度的情況,這裏先用低維度的情況來進行證明

證明過程,請參見文獻:Transformer Architecture: The Positional Encoding - Amirhossein Kazemnejad's Blog

將分詞的詞 Embedding 和位置 Embedding 相加,就可以得到分詞的表示向量 xx 就是 Transformer 的輸入。

40歲老架構師尼恩提示:大模型比較難,功力淺的不容易懂。 這部分內容如果不懂,可以稍後去學習技術自由圈社羣對應的配套視頻《從0到1穿透LLM大模型架構》,具體請參見尼恩的公號,技術自由圈

Self-Attention(自注意力機制)

img

Transformer Encoder 和 Decoder

上圖是論文中 Transformer 的內部結構圖,左側爲 Encoder block,右側爲 Decoder block。

紅色圈中的部分爲 Multi-Head Attention,是由多個 Self-Attention組成的,可以看到

  • Encoder block 包含一個 Multi-Head Attention,
  • Decoder block 包含兩個 Multi-Head Attention (其中有一個用到 Masked)。

Multi-Head Attention 上方還包括一個 Add & Norm 層,Add和Norm 的功能是:

  • Add 表示殘差連接 (Residual Connection) ,用於防止網絡退化,

  • Norm 表示 Layer Normalization(層歸一化),用於對每一層的激活值進行歸一化。

因爲 Self-Attention是 Transformer 的重點,所以我們重點關注 Multi-Head Attention 以及 Self-Attention,首先詳細瞭解一下 Self-Attention 的內部邏輯。

Self-Attention 結構

Self-Attention(自注意力)是一種用於處理序列數據的機制,特別是在深度學習中的Transformer模型中被廣泛使用。它的直白解釋如下:

  1. 關注自身的能力:Self-Attention允許模型在處理輸入序列時關注序列中各個位置之間的關係,而不是簡單地按順序逐個處理。
  2. 自注意力權重:對於每個輸入位置,Self-Attention會計算一個與其他位置的關聯程度,稱爲自注意力權重。這些權重表示了每個位置在整個序列中的重要性。
  3. 信息匯聚:通過將每個位置的自注意力權重與相應位置的特徵向量相乘,並將結果進行加權求和,可以匯聚輸入序列的信息,產生新的表示。
  4. 並行計算:Self-Attention可以並行地計算每個位置的自注意力權重,因此在實踐中往往具有較高的效率。

總的來說,Self-Attention允許模型在處理序列數據時同時關注不同位置的信息,並根據位置之間的關係來提取和匯聚輸入序列的信息,從而更好地理解序列數據並改善模型性能。

img

縮放點積注意力(Scaled Dot-Product Attention)是Transformer模型中的一種注意力機制,用於計算查詢(query)和鍵(key)之間的相關性,並根據這種相關性對值(value)進行加權。在縮放點積注意力中,通過對點積結果進行縮放,以避免點積過大而導致梯度消失或梯度爆炸的問題。

具體來說,縮放點積注意力的計算過程如下:

  1. 對查詢(query)和鍵(key)進行點積運算,得到未縮放的注意力分數。
  2. 將未縮放的注意力分數除以一個縮放因子(通常是查詢向量的維度的平方根),以控制注意力分數的範圍。
  3. 將得到的縮放後的注意力分數進行softmax運算,以得到注意力權重。
  4. 將注意力權重與值(value)進行加權求和,得到最終的輸出。

縮放點積注意力(Scaled Dot-Product Attention),計算的公式如下:

img

上圖是 Self-Attention 的結構,在計算的時候需要用到矩陣Q(查詢),K(鍵值),V(值)。在實際中,Self-Attention 接收的是輸入(分詞的表示向量x組成的矩陣X) 或者上一個 Encoder block 的輸出。而Q,K,V正是通過 Self-Attention 的輸入進行線性變換得到的。

縮放點積注意力具有較好的數值穩定性,並且在實踐中被廣泛應用於自然語言處理任務中,如文本分類、語言模型等。

Self-Attention的查詢(query)、鍵(key)和值(value)

在自注意力(Self-Attention)機制中,每個詞(或者其他序列中的元素)都會被用來生成查詢(query)、鍵(key)和值(value)三種表示。

查詢(query)、鍵(key)和值(value)這些表示是 通過的線性變換得到的。以下是它們的簡要解釋:

  1. 查詢(Query)
    • 查詢向量是輸入序列中每個詞的一個線性變換後得到的表示。它表示了當前詞的語義信息,並用於計算與其他詞的注意力權重。
    • 通常,通過將輸入詞向量乘以一個權重矩陣(通常是一個可學習的參數)來得到查詢向量。
  2. 鍵(Key)
    • 鍵向量也是輸入序列中每個詞的一個線性變換後得到的表示。它與查詢向量類似,用於計算當前詞與其他詞的相關性。
    • 鍵向量通常也是通過將輸入詞向量乘以另一個權重矩陣來得到的。
  3. 值(Value)
    • 值向量是用來爲當前詞提供上下文信息的表示。它是輸入序列中每個詞的另一個線性變換後得到的表示。
    • 通常,值向量也是通過將輸入詞向量乘以一個權重矩陣來得到的。

在自注意力機制中,查詢、鍵和值的計算是獨立進行的,並且它們的權重矩陣通常是通過模型的學習過程自動學習得到的。

查詢和鍵的相關性用來計算注意力權重,而值則根據這些權重來加權組合以生成最終的輸出。

Q, K, V 的計算

Self-Attention 的輸入是編碼矩陣Y,則可以使用線性變換矩陣WQ,WK,WV計算得到Q,K,V

計算如下圖所示,注意Q, K, V 的每一行都表示一個分詞。

技術自由圈的編碼矩陣Y,和線性變換矩陣WQ 相乘,得到查詢向量矩陣 Q,Q的每一行都表示一個分詞。

img

技術自由圈的編碼矩陣Y,和線性變換矩陣WK 相乘,得到key鍵向量矩陣 K,K的每一行都表示一個分詞。

img

技術自由圈的編碼矩陣Y,和線性變換矩陣WK 相乘,得到value值向量矩陣V,V的每一行都表示一個分詞。

img

Q, K, V 的計算用到matmu矩陣乘法

matmul 是矩陣乘法的縮寫,它是許多數值計算庫(如NumPy、TensorFlow、PyTorch等)中常用的函數,用於計算兩個矩陣的乘積。

在數學上,給定兩個矩陣 A 和 B,它們的乘積 C 的計算如下:

如果 A 是一個形狀爲 (m, n) 的矩陣,B 是一個形狀爲 (n, p) 的矩陣,則 C 是一個形狀爲 (m, p) 的矩陣,其中每個元素 C[i][j] 是矩陣 A 的第 i 行與矩陣 B 的第 j 列的內積(即對應元素相乘後求和)。

在代碼中,matmul 函數通常以以下方式使用:

import numpy as np

A = np.array([[1, 2], [3, 4]])  # m x n 矩陣
B = np.array([[5, 6], [7, 8]])  # n x p 矩陣

C = np.matmul(A, B)  # 計算矩陣乘積

print(C)

這將輸出結果:

[[19 22]
 [43 50]]

值得注意的是,在一些庫中,如NumPy,也可以使用 @ 符號來表示矩陣乘法,即 C = A @ B

WQ,WK,WV 的作用

自注意力公式,也就是縮放點積注意力(Scaled Dot-Product Attention),計算的公式如下:

img

上圖是 Self-Attention 的結構,在計算的時候需要用到矩陣Q(查詢),K(鍵值),V(值)

Self-Attention 的輸入是編碼矩陣Y,則可以使用線性變換矩陣WQ,WK,WV計算得到Q,K,V

Q K V並不是公式中最本質的內容,本質的內容還是 編碼矩陣Y

Q K V 究竟是什麼? 其實是 Y的 線性變換,我們看下面的圖:

img

爲什麼不直接使用 Y 而要對其進行線性變換?

當然是爲了提升模型的擬合能力,矩陣 WQ,WK,WV 都是可以訓練的,起到一個緩衝的效果。

40歲老架構師尼恩提示:大模型比較難,功力淺的不容易懂。 這部分內容如果不懂,可以稍後去學習技術自由圈社羣對應的配套視頻《從0到1穿透LLM大模型架構》,具體請參見尼恩的公號,技術自由圈

Q、K相關度原始值、相似度矩陣計算

得到矩陣 Q, K, V之後,就可以計算出 Self-Attention 的輸出了,計算的公式如下:

img

矩陣的轉置是將矩陣的行和列對調的操作,即將原矩陣的第i行轉換爲轉置矩陣的第i列,將原矩陣的第j列轉換爲轉置矩陣的第j行。在數學符號中,如果原矩陣爲A,轉置矩陣爲A^T。

轉置操作通常表示爲A[i][j] = A^T[j][i]。例如,

img

A的 轉置矩陣爲A^T 如下

img

Q乘以K的轉置後,得到的矩陣行列數都爲 n,n 爲句子分詞數,這個矩陣可以表示分詞之間的 attention 強度。

下圖爲Q乘以KT(K的轉置) ,具體如下:

img

這裏,非常重要的是,首先要明白的是 矩陣 與其轉置相乘的含義是什麼?

我們知道向量相乘的含義?

簡單來說,向量相乘,表示一個向量在另一個向量上的投影。投影越大,說明向量相關性越高。

下面我們模擬一下 Q 乘以QT(Q的轉置),看看具體結果的意思

首先得到的,是 技術 和 技術、技術和自由、技術和圈 ,三個分詞之間的 相關性:

img

因爲兩個向量的內積是兩個向量的相關度,那矩陣計算就是 每一緯向量和其他緯向量的相關性,

在上圖中,也就是技術 和 技術、技術和自由、技術和圈 這三個分詞的相關性。

第二步,計算 分詞 自由 的相關性(包括自己和自己),

計算之後得到的,是 自由 和 技術、自由和自由、自由和圈 三個分詞 之間的 相關性:

img

第3步,計算 分詞 圈 的相關性(包括自己和自己),

最後得到的,是 圈 和 技術、圈和自由、圈和圈 三個分詞之間的 相關性:

img

40歲老架構師尼恩提示:大模型比較難,功力淺的不容易懂。 這部分內容如果不懂,可以稍後去學習技術自由圈社羣對應的配套視頻《從0到1穿透LLM大模型架構》,具體請參見尼恩的公號,技術自由圈

上面的都是口算,大概率會有筆誤。如果有筆誤,不要怪尼恩。

尼恩的其他的 《學習聖經》《電子書》《面試寶典》《架構視頻》都可能存在細節的問題, 主要是因爲尼恩寫的內容實在太多, 來不及細細檢查,阿彌陀佛。

img

度量向量相似度的方法

那麼,又回到了最原始的問題: 分詞向量之間相關度(/相似度)表示什麼?

通過上面的分析,我們大概知道:分詞向量之間相關度,就是關注詞A的時候,應當給予詞B更多的關注,還是更少的關注。

相似度計算的方法有什麼?

1、點積相似度計算

2、餘弦相似度

1、點積相似度計算:

這裏的點積運算可以看作是一種度量相似度的方法,它可以從數學上衡量兩個向量之間的相關性。

當兩個向量越相似時,它們的點積結果也會越大,那麼這兩個向量更應該關聯在一起,也就是說鍵Q搜索時更應該搜索到值K

img

除了點積運算,還有一種常用的度量向量相似度的方法叫做餘弦相似度。

2、餘弦相似度:

img

對於注意力機制來說,點積或者餘弦相似度通常是在計算查詢向量和鍵向量之間的相似度時使用的。

例如,在上面的公式中,a 可以表示查詢向量,b 可以表示鍵向量。

最終的Attention 自注意力矩陣

前面算出來的,是個半成品,是個得到QKT 相似度(相關度)自注意力原生矩陣。

終於來了,需要計算最終的Attention 自注意力矩陣,

回顧 自注意力公式,也就是縮放點積注意力(Scaled Dot-Product Attention),計算的公式如下:

img

得到 Softmax 矩陣之後, 可以和V相乘,得到最終的輸出 Attention 自注意力矩陣 Z

img

最終分詞 1 的輸出 Z1 等於所有分詞 i 的值 Vi 根據 attention 係數的比例加在一起得到,如下圖所示:

40歲老架構師尼恩提示:大模型比較難,功力淺的不容易懂。 這部分內容如果不懂,可以稍後去學習技術自由圈社羣對應的配套視頻《從0到1穿透LLM大模型架構》,具體請參見尼恩的公號,技術自由圈

Q、K相關度的Softmax歸一化處理

得到QKT 相似度(相關度)自注意力原生矩陣之後,接下來,就需要進行Q、K之間的相關度的Softmax歸一化處理,回到公式如下:

img

公式中計算矩陣QK每一行向量的內積,首先爲了防止內積過大,在歸一化之前,對原始的相關度值進行預處理。

這個預處理就是:通過縮放因子 [公式] 對attention爲進行 scaled縮放。

40歲老架構師尼恩提示:大模型比較難,功力淺的不容易懂。 這部分內容如果不懂,可以稍後去學習技術自由圈社羣對應的配套視頻《從0到1穿透LLM大模型架構》,具體請參見尼恩的公號,技術自由圈

問題是,對attention爲進行 scaled縮放?

假設[公式] , [公式]裏的元素的均值爲0,方差爲1,那麼 [公式] 中元素的均值爲0,方差爲d.

當d變得很大時, [公式] 中的元素的方差也會變得很大,如果 [公式] 中的元素方差很大,那麼[公式] 的分佈會趨於陡峭(分佈的方差大,分佈集中在絕對值大的區域)

總結一下就是[公式]的分佈會和d有關。

因此[公式] 中每一個元素乘上 [公式] 後,方差又變爲1。

這使得[公式] 的分佈“陡峭”程度與d解耦,從而使得訓練過程中梯度值保持穩定。

通常代碼裏,dk 就是 向量的長度,

所以, 對原始的相關度值進行預處理的方式,就是除以dk的平方根,

  • 比如維度爲512,那麼這裏dk的平方根就是 512 的平方根是 22.62741699796952,
  • 比如維度爲4,那麼這裏dk的平方根就是 4 的平方根是 2。

完成縮放之後, 接下來,就進行 Softmax歸一化處理?

什麼是 Softmax歸一化處理?

Softmax歸一化處理通常用於分類問題中,將數據轉化爲概率分佈。

Softmax歸一化可以將原始數據映射到一個概率分佈上,使得每個類別的概率值都在0到1之間,並且所有類別的概率之和爲1。

這裏 得到QQT 之後,使用 Softmax歸一化處理, 計算每一個分詞對於其他分詞的 attention 係數,

公式中的 Softmax 是對矩陣的每一行進行 Softmax,即每一行的和都變爲 1.

img

上圖中 Softmax 矩陣就是 attention 係數 矩陣, attention 注意力係數矩陣 的每一行,含義如下:

  • 第 1 行表示分詞 1 技術 與其他所有分詞的 attention 係數,
  • 第 2 行表示分詞 2 自由 與其他所有分詞的 attention 係數,
  • 第 3 行表示分詞 圈 自由 與其他所有分詞的 attention 係數,

到這裏,我們徹底理解了線性代數裏邊的矩陣的相乘, 就是各個緯度的相關行計算。

之前尼恩在學習線性代數的時候,也是不知道的矩陣相差有什麼用,純粹爲了學習線性代數,而去學習線性代數

感覺 大學裏邊學操作系統、 數據結構,都是這樣。

直到尼恩在講 第 35章netty的對象池、內存池視頻的時候,才知道大學裏邊學習的滿二叉樹,原來是可以用到 內存池的 buddy算法裏邊, omg,大學老師,爲啥不講講這個。

同樣,如果是一個矩陣是一個user的偏好向量矩陣,

比如一個shape(5,10)維的矩陣,可以認爲是這個用戶有5個偏好,以及每個偏好的向量表示,向量相乘就是各個偏好的相關性。

softmax 之後,得到的數之和就是1 ,這樣代表了每一個偏好權重。這就是 attention的核心 加權求和的由來。

根據上面的注意力矩陣,當關注"技術"這個字的時候,

  • 應當分配0.4的注意力給它本身,
  • 應當分配0.4的注意力 去關注分詞 "自由",
  • 應當分配0.4的注意力 去關注分詞 "圈"

這就是注意力機制

Z1 的計算方法 如下:

img

在新的向量中,每一個維度的數值都是由三個詞向量在這一維度的數值加權求和得來的,

這個新的行向量就是"技術"這分詞向量經過注意力機制加權求和之後的表示。

其實也可以這樣理解:之前 各個緯度的向量是獨立存在的,經過attenton之後,每個緯度的向量,是由其他緯共同加權求和得到的。

40歲老架構師尼恩提示:大模型比較難,功力淺的不容易懂。 這部分內容如果不懂,可以稍後去學習技術自由圈社羣對應的配套視頻《從0到1穿透LLM大模型架構》,具體請參見尼恩的公號,技術自由圈

注意力機制中Q和K相乘的意義是什麼?爲什麼Q和K相乘就可以得到它們之間的相似性/權重矩陣呢?

爲什麼query和key相乘就能得到相似度呢?它的內部原理是什麼?

在注意力機制中,querykey 相乘得到的相似度其實是通過計算兩個向量之間的點積來實現的。

具體而言,我們將 querykey 進行點積運算後,再除以一個縮小因子 self.soft(一般取值爲特徵維度的平方根),就可以得到對應向量之間的餘弦相似度,從而得到相似度分數。

補充:Softmax 的直觀意思

Softmax是一種用於多分類問題的激活函數,它將模型輸出的原始分數(通常稱爲logits)轉換爲表示各個類別概率的分佈。直觀上,Softmax函數可以被理解爲一種歸一化函數,它將輸入的分數進行轉換,使得它們都落在0到1之間,並且所有類別的概率之和爲1。

例如,假設模型輸出了三個類別的原始分數爲[3.0, 1.0, 0.2],Softmax函數將這些分數轉換爲[0.836, 0.114, 0.050],這裏每個數值代表了對應類別的預測概率。

因此,Softmax的直觀意義是將模型輸出的原始分數轉換爲概率分佈,以便進行多分類問題的預測。

Transformer整體架構

回顧 Transformer 的整體結構,

img

Transformer拋棄了傳統的RNN和CNN,首先它使用了Attention機制,將序列中的任意兩個位置之間的距離是縮小爲一個常量;

其次, Transformer 不是類似RNN的順序結構,因此具有更好的並行性,是多頭注意力機制,符合現有的GPU框架,有效的解決了NLP中棘手的長期依賴問題 。

Transformer是一個encoder-decoder的結構,由若干個編碼器和解碼器堆疊形成。如上圖

  • 左側部分爲編碼器,由Multi-Head Attention和一個全連接組成,用於將輸入語料轉化成特徵向量。

  • 右側部分是解碼器,其輸入爲編碼器的輸出以及已經預測的結果,由Masked Multi-Head Attention, Multi-Head Attention以及一個全連接組成,用於輸出最後結果的條件概率 。

簡單梳理一下,大概包括下面的幾個部分:

img

Input Embedding(輸入嵌入層)

輸入部分包含:

  • 源文本 嵌入層及其位置編碼
  • 目標文本嵌入層及其位置編碼

img

尼恩囉嗦一下,無論原文本還是目標文本,都包含兩個編碼向量矩陣:

  • 分詞的 Embedding(Embedding就是從原始數據提取出來的Feature)
  • 分詞位置 Embedding (位置 Feature)相加得到。

Input Embedding(輸入嵌入層)要點:

  • 在Transformer模型中,每時每刻的輸入都是input embedding + positional encoding,即所帶有的信息加上其位置編碼,其中embedding就是用來取代傳統RNN(如seq2seq)中的hidden states。
  • 由於transformer模型屬於自迴歸模型,因此它的下一個輸出需要基於上一個輸出進行推斷,即主框架中的outputs(shifted right)
  • position encoding是位置編碼,是不可以缺失的一部分,它可以將attention計算方式無法捕捉的位置信息變成embedding形式,直接疊加到變換爲embedding形式後的input中。
  • 因爲在解碼的時候,僅知道當前詞左邊的部分。由此,利用masking(當前詞右側的內容被設置爲−∞,這樣softmax的值爲0)屏蔽了當前詞右邊部分的影響,保持了自迴歸的特性。

40歲老架構師尼恩提示:大模型比較難,功力淺的不容易懂。 這部分內容如果不懂,可以稍後去學習技術自由圈社羣對應的配套視頻《從0到1穿透LLM大模型架構》,具體請參見尼恩的公號,技術自由圈

輸出部分包含:

  • 線性層
  • softmax層

img

編碼器部分:

  • 由N個編碼器層堆疊而成
  • 每個編碼器由兩個子層連接結構組成
  • 第一個子層連接結構包括一個多頭自注意力子層和規範化層以及一個殘差連接
  • 第二個子層連接結構包括一個前饋全連接子層和規範化以及一個殘差連接

img

40歲老架構師尼恩提示: 這部分內容如果不懂,可以稍後去學習技術自由圈社羣對應的配套視頻《從0到1穿透LLM大模型架構》,具體請參見尼恩的公號,技術自由圈

Multi-head Attention(多頭注意)

multi-head attention由多個 scaled dot-product attention (自注意力模型)基礎單元經過堆疊而成,

multi-head attention把query和key映射到高維空間的不同子空間中去計算相似度,且多頭注意的輸入都是query Q、key K 、value V 三個元素,只是 Q、K、V 的取值不同。

爲了更好的理解multi-head attention,我們分成兩步走:

第一步,回顧一下 scaled dot-product attention(縮放的點乘注意力):

img

首先,attention也叫self-attention,顧名思義,就是自己和自己做attention操作,即得到所有時刻的數據後,可以用其中每一時刻數據與所有數據中任意一時刻數據進行計算attention(相似程度)。

其次,如框圖所示,可以分成6步來看:

1)將編碼器與文本輸入生成輸入向量,然後將其生成三個向量,生成方法是將輸入向量分別乘以三個權重矩陣,這些矩陣是可以在訓練過程學習的,而且所有的輸入向量都共享這三個權重矩陣。

2)計算attention,即計算一個分值,將對應的Q、K依次進行點積獲得每個位置的分值。

3)保持訓練與推理的數據一致性。

4)對計算出來的分值進行softmax操作,歸一化分值使得全爲正數且它們的和爲1。

5)將softmax分值與V的向量按位相乘,保留關注詞的value值,削弱非相關詞的value值。

6)將所有加權向量加起來,產生該位置的self-attention的輸出結果。

第二步,介紹一下multi-head attention(多頭注意)介紹:

img

如上圖所示,這就是scaled dot-product attention的堆疊(stacking),

先把我們上面講過的Q、K、V進行線性變換變成Q'、K'、V',然後進行attention計算,

重複這樣的操作h次,然後將這h次的結果進行concat(合併),最後總的做一次線性變換,輸出的就是多頭注意這個模塊的輸出了。

而在主框架中右半部分的多頭注意中,與其他兩個多頭注意有些差異,它是一個cross_attention,它的Q是由目標端序列而來,K、V是由源端序列來的。

40歲老架構師尼恩提示: 這部分內容如果不懂,可以稍後去學習技術自由圈社羣對應的配套視頻《從0到1穿透LLM大模型架構》,具體請參見尼恩的公號,技術自由圈

ADD&Normalization(殘差連接與規範化層)

在 主框架 中每一個模塊後面,都有一個殘差連接和規範化層,

它是一個通用的技術,它的本質是可以有效的改善深層模型中梯度消失的問題,且能打破網絡對稱性,改善網絡退化問題,加速收斂,規範化優化空間。

Feed Forward Network(FFN,前饋神經網絡)

每一層經過attention之後,還會有一個FFN,這個FFN的作用就是空間變換。

FFN包含了2層linear transformation(線性變換)層,中間的激活函數是ReLu 。

FFN層就是feed forward層。他本質上就是一個MLP(Multilayer Perceptron)多層感知機。

Feed Forward前饋神經網絡對應的公式如下(max相當於Relu):

img

其中兩層感知機中,第一層會將輸入的向量升維,第二層將向量重新降維。

這樣子就可以學習到更加抽象的特徵。

40歲老架構師尼恩提示:大模型比較難,功力淺的不容易懂。 這部分內容如果不懂,可以稍後去學習技術自由圈社羣對應的配套視頻《從0到1穿透LLM大模型架構》,具體請參見尼恩的公號,技術自由圈

多頭注意力(Multi-Head Attention)

多頭注意力(Multi-Head Attention)和自注意力(Self-Attention)是Transformer模型中的兩個關鍵組件,它們在注意力機制的應用上有一些區別:

  1. 自注意力(Self-Attention)
    • 自注意力機制用於計算輸入序列中每個元素與其他元素的相關性。
    • 在自注意力中,輸入序列中的每個元素都會與序列中的其他元素進行比較,以便更好地理解元素之間的依賴關係。
    • 自注意力機制被廣泛用於處理序列數據,如自然語言處理中的句子表示和機器翻譯等任務。
  2. 多頭注意力(Multi-Head Attention)
    • 多頭注意力是通過將多個自注意力子層的輸出進行拼接來增強模型的表達能力。
    • 在多頭注意力中,輸入序列會經過多個並行的自注意力子層,每個子層都會學習不同的注意力表示。
    • 最終,多個注意力頭的輸出會被拼接起來,以豐富模型對輸入序列的理解。

因此,可以說自注意力是多頭注意力的基本構建單元之一。自注意力關注於序列內部的依賴關係,而多頭注意力則通過整合多個自注意力頭的輸出來增強模型的表達能力。

Self-Attention(自注意力機制):使輸入序列中的每個元素能夠關注並加權整個序列中的其他元素,生成新的輸出表示,不依賴外部信息或歷史狀態。

  • Self-Attention允許輸入序列中的每個元素都與序列中的其他所有元素進行交互。
  • 它通過計算每個元素對其他所有元素的注意力權值,然後將這些權值應用於對應元素的本身,從而得到一個加權和的輸出表示。
  • Self-Attention不依賴於外部信息或先前的隱藏狀態,完全基於輸入序列本身。

img

縮放點積注意力(Scaled Dot-Product Attention)是Transformer模型中的一種注意力機制,用於計算查詢(query)和鍵(key)之間的相關性,並根據這種相關性對值(value)進行加權。在縮放點積注意力中,通過對點積結果進行縮放,以避免點積過大而導致梯度消失或梯度爆炸的問題。

具體來說,縮放點積注意力的計算過程如下:

  1. 對查詢(query)和鍵(key)進行點積運算,得到未縮放的注意力分數。
  2. 將未縮放的注意力分數除以一個縮放因子(通常是查詢向量的維度的平方根),以控制注意力分數的範圍。
  3. 將得到的縮放後的注意力分數進行softmax運算,以得到注意力權重。
  4. 將注意力權重與值(value)進行加權求和,得到最終的輸出。

Multi-Head Attention(多頭注意力機制):

通過並行運行多個Self-Attention層並綜合其結果,能夠同時捕捉輸入序列在不同子空間中的信息,從而增強模型的表達能力。

  • Multi-Head Attention實際上是多個並行的Self-Attention層,每個“頭”都獨立地學習不同的注意力權重。
  • 這些“頭”的輸出隨後被合併(通常是拼接後再通過一個線性層),以產生最終的輸出表示。
  • 通過這種方式,Multi-Head Attention能夠同時關注來自輸入序列的不同子空間的信息。

img

Multi-Head Attention

  • Self-Attention(自注意力機制):自注意力機制的核心是爲輸入序列中的每一個位置學習一個權重分佈,這樣模型就能知道在處理當前位置時,哪些位置的信息更爲重要。Self-Attention特指在序列內部進行的注意力計算,即序列中的每一個位置都要和其他所有位置進行注意力權重的計算。
  • Multi-Head Attention(多頭注意力機制):爲了讓模型能夠同時關注來自不同位置的信息,Transformer引入了Multi-Head Attention。它的基本思想是將輸入序列的表示拆分成多個子空間(頭),然後在每個子空間內獨立地計算注意力權重,最後將各個子空間的結果拼接起來。這樣做的好處是模型可以在不同的表示子空間中捕獲到不同的上下文信息。

案例對比:在“我愛AI”例子中,Self-Attention計算每個詞與其他詞的關聯權重,而Multi-Head Attention則通過拆分嵌入空間並在多個子空間中並行計算這些權重,使模型能夠捕獲更豐富的上下文信息。

Self-Attention(自注意力機制):

1. 輸入:序列“我愛AI”經過嵌入層,每個詞(如“我”)被映射到一個512維的向量。

2. 注意力權重計算:

​ 對於“我”這個詞,Self-Attention機制會計算它與序列中其他所有詞(“愛”、“A”、“I”)之間的注意力權重。

​ 這意味着,對於“我”的512維嵌入向量,我們會計算它與“愛”、“A”、“I”的嵌入向量之間的注意力得分。

3. 輸出:根據計算出的注意力權重,對輸入序列中的詞向量進行加權求和,得到自注意力機制處理後的輸出向量。

Multi-Head Attention(多頭注意力機制):

1. 子空間拆分:

​ 原始的512維嵌入空間被拆分成多個子空間(例如,8個頭,則每個子空間64維)。

​ 對於“我”這個詞,其512維嵌入向量被相應地拆分成8個64維的子向量。

2. 獨立注意力權重計算:

​ 在每個64維的子空間內,獨立地計算“我”與“愛”、“A”、“I”之間的注意力權重。

​ 這意味着在每個子空間中,我們都有一套獨立的注意力得分來計算加權求和。

3. 結果拼接與轉換:

​ 將每個子空間計算得到的注意力輸出拼接起來,形成一個更大的向量(在這個例子中是8個64維向量拼接成的512維向量)。

​ 通過一個線性層,將這個拼接後的向量轉換回原始的512維空間,得到Multi-Head Attention的最終輸出。

Self-Attention和Multi-Head Attention通俗理解

Self-Attention(自注意力機制)

假如你在玩一堆玩具。有些玩具是朋友,它們喜歡一起玩。比如,超級英雄玩具喜歡和其他超級英雄在一起,動物玩具喜歡和其他動物在一起。當你玩一個玩具時,你會想,哪些玩具是它的好朋友?自注意力機制就像是幫助玩具找到它們的好朋友。這樣,玩具們就可以更好地一起玩,讓遊戲更有趣。

在計算機的世界裏,自注意力機制幫助電腦找出一句話裏哪些詞是“好朋友”,哪些詞需要一起被理解。這就像幫助玩具找到它們的好朋友,讓整個故事更有意思。

Multi-Head Attention(多頭注意力機制)

假如你有一羣不同的小朋友,每個人都有自己最喜歡的玩具。一個小朋友可能最喜歡超級英雄,另一個可能喜歡動物,還有一個可能喜歡車子。當他們一起玩時,每個人都會關注不同的玩具。然後,他們一起分享他們玩的故事,這樣就可以組成一個大故事,每個玩具都有自己的角色。

多頭注意力機制就像這羣小朋友一樣。電腦不只從一個角度看問題,而是像很多個小朋友一樣,從不同的角度來看。這樣,電腦就可以瞭解更多的事情,像小朋友們分享他們的故事一樣,電腦也可以把這些不同的視角放在一起,讓它更好地理解整個問題。

Multi-Head Attention 多頭注意力

Multi-Head Attention(多頭注意力)是深度學習中一種注意力機制,常用於Transformer等模型中。

Multi-Head Attention的直白解釋如下:

  1. 注意力機制:在自然語言處理和其他序列數據處理任務中,注意力機制可以幫助模型集中注意力於輸入序列中的特定部分,從而更有效地進行相關性建模和信息提取。
  2. 多頭注意力:多頭注意力是一種將注意力機制擴展到多個注意力頭(也稱爲多個子空間)的方法。每個頭都有自己的權重矩陣,它們分別學習不同的表示,並在最後的輸出中被合併起來。
  3. 並行計算:通過使用多頭注意力,模型可以在不同的表示子空間中並行地學習相關性信息。這樣可以更好地捕獲輸入序列的不同方面,並提高模型的表示能力和泛化能力。
  4. 合併輸出:在多頭注意力中,每個頭計算出的注意力權重矩陣和值矩陣將被組合起來,並通過線性變換進行加權和彙總,產生最終的輸出。

總的來說,多頭注意力允許模型同時關注輸入序列中的不同方面,並通過並行計算和合並輸出來提高模型的表示能力。

在上一步,我們已經知道怎麼通過 Self-Attention 計算得到輸出矩陣 Z,而 Multi-Head Attention 是由多個 Self-Attention 組合形成的,下圖是論文中 Multi-Head Attention 的結構圖。

img

從上圖可以看到 Multi-Head Attention 包含多個 Self-Attention 層,

首先將輸入X分別傳遞到 h 個不同的 Self-Attention 中,計算得到 h 個輸出矩陣Z

下圖是 h=8 時候的情況,此時會得到 8 個輸出矩陣Z

多個 Self-Attention 並行的計算,如下圖所示:

img

得到 8 個輸出矩陣 z1 到 z8 之後,Multi-Head Attention 將它們拼接在一起 (Concat),然後傳入一個Linear層,得到 Multi-Head Attention 最終的輸出Z

Multi-Head Attention 的輸出 ,如下圖:

img

可以看到 Multi-Head Attention 輸出的矩陣Z與其輸入的矩陣X的維度是一樣的。

40歲老架構師尼恩提示: 這部分內容如果不懂,可以稍後去學習技術自由圈社羣對應的配套視頻《從0到1穿透LLM大模型架構》,具體請參見尼恩的公號,技術自由圈

Add & Norm (殘差連接與規範化層)

無論是Encoder 編碼器結構和 decorder解碼器,都有一個 Add & Norm (殘差連接與規範化層) 層。

img

上圖紅色部分是 Transformer 的 Encoder block 結構,可以看到是由 Multi-Head Attention, Add & Norm, Feed Forward, Add & Norm 組成的。

剛剛已經瞭解了 Multi-Head Attention 的計算過程,現在瞭解一下 Add & Norm 和 Feed Forward 部分。

Add & Norm 層由 Add 和 Norm 兩部分組成,

encoder 中,其計算公式如下:

img

其中 X表示 Multi-Head Attention 或者 Feed Forward 的輸入,MultiHeadAttention(X) 和 FeedForward(X) 表示輸出 (輸出與輸入 X 維度是一樣的,所以可以相加)。

AddX+MultiHeadAttention(X),是一種殘差連接,通常用於解決多層網絡訓練的問題,可以讓網絡只關注當前差異的部分,在 ResNet 中經常用到:

img

40歲老架構師尼恩提示:大模型比較難,功力淺的不容易懂。 這部分內容如果不懂,可以稍後去學習技術自由圈社羣對應的配套視頻《從0到1穿透LLM大模型架構》,具體請參見尼恩的公號,技術自由圈

殘差連接是一種在神經網絡中常用的技術,特別是在深度殘差網絡(Residual Networks)中。其直觀意思可以通過以下方式來理解:

  1. 殘差的含義:在神經網絡中,每一層都會嘗試學習輸入數據的表示形式。然而,在深層網絡中,由於梯度消失和梯度爆炸等問題,深層網絡的訓練會變得困難。殘差連接的概念是建立在這個問題上的。殘差是指當前層的輸出與該層的輸入之間的差異,即殘差 = 當前層輸出 - 當前層輸入。
  2. 直觀理解:殘差連接的直觀意思是在神經網絡中引入了一條直接連接,將當前層的輸入直接加到當前層的輸出上。這樣做的好處在於,即使當前層無法學習到有效的特徵表示,也不會完全丟失之前層學習到的信息。通過保留輸入的信息,殘差連接有助於緩解深層網絡訓練時的梯度問題,從而更容易地訓練深度神經網絡。
  3. 優勢:殘差連接可以幫助提高網絡的學習能力和泛化能力,因爲它可以使得網絡更容易地學習到恆等映射(identity mapping),即使網絡深度很深。此外,殘差連接還可以減少梯度消失問題,提高網絡的訓練速度和效率。

總之,殘差連接的直觀意義是通過在神經網絡中引入直接連接,保留輸入信息並幫助網絡學習更好的特徵表示,從而改善網絡的訓練和性能。

梯度消失和梯度爆炸 的直觀意思

梯度消失和梯度爆炸是在深度神經網絡訓練中常見的問題,直觀意思如下:

  1. 梯度消失:在反向傳播過程中,梯度消失指的是在深層網絡中,梯度逐漸變得非常小,甚至趨近於零的現象。這意味着靠近輸入層的權重更新非常小,導致網絡無法有效地學習到深層特徵。直觀上,可以將梯度想象成是網絡訓練時的信號傳遞,梯度消失就像是信號在傳播過程中逐漸衰減、消失了一樣,導致後續層無法得到有效的更新和學習。
  2. 梯度爆炸:與梯度消失相反,梯度爆炸是指在反向傳播過程中,梯度變得非常大,甚至超過了機器數的表示範圍,導致權重更新過大,網絡無法穩定地收斂。直觀上,可以將梯度想象成是網絡訓練時的能量傳播,梯度爆炸就像是信號在傳播過程中突然增大、失控了一樣,導致網絡參數的更新過大,無法得到有效的優化。

總的來說,梯度消失和梯度爆炸都是由於深度神經網絡中的梯度傳播過程中出現的數值問題而引起的,會影響網絡的訓練和性能。消除梯度消失和梯度爆炸是深度神經網絡訓練中的重要挑戰之一。

40歲老架構師尼恩提示: 這部分內容如果不懂,可以稍後去學習技術自由圈社羣對應的配套視頻《從0到1穿透LLM大模型架構》,具體請參見尼恩的公號,技術自由圈

Layer Normalization(層歸一化)

Norm指 Layer Normalization,通常用於 RNN 結構,Layer Normalization 會將每一層神經元的輸入都轉成均值方差都一樣的,這樣可以加快收斂。

Layer Normalization(層歸一化)是一種用於神經網絡中的歸一化技術,旨在加速神經網絡的訓練和提高模型的性能。

Layer Normalization(層歸一化) 直白解釋如下:

  1. 每層數據的標準化:Layer Normalization的核心思想是對神經網絡中每一層的輸入進行標準化處理。具體而言,對於每個樣本,在每一層中的每個神經元的輸出都會被減去該層輸出的均值,並且除以該層輸出的標準差。這樣做的目的是讓每個神經元的輸出都保持在相似的尺度上,有助於加速收斂和提高模型的穩定性。
  2. 獨立於樣本的歸一化:與批量歸一化(Batch Normalization)不同,Layer Normalization是針對每個樣本獨立進行歸一化的,而不是針對整個批次。這使得Layer Normalization更適用於序列數據等不適合批量處理的情況。
  3. 適用於不同大小的輸入:由於Layer Normalization是針對每層的輸入進行歸一化的,因此它適用於不同大小的輸入,不像批量歸一化需要固定大小的批次。
  4. 不需要學習參數:與批量歸一化不同,Layer Normalization不需要學習額外的參數,因此可以減少模型的複雜度。

總的來說,Layer Normalization是一種簡單而有效的歸一化技術,適用於各種神經網絡模型,可以提高模型的訓練速度和泛化能力。

40歲老架構師尼恩提示:大模型比較難,功力淺的不容易懂。 這部分內容如果不懂,可以稍後去學習技術自由圈社羣對應的配套視頻《從0到1穿透LLM大模型架構》,具體請參見尼恩的公號,技術自由圈

Feed Forward前饋神經網絡

  1. Multi-Head Attention多頭注意力,獲取注意力矩陣

    在Multi-Head Attention層中,通過多個注意力頭並行地計算注意力權重,將輸入序列進行加權彙總,得到一個新的表示。

    然後,對這個表示進行殘差連接(Residual Connection)和層歸一化(Layer Normalization),這樣可以加速訓練過程並減輕梯度消失問題。

  2. FeedForward神經網絡學習到數據中更加複雜的特徵和關係,增強模型的表示能力和表達能力

    在經過殘差連接和歸一化之後,數據會進入FeedForward神經網絡。

在Multi-Head Attention中,主要是進行矩陣乘法,即都是線性變換,

矩陣乘法可以看作線性變換的組合。線性變換是指一個函數,它將向量空間中的向量映射到另一個向量空間中,同時保持向量加法和標量乘法的結構。在這種情況下,一個矩陣可以看作是一個線性變換的表示,而矩陣乘法則表示了對一個向量應用一系列線性變換。當我們將兩個矩陣相乘時,我們實際上是將一個線性變換應用於另一個線性變換的結果。

而線性變換的學習能力不如非線性變換的學習能力強,

  1. 線性變換:線性變換是指輸入與權重矩陣的線性組合,不包含非線性激活函數。在神經網絡中,線性變換通常是指全連接層或者簡單的線性迴歸模型。線性變換的學習能力受限於其線性特性,無法捕捉數據中的複雜非線性關係。因此,在處理非線性數據模式時,線性變換的學習能力相對較弱。
  2. 非線性變換:非線性變換引入了非線性激活函數,例如ReLU、Sigmoid、Tanh等。非線性激活函數能夠引入數據的非線性特徵,使神經網絡能夠學習和表示更復雜的數據模式和關係。非線性變換的學習能力更強,可以更好地擬合複雜的數據模式。

在實際應用中,通常會將多個線性變換和非線性變換組合起來構成深度神經網絡,以提高模型的學習能力和表達能力。

Feed Forward 層通過堆疊多層非線性變換,可以學習到數據中更加複雜的特徵和關係,從而實現更強大的學習能力。

Feed Forward Network(FFN,前饋神經網絡)

每一層經過attention之後,還會有一個FFN,這個FFN的作用就是空間變換。

FFN包含了2層linear transformation(線性變換)層,中間的激活函數是ReLu 。

FFN層就是feed forward層。他本質上就是一個MLP(Multilayer Perceptron)多層感知機。

Feed Forward前饋神經網絡對應的公式如下(max相當於Relu):

img

其中兩層感知機中,第一層會將輸入的向量升維,第二層將向量重新降維。

這樣子就可以學習到更加抽象的特徵。

感知機是一種二元線性分類模型,可看作是一種簡單形式的前饋神經網絡,由 Frank Rosenblatt 於 1957 年提出,其輸入實例的特徵向量,輸出實例的類別。

作爲一種線性分類器,其可被看作是最簡單的前向人工神經網絡,儘管結構簡單但依舊可以學習和處理複雜問題,其主要缺陷在於無法處理線性不可分問題。

感知機它是一種二元分類器,可將矩陣上的如 x 映射到輸出值 f(x) 上。

img

其中,w 是實數的表示權重向量,w · x 是點積,b 是偏置常數。

f(x) 用於對 x 進行分類,以判斷其是肯定的還是否定的,這屬於二元分類問題,

若 b 爲負值,那麼加權後的輸入值必須產生一個肯定值且大於 -b,這樣才能令分類神經元大於閾值 0,從空間上看,偏置會改變決策邊界的位置。

MLP(Multilayer Perceptron)是一種最基本的前饋神經網絡結構,也稱爲多層感知機。

它由多個全連接層組成,每個全連接層都包含多個神經元,相鄰層之間的神經元全部相連。

MLP通常由輸入層、若干個隱藏層和輸出層組成。輸入層負責接收原始數據特徵,隱藏層用於提取和轉換特徵,輸出層則輸出模型的預測結果。

MLP的基本結構如下:

  • 輸入層:負責接收數據的原始特徵,通常是一個向量。
  • 隱藏層:由若干個全連接層組成,每個全連接層都包含多個神經元。隱藏層負責對輸入特徵進行非線性變換和抽象,以提取更高層次的特徵表示。
  • 輸出層:通常是一個全連接層,用於將隱藏層提取的特徵映射到最終的輸出空間,可以是一個標量(用於迴歸問題)或者一個概率分佈(用於分類問題)。

MLP通過在隱藏層中引入非線性激活函數(如ReLU、Sigmoid、Tanh等),可以實現複雜的非線性建模。它在許多任務中都表現出色,包括分類、迴歸、聚類等。

總的來說,MLP是一種靈活、強大的神經網絡結構,常用於構建各種機器學習模型,尤其是在數據特徵較爲複雜或者任務較爲複雜時表現優異。

Feed Forward前饋神經網絡對應的公式如下(max相當於Relu):

img

img

通過上圖,可以看出 , Feed Forward 層比較簡單,是一個兩層的全連接層,

  • 第一層 線性變換linear 引入了非線性激活函數Relu,注意,引入激活函數爲 Relu,

  • 第二層不使用激活函數

FeedForward的輸入是什麼呢?

X是輸入,Feed Forward 最終得到的輸出矩陣的維度與X一致。

X是Multi-Head Attention的輸出做了殘差連接和Norm之後得數據,然後FeedForward做了兩次線性變換+一次非線性變換,爲的是更加深入的提取特徵。

所以FeedForward的作用是:通過線性變換+非線性變換結合,首先將數據映射到一個高維度的空間,然後再將其映射回一個低維度的空間,提取了更深層次的特徵。

FeedForward主要的作用是在每個編碼器和解碼器層之間添加非線性映射,以增強模型的表達能力

Feed Forward前饋神經網絡通常由兩個線性變換層組成,每個線性變換層之間會添加一個非線性激活函數(比如ReLU),以便更好地提取特徵和建模非線性關係。

兩個線性變換層的目的在於對特徵進行更深入的提取和抽象,從而增強模型的表示能力和表達能力。

整個過程可以用如下僞代碼表示:

Multi-Head Attention 輸入 --> 加權彙總 --> 殘差連接 --> 層歸一化 --> FeedForward神經網絡 --> 殘差連接 --> 層歸一化

這種結構在Transformer模型中被廣泛使用,能夠有效地捕獲輸入序列的長期依賴關係,並且具有較強的表示能力。

40歲老架構師尼恩提示:大模型比較難,功力淺的不容易懂。 這部分內容如果不懂,可以稍後去學習技術自由圈社羣對應的配套視頻《從0到1穿透LLM大模型架構》,具體請參見尼恩的公號,技術自由圈

Feed Forward前饋神經網絡是一個全連接層。

全連接層是神經網絡中最基本的層之一,也稱爲密集連接層(Dense Layer)或者仿射層(Affine Layer)。

在全連接層中,每個神經元都與上一層的所有神經元相連。

具體地,如果上一層有n個神經元,當前層有m個神經元,則全連接層中有n×m個連接權重,每個連接權重對應着上一層的一個神經元到當前層的一個神經元的連接。

全連接層的作用是將上一層的所有神經元的輸出進行加權求和,並經過激活函數得到當前層的輸出。這個加權求和過程可以看作是一個線性變換,因此全連接層具有一定的線性特性。

全連接層通常用於深度神經網絡的隱藏層和輸出層。在隱藏層中,全連接層可以學習到數據中的抽象特徵和表示;在輸出層中,全連接層可以將神經網絡的輸出映射到具體的預測結果或者分類概率。

全連接層的數學表達式可以表示爲:

𝑦=𝜎(𝑊𝑥+𝑏)

其中,x是上一層的輸出向量,W是權重矩陣,b是偏置向量,σ是激活函數。該表達式表示了全連接層的線性變換和非線性激活過程。

前饋神經網絡是一種人工神經網絡,其結構由多個層次的節點組成,並按特定的方向傳遞信息,單向傳遞信息。

file

  • 結構特點: 由輸入層、一個或多個隱藏層和輸出層組成。
  • 信息流動: 信息僅在一個方向上流動,從輸入層通過隱藏層最終到達輸出層,沒有反饋循環。

遞歸神經網絡:

與前饋神經網絡相對,是遞歸神經網絡,其中信息可以在不同層之間雙向傳遞。

遞歸神經網絡要乾的一件事就是,在隱藏層中,x1利用了x0的w,x2利用了x1的w,x3利用x2的w。。。。。以此類推

img

前饋神經網絡的工作原理

file

前饋神經網絡的工作過程可以分爲前向傳播和反向傳播兩個階段。

  • 前向傳播: 輸入數據在每一層被權重和偏置加權後,通過激活函數進行非線性變換,傳遞至下一層。
  • 反向傳播: 通過計算輸出誤差和每一層的梯度,對網絡中的權重和偏置進行更新。

什麼是神經網絡的激活函數?

激活函數是神經網絡中非常重要的組成部分,它向網絡引入非線性特性,使網絡能夠學習複雜的函數。file

  • 常見激活函數: 如ReLU、Sigmoid、Tanh等。
  • 作用: 引入非線性,增強網絡的表達能力。

激活函數是神經網絡中的一種函數,用於引入非線性特性。在神經網絡中,激活函數接收神經元的輸入併產生輸出,幫助神經網絡學習複雜的非線性關係。

直觀上,激活函數可以被理解爲對神經元激活狀態的一種映射。通過激活函數,神經元的輸出可以被限制在某個特定範圍內,通常是在0到1之間或者在-1到1之間。這種非線性映射使得神經網絡能夠學習更加複雜的數據模式,因爲它可以通過激活函數引入非線性變換,從而在輸入數據的高維空間中擬合更加複雜的決策邊界。

例如,在分類任務中,激活函數可以幫助神經網絡將輸入數據映射到各個類別的概率分佈。在迴歸任務中,激活函數可以將輸入映射到某個特定的輸出範圍內。在隱藏層中,激活函數可以幫助神經網絡學習更復雜的特徵表示,從而提高模型的性能和泛化能力。

因此,激活函數的直觀意義是通過非線性變換,幫助神經網絡學習和擬合複雜的數據模式和關係。

線性迴歸是一種用於建立和擬合連續型數據之間線性關係的統計模型。

線性迴歸 的直觀意思可以通過以下幾個方面來理解:

1 擬合直線:在一維情況下,線性迴歸試圖擬合一條直線,以最好地描述自變量(X)和因變量(Y)之間的關係。在更高維度中,線性迴歸可以擬合一個超平面來表示變量之間的關係。

y=ax+b

線性迴歸是一種用於建立自變量 x 和因變量 y 之間線性關係的統計模型。其基本形式可以表示爲:

 y=a  x+b 

其中, a 是斜率,表示 x 的單位變化引起 y 的變化程度;b 是截距,表示當 x 爲0時,y 的值。

這個方程描述了自變量 x 和因變量 y 之間的線性關係,其中 a 和 b 是模型的參數,可以通過最小化預測值與實際觀測值之間的差異來估計。這個模型通常用於預測和解釋連續型數據之間的關係,比如根據自變量 x 的值預測因變量 y 的值。

2 最小化誤差:線性迴歸的目標是通過最小化預測值與真實觀測值之間的誤差來確定最佳擬合直線或超平面。通常採用最小二乘法來優化模型,使得模型的預測值儘可能接近真實觀測值。

3 直觀理解係數:線性迴歸模型的係數可以提供關於自變量與因變量之間關係的直觀理解。例如,在簡單線性迴歸中,係數表示自變量每增加一個單位時,因變量會相應地增加或減少多少。

4 預測:線性迴歸模型可以用於預測新的觀測值。通過已知的自變量值,可以使用擬合的線性模型來預測因變量的值,從而在實際應用中具有很高的實用性。

總之,線性迴歸是一種簡單而直觀的統計方法,用於建立和理解連續型變量之間的線性關係。其直觀意義在於通過擬合直線或超平面,最小化誤差,並利用模型係數進行預測和解釋

非線性迴歸是一種用於建立和擬合因變量與自變量之間非線性關係的統計模型。

非線性迴歸 直白解釋如下:

  1. 線性與非線性關係:在線性迴歸中,假設因變量與自變量之間的關係是線性的,即可以用一條直線來描述。而在非線性迴歸中,因變量與自變量之間的關係是非線性的,無法用一條直線來準確描述,可能需要用曲線或者其他形式的函數來擬合數據。
  2. 曲線擬合:非線性迴歸通過使用曲線、多項式或其他非線性函數來擬合數據,以更好地捕捉因變量與自變量之間的複雜關係。這使得非線性迴歸可以更準確地描述真實世界中的複雜數據模式。
  3. 參數估計:與線性迴歸類似,非線性迴歸也需要估計模型參數,以使模型的預測值與觀測值之間的誤差最小化。這通常通過最小化損失函數來實現,可以使用各種優化算法來找到最優參數。
  4. 預測與解釋:完成參數估計後,非線性迴歸模型可以用於預測新的觀測值,並對因變量與自變量之間的關係進行解釋。這有助於理解數據背後的真實機制,並進行進一步的分析和決策。

總的來說,非線性迴歸是一種用於建立和擬合非線性關係的統計模型,適用於各種領域的數據分析和建模任務。

擬合數據是指通過建立一個數學模型,使其能夠儘可能準確地描述給定數據的趨勢、規律或特徵。

擬合數據直白解釋如下:

  1. 尋找趨勢或規律:當我們有一組數據時,可能想要找到其中的趨勢或規律,以便更好地理解數據背後的關係。擬合數據的目的就是通過建立一個數學模型,使其能夠表達數據中的這種趨勢或規律。
  2. 建立數學模型:擬合數據通常涉及選擇適當的數學函數或曲線來描述數據之間的關係。這可能是簡單的線性模型,也可能是更復雜的非線性模型,取決於數據的特性和我們希望捕捉的信息。
  3. 最小化誤差:建立數學模型後,我們需要通過調整模型的參數,使其儘可能地與實際觀測數據相符合。通常通過最小化模型預測值與實際觀測值之間的誤差來實現這一目標。
  4. 預測和推斷:一旦我們建立了擬合數據的模型,就可以使用這個模型來進行預測和推斷。這意味着我們可以使用模型來預測未來的數據點,或者對現有數據的特性進行解釋和推斷。

總的來說,擬合數據是一種用於找到數據背後規律的方法,通過建立數學模型來描述數據的趨勢,並儘可能準確地預測和解釋數據。

以下是一個簡單的擬合數據的例子:

假設我們有一個數據集,其中包含了一些關於房屋的信息,如房屋的面積(x)和房屋的價格(y)。我們想要建立一個模型來預測房屋的價格。

  1. 數據集:我們的數據集包含了一些房屋的信息,如下所示:

    x = [100, 200, 300, 400, 500]  # 房屋的面積(單位:平方米)
    y = [150000, 250000, 350000, 450000, 550000]  # 房屋的價格(單位:美元)
    
  2. 建立模型:我們可以選擇一個簡單的線性模型來擬合這些數據。線性模型的方程通常爲:

    y = ax + b
    

    我們的目標是找到合適的參數 a 和 b,使得模型能夠最好地擬合我們的數據。

  3. 擬合數據:我們可以使用最小二乘法等方法來擬合數據,找到最優的參數。通過這個過程,我們可以得到最終的線性模型:

    y = 1000x - 50000
    

    這個模型告訴我們,房屋的價格與房屋的面積成正比,每增加一個平方米的面積,房價增加1000美元,但截距爲負,表示房價不會低於50000美元。

  4. 使用模型進行預測:一旦我們建立了模型,我們就可以使用它來預測房屋的價格。例如,如果有一所房屋的面積是600平方米,我們可以通過將 x = 600 代入模型方程中來預測房價。

這個例子展示瞭如何通過建立一個簡單的線性模型來擬合數據,並使用該模型進行預測。

過擬合是指模型在訓練過程中過度地學習了訓練數據的細節和噪聲,導致在新的、未見過的數據上表現不佳的現象。

過擬合直白解釋如下:

  1. 死記硬背:過擬合就好像一個學生死記硬背了所有的答案,但卻沒有真正理解問題的本質。在機器學習中,模型過擬合了訓練數據,但沒有真正理解數據背後的規律。
  2. 過度擬合訓練集:過擬合的模型在訓練數據上表現得非常好,因爲它幾乎完美地擬合了每一個數據點。但當面對新的、未見過的數據時,模型可能會表現得很差,因爲它對噪聲和無關細節過於敏感。
  3. 缺乏泛化能力:過擬合的模型缺乏泛化能力,即在面對與訓練數據不同但具有相同模式的數據時,無法做出良好的預測或分類。
  4. 解決方法:防止過擬合的方法包括增加更多的訓練數據、簡化模型複雜度、使用正則化技術、以及採用交叉驗證等方法來評估模型的泛化能力。

總的來說,過擬合是指模型在訓練過程中過度擬合了訓練數據,但在新數據上的表現不佳。這種現象就好像一個學生只懂得死記硬背,而沒有真正理解問題的本質。

以下是一個簡單的過擬合示例:

假設有一組包含 x 和 y 值的數據點,表示了一個簡單的二次函數關係。

我們想要使用多項式迴歸模型來擬合這些數據,並預測新的 x 值對應的 y 值。

  1. 數據集:假設我們有以下數據集:

    x = [1, 2, 3, 4, 5]
    y = [2, 3, 6, 10, 15]
    
  2. 簡單擬合:我們可以使用二次多項式迴歸模型來擬合這些數據。

    我們訓練一個二次多項式模型,並使用最小二乘法來擬合數據。

    模型可能會得到如下形式的方程:

    y = ax^2 + bx + c
    

    模型可能會學習到參數:a = 0.5, b = 0.2, c = 1。

  3. 過擬合:然而,如果我們使用更高次的多項式,比如十次多項式,來擬合這些數據,模型可能會更好地擬合訓練數據,但同時也更容易過擬合。

    例如,模型可能學習到如下形式的方程:

    y = 0.5x^10 - 6x^9 + 18x^8 - 25x^7 + 16x^6 - 4x^5 - 6x^4 + 6x^3 - 3x^2 + 1.5x + 1
    

    這個模型在訓練數據上表現得非常好,但它過度擬合了數據的細節和噪聲,導致在新的、未見過的數據上表現不佳。例如,對於 x = 6,模型可能會給出非常不合理的預測結果。

這個例子展示了一個簡單的過擬合情況,其中模型在訓練數據上表現良好,但在新的數據上卻表現不佳,因爲它過度擬合了訓練數據的特定細節。

前饋神經網絡的權重和偏置

file
權重和偏置是神經網絡的可學習參數,它們在訓練過程中不斷調整,以最小化預測錯誤。

  • 權重: 連接各層神經元的線性因子,控制信息在神經元之間的流動。
  • 偏置: 允許神經元在沒有輸入的情況下激活,增加模型的靈活性。

40歲老架構師尼恩提示: 這部分內容如果不懂,可以稍後去學習技術自由圈社羣對應的配套視頻《從0到1穿透LLM大模型架構》,具體請參見尼恩的公號,技術自由圈

解碼器部分:

  • 由N個解碼器堆疊而成
  • 每個解碼器層由三個子層連接結構組成
  • 第一個子層連接結構包括一個多頭自注意力子層和規範化層以及一個殘差連接
  • 第二個子層連接結構包括一個多頭注意力子層和規範化層以及一個殘差連接
  • 第三個子層連接結構包括一個前饋全連接子層和規範化層以及一個殘差連接

img

40歲老架構師尼恩提示:大模型比較難,功力淺的不容易懂。 這部分內容如果不懂,可以稍後去學習技術自由圈社羣對應的配套視頻《從0到1穿透LLM大模型架構》,具體請參見尼恩的公號,技術自由圈

Encoder的結構,以“技術自由圈”的翻譯爲例

通過上面描述的 Multi-Head Attention, Feed Forward, Add & Norm 就可以構造出一個 Encoder block,

Encoder block 接收輸入矩陣 X(3×4) ,並輸出一個矩陣 Z(3×4) 。

img

Encoder block 接收輸入矩陣 X(n×d),並輸出一個矩陣 C(n×d),其中n是單詞個數,d是向量維度。

通過多個 Encoder block 疊加就可以組成 Encoders。

encoder輸入輸出流程

從輸入開始,再從頭理一遍單個encoder這個過程:

  1. 輸入x
  2. 進入多頭self-attention: x1 = self_attention(x)
  3. 殘差加成:x2 = x + x1
  4. 層歸一化:x3 = norm(x2)
  5. 經過前饋網絡: x4= feed_forward(x3)
  6. 殘差加成: x5= x3 + x4
  7. 層歸一化:Z = norm(x5)
  8. 輸出Z

img

第一個 Encoder block 的輸入爲句子分詞的表示向量矩陣,後續 Encoder block 的輸入是前一個 Encoder block 的輸出,最後一個 Encoder block 輸出的矩陣就是編碼信息矩陣 Z,這一矩陣後續會用到 Decoder 中。

40歲老架構師尼恩提示:大模型比較難,功力淺的不容易懂。 這部分內容如果不懂,可以稍後去學習技術自由圈社羣對應的配套視頻《從0到1穿透LLM大模型架構》,具體請參見尼恩的公號,技術自由圈

Decoder 解碼器結構,以“技術自由圈”的翻譯爲例

文檔太長,超過了 平臺限制........

這部分詳細內容略,請參見 尼恩的 PDF版本 《LLM大模型學習聖經:從0到1喫透Transformer技術底座》

PDF在 《技術自由圈》公號 獲取

第一個 Multi-Head Attention

文檔太長,超過了 平臺限制........

這部分詳細內容略,請參見 尼恩的 PDF版本 《LLM大模型學習聖經:從0到1喫透Transformer技術底座》

PDF在 《技術自由圈》公號 獲取

第二個 Multi-Head Attention

文檔太長,超過了 平臺限制........

這部分詳細內容略,請參見 尼恩的 PDF版本 《LLM大模型學習聖經:從0到1喫透Transformer技術底座》

PDF在 《技術自由圈》公號 獲取

Softmax 預測輸出分詞

文檔太長,超過了 平臺限制........

這部分詳細內容略,請參見 尼恩的 PDF版本 《LLM大模型學習聖經:從0到1喫透Transformer技術底座》

PDF在 《技術自由圈》公號 獲取

Transformer 總結

文檔太長,超過了 平臺限制........

這部分詳細內容略,請參見 尼恩的 PDF版本 《LLM大模型學習聖經:從0到1喫透Transformer技術底座》

PDF在 《技術自由圈》公號 獲取

參考文獻:

論文:Attention Is All You Need

https://jalammar.github.io/illustrated-transformer/

http://nlp.seas.harvard.edu/annotated-transformer/

https://playground.tensorflow.org

說在最後:有問題找老架構取經

毫無疑問,大模型架構師更有錢途, 這個代表未來的架構。

前面講到,尼恩指導的那個一個成功案例,是一個9年經驗 網易的小夥伴,拿到了一個年薪近80W的大模型架構offer,逆漲50%,那是在去年2023年的 5月。

不到1年,小夥伴也在團隊站穩了腳跟,成爲了名副其實的大模型架構師。回想當時,尼恩本來是規劃指導小夥做通用架構師的( JAVA 架構、K8S雲原生架構), 當時候爲了他的錢途, 尼恩也是 壯着膽子, 死馬當作活馬指導他改造爲 大模型架構師。

沒想到,由於尼恩的大膽嘗試, 小夥伴成了.

不到1年時間,現在 職業身價翻了1倍多,現在P8級,可以拿到年薪 200W的offer了。

應該來說,小夥伴大成,實現了真正的逆天改命。

既然有一個這麼成功的案例,尼恩能想到的,就是希望能幫助更多的社羣小夥伴, 成長爲大模型架構師,也去逆天改命。

技術是相同的,架構也是。

這一次,尼恩團隊用積累了20年的深厚的架構功力,編寫一個《LLM大模型學習聖經》,幫助大家進行一次真正的AI架構穿透,幫助大家穿透AI架構。

尼恩團隊的大模型《LLM大模型學習聖經》是一個系列,初步的規劃包括下面的內容:

  • 《LLM大模型學習聖經:從0到1喫透Transformer技術底座》
  • 《LLM大模型學習聖經:從0到1喫透大模型的基礎實操》
  • 《LLM大模型學習聖經:從0到1喫透大模型的頂級架構》

本文是第一篇《LLM大模型學習聖經:從0到1喫透Transformer技術底座》 ,後面的文章,尼恩團隊會持續迭代和更新。 並且錄製配套視頻。

當然,除了大模型學習聖經,尼恩團隊深耕技術。

多年來,用深厚的架構功力,把很多複雜的問題做清晰深入的穿透式、起底式的分析,寫了大量的技術聖經:

  • Netty 學習聖經:穿透Netty的內存池和對象池(那個超級難,很多人窮其一生都搞不懂),
  • DDD學習聖經: 穿透 DDD的建模和落地,
  • Caffeine學習聖經:比如Caffeine的底層架構,
  • 比如高性能葵花寶典
  • Thread Local 學習聖經
  • 等等等等。

上面這些學習聖經,大家可以通過《技術自由圈》公衆號,找尼恩獲取。

大家深入閱讀和掌握上面這些學習聖經之後,一定內力猛漲。

所以,尼恩強烈建議大家去看看尼恩的這些核心內容。

另外,如果學好了之後,還是遇到職業難題, 沒有面試機會,怎麼辦?

可以找尼恩來幫扶、領路。

尼恩已經指導了大量的就業困難的小夥伴上岸.

前段時間,幫助一個40歲+就業困難小夥伴拿到了一個年薪100W的offer,小夥伴實現了 逆天改命

技術自由的實現路徑:

實現你的 架構自由:

喫透8圖1模板,人人可以做架構

10Wqps評論中臺,如何架構?B站是這麼做的!!!

阿里二面:千萬級、億級數據,如何性能優化? 教科書級 答案來了

峯值21WQps、億級DAU,小遊戲《羊了個羊》是怎麼架構的?

100億級訂單怎麼調度,來一個大廠的極品方案

2個大廠 100億級 超大流量 紅包 架構方案

… 更多架構文章,正在添加中

實現你的 響應式 自由:

響應式聖經:10W字,實現Spring響應式編程自由

這是老版本 《Flux、Mono、Reactor 實戰(史上最全)

實現你的 spring cloud 自由:

Spring cloud Alibaba 學習聖經》 PDF

分庫分表 Sharding-JDBC 底層原理、核心實戰(史上最全)

一文搞定:SpringBoot、SLF4j、Log4j、Logback、Netty之間混亂關係(史上最全)

實現你的 linux 自由:

Linux命令大全:2W多字,一次實現Linux自由

實現你的 網絡 自由:

TCP協議詳解 (史上最全)

網絡三張表:ARP表, MAC表, 路由表,實現你的網絡自由!!

實現你的 分佈式鎖 自由:

Redis分佈式鎖(圖解 - 秒懂 - 史上最全)

Zookeeper 分佈式鎖 - 圖解 - 秒懂

實現你的 王者組件 自由:

隊列之王: Disruptor 原理、架構、源碼 一文穿透

緩存之王:Caffeine 源碼、架構、原理(史上最全,10W字 超級長文)

緩存之王:Caffeine 的使用(史上最全)

Java Agent 探針、字節碼增強 ByteBuddy(史上最全)

實現你的 面試題 自由:

4800頁《尼恩Java面試寶典 》 40個專題

免費獲取11個技術聖經PDF:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章