AI
น้องๆ เคยสงสัยมั้ยว่าทำไม ChatGPT มันตอบคำถามเราได้ฉลาดจัง? เบื้องหลังความฉลาดนั้นมีหลายปัจจัย แต่หนึ่งในนั้นคือ "Fine Tuning" นี่แหละ
Fine Tuning ก็คือการ "ปรับจูน" โมเดลภาษาขนาดใหญ่ (LLM - Large Language Model) ที่ถูกฝึกมาแล้ว ให้เก่งกาจเฉพาะทางมากขึ้น เหมือนเรามีนักเรียนที่เรียนจบปริญญาตรีมาแล้ว แต่เราอยากให้เค้าเชี่ยวชาญด้านการเงิน เราก็ต้องส่งเค้าไปเรียนคอร์สการเงินเฉพาะทางเพิ่ม นั่นแหละคือ Fine Tuning
สมัยผมทำร้านเน็ต SiamCafe.net เมื่อ 20 กว่าปีที่แล้ว ไม่มีหรอก AI แบบนี้ (ฮา) แต่ถ้ามีนะ จะเอามาช่วยตอบคำถามลูกค้าเรื่องเกมออนไลน์แน่นอน! ซึ่ง Fine Tuning นี่แหละที่จะทำให้ AI ตอบคำถามเฉพาะทางได้ดีกว่าเดิม
ลองนึกภาพว่าเรามี LLM ที่เก่งเรื่องทั่วไป แต่เราอยากให้มันช่วยตอบคำถามลูกค้าเกี่ยวกับสินค้าของเรา Fine Tuning จะช่วยให้ LLM เข้าใจสินค้าของเรามากขึ้น ตอบคำถามได้ตรงจุด และสร้างความพึงพอใจให้กับลูกค้าได้มากกว่าเดิม
ถ้าไม่ Fine Tuning ล่ะ? ก็เหมือนเราเอาคนที่ไม่เคยรู้จักสินค้าของเรามาตอบคำถามลูกค้า อาจจะตอบได้ แต่ไม่ละเอียด ไม่แม่นยำ และอาจจะสร้างความเข้าใจผิดได้
ยกตัวอย่างเช่น ถ้าเราต้องการให้ LLM ช่วยเขียนบทความเกี่ยวกับ "กาแฟอาราบิก้า" การ Fine Tuning ด้วยข้อมูลเกี่ยวกับกาแฟอาราบิก้าโดยเฉพาะ จะช่วยให้ LLM เขียนบทความได้ลึกซึ้ง ถูกต้อง และน่าสนใจกว่าการใช้ LLM ทั่วไป
ที่สำคัญคือ Fine Tuning ช่วยให้เราสร้าง AI ที่ "ฉลาด" และ "เป็นประโยชน์" มากขึ้น น้องๆ ลองคิดดูว่าเราสามารถนำ AI ไปประยุกต์ใช้ในธุรกิจของเราได้อย่างไรบ้าง? ลองดู SiamCafe Blog สิ อาจจะมีไอเดียดีๆ ก็ได้!
ก่อนจะเริ่ม Fine Tuning เราต้องมีความรู้พื้นฐานเกี่ยวกับ LLM และ Machine Learning สักหน่อย ไม่ต้องถึงกับเป็นเทพ แต่ต้องเข้าใจหลักการทำงานบ้าง
LLM ก็คือโมเดลภาษาขนาดใหญ่ที่ถูกฝึกด้วยข้อมูลจำนวนมหาศาล ทำให้มันสามารถเข้าใจและสร้างภาษาได้เหมือนมนุษย์ ตัวอย่าง LLM ที่เรารู้จักกันดีก็คือ ChatGPT, Bard, และ Llama 2
LLM ทำงานโดยการ "ทำนาย" คำศัพท์ถัดไปในประโยค โดยอาศัยข้อมูลที่มันเคยเรียนรู้มา สมัยก่อนผมเคยเขียนโปรแกรม Chatbot เล็กๆ ด้วย AIML (Artificial Intelligence Markup Language) แต่เทียบไม่ได้เลยกับ LLM ในปัจจุบัน
Transfer Learning คือเทคนิคที่นำความรู้จากโมเดลที่ถูกฝึกมาแล้ว ไปใช้กับงานใหม่ที่เราสนใจ Fine Tuning ก็เป็นรูปแบบหนึ่งของ Transfer Learning นี่แหละ
ข้อดีของ Transfer Learning คือเราไม่ต้องเริ่มฝึกโมเดลใหม่ทั้งหมด ซึ่งต้องใช้ทรัพยากรและเวลาเยอะมาก เราสามารถนำโมเดลที่ถูกฝึกมาแล้ว มาปรับปรุงให้เข้ากับงานของเราได้เลย
Dataset คือชุดข้อมูลที่เราใช้ในการ Fine Tuning LLM คุณภาพของ Dataset มีผลต่อประสิทธิภาพของ LLM อย่างมาก Dataset ที่ดีควรมีความหลากหลาย ครอบคลุม และถูกต้อง
สมัยก่อนตอนทำเว็บไซต์ SiamCafe.net ผมให้ความสำคัญกับข้อมูลมากๆ ข้อมูลที่ถูกต้องและครบถ้วนจะช่วยให้เว็บไซต์ของเรามีคุณภาพและน่าเชื่อถือ เช่นเดียวกับ Dataset ที่ดีจะช่วยให้ LLM ของเราฉลาดและมีประโยชน์
การ Fine Tuning LLM ไม่ได้ยากอย่างที่คิด เดี๋ยวนี้มีเครื่องมือและ Library ต่างๆ ที่ช่วยให้เราทำงานได้ง่ายขึ้นเยอะ
LLM มีหลายแบบ แต่ละแบบก็มีจุดเด่นและจุดด้อยต่างกัน เราต้องเลือก LLM ที่เหมาะสมกับงานของเรา เช่น ถ้าเราต้องการ LLM ที่เก่งเรื่องภาษาไทย ก็อาจจะเลือก LLM ที่ถูกฝึกด้วยข้อมูลภาษาไทยเยอะๆ
นอกจากนี้ เราต้องพิจารณาเรื่องขนาดของ LLM ด้วย LLM ขนาดใหญ่จะมีความสามารถสูงกว่า แต่ก็ต้องใช้ทรัพยากรในการ Fine Tuning มากกว่า
Dataset คือหัวใจสำคัญของการ Fine Tuning เราต้องเตรียม Dataset ที่มีคุณภาพและครอบคลุมเรื่องที่เราสนใจ Dataset อาจจะอยู่ในรูปแบบของข้อความ, คำถาม-คำตอบ, หรือข้อมูลอื่นๆ ที่เกี่ยวข้อง
ถ้าเราไม่มี Dataset ของตัวเอง เราอาจจะหา Dataset สำเร็จรูปจากแหล่งต่างๆ เช่น Hugging Face Datasets หรือ Kaggle
มีเครื่องมือและ Library หลายตัวที่เราสามารถใช้ในการ Fine Tuning LLM ได้ เช่น:
เครื่องมือเหล่านี้จะช่วยให้เราจัดการ Dataset, ฝึกโมเดล, และประเมินผลได้อย่างมีประสิทธิภาพ
มาดูขั้นตอนการ Fine Tuning LLM แบบคร่าวๆ กัน
ก่อนอื่น เราต้องติดตั้ง Libraries ที่จำเป็นก่อน เช่น:
pip install transformers datasets torch
คำสั่งนี้จะติดตั้ง Transformers, Datasets, และ PyTorch ซึ่งเป็น Libraries ที่เราจะใช้ในการ Fine Tuning
จากนั้น เราต้องโหลด LLM และ Tokenizer ที่เราต้องการใช้ Tokenizer คือเครื่องมือที่แปลงข้อความเป็นตัวเลข เพื่อให้ LLM เข้าใจได้
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "google/flan-t5-base" # ตัวอย่าง LLM
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
Code นี้จะโหลด LLM ชื่อ "google/flan-t5-base" และ Tokenizer ที่เกี่ยวข้อง
เราต้องเตรียม Dataset ให้อยู่ในรูปแบบที่ LLM เข้าใจได้ โดยการใช้ Tokenizer แปลงข้อความเป็นตัวเลข
def tokenize_function(examples):
return tokenizer(examples["text"], truncation=True, padding="max_length")
tokenized_datasets = datasets.map(tokenize_function, batched=True)
Code นี้จะใช้ Tokenizer แปลงข้อความใน Dataset เป็นตัวเลข และเพิ่ม Padding เพื่อให้ทุกข้อความมีความยาวเท่ากัน
สุดท้าย เราก็ฝึกโมเดลด้วย Dataset ที่เราเตรียมไว้
from transformers import Trainer, TrainingArguments
training_args = TrainingArguments(
output_dir="./results",
evaluation_strategy="epoch",
learning_rate=2e-5,
per_device_train_batch_size=16,
per_device_eval_batch_size=16,
num_train_epochs=3,
weight_decay=0.01,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_datasets["train"],
eval_dataset=tokenized_datasets["test"],
tokenizer=tokenizer,
)
trainer.train()
Code นี้จะสร้าง Trainer และ TrainingArguments เพื่อกำหนดค่าต่างๆ ในการฝึกโมเดล เช่น Learning Rate, Batch Size, และจำนวน Epochs จากนั้นก็จะเริ่มฝึกโมเดลด้วย Dataset ที่เราเตรียมไว้
ขั้นตอนเหล่านี้เป็นเพียงภาพรวมของการ Fine Tuning LLM จริงๆ แล้วยังมีรายละเอียดอีกเยอะ แต่หวังว่าน้องๆ จะเห็นภาพรวมและเข้าใจหลักการทำงานมากขึ้น
นอกจาก Fine Tuning แล้ว ยังมีทางเลือกอื่นในการปรับปรุงประสิทธิภาพของ LLM เช่น Prompt Engineering และ Retrieval Augmented Generation (RAG)
Prompt Engineering คือการออกแบบ Prompt ที่ดี เพื่อให้ LLM ตอบคำถามได้ตรงจุดและแม่นยำมากขึ้น Prompt ที่ดีควรมีความชัดเจน, กระชับ, และให้ข้อมูลที่จำเป็นแก่ LLM
Prompt Engineering เหมาะสำหรับงานที่ไม่ต้องการความแม่นยำสูงมากนัก และสามารถปรับปรุงได้ง่ายกว่า Fine Tuning
RAG คือการนำข้อมูลภายนอกมาเสริม LLM เพื่อให้ LLM มีข้อมูลที่ทันสมัยและครอบคลุมมากขึ้น RAG ทำงานโดยการค้นหาข้อมูลที่เกี่ยวข้องกับคำถามของผู้ใช้ และนำข้อมูลนั้นมาใส่ใน Prompt ก่อนส่งให้ LLM
RAG เหมาะสำหรับงานที่ต้องการข้อมูลที่ทันสมัยและครอบคลุม เช่น การตอบคำถามเกี่ยวกับข่าวสาร หรือข้อมูลผลิตภัณฑ์
| คุณสมบัติ | Fine Tuning | Prompt Engineering | Retrieval Augmented Generation (RAG) |
|---|---|---|---|
| ความแม่นยำ | สูง | ปานกลาง | ปานกลาง |
| ความยืดหยุ่น | ต่ำ | สูง | ปานกลาง |
| ต้นทุน | สูง | ต่ำ | ปานกลาง |
| ความซับซ้อน | สูง | ต่ำ | ปานกลาง |
| ข้อมูลที่ทันสมัย | ต้อง Fine Tune ใหม่ | ไม่จำเป็น | มีข้อมูลที่ทันสมัย |
ตารางนี้จะช่วยให้น้องๆ เห็นภาพรวมและเปรียบเทียบข้อดีข้อเสียของแต่ละทางเลือกได้ชัดเจนขึ้น เลือกทางที่เหมาะกับงานของเรานะครับ! ลองเข้าไปดู SiamCafe Blog บ่อยๆ นะครับ จะมีเรื่อง IT สนุกๆ มาเล่าให้ฟังอีกเยอะเลย
เอาล่ะน้องๆ มาถึงตรงนี้แสดงว่าเริ่มอยากจะ Fine-tune LLM กันแล้วใช่มั้ย สมัยผมทำร้านเน็ตนี่ก็เหมือนกัน อยากจะปรับแต่งอะไรให้มันเข้ามือตัวเองที่สุด ตอนนั้นยังไม่มี LLM หรอกนะ แต่หลักการมันคล้ายๆ กัน คือต้องเข้าใจก่อนว่าเราจะทำอะไร ทำไปทำไม
จำไว้ว่า Fine-tuning ไม่ใช่ยาวิเศษ มันแก้ได้แค่บางอย่าง ถ้าข้อมูลดิบมันแย่อยู่แล้ว Fine-tuning ก็ช่วยอะไรไม่ได้มากนัก เหมือนเอาเครื่องจักรเก่ามาทาสีใหม่ ยังไงก็สู้ของใหม่ไม่ได้
อีกอย่างที่สำคัญมากๆ คือเรื่อง data สมัยก่อนผมเก็บ log file ร้านเน็ตละเอียดมาก ใครเข้าเว็บอะไรบ้าง เล่นเกมอะไรนานแค่ไหน ข้อมูลพวกนี้แหละที่ทำให้เราปรับปรุงบริการได้ตรงจุด Fine-tuning ก็เหมือนกัน Data ยิ่งเยอะ ยิ่งดี ยิ่งหลากหลาย ยิ่งดี
1. เริ่มจาก Pre-trained Model ที่ดี: เหมือนการสร้างบ้าน ต้องมีฐานรากที่แข็งแรง เลือกโมเดลที่ถูก Train มาดีแล้ว จะช่วยประหยัดเวลาและทรัพยากรไปได้เยอะ
2. Data Preparation คือหัวใจ: ข้อมูลต้องสะอาด ถูกต้อง และอยู่ในรูปแบบที่โมเดลเข้าใจได้ สมัยผมทำร้านเน็ต เคยเจอเคสที่ลูกค้าพิมพ์ผิดๆ ถูกๆ ในช่อง username/password ต้องมีระบบมาจัดการข้อมูลให้ถูกต้องก่อน ไม่งั้นเสียเวลาเปล่า
3. Learning Rate สำคัญมาก: เหมือนการปรับความแรงของไฟ ถ้าแรงไปก็จะไหม้ ถ้าเบาไปก็ไม่สุก Learning rate ที่เหมาะสมจะช่วยให้โมเดลเรียนรู้ได้ดีที่สุด ลองปรับค่าดูหลายๆ ค่า แล้วดูว่าค่าไหนให้ผลลัพธ์ดีที่สุด
# ตัวอย่างการปรับ Learning Rate ใน Python
from transformers import TrainingArguments
training_args = TrainingArguments(
learning_rate=2e-5, # ลองปรับค่านี้ดู
output_dir="./results",
num_train_epochs=3,
)
4. Early Stopping: อย่าให้โมเดล Train นานเกินไป เหมือนการต้มมาม่า ถ้าต้มนานเกินไปมันก็จะเละ Early stopping จะช่วยหยุดการ Train เมื่อโมเดลเริ่ม Overfit หรือเริ่มเรียนรู้ข้อมูลที่ไม่จำเป็น
ลองดู iCafeForex ประกอบไปด้วยนะ จะได้เห็นภาพมากขึ้น
เหมาะกับงานที่ต้องการปรับแต่งโมเดลให้เข้ากับ Domain หรือ Task ที่เฉพาะเจาะจง เช่น การสร้าง Chatbot สำหรับตอบคำถามเกี่ยวกับสินค้าของเรา หรือการสร้างโมเดลสำหรับแปลภาษาถิ่น
ขึ้นอยู่กับขนาดของโมเดล ขนาดของ Dataset และทรัพยากรที่เรามี สมัยผมทำร้านเน็ต เคยรัน Script ง่ายๆ ทิ้งไว้ข้ามคืนก็มี แต่ Fine-tuning นี่อาจจะต้องใช้เวลาหลายวัน หรือหลายสัปดาห์เลยทีเดียว
ยิ่ง GPU แรง ก็ยิ่งเร็ว แต่ถ้าไม่มี GPU ก็สามารถใช้ CPU ได้ แต่จะช้ากว่ามาก ถ้าเป็นไปได้ หา GPU มาใช้จะดีกว่า
Overfitting คือการที่โมเดลเรียนรู้ข้อมูลมากเกินไป จนไม่สามารถ Generalize ไปยังข้อมูลใหม่ได้ วิธีป้องกันคือการใช้ Regularization techniques เช่น Dropout หรือ Weight decay และการใช้ Early stopping
Fine-tuning LLM เป็นเรื่องที่ต้องใช้ความเข้าใจและประสบการณ์ แต่ถ้าทำได้ดี ก็จะช่วยให้เราได้โมเดลที่ตอบโจทย์ความต้องการของเรามากที่สุด อย่ากลัวที่จะลองผิดลองถูก เก็บข้อมูลให้เยอะๆ แล้วนำมาวิเคราะห์ เพื่อปรับปรุงโมเดลของเราให้ดียิ่งขึ้นไปอีก
ลองเข้าไปอ่านบทความอื่นๆ ใน SiamCafe Blog ดูนะ อาจจะมีอะไรที่เป็นประโยชน์เพิ่มเติม