1 คะแนน โดย GN⁺ 2024-01-23 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

ปรับจูน LLM อย่างมีประสิทธิภาพด้วยเทคนิค LoRA

  • LoRA (Low-Rank Adaptation) เป็นเทคนิคสำหรับการปรับจูน LLM (Large Language Models) ได้อย่างมีประสิทธิภาพมากขึ้น
  • แทนที่จะปรับพารามิเตอร์ของโครงข่ายประสาททั้งหมด LoRA จะอัปเดตเฉพาะเมทริกซ์ low-rank จำนวนเล็กน้อยเท่านั้น

ลองทำตามตัวอย่างโค้ด

  • โค้ดทั้งหมดที่อยู่ในบทความสามารถดูได้ใน Studio ที่มาพร้อมกัน
  • คลิก "Run" เพื่อรับสำเนาสภาพแวดล้อมโค้ดทั้งหมดและเตรียมพร้อมสำหรับการรันไฟล์โค้ด

ทำความเข้าใจ LoRA

  • LLM ที่ผ่านการพรีเทรนมาแล้วถูกเรียกว่าโมเดลฐาน เนื่องจากมีความอเนกประสงค์สำหรับงานหลากหลายประเภท
  • การปรับ LLM ที่พรีเทรนแล้วให้เหมาะกับชุดข้อมูลหรืองานเฉพาะ ทำได้ผ่านการ fine-tuning
  • LoRA เป็นทางเลือกที่มีประสิทธิภาพกว่า โดยประมาณการการเปลี่ยนแปลงน้ำหนักของเลเยอร์ระหว่างการฝึกในรูปแบบ low-rank

เขียน LoRA ตั้งแต่เริ่มต้น

  • สามารถนำเลเยอร์ LoRA ไปใช้ใน PyTorch ได้ดังนี้
class LoRALayer(torch.nn.Module):
  def __init__(self, in_dim, out_dim, rank, alpha):
    super().__init__()
    self.A = torch.nn.Parameter(...)
    self.B = torch.nn.Parameter(...)
    self.alpha = alpha

  def forward(self, x):
    return self.alpha * (x @ self.A @ self.B)
  • โดยหลักแล้ว LoRA จะถูกนำไปใช้กับเลเยอร์เชิงเส้น (feedforward) ของโครงข่ายประสาท

ปรับจูนด้วย LoRA -- ตัวอย่างปฏิบัติ

  • LoRA ไม่ได้ใช้ได้แค่กับ GPT หรือโมเดลสร้างภาพเท่านั้น แต่ยังประยุกต์ใช้กับโครงข่ายประสาทได้หลากหลายประเภท
  • มีตัวอย่างปฏิบัติที่นำโมเดล BERT ขนาดเล็กมาใช้กับงานจัดประเภทข้อความ

เปรียบเทียบกับการ fine-tuning แบบดั้งเดิม

  • การตั้งค่าเริ่มต้นของ LoRA ให้ความแม่นยำบนชุดทดสอบ 89.44%
  • เมื่อเทียบกับการ fine-tuning แบบดั้งเดิม LoRA ให้ประสิทธิภาพดีกว่าด้วยจำนวนพารามิเตอร์ที่น้อยกว่า

ปรับแต่งการตั้งค่า LoRA ให้เหมาะสม

  • สามารถปรับการตั้งค่าไฮเปอร์พารามิเตอร์ของ LoRA เพื่อเพิ่มประสิทธิภาพได้
  • สามารถทดลองชุดค่าผสมของไฮเปอร์พารามิเตอร์ที่หลากหลายเพื่อค้นหาการตั้งค่าที่เหมาะสมที่สุด

บทสรุป

  • บทความนี้พาเรียนรู้การเขียน LoRA ตั้งแต่เริ่มต้น และด้วยการปรับจูนโมเดล DistilBERT สำหรับงานจัดประเภท ก็ยืนยันได้ว่า LoRA ให้ประสิทธิภาพดีกว่าการปรับจูนเฉพาะเลเยอร์สุดท้ายของโมเดล

ความเห็นของ GN⁺

  • LoRA เป็นเทคโนโลยีสำคัญสำหรับการปรับจูนโมเดลภาษาขนาดใหญ่ได้อย่างมีประสิทธิภาพ และมีศักยภาพในการลดต้นทุนการคำนวณเมื่อขนาดโมเดลใหญ่ขึ้น
  • ผ่านตัวอย่างจริง ผู้อ่านสามารถเข้าใจวิธีประยุกต์ใช้ LoRA และพัฒนาความสามารถในการนำไปใช้กับปัญหาจริงได้
  • กระบวนการปรับไฮเปอร์พารามิเตอร์ของ LoRA เพื่อเพิ่มประสิทธิภาพ แสดงให้เห็นแนวทางทั่วไปของการปรับแต่งโมเดลแมชชีนเลิร์นนิง

1 ความคิดเห็น

 
GN⁺ 2024-01-23
ความคิดเห็นบน Hacker News
  • กำลังตามเทคโนโลยีนี้ผ่าน LLMs 101 ของ Maxime Labonne อยู่ และก็ยังรู้สึกแปลก ๆ ที่ในสายวิทยาการคอมพิวเตอร์ยังมีการพูดว่า "เราไม่รู้แน่ชัดว่าไฮเปอร์พารามิเตอร์ส่งผลต่อผลลัพธ์อย่างไร ดังนั้นให้ลองหลาย ๆ ค่าแล้วหาค่าที่ดีที่สุด"
  • LoRA กับ LoRa เป็นคนละอย่างกัน และมีความไม่พอใจที่ใช้ตัวย่อเดียวกันจนทำให้สับสน
  • ยังไม่ชัดเจนว่าเมื่อไรควรทำ fine-tuning เดิมทีคิดว่าใช้เพื่อเปลี่ยนพฤติกรรมของโมเดล แต่ช่วงหลังดูเหมือนบางบริษัทจะใช้ fine-tuning เพื่อเพิ่มความรู้เข้าไป
  • มีคำถามว่ากรณีใช้งานหลักของ fine-tuning คืออะไร
  • เป็นบทความเกี่ยวกับ LoRA ที่ดีมาก ไม่ได้เป็นผู้เชี่ยวชาญด้านนี้ แต่เข้าใจว่าจากงานวิจัยต้นฉบับ LoRA ถูกนำไปใช้กับเฉพาะชั้น dense สุดท้าย น่าจะคุ้มค่าที่จะสังเกตว่าใน QLoRA วิธีนี้ถูกนำมาใช้และดูเหมือนจะให้ผลที่น่าสนใจ
  • ยังไม่เข้าใจแน่ชัดว่าทำไม LoRA ถึงทำงานได้ เข้าใจการนำไปใช้กับชั้นสุดท้ายได้ แต่ไม่เข้าใจตรรกะของการนำไปใช้ซ้ำกับแต่ละชั้นเชิงเส้น มีใครอธิบาย intuition ให้ได้บ้าง
  • อยากให้โปรโตคอลไร้สาย LoRa เป็นโอเพนซอร์ส
  • ตอนแรกคาดว่าจะเป็นเรื่องเกี่ยวกับ software-defined radio แต่ถึงอย่างนั้นก็ยังน่าสนใจ
  • ได้เพิ่มแบบฝึกหัดให้ลอง implement การทำ forward pass ของ LoRA ตั้งแต่ต้น แนวคิดของ LoRA นั้นสวยงามและการ implement ก็ค่อนข้างเรียบง่าย
  • มีคำถามว่าไลบรารียอดนิยมที่สุดสำหรับการทำ fine-tuning คืออะไร
  • ชอบแนวทางแบบอิงการตั้งค่าของ Axolotl มากกว่าการเริ่มจากศูนย์ Axolotl รองรับ mistral, llama-2 และรองรับเทคนิคใหม่ ๆ จำนวนมาก
  • มุ่งเน้นไปที่ fine-tuning แบบยึดข้อมูลเป็นศูนย์กลาง และแทนที่จะเรียนรู้ LoRA ตั้งแต่ต้น ก็โฟกัสกับการรวบรวมและคัดสรรข้อมูลสำหรับ fine-tuning