การปรับแต่งพารามิเตอร์อย่างมีประสิทธิภาพ (PEFT) เป็นแนวทางใหม่สำหรับการปรับแต่งโมเดลภาษาขนาดใหญ่ (LLM) อย่างละเอียด ซึ่งช่วยลดความต้องการด้านการคำนวณและหน่วยความจำได้อย่างมีประสิทธิภาพ เมื่อเทียบกับวิธีการแบบดั้งเดิม
PEFT ใช้การปรับแต่งอย่างละเอียดเฉพาะชุดย่อยเล็กๆ ของพารามิเตอร์ของโมเดล ในขณะที่หยุดเครือข่ายส่วนใหญ่ที่ได้รับการฝึกอบรมล่วงหน้าไว้ กลยุทธ์นี้ช่วยลดการลืมอันเลวร้ายและลดต้นทุนด้านการคำนวณและการจัดเก็บลงอย่างมาก ฉันได้เขียนเกี่ยวกับวิธีการแบบดั้งเดิมใน "บทความ" อีกฉบับหนึ่งนี้
วิธีการ PEFT ต่างๆ ได้รับการพัฒนา เช่น:
- การปรับแต่งพร้อมท์ที่แนะนำงาน: เทคนิคนี้ใช้พร้อมต์เฉพาะงานเพื่อเป็นแนวทางในเอาท์พุตของ LLM โดยไม่จำเป็นต้องฝึกโมเดลทั้งหมดใหม่สำหรับงานเฉพาะ
- การปรับตัวระดับต่ำ (LoRA): ด้วยการประมาณพารามิเตอร์ของ LLM ด้วยเมทริกซ์ระดับต่ำ LoRA จะลดจำนวนของพารามิเตอร์ที่ได้รับการปรับแต่งอย่างละเอียด ซึ่งจะช่วยเพิ่มประสิทธิภาพ LLM
- อะแดปเตอร์: เลเยอร์พิเศษขนาดเล็กเหล่านี้สามารถเพิ่มลงใน LLM เพื่อการปรับเปลี่ยนงาน โดยให้ความยืดหยุ่นและการปรับปรุงประสิทธิภาพ
- การปรับแต่งคำนำหน้าที่เกี่ยวข้องกับงาน: การปรับแต่ง LLM อย่างละเอียดบนคำนำหน้าตัวแทนที่เกี่ยวข้องกับงานที่มีอยู่ ช่วยเพิ่มประสิทธิภาพและความสามารถในการปรับตัวของงาน
เทคนิค PEFT แสดงให้เห็นถึงประสิทธิภาพในงานต่างๆ รวมถึงการอนุมานภาษาธรรมชาติ การตอบคำถาม และการสรุปข้อความ นักวิจัยและผู้ปฏิบัติงานสามารถใช้ประโยชน์จาก PEFT เพื่อใช้ LLM ในงานที่หลากหลายได้อย่างมีประสิทธิภาพ
ต่อไปนี้เป็นข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับวิธีการ PEFT ที่กล่าวถึง:
- การปรับแต่งพร้อมท์ที่แนะนำงาน: ด้วยการเพิ่มพร้อมท์เฉพาะงานลงในอินพุตข้อมูล LLM จะดำเนินการตามที่ต้องการ ตัวอย่างเช่น การแจ้งว่า “เมืองหลวงของบราซิลคืออะไร” แนะนำให้ LLM สร้างคำตอบ "บราซิเลีย"
- การปรับอันดับต่ำ (LoRA): วิธีการขั้นสูงนี้จะประมาณค่าพารามิเตอร์ของ LLM โดยใช้เมทริกซ์ระดับต่ำ ซึ่งช่วยเพิ่มประสิทธิภาพได้อย่างมาก
- อะแดปเตอร์: อะแดปเตอร์เป็นเลเยอร์ขนาดเล็กอเนกประสงค์ที่รวมอยู่ใน LLM เพื่อเพิ่มประสิทธิภาพการทำงานเฉพาะงาน
- การปรับแต่งคำนำหน้าที่เกี่ยวข้องกับงาน: เพื่อปรับแต่ง LLM สำหรับการตอบคำถาม จะใช้ลำดับคำนำหน้าเฉพาะงานแทนคำถาม
ด้านล่างนี้คือตัวอย่างโค้ด Python ที่สาธิตวิธีการใช้การปรับพารามิเตอร์อย่างมีประสิทธิภาพ (PEFT) สำหรับการปรับแต่งโมเดลภาษาที่ได้รับการฝึกล่วงหน้าอย่างละเอียดโดยใช้ไลบรารี Hugging Face Transformers เราจะใช้ TextClassificationPipeline เพื่อปรับแต่งโมเดล BERT ที่ได้รับการฝึกอบรมล่วงหน้าบนชุดข้อมูล IMDb สำหรับการวิเคราะห์ความคิดเห็น
import torch from transformers import BertTokenizer, BertForSequenceClassification, AdamW, pipeline from datasets import load_dataset # Load the IMDb dataset dataset = load_dataset("imdb") # Load the pre-trained BERT model and tokenizer model_name = "bert-base-uncased" tokenizer = BertTokenizer.from_pretrained(model_name) model = BertForSequenceClassification.from_pretrained(model_name, num_labels=2) # Binary sentiment analysis # Tokenize the dataset def tokenize_function(examples): return tokenizer(examples["text"], padding="max_length", truncation=True) tokenized_dataset = dataset.map(tokenize_function, batched=True) # Split the dataset into training and validation sets train_dataset, val_dataset = tokenized_dataset["train"], tokenized_dataset["test"].train_test_split(test_size=0.1) # Hyperparameters and Training Configuration learning_rate = 2e-5 batch_size = 16 num_epochs = 3 # Define the optimizer optimizer = AdamW(model.parameters(), lr=learning_rate) # Fine-tuning function using PEFT def fine_tune(model, train_dataset, optimizer, num_epochs, batch_size): device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model.to(device) for epoch in range(num_epochs): total_loss = 0 model.train() for i in range(0, len(train_dataset), batch_size): batch = train_dataset[i:i+batch_size] input_ids = torch.tensor(batch["input_ids"]).to(device) attention_mask = torch.tensor(batch["attention_mask"]).to(device) labels = torch.tensor(batch["label"]).to(device) optimizer.zero_grad() outputs = model(input_ids=input_ids, attention_mask=attention_mask, labels=labels) loss = outputs.loss loss.backward() optimizer.step() total_loss += loss.item() print(f"Epoch: {epoch+1}/{num_epochs}, Average Loss: {total_loss / len(train_dataset)}") # Fine-tune the model using PEFT fine_tune(model, train_dataset, optimizer, num_epochs, batch_size) # Save the fine-tuned model output_dir = "fine_tuned_model/" model.save_pretrained(output_dir) tokenizer.save_pretrained(output_dir) # Load the fine-tuned model using the TextClassificationPipeline classifier = pipeline("text-classification", model=output_dir, tokenizer=output_dir) # Test the fine-tuned model on a sample text sample_text = "This movie was fantastic! I loved every bit of it." result = classifier(sample_text) print(result)
โค้ดนี้สาธิตวิธีการใช้ PEFT สำหรับการปรับแต่งโมเดล BERT สำหรับการวิเคราะห์ความรู้สึกบนชุดข้อมูล IMDb โมเดลที่ได้รับการปรับแต่งอย่างละเอียดสามารถบันทึกและนำไปใช้สำหรับการอนุมานได้โดยใช้ TextClassificationPipeline
PEFT (การเรียนรู้ด้วยการถ่ายโอนที่มีประสิทธิภาพด้วยพารามิเตอร์) เป็นแนวทางใหม่ในการถ่ายโอนการเรียนรู้ที่ออกแบบมาให้มีประสิทธิภาพมากกว่าการปรับแต่งแบบละเอียดแบบดั้งเดิม PEFT ทำสิ่งนี้โดยใช้กระบวนการสองขั้นตอน:
- มีการเพิ่มเลเยอร์อะแดปเตอร์จำนวนเล็กน้อยลงในโมเดลที่ได้รับการฝึกล่วงหน้า เลเยอร์อะแดปเตอร์เหล่านี้มีหน้าที่ในการปรับโมเดลให้เข้ากับงานใหม่
- เลเยอร์ของอะแดปเตอร์ได้รับการฝึกฝนโดยใช้ข้อมูลจำนวนเล็กน้อยจากงานใหม่
กระบวนการสองขั้นตอนนี้ทำให้ PEFT สามารถบรรลุประสิทธิภาพที่ดีในงานใหม่ ในขณะที่ใช้พารามิเตอร์น้อยกว่าการปรับแต่งแบบละเอียดแบบดั้งเดิมอย่างมาก
ในทางตรงกันข้าม การเรียนรู้แบบถ่ายโอนเป็นวิธีทั่วไปในการใช้แบบจำลองที่ได้รับการฝึกอบรมล่วงหน้ากับงานใหม่ การเรียนรู้แบบถ่ายโอนสามารถนำมาใช้ได้หลากหลายวิธี ได้แก่:
- การเรียนรู้การถ่ายโอนตามคุณลักษณะ: ในการเรียนรู้การถ่ายโอนตามคุณลักษณะ คุณลักษณะที่แยกจากแบบจำลองที่ได้รับการฝึกอบรมล่วงหน้าจะถูกนำมาใช้เป็นข้อมูลป้อนเข้าสู่แบบจำลองใหม่ที่ได้รับการฝึกอบรมเกี่ยวกับงานใหม่
- การปรับแต่งอย่างละเอียด: ในการปรับแต่งอย่างละเอียด น้ำหนักของแบบจำลองที่ได้รับการฝึกล่วงหน้าจะได้รับการอัปเดตโดยใช้ข้อมูลจำนวนเล็กน้อยจากงานใหม่
- อะแดปเตอร์ที่ได้รับการฝึกอบรม: อะแดปเตอร์ที่ได้รับการฝึกอบรมเป็นประเภทของชั้นอะแดปเตอร์ที่ได้รับการฝึกอบรมล่วงหน้ากับชุดข้อมูลขนาดใหญ่ที่ไม่มีป้ายกำกับ อะแดปเตอร์ที่ได้รับการฝึกล่วงหน้าสามารถใช้เพื่อปรับปรุงประสิทธิภาพของ PEFT ในงานใหม่ได้
PEFT เป็นนิยายหรือเปล่า? ใช่ PEFT เป็นแนวทางใหม่ในการถ่ายทอดการเรียนรู้ที่ออกแบบมาให้มีประสิทธิภาพมากกว่าการปรับแต่งแบบเดิมๆ อย่างไรก็ตาม การถ่ายโอนการเรียนรู้เป็นแนวทางทั่วไปในการใช้แบบจำลองที่ได้รับการฝึกอบรมล่วงหน้ากับงานใหม่