Fast Model Editing at Scale
Mitchell et al., [Stanford]
Представьте себе, что вы ClosedAI, большая суперкорпорация по тренировке языковых моделей. Вы скачиваете весь интернет и тренируете ваш GPT-42, тратя миллиарды долларов на электричество. После чего вы спрашиваете у модели "Who is the prime minister of the UK?" и она отвечает вам "Theresa May". Это грустный, но релеалистичный сценарий.
Менять какие-то факты в классических knowledge graphs легко — меняете ссылку с сущности UK prime minister на другого человека. Но в нейросетках это нетривиальная задача. Если вы просто зафайнтюните модель на одном примере, модель просто переобучится и например всё ещё будет отвечать "Theresa May" на вопрос "Who is the UK PM?". Ещё модель может изменить свои ответы на вопросы, которые вообще с этим не связаны.
Исследователи из Стенфорда предлагают натренировать нейросеть, которая будет модифицировать градиенты файнтюнинга таким образом, чтобы модель действительно апдейтила своё знание — не влияя на несвязанные с этим вопросы, но изменяя ответ для всех связанных. Однако возникает проблема, что если у вас в модели 10B параметров, то даже линейный слой, для их модицикации будет 100B.
Авторы решают это тем, что представляют градиент параметров через downstream gradient слоёв. Если вы помните бэкпроп, то градиент в линейном слое равен X.T @ dL/d(out). Где out — это downstream gradient размера hidden,, что сильно меньше самого градиента размера hidden, hidden. Так как X.T мы знаем, то достаточно модифицировать dL/d(out). По-моему гениальное решение, я год назад занимался похожим проектом и не думаю, что когда-нибудь додумался бы до этого.
Этот трюк позволяет использовать подход даже для очень больших моделей, таких как T5-XXL 10B. При сравнении с альтернативными подходами, этот метод показывает себя лучше и в смысле генерализации на перефразирования вопроса и в смысле сохранения ответов на несвязанные вопросы.