Очень много людей захотели LoRA, так что считаю своим долгом рассказать именно о ней))



Как я уже писала в обзоре зоопарка PEFT, методы строятся на идее: «давайте при ft будем добавлять что-то. Вычисления, которые проводим на добавочной части будем хранить в памяти, а остальное заморозим». Идея конечно красивая, но переодически возникает компромисс между затраченным временем и качеством.



После статьи от 2018 про изучение эффективности работы моделей на небольшом количестве параметров было установлено эмпирически, что модель на самом деле находится на низкой собственной размерности.



Я очень залипла на изучении этой статьи, тут идет речь про то, что внутренняя размеренность функции показывает сколько параметров оптимально оставить для удовлетворительных результатов. Ничего не напоминает?)) и вот мне очень сильно напомнило pruning. Закопавшись поглубже, говорю вам сразу же, эти методы относятся к оному подмножеству (которого не было в PEFT картинке), и по сути работают с изменением количества параметров модели, оптимизируя затраченные ресурсы на ft



Что же, если так, у нас может быть большая проекционная матрица, которая будет хранится в памяти, а мы будем работать с меньшими размерностями(предлагаю посмотреть картиночку ниже, которая поможет разобраться с low-rank ft😊), но тут ключевое «что-то хранить в памяти», а я напоминаю, что мы хотим наоборот уйти от вычислительных затрат.



Тогда статья уже 2020 года показывает, что можно разложить матрицы, и производить вычисления с ними. Потом вернуться к матрице весов и обновлять их. Тоже конечно сокращает временные затраты, но все же. Нам нужно перейти в низкую размерность, после вернуться к исходной матрице и обновить ее. Что-то все еще мы много производим вычислений🤔



И вот тут, нахваленная всеми LoRA💪 решает затронутые раннее проблемы. Все что делают авторы – это раздражение матрицы весов, на 2 low ранковые, инициализируя одну расспределением Гаусса, а другую 0 в начале обучения. Но заметим, что при этом, мы замораживаем основную матрицу весов. Суть в том, что мы не храним в памяти проекционную матрицу. Мы обновляем веса перемножая матрицы низкого ранга.



И всёёё,

🤓статья

🤗training with PEFT hf

🎞EMNLP 2022 Tutorial (я залипла, советую)

🖥код



#PEFT