Post content
Опять статья по эффективному тюнингу, уже формируется целая коллекция из LoRA, VeRA, и на этот раз DoRA: Weight-Decomposed Low-Rank Adaptation. Совсем недавняя статья, где получились уже интересные результаты: по экспам неплохо обгоняет лору при том же числе обучаемых параметров. На самом деле лора и дора очень похожи, за исключением одной маленькой технической детали. Вспомним как работает LoRA — У нас есть замороженная матрица весов W, мы учим две новые A и B и получаем out = (W + AB) * in. После тюнинга можно все это смерджить, чтобы получить одну матрицу W’ = W + AB. В DoRA предложили немного изменить процедуру обучения и отдельно выделить вектор, задающий величину (любой вектор можно представить как vector = m * unit_vector, то есть величину, умноженную на единичный вектор, отвечающий за направление). То же самое можно сделать и для матрицы: W = ||W||_c * W/||W||_c = m * V, где m — вектор с нормами матрицы по столбцам. В таком случае мы будем использовать ровно так же LoRA для V, но дополнительно обучаем и вектор m. Размер вектора m можно сказать о малое от остальных параметров, поэтому практически не увеличивает требования по памяти. Возможно картинка на первый взгляд не очень понятная, но если немного посмотреть, то достаточно хорошо видно, в чем заключается суть. Выглядит кажется логично: после обычной лоры у нас может в ту или другую сторону поехать норма матрицы, а здесь мы дополнительно контролируем этот фактор. Прикрепил также сравнения для LLaMA-7/13B.