# 李宏毅_生成式導論 2024_第10講:今日的語言模型是如何做文字接龍的 — 淺談Transformer (已經熟悉 Transformer 的同學可略過本講)
###### tags: `Hung-yi Lee` `NTU` `生成式導論 2024`
[課程撥放清單](https://www.youtube.com/watch?v=AVIKFXLCPY8&list=PLJV_el3uVTsPz6CTopeRp2L2t4aL_KgiI)
## 第10講:今日的語言模型是如何做文字接龍的 — 淺談Transformer (已經熟悉 Transformer 的同學可略過本講
[課程連結](https://www.youtube.com/watch?v=uhNsUCb2fJI&list=PLJV_el3uVTsPz6CTopeRp2L2t4aL_KgiI&index=11)
### 前言

課程中已經提過,目前的大型語言模型就是在做文字接龍,所以楊立崑氣噗噗(這我加的)。簡單的概念就是從大量語言資料中學習參數。背後的學習方式就是利用類神經網路中的Tasnformer。
### 模型演進

這是語言模型的演進史,並且今天講的Transformer是簡化版的,詳細的部份可以參考上面的課程連結。
### Transformer概述

上圖簡要的說明整個input到output的過程。總之重點在於3、4加起來就是一個Transformer Block。
### 1. 把文字變成Token

[參考連結_Byte-Pair Encoding tokenization](https://huggingface.co/learn/nlp-course/chapter6/5)
基本上語言的處理第一步就是將之轉為token,這是最基本的單位,這個處理的根據我們對模型的需求所設置的token list來轉換。
以上圖為例,introduction of generative ai經過處理之後變成int, roduction, of, gener, ative, ai。
以中文來說通常是以一個『方塊字』來做為一個token。
token也可以利用演算法來取得,課程給出BPE演算法參考連結,簡單說就是參考大量資料,然後從中看那些英文或是符號是常常一起出現的,如果有,那它就是一個token。
以generative為例,就是因為generative不常一起出現,而gener、ative很常一起出現,所以就被拆成兩個token。
### 1. 把文字變成Token

[參考連結_Learn about language model tokenization](https://platform.openai.com/tokenizer)
參考連結是openai的網站,可以在上面看你的input會被轉成幾個token,從中你也可以理解它是怎麼分割的。
### 2. 理解每個Token - 語意

文字轉為token之後會再經過Embedding轉成向量,類似語意的token在空間中的距離會是相近的。以上面簡報為例,動物、值物跟動詞各自形成一個集群。
### 2. 理解每個Token - 語意

這些token對應的向量就是經過訓練得到,也就是課程中提到的參數,不需要人去處理,有個重點,這種embedding是沒有考慮上下文的。
### 2. 理解每個Token - 位置

token所代表的語意部份由embedding中取得,但我們還需要考慮其位置,不同的位置可能代表著不同的意函。所以我們把位置的資訊帶入跟語意的資訊做相加。
這個位置資訊又稱為Positional Embedding,可以是人為設置的,也可以是學習得到的,不過至少在Tranformer中是人為設置的。
### 3. Attention: 考慮上下文

以上圖為例,在word embedding的情況下,果就是果,它是一樣的,但是在考慮上下文之後,這兩個果就會因為attention而有不一樣的意思,這樣的作法又稱為Contextualized。
### 3. Attention: 考慮上下文

[參考論文_Attention Is All You Need](https://arxiv.org/abs/1706.03762)
[Attention Is All You Need(繁中翻譯)](https://hackmd.io/@shaoeChen/BkxGXkS96)
### 3. Attention: 考慮上下文

這邊說明attention做的事情:
1. 首先是先計算token之間的相關性
### 3. Attention: 考慮上下文

2. 接著是集成相關資訊
這邊是一個非常簡化的說明,更清楚的部份可參考過去的課程。
### 3. Attention: 考慮上下文

這些token的相關性整合起來就是一個attention matrix。
### 3. Attention: 考慮上下文

實作上我們只會考慮token位置之前的資訊,上圖為例,第3個token就只會考慮第1、2個token。這又稱為Causal Attention,後續還會再做說明。
### 3. Attention: Multi-head Attention

一般來說我們會有多個注意力模組來做關聯性的計算,這又稱為Multi-head Attention。
### 3. Attention: Multi-head Attention

一樣的會對多組注意力機制來做加權。
### 3. Attention: Multi-head Attention

在經過多組注意力機制的計算之後,最終經過Feed Forward得到一組向量。整個這樣的結構就稱為Transformer Block。
### 3. Attention: Transformer Block

受惠於框架,雖然一個block裡面有很多東西,不過對我們寫程式來說就是加入一個網路層的概念。
### 3. Attention: Transformer Block

最後就從最後一層的Block裡面的最後一個output去得到一個機率分佈。
### 想想語言模型怎麼產生答案

這邊說明剛剛提到的Causal Attention。
基本上語言模型的答案是根據問題產生一個回應,然後把這個回應加到問題中再產生一次回應。
以上圖為例,模型根據你的輸入產生w1,然後把你的輸入+w1再產生w2,然後再把你的輸入+w1+w2再產生w3。
### 想想語言模型怎麼產生答案


總的來看,模型根據輸入先計算相關性得到第一個回應,也就是w1,然後w1再加進去輸入裡面,也因為輸入的相關性已經計算過了,所以不需要再計算,需要計算的也許是新加入的部份。
### 想想語言模型怎麼產生答案

不過根據文獻記錄來看,似乎是不需要再做任何的計算,也就是不用再管AI的輸出跟原始輸入的關聯性,從研究記錄來看,就算考慮進去了,所得到的結果也不會比較好就是了。
PS:基本上Chat-GPT是沒在管的。
### 為什麼處理超長文本會是挑戰

知道基本原理之後就不難明白為什麼處理超長文本會是一種挑戰了。
可以接受100k的tokens就代表光計算注意力權重的次數就是100k的平方。算力的部份不是跟文本的長度成正比,而是跟文本的長度的平方成正比。
### 研究方向

### Transformer概述
