теги | наборы данных | метрики | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
|
В документе представлен LongRoPE, метод расширения контекстного окна больших языковых моделей (LLM) за пределы 2 миллионов токенов.
Ключевые идеи:
Идентифицируйте и используйте две формы неоднородностей в позиционных вложениях, чтобы минимизировать потери информации во время интерполяции. Это обеспечивает 8-кратное расширение контекста без тонкой настройки.
Используйте эффективную стратегию прогрессивного расширения с точной настройкой 256 КБ для достижения контекста 2048 КБ вместо прямой тонкой настройки чрезвычайно большого контекста.
Настройте встраивание для более коротких контекстов, чтобы восстановить производительность в пределах исходного размера окна.
Метод применяется к LLaMA2 и Mistral. Эксперименты с различными задачами демонстрируют эффективность LongRoPE в поддержании производительности при длине контекста от 4 КБ до 2048 КБ.
Архитектура Transformer борется с квадратичной вычислительной сложностью самообслуживания и отсутствием обобщения для позиций токенов, невидимых во время обучения. Для масштабирования вычислений самообслуживания в большом контексте были предложены различные методы, такие как RoPE, AliBi, приемники внимания и т. д. Тем не менее, ни одно из этих решений не может эффективно масштабироваться для контекста с миллионами токенов, сохраняя при этом точность модели. .
В этой статье представлена новая технология LongRoPE, расширяющая контекстное окно LLM до более чем 2 миллионов токенов.
LongRoPE использует стратегию прогрессивного расширения для достижения контекстного окна 2048 тыс. без необходимости прямой тонкой настройки чрезвычайно длинных текстов, которые редки и их трудно получить. Эта стратегия начинается с расширения 256 тыс. на предварительно обученном LLM, после чего следует точная настройка на эту длину.
Чтобы устранить потенциальное снижение производительности в исходном (более коротком) контекстном окне, LongRoPE дополнительно корректирует коэффициенты масштабирования RoPE в расширенном LLM, уменьшая контекстные окна до 4 КБ и 8 КБ в точно настроенном LLM 256 КБ, используя свой алгоритм поиска для минимизации позиционной интерполяции. Во время вывода последовательностей длиной менее 8 КБ RoPE обновляется с помощью этих тщательно найденных коэффициентов масштабирования.
Тестирование различных LLM и задач, требующих длительного контекста, подтвердило эффективность LongRoPE. Этот метод значительно сохраняет низкую запутанность при длине оценки от 4 000 до 2048 000 токенов, достигает точности более 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 тыс. токенов. Этот прогрессивный подход позволяет избежать необходимости прямой тонкой настройки чрезвычайно длинных текстов, которые редки и требуют больших вычислительных затрат для обработки. Постепенно увеличивая длину контекста, модель может более эффективно адаптироваться к более длинным последовательностям.
Чтобы поддерживать производительность в контексте различной длины, LongRoPE настраивает вращающееся позиционное встраивание (RoPE). Модель выявляет и использует неоднородности в позиционных вложениях, чтобы минимизировать потери информации во время интерполяции. Это позволяет расширить контекст в 8 раз без необходимости тонкой настройки. Кроме того, модель использует алгоритм поиска для поиска оптимальных коэффициентов масштабирования для более коротких контекстов (например, токенов 4 и 8 тысяч) на точно настроенном LLM из 256 тысяч. Эти настройки гарантируют, что модель сохранит высокую производительность даже в пределах исходного размера контекстного окна.
Архитектура включает в себя несколько структурных модификаций для эффективной обработки увеличенной длины контекста:
Масштабирование слоев : в масштабирование слоев вносятся корректировки для обеспечения стабильности и производительности по мере увеличения контекстного окна.
Управление памятью : используются эффективные методы управления памятью для обработки контекстов больших размеров без перегрузки системных ресурсов.
Механизмы внимания : интегрированы расширенные механизмы внимания, позволяющие модели сосредоточиться на соответствующих частях входной последовательности даже в расширенном контексте.
Внимание на уровне токенов . Механизмы внимания на уровне токенов вводятся для фиксации контекстуальных связей между токенами, что позволяет модели лучше понимать семантическое значение входных данных.
Эксперименты показывают, что LongRoPE сохраняет низкий уровень недоумения при длине оценки от 4 до 2048 тысяч токенов и достигает высокой точности в задачах, требующих длинных контекстов. Это делает его подходящим для различных приложений, включая контекстное обучение, обобщение длинных документов и обучение в несколько этапов.
Для получения более подробной информации, пожалуйста, обратитесь к полной версии статьи здесь.
Понимание особенностей кодирования и эксплуатации, обеспечивающих функциональность 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 }
}
Примечание. Этот репозиторий находится в стадии разработки и еще не готов к использованию в рабочей среде. Пожалуйста, обратитесь к документу для более подробной информации.