แท็ก | ชุดข้อมูล | เมตริก | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
|
บทความนี้แนะนำ LongRoPE ซึ่งเป็นวิธีการขยายหน้าต่างบริบทของโมเดลภาษาขนาดใหญ่ (LLM) มากกว่า 2 ล้านโทเค็น
แนวคิดหลักคือ:
ระบุและใช้ประโยชน์จากความไม่เหมือนกันสองรูปแบบในการฝังตำแหน่งเพื่อลดการสูญเสียข้อมูลระหว่างการแก้ไข สิ่งนี้ทำให้สามารถขยายบริบทได้ 8x โดยไม่ต้องปรับแต่งอย่างละเอียด
ใช้กลยุทธ์การขยายแบบก้าวหน้าที่มีประสิทธิภาพพร้อมการปรับแต่งอย่างละเอียด 256k เพื่อให้ได้บริบท 2,048k แทนที่จะปรับแต่งบริบทที่มีขนาดใหญ่มากโดยตรง
ปรับการฝังสำหรับบริบทที่สั้นลงเพื่อกู้คืนประสิทธิภาพภายในขนาดหน้าต่างดั้งเดิม
วิธีการนี้ใช้กับ LLaMA2 และ Mistral การทดลองในงานต่างๆ แสดงให้เห็นถึงประสิทธิภาพของ LongRoPE ในการรักษาประสิทธิภาพจากความยาวบริบท 4k ถึง 2,048k
สถาปัตยกรรม Transformer ต่อสู้กับความซับซ้อนในการคำนวณกำลังสองของการเอาใจใส่ตนเอง และการขาดลักษณะทั่วไปในตำแหน่งโทเค็นที่มองไม่เห็นในเวลาฝึกอบรม เพื่อปรับขนาดการคำนวณความสนใจในตนเองเป็นบริบทขนาดใหญ่ มีการเสนอวิธีการต่างๆ เช่น RoPE, AliBi, อ่างรับความสนใจ ฯลฯ อย่างไรก็ตาม ไม่มีโซลูชันใดที่สามารถปรับขนาดตามบริบทได้อย่างมีประสิทธิภาพด้วยโทเค็นนับล้านในขณะที่ยังคงรักษาความแม่นยำของแบบจำลอง .
บทความนี้นำเสนอเทคนิคใหม่ LongRoPE ซึ่งขยายหน้าต่างบริบทของ LLM เป็นมากกว่า 2 ล้านโทเค็น
LongRoPE ใช้กลยุทธ์การขยายแบบก้าวหน้าเพื่อให้ได้หน้าต่างบริบทขนาด 2,048,000 โดยไม่จำเป็นต้องมีการปรับแต่งข้อความที่ยาวเกินไปโดยตรง ซึ่งหาได้ยากและหาซื้อได้ยาก กลยุทธ์นี้เริ่มต้นด้วยการขยาย 256,000 บน LLM ที่ได้รับการฝึกอบรมล่วงหน้า ตามด้วยการปรับแต่งอย่างละเอียดตามความยาวนี้
เพื่อจัดการกับประสิทธิภาพที่ลดลงที่อาจเกิดขึ้นในหน้าต่างบริบทดั้งเดิม (สั้นกว่า) LongRoPE ได้ปรับปัจจัยการรีสเกล RoPE บน LLM แบบขยายเพิ่มเติม โดยลดขนาดลงเป็นหน้าต่างบริบท 4k และ 8k บน LLM ที่ปรับแต่งอย่างละเอียด 256k โดยใช้อัลกอริธึมการค้นหาเพื่อลดการแก้ไขตำแหน่งให้เหลือน้อยที่สุด ในระหว่างการอนุมานลำดับที่มีความยาวต่ำกว่า 8k RoPE จะได้รับการอัปเดตด้วยปัจจัยการรีสเกลที่ค้นหาอย่างพิถีพิถันเหล่านี้
การทดสอบ LLM และงานที่ต้องใช้บริบทที่ยาวได้ตรวจสอบประสิทธิภาพของ LongRoPE แล้ว วิธีการนี้รักษาความฉงนสนเท่ห์ต่ำอย่างมีนัยสำคัญตลอดระยะเวลาการประเมินตั้งแต่โทเค็น 4k ถึง 2,048k ได้รับความแม่นยำมากกว่า 90% ในการดึงรหัสผ่าน และให้ความแม่นยำที่เทียบเคียงได้กับการวัดประสิทธิภาพมาตรฐานภายในหน้าต่างบริบท 4096
เจาะลึกการปรับเปลี่ยนโครงสร้างและผลกระทบต่อประสิทธิภาพของโมเดล
สถาปัตยกรรมโมเดล LongRoPE ได้รับการออกแบบมาเพื่อขยายหน้าต่างบริบทของโมเดลภาษาขนาดใหญ่ (LLM) ให้เป็นมากกว่า 2 ล้านโทเค็น ซึ่งแก้ไขข้อจำกัดของสถาปัตยกรรม Transformer แบบดั้งเดิม นวัตกรรมที่สำคัญอยู่ที่กลยุทธ์การขยายแบบก้าวหน้าและการปรับเปลี่ยนการฝังตำแหน่ง
ส่วนประกอบสำคัญได้แก่:
class RoPEPositionalEncoding ( nn . Module ):
def __init__ ( self , d_model , max_len = 1000000 , base = 10000 ):
super (). __init__ ()
self . d_model = d_model
self . max_len = max_len
self . base = base
self . theta = torch . tensor ([ base ** ( - 2 * ( i // 2 ) / d_model ) for i in range ( d_model )])
def forward ( self , positions ):
angles = positions . unsqueeze ( - 1 ) * self . theta
sin_cos = torch . stack ([ angles . cos (), angles . sin ()], dim = - 1 )
return sin_cos . view ( * sin_cos . shape [: - 2 ], - 1 )
def non_uniform_interpolation ( pos_embed , extension_ratio , lambda_factors , n_hat ):
d_model = pos_embed . shape [ - 1 ]
interpolated_pos = pos_embed . clone ()
for i in range ( d_model // 2 ):
mask = torch . arange ( pos_embed . shape [ - 2 ], device = pos_embed . device ) < n_hat
scale = torch . where ( mask , torch . ones_like ( pos_embed [..., 0 ], device = pos_embed . device ),
1 / ( lambda_factors [ i ] * extension_ratio ))
interpolated_pos [..., 2 * i ] *= scale
interpolated_pos [..., 2 * i + 1 ] *= scale
return interpolated_pos
def progressive_extension ( model , data , base_length , target_length , population_size , num_mutations , num_crossovers , max_iterations ):
# Extend to 128k
lambda_factors_128k , n_hat_128k = search_lambda_factors ( model , data , 128000 / base_length , population_size , num_mutations , num_crossovers , max_iterations )
model = fine_tune ( model , data , 128000 , lambda_factors_128k , n_hat_128k , steps = 400 )
# Extend to 256k
lambda_factors_256k , n_hat_256k = search_lambda_factors ( model , data , 256000 / base_length , population_size , num_mutations , num_crossovers , max_iterations )
model = fine_tune ( model , data , 256000 , lambda_factors_256k , n_hat_256k , steps = 600 )
# Extend to target length
if target_length > 256000 :
final_lambda_factors , final_n_hat = search_lambda_factors ( model , data , target_length / base_length , population_size // 2 , num_mutations // 2 , num_crossovers // 2 , max_iterations // 2 )
model . lambda_factors [ "2048k" ] = final_lambda_factors
model . n_hat [ "2048k" ] = final_n_hat
return model , final_lambda_factors , final_n_hat , lambda_factors_256k , n_hat_256k
สถาปัตยกรรมเริ่มต้นด้วย LLM ที่ได้รับการฝึกอบรมล่วงหน้าและขยายหน้าต่างบริบททีละน้อย ในขั้นต้น โมเดลจะได้รับการปรับแต่งอย่างละเอียดเพื่อรองรับความยาวบริบทของโทเค็น 256,000 รายการ แนวทางที่ก้าวหน้านี้หลีกเลี่ยงความจำเป็นในการปรับแต่งข้อความที่ยาวมากโดยตรง ซึ่งหาได้ยากและมีราคาแพงในการประมวลผล ด้วยการค่อยๆ เพิ่มความยาวบริบท โมเดลจะสามารถปรับให้เข้ากับลำดับที่ยาวขึ้นได้อย่างมีประสิทธิภาพมากขึ้น
เพื่อรักษาประสิทธิภาพตามความยาวบริบทที่แตกต่างกัน LongRoPE จะปรับ Rotary Positional Embeddings (RoPE) โมเดลระบุและใช้ประโยชน์จากความไม่สอดคล้องกันในการฝังตำแหน่งเพื่อลดการสูญเสียข้อมูลระหว่างการแก้ไข ซึ่งช่วยให้สามารถขยายบริบทได้ 8x โดยไม่จำเป็นต้องปรับแต่งอย่างละเอียด นอกจากนี้ โมเดลยังใช้อัลกอริธึมการค้นหาเพื่อค้นหาปัจจัยการปรับขนาดที่เหมาะสมที่สุดสำหรับบริบทที่สั้นกว่า (เช่น โทเค็น 4k และ 8k) บน LLM ที่ปรับแต่งอย่างละเอียด 256k การปรับเปลี่ยนเหล่านี้ทำให้แน่ใจได้ว่าโมเดลจะรักษาประสิทธิภาพสูงไว้ได้แม้จะอยู่ในขนาดหน้าต่างบริบทดั้งเดิมก็ตาม
สถาปัตยกรรมรวมการปรับเปลี่ยนโครงสร้างหลายอย่างเพื่อรองรับความยาวบริบทที่เพิ่มขึ้นอย่างมีประสิทธิภาพ:
การปรับขนาดเลเยอร์ : มีการปรับเปลี่ยนขนาดของเลเยอร์เพื่อให้มั่นใจถึงความเสถียรและประสิทธิภาพเมื่อหน้าต่างบริบทขยายใหญ่ขึ้น
การจัดการหน่วยความจำ : ใช้เทคนิคการจัดการหน่วยความจำที่มีประสิทธิภาพเพื่อจัดการกับขนาดบริบทขนาดใหญ่โดยไม่ทำให้ทรัพยากรระบบล้นหลาม
กลไกความสนใจ : กลไกความสนใจที่ได้รับการปรับปรุงได้รับการบูรณาการเพื่อให้แน่ใจว่าแบบจำลองสามารถมุ่งเน้นไปที่ส่วนที่เกี่ยวข้องของลำดับอินพุต แม้จะมีบริบทที่ขยายออกไปก็ตาม
Token-wise Attention : กลไกความสนใจ Token-wise ได้รับการแนะนำเพื่อจับความสัมพันธ์ตามบริบทระหว่างโทเค็น ช่วยให้โมเดลเข้าใจความหมายเชิงความหมายของอินพุตได้ดีขึ้น
การทดลองแสดงให้เห็นว่า LongRoPE รักษาความฉงนสนเท่ห์ต่ำตลอดระยะเวลาการประเมินตั้งแต่โทเค็น 4k ถึง 2,048k และบรรลุความแม่นยำสูงในงานที่ต้องใช้บริบทที่ยาว ทำให้เหมาะสำหรับการใช้งานต่างๆ รวมถึงการเรียนรู้ในบริบท การสรุปเอกสารขนาดยาว และการเรียนรู้แบบไม่กี่ช็อต
สำหรับข้อมูลโดยละเอียดเพิ่มเติม โปรดดูเอกสารฉบับเต็มได้ที่นี่
ข้อมูลเชิงลึกเกี่ยวกับการเข้ารหัสและลักษณะเฉพาะในการปฏิบัติงานที่ช่วยให้ฟังก์ชันการทำงานของ LongRoPE เป็นไปได้ ซึ่งอาจรวมถึงตัวอย่างหรือรหัสเทียมที่แสดงส่วนประกอบหลัก
สำหรับข้อมูลรายละเอียดเพิ่มเติม โปรดดูเอกสาร
ตัวอย่างที่ครอบคลุมซึ่งสาธิตวิธีการใช้ประโยชน์จาก LongRoPE สำหรับแอปพลิเคชันต่างๆ ตั้งแต่การวิเคราะห์ข้อความไปจนถึงการสร้างเอกสารที่ครอบคลุม
# Example usage
data_path = "path/to/your/dataset"
d_model = 512
n_heads = 8
num_layers = 6
base_length = 4096
target_length = 2048 * 1024
data = load_data ( data_path )
model = LongRoPEModel ( d_model , n_heads , num_layers , base_length )
model = model . extend_context ( data , target_length )
input_ids = torch . randn ( 2 , target_length , d_model )
output = model ( input_ids )
print ( output . shape ) # Expected shape: (batch_size, target_length, d_model)
การฝึกอบรมชุดข้อมูลที่กำหนดเอง
วิธีฝึกชุดข้อมูลที่กำหนดเอง:
การปรับแต่งไฮเปอร์พารามิเตอร์ ประสิทธิภาพของ LongRoPE อาจไวต่อไฮเปอร์พารามิเตอร์ได้ พารามิเตอร์หลักที่ต้องปรับแต่ง ได้แก่:
population_size
, num_mutations
และ num_crossovers
ในการค้นหาปัจจัยแลมบ์ดา อัตราการเรียนรู้และพารามิเตอร์ตัวกำหนดเวลาสำหรับการปรับไล่ gradient_accumulation_steps
ขั้นอย่างละเอียดเพื่อความเสถียรในการฝึก
การใช้งาน LongRoPE ของฉันบรรลุผลดังต่อไปนี้:
ความฉงนสนเท่ห์:
ความแม่นยำในการดึงรหัสผ่าน:
ความแม่นยำ:
เปรียบเทียบกับรุ่นพื้นฐาน:
@article { ding2024longrope ,
title = { LongRoPE: Extending LLM Context Window Beyond 2 Million Tokens } ,
author = { Ding, Yiran and Zhang, Li Lyna and Zhang, Chengruidong and Xu, Yuanyuan and Shang, Ning and Xu, Jiahang and Yang, Fan and Yang, Mao } ,
journal = { arXiv preprint arXiv:2402.13753 } ,
year = { 2024 }
}
หมายเหตุ: พื้นที่เก็บข้อมูลนี้อยู่ในระหว่างดำเนินการและยังไม่พร้อมสำหรับการใช้งานจริง โปรดดูกระดาษสำหรับรายละเอียดเพิ่มเติม