Sani/Apa perbezaan antara base dan instruct?

Created Wed, 25 Dec 2024 21:54:52 +0800 Modified Thu, 26 Dec 2024 08:45:18 +0000
707 Words

Introduction

Dah lama nak post benda ni, tapi malas nak clone balik repo dan setup.

Ini adalah sambungan sharing daripada yang sebelum ni https://khursani.xyz/post/instructvector/ dan https://x.com/khursani8/status/1849073692145574147

Untuk post ni aku nak share apa yang aku jumpa untuk tahun ni, mostly in term of apa beza dari segi weights antara Base(Pretraining) dengan Instruct(Template) punya model. Sebab dari situ baru bole tau layer mana patut tune atau patut merge.

Large Language Model

Architecture LLM yang standard sekarang adalah Llama punya architecture. Gambar bawah ni structure Llama dari input embedding layer(embed_tokens) ke output embedding layer(lm_head)

qwenmodel


Start dengan macam mana model consume text.

token

Cell 23: Tokenize(split) sentence jadi minimal unit aka token

Cell 24: Map token jadi token id

Cell 25: Saja nak tunjuk mapping

Cell 26: Selalunya instead of tukar satu2, bole encode terus macam ni

Cell 27: Tukar token ids jadi embeddings, so setiap id akan dapat 896 nombor untuk represent diri dia instead of 1 je.


Selalunya lepas dah dapat embeddings, akan melalui transformation macam dekat sini https://x.com/khursani8/status/1849073692145574147.

So kita cuba abaikan dulu transformation daripada attention layer, kita terus decode daripada embeddings tadi jadi token id balik dengan lm_head

decode

Tada!!!, tadi tukar jadi embeddings, lepas tu revert balik jadi asal.

So far kalau korang follow, boleh faham laa yang first dengan last layer ni utk encode/decode je.(Lupa nak cite, kadang2, embed_tokens dgn lm_head ni weights yg sama sebab tie embeddings, kenapa tu luar scope :p)

Tapi kenapa LLM bole generate text baru yang kreatif atau menjawab soalan? Itu daripada hasil attention layer yang kita skip tadi.

Aku dah explain part attention transformation tu dekat sini https://x.com/khursani8/status/1849073692145574147, so aku summarizekan jelaa.

Attention block ni akan cuba shift magnitude embeddings untuk mengubah rank setiap token, macam mana nak tau rank dia berubah? bole cuba decode dgn lm_head utk setiap layer transformation macam aku buat dekat tweet tu.

perubahan

Atas ni contoh perubahan rank utk token “Malaysia”, “Indonesia” dengan “Myanmar”


Ok, dah cover basic apa berlaku dekat setiap layer, masa untuk fahamkan, apa yang dah berlaku bila kita finetune dari Base ke Instruct.

Dalam linear algebra atau time belajar fizik kat sekolah dulu, apa yang aku tau, vector ni ada dua je, direction dengan magnitude.

Jom start dengan direction.

Direction

Layer yang direction dia tak ada beza antara Base dengan Instruct

cos

Layer yang direction dia banyak berubah antara Base dengan Instruct, tapi still tak banyak sangat perubahan direction dia.

coslast

Kalau perasan, embed_tokens paling banyak perubahan dari segi direction, sebab apa? Kalau yang selalu finetune dari Base ke Instruct faham kenapa.

Spoiler

Bila finetune dari Base ke Instruct, akan ada additional token introduce, sebab dia dah menjadi template based next token prediction.

qwenadd

Macam dekat gambar tu, <|im_start|> dengan <|im_end|> salah satu yang di introduce,so weight embedding layer kena faham context token baru ni. Ada yang introduce tools token etc.

Bukan macam pretraining just raw text tanpa template.

Itu in term of direction, how about magnitude?

Magnitude

mag

So apa pattern boleh nampak dekat sini?

Atas ni adalah average perbezaan weight antara Base dengan Instruct.

Yang paling top sekali, embed_tokens… sebab apa embed_tokens?

Kena faham dulu direction ni represent apa? magnitude ni represent apa?

Kalau direction, aku tak expert sangat, so far hypothesis aku direction ni how model tu relate antara token.

Kalau magnitude, value activation, contoh macam sebelum ni, <|im_start|> ni macam Base model bagi rank rendah. Bila dah finetune untuk Instruct, model tu dah kena lebihkan <|im_start|> ni sebab tu weight dekat embed_tokens ni kena ubah banyak cikit.

maglow

Dan ini weights yang tak banyak ubah sangat untuk tukar dari Base ke Instruct.

Ok, daripada pattern ni aku rasa korang tau laa, bila nak finetune atau merge model, apa patut dibuat,

kalau nak tukar style je tanpa ubah current knowledge mana patut ubah?

kalau nak tambah knowledge, tanpa buat current model jadi bodoh, mana patut ubah?

tak nak spoil jawapan :p


Bonus

Dah kol 11 malam, tido dlu, esok aku tambah insyaallah.

Basically untuk apply apa yang dah belajar atas tu.

Aku rasa orang tak minat pasal topik ni,so aku malas nak bazir masa hahaha.


Credits?

So far takde research paper yang buat benda ni, so aku berhuhu sajalah.

Thanks kepada Qwen sebab bagi model yang aku bole pakai untuk finetune tambah knowledge, untuk Bahasa Melayu takde, so sebab tu demo aku dalam English.