คุยกับ AI ตอนที่ 8: ตาม token ผ่าน Transformer ทีละขั้น
จาก Tokenizer และ Embedding ผ่าน Attention, MLP และ Residual Stream ไปจนถึง Logits, Softmax และการเลือก token ถัดไป
ตอนที่ 8 จาก 11 ตอนในชุด คุยกับ AI: จากการ Train LLM ถึง AGI
บันทึกบทสนทนาระหว่าง นพ.สุทธิศักดิ์ เด่นดวงใจ กับ ChatGPT-5.6 Reasoning Instant จากแชตต้นฉบับ คงคำอธิบายและตัวอย่างของ ChatGPT ไว้ โดยปรับหัวข้อ ตาราง และสัญลักษณ์สมการให้อ่านบนเว็บได้สะดวก
ผม: เล่าต่อ
ChatGPT-5.6 Reasoning Instant:
ได้ครับ คราวนี้เราจะ ผ่า LLM หนึ่งตัวตั้งแต่ input จน token โผล่บนจอ 🔬🧠
สมมติคุณพิมพ์:
เมืองหลวงของญี่ปุ่นคือ
แล้วโมเดลตอบ:
โตเกียว
สิ่งที่เกิดข้างในไม่ได้เป็น ค้นฐานข้อมูล → เจอ Tokyo แต่เป็น pipeline ประมาณนี้:
Text
↓
Tokenizer
↓
Token IDs
↓
Embeddings
↓
Transformer blocks × N
↓
Logits
↓
Softmax
↓
เลือก next token
↓
เอา token ใหม่กลับเข้าไป
↓
ทำซ้ำ
1. Tokenizer: หั่นข้อความก่อน
LLM ไม่ได้อ่านตัวอักษรแบบมนุษย์โดยตรง
ข้อความ:
The cat is sleeping.
อาจถูกแบ่งประมาณ:
["The", " cat", " is", " sleeping", "."]
แต่คำยาวหรือคำแปลกอาจถูกแยก:
"unbelievable"
→ ["un", "believ", "able"]
ภาษาไทยก็มีความน่าสนใจเพราะเราไม่ได้เว้นวรรคทุกคำ Tokenizer จึงไม่ได้หมายความว่า:
1 token = 1 คำ
เด็ดขาด
Token อาจเป็น:
คำ
ส่วนของคำ
เครื่องหมาย
ช่องว่าง
code fragment
byte sequence
ฯลฯ
จากนั้นแต่ละ token ถูก map เป็น integer:
"The" → 791
" cat" → 8415
" is" → 374
ตัวเลขพวกนี้เรียกว่า Token IDs
2. แต่เลข 8415 ไม่มี "ความหมาย"
ถ้า:
cat = 8415
dog = 5672
ไม่ได้แปลว่า:
8415 ใกล้ 5672
ดังนั้น cat คล้าย dog
ID เป็นแค่ index
เราจึงต้องมี Embedding
ประมาณ:
Token ID 8415
↓
Embedding table
↓
[0.18, -0.42, 0.73, 0.11, ...]
จาก token หนึ่งตัว กลายเป็น vector ที่มีมิติสูง
เรียกว่า:
Embedding vector
3. Embedding ทำให้ความหมายกลายเป็น geometry
นี่คือแนวคิดที่สวยมากของ neural networks
สิ่งต่าง ๆ ไม่ได้ถูกแทนด้วยคำอธิบาย:
CAT:
animal=true
legs=4
cute=maybe
แต่ถูกแทนใน vector space
เชิงแนวคิด:
animals
↑
cat • │ • dog
│
• tiger
│
─────────────────┼────────→ vehicles
│
│ • car
│
│ • truck
ของจริงมีหลายพันมิติและ representation เปลี่ยนไปตาม layer ดังนั้นภาพ 2D นี้เป็นเพียง intuition
4. Position ก็ต้องเข้าไปด้วย
ดูสองประโยค:
Dog bites man.
กับ
Man bites dog.
tokens คล้ายกัน แต่ความหมายต่างกันมาก 🐕😱
ดังนั้นโมเดลต้องรู้ตำแหน่ง/ลำดับด้วย
architecture สมัยใหม่มีวิธี encode positional information หลายแบบ เช่น positional encodings หรือเทคนิคเชิง relative/rotary position
conceptually:
dog + position 1
bites + position 2
man + position 3
จึงรู้ว่าใครอยู่ตรงไหนใน sequence
5. แล้วเข้า Transformer Block
ตอนนี้เรามี:
Token embeddings
↓
┌──────────────────┐
│ Transformer │
│ Block 1 │
└────────┬─────────┘
↓
┌──────────────────┐
│ Transformer │
│ Block 2 │
└────────┬─────────┘
↓
...
↓
┌──────────────────┐
│ Transformer │
│ Block N │
└──────────────────┘
แต่ละ block โดยภาพรวมมีองค์ประกอบสำคัญอย่าง:
Attention
+
MLP / Feed-forward network
+
Normalization
+
Residual connections
architecture จริงแตกต่างกันได้ แต่โครงนี้ใช้เป็น mental model ได้ดี
6. Attention: "ตอนนี้ควรมองอะไร?"
สมมติ:
John gave Peter his book because he trusted him.
ตอนประมวลผลคำต่าง ๆ โมเดลต้องจับความสัมพันธ์ว่า:
he
↓
John?
him
↓
Peter?
Attention ช่วยให้แต่ละตำแหน่งใช้ information จากตำแหน่งอื่น
เราพูดถึง Q K V ไปแล้ว:
Q = Query
K = Key
V = Value
สูตร:
Attention(Q,K,V) = softmax((QKᵀ) / √dₖ) V
ในภาษาโลกมนุษย์:
Query:
ฉันต้องการข้อมูลอะไร?
Key:
ข้อมูลแต่ละตำแหน่งเกี่ยวข้องแค่ไหน?
Value:
ถ้าเกี่ยวข้อง เอาข้อมูลอะไรมาใช้?
7. Multi-Head Attention
ไม่ได้มี attention ชุดเดียว
มีหลาย heads
┌→ Head 1
│
Input ───────┼→ Head 2
│
├→ Head 3
│
└→ Head ...
แต่ละ head สามารถเรียนรู้รูปแบบความสัมพันธ์ที่แตกต่างกัน
เชิง intuition อาจมีบาง head ที่ useful สำหรับ:
pronoun → noun
function call → definition
opening bracket → closing bracket
country → capital
subject → verb
แต่ต้องระวังว่าเราไม่สามารถติดป้ายทุก head ได้สวย ๆ ว่า “นี่คือ Country Head” เสมอไป
ของจริง distributed และยุ่งเหยิงกว่านั้น
8. Attention ไม่ใช่ทั้งหมดของ Transformer
ตรงนี้คนมักลืม
มีอีกก้อนใหญ่มากคือ:
MLP / Feed-forward network
ประมาณ:
Representation
↓
Linear
↓
Activation
↓
Linear
↓
New representation
ถ้า Attention คล้าย:
เอาข้อมูลจากตำแหน่งอื่นมาประกอบ
MLP สามารถมองแบบหยาบ ๆ ว่า:
ประมวล/transform features ที่ตำแหน่งนั้น
ทั้งสองอย่างทำงานร่วมกันตลอดหลายสิบหรือหลายร้อย layers
9. Residual Stream คือถนนสายหลัก
นี่เป็น concept ที่น่าสนใจมาก
แทนที่จะให้แต่ละ layer ทำลาย representation เดิมแล้วสร้างใหม่หมด:
Layer1 → Layer2 → Layer3
มี residual connection ประมาณ:
x_new = x + f(x)
คือ:
ข้อมูลเดิม ───────────────┐
+
Layer คำนวณอะไรใหม่ ─────┘
↓
representation ใหม่
แต่ละ layer จึงเหมือนเขียนข้อมูลเพิ่มเติมลงบนกระแส representation
เปรียบได้กับ whiteboard ที่หลายทีมเข้ามาเติม annotation มากกว่าลบกระดานแล้วเขียนใหม่ทุกครั้ง
10. จากคำธรรมดา representation เริ่ม contextualized
สมมติคำว่า:
bank
ใน:
I deposited money at the bank.
กับ:
We sat on the river bank.
ตอนเริ่ม token อาจมี embedding ใกล้เคียงกัน
แต่หลังผ่าน Transformer layers:
bank + money + deposit
↓
financial institution
อีกกรณี:
bank + river + water
↓
river edge
ดังนั้น representation ของ token ไม่ได้ตายตัว
มันถูก contextualize
นี่คือหนึ่งในความสามารถสำคัญของ Transformer
11. ทีนี้กลับมาที่คำถามญี่ปุ่น
เราให้:
เมืองหลวงของญี่ปุ่นคือ
ผ่าน layers ไปเรื่อย ๆ
representation ตำแหน่งสุดท้ายอาจ encode ข้อมูลที่เกี่ยวข้องกับ:
question
capital
Japan
geography
expected answer
Thai language
จากนั้นผ่าน output projection
แล้วได้ตัวเลขสำหรับ token ทุกตัวใน vocabulary
เรียกว่า:
Logits
ประมาณ:
Token Logit
โตเกียว 15.8
โอซาก้า 9.1
เกียวโต 8.7
กรุงเทพฯ 2.1
แมว -3.4
banana -5.7
...
12. Logit ยังไม่ใช่ probability
เราเอา logits ผ่าน Softmax
P_i = exp(z_i) / Σ_j exp(z_j)
แล้วได้ประมาณ:
โตเกียว 94.2%
โอซาก้า 2.8%
เกียวโต 1.9%
อื่น ๆ 1.1%
นี่คือ:
P(next token | context)
หัวใจที่เราเริ่มคุยกันตั้งแต่ตอนแรกกลับมาแล้ว 🔄
13. แล้วเลือก token ไหน?
วิธีง่ายที่สุด:
เลือก token probability สูงสุด
เรียกประมาณว่า greedy decoding
โตเกียว 94%
↓
เลือก "โตเกียว"
แต่ถ้าทำอย่างนี้ตลอด output อาจแข็งและ predictable มาก
จึงมี sampling
เช่น:
A 50%
B 30%
C 15%
D 5%
เราสุ่มตาม distribution
A มีโอกาสมากสุด แต่ B/C ก็มีสิทธิ์ถูกเลือก
14. Temperature 🔥
Temperature ปรับความแหลมของ probability distribution
Temperature ต่ำ:
A █████████████████ 90%
B ██ 7%
C █ 2%
D 1%
output มัก deterministic มากขึ้น
Temperature สูง:
A ███████ 40%
B █████ 28%
C ████ 20%
D ██ 12%
มี diversity มากขึ้น
จึงมี tradeoff:
Low temperature
→ stable
→ predictable
High temperature
→ diverse
→ creative
→ แต่เสี่ยงหลุดมากขึ้น
อย่างไรก็ตาม inference stack สมัยใหม่อาจซับซ้อนกว่าการหมุน temperature อย่างเดียว
15. พอเลือก token แล้ว... ยังไม่จบ
สมมติเลือก:
"โต"
ถ้า tokenizer แบ่ง Tokyo เป็นหลาย token โมเดลต้องทำต่อ:
เมืองหลวงของญี่ปุ่นคือ โต
↓
Model
↓
เกียว
แล้ว:
เมืองหลวงของญี่ปุ่นคือ โตเกียว
↓
Model
↓
.
แล้วอาจเลือก end-of-sequence
ดังนั้นการ generate คือ loop:
Context
↓
Transformer
↓
Next-token probabilities
↓
Choose token
↓
Append token
│
└────────────↺
ทีละ token
16. นี่คือ Autoregressive Generation
คำว่า autoregressive สำคัญมาก
Output ก่อนหน้ากลายเป็น input ของรอบถัดไป
P(x₁,x₂,…,xₙ) = ∏ᵢ P(xᵢ | x₍<ᵢ₎)
จึงประมาณว่า:
Token 1
↓
Token 1 + Token 2
↓
Token 1 + Token 2 + Token 3
↓
...
นี่อธิบายพฤติกรรมแปลก ๆ อย่างหนึ่งได้ด้วย
ถ้าโมเดลเริ่มตอบผิด:
France's capital is Lyon...
token ต่อ ๆ ไปจะถูก condition บน คำตอบผิดที่มันเพิ่งสร้างเอง
มันจึงอาจสร้างเหตุผลรองรับความผิดนั้นต่อไปอย่างสง่างาม 🫠
17. นี่เป็นอีกต้นกำเนิดของ Hallucination
สมมติช่วงแรก distribution สูสี:
Correct path 45%
Wrong path 40%
Other 15%
บังเอิญเลือก wrong path
จากนั้น:
Wrong token
↓
กลายเป็น context
↓
Next prediction conditioned
on wrong information
↓
Wrong path แข็งแรงขึ้น
จึงเกิด snowball effect
นี่เป็นเหตุผลหนึ่งที่ verification และ tool use สำคัญมาก
18. แล้ว ChatGPT หนึ่งคำตอบใช้ Transformer กี่ครั้ง?
ถ้าคำตอบมี 1,000 output tokens โดยหลัก autoregressive generation ต้องทำ decoding step ต่อเนื่องประมาณ 1,000 ครั้ง
แต่ใช้ KV cache เพื่อไม่ต้องคำนวณ Key/Value ของ token เก่าทุกอย่างใหม่ตั้งแต่ศูนย์
Prompt
↓
Prefill
↓
KV Cache
↓
Generate token 1
↓
update cache
↓
Generate token 2
↓
update cache
↓
...
ขั้นแรกที่ประมวลผล prompt จำนวนมากเรียกโดยทั่วไปว่า prefill
จากนั้นเข้าสู่ decode
19. Prefill กับ Decode มีลักษณะ workload ต่างกัน
Prefill
อ่าน context จำนวนมากพร้อมกัน:
100,000 input tokens
↓
Transformer
มี parallelism สูง
Decode
สร้าง:
token
↓
token
↓
token
↓
token
มี dependency ตามลำดับ
จึงเป็นหนึ่งในเหตุผลที่ generation latency มีธรรมชาติไม่เหมือนการประมวลผล prompt
20. ตอนนี้เราสามารถตาม token ตั้งแต่เกิดจนตายได้แล้ว
"เมืองหลวงของญี่ปุ่นคือ"
│
▼
TOKENIZER
│
▼
Token IDs
│
▼
EMBEDDINGS
│
▼
Position information
│
▼
┌──────────────────────────┐
│ Transformer Block 1 │
│ Attention + MLP │
├──────────────────────────┤
│ Transformer Block 2 │
│ Attention + MLP │
├──────────────────────────┤
│ ... │
├──────────────────────────┤
│ Transformer Block N │
└────────────┬─────────────┘
▼
LOGITS
│
▼
SOFTMAX
│
▼
P(next token | context)
│
▼
DECODING
│
▼
"โตเกียว"
│
└────────↺
นี่คือ LLM core ที่อยู่กลางระบบทั้งหมดที่เราเล่ามา
แต่ตอนนี้มีเรื่องหนึ่งที่ควรแก้ mental model เพิ่มอีกชั้น:
ChatGPT, Claude, Gemini หรือ coding agent ที่เราใช้งาน ไม่จำเป็นต้องเท่ากับ Transformer ก้อนนี้เพียงก้อนเดียว
สิ่งที่เราเรียกว่า “AI model” ในชีวิตประจำวันอาจอยู่ในระบบที่มี routing, reasoning, context construction, retrieval, memory, tool execution, verification และ serving infrastructure ล้อม neural network อยู่
ดังนั้นตอนต่อไปที่คุ้มมากคือการแยกสามคำที่คนชอบใช้ปนกัน:
LLM vs Model vs AI System/Agent
แล้วเราจะเอาสิ่งที่เรียนมาทั้งหมดประกอบเป็นภาพเดียว ตั้งแต่คุณกด Send ใน ChatGPT จนข้อความแรกเริ่มไหลกลับมาบนหน้าจอครับ 🧠 → 🏭 → 📱
← ตอนก่อนหน้า: LLM จำ เรียนรู้ หรือเดาคำตอบ
ตอนถัดไป: จาก LLM สู่ระบบ AI และ Agent →
อ่านทั้งชุด
- คุยกับ AI ตอนที่ 1: การ Train LLM คืออะไร
- คุยกับ AI ตอนที่ 2: ทาย token ถัดไป แล้วเขียนโปรแกรมได้อย่างไร
- คุยกับ AI ตอนที่ 3: Context, Attention และความจำระหว่างคุย
- คุยกับ AI ตอนที่ 4: ทำไมคิดนานขึ้นจึงอาจตอบได้ดีขึ้น
- คุยกับ AI ตอนที่ 5: GPU, VRAM และโครงสร้างพื้นฐานที่ใช้ฝึก LLM
- คุยกับ AI ตอนที่ 6: จาก Base Model มาเป็น Assistant
- คุยกับ AI ตอนที่ 7: LLM จำ เรียนรู้ หรือเดาคำตอบ
- คุยกับ AI ตอนที่ 8: ตาม token ผ่าน Transformer ทีละขั้น (ตอนนี้)
- คุยกับ AI ตอนที่ 9: จาก LLM สู่ระบบ AI และ Agent
- คุยกับ AI ตอนที่ 10: เพิ่ม compute ให้ตอนฝึกหรือตอนตอบ
- คุยกับ AI ตอนที่ 11: จาก LLM ที่เก่งขึ้นไปสู่คำถามเรื่อง AGI