Вскрываем языковые модели. Да, опять
▶️На этот раз расскажу вам про статью “Understanding Reasoning in Thinking Language Models via Steering Vectors”. Авторы взяли модели, которые умеют генерировать цепочки рассуждений, и влезли во внутреннюю математику эти цепочек, чтобы посмотреть, из чего они состоят.
▶️Похожую работу мы недавно разбирали: там исследуют рассуждения, чтобы понять, какие их компоненты (всего восемь) сильнее всего влияют на результат.
▶️Авторы сегодняшней статьи выделили шесть компонентов:
▪️постановка задачи (пересказ своими словами запроса пользователя);
▪️дедукция;
▪️добавление фактов (которых не было в запросе, но которые имеют отношение к задаче);
▪️сравнение альтернатив;
▪️оценка неопределённости;
▪️возврат на предыдущий этап рассуждений.
▶️Логика в том, что, по наблюдениям авторов, эти шесть действий отличают модели, способные генерировать рассуждения, от неспособных.
▶️Метод вскрытия использовали достаточно типичный — линейные активации. Мы их тут много раз встречали: берём противоположные результаты, сравниваем их векторное представление, получаем вектор, который влияет на то, к какой из двух противоположностей ответ будет ближе. Мне надо собрать себя в кучку и написать пост про то, какие у этого подхода слабости и почему он сейчас не то чтобы золотой стандарт. Успехов мне в этом.
▶️Впрочем, они ещё кое-что добавили — метод, который называется attribution patching (заплатки на активациях?). Этот метод используется, чтобы проверить наличие причинно-следственной связи: берут векторы, которые кажутся важными, и заменяют на другие, потом смотрят, что в ответе изменилось. Отсюда название: вырезали кусочек и как бы заплатку поставили.
▶️Если точнее, авторы используют не совсем его, а его приближение: оно требует существенно меньше вычислительных мощностей. Более того, они используют его не совсем по назначению.
🔸Вместо выявления причинно-следственных связей они этим методом выбирают слои модели, в которых влияние найденных векторов больше всего.
▶️В этом есть смысл: мы хотим получить эффект, поэтому ищем тот слой, в котором он заметнее. Если цель — изменить поведение модели, всё логично. Однако надо посидеть и подумать, нужно ли для этой цели ставить заплатки. Выглядит как чрезмерное усложнение как будто.
▶️Сами линейные активации авторы используют тоже не вполне в классическом формате. По классике, как мы выше сказали, нужен набор примеров, где искомое поведение есть и набор примеров, где его нет. Например, мы разбирали тут поведение “отказ отвечать на опасные запросы”. Чтобы найти нужные векторы, мы берём примеры, в которых модель соглашается отвечать на запрос и примеры, в которых отказывается.
▶️А тут взяли примеры, в которых искомое поведение (например, дедукция) есть, и просто весь набор данных. Который включает в себя примеры с искомым поведением. В результате у них всё равно получились векторы, воздействие на которые меняют результат — то есть, векторы, которые кодируют определённые виды поведения, — но вот этот подход методологически слабый, скажем так.
▶️Моё предположение в том, что сложно нагенерировать цепочки рассуждений без дедукции, например, или называния фактов, поэтому они так поступили. Но тогда как будто имеет смысл выбрать другой инструмент анализа: линейные активации — штука полезная, но у неё есть ограничения и конкретная область применимости.
🥤В общем, работа любопытная, но есть вопросики. Что думаете?
▶️На этот раз расскажу вам про статью “Understanding Reasoning in Thinking Language Models via Steering Vectors”. Авторы взяли модели, которые умеют генерировать цепочки рассуждений, и влезли во внутреннюю математику эти цепочек, чтобы посмотреть, из чего они состоят.
▶️Похожую работу мы недавно разбирали: там исследуют рассуждения, чтобы понять, какие их компоненты (всего восемь) сильнее всего влияют на результат.
▶️Авторы сегодняшней статьи выделили шесть компонентов:
▪️постановка задачи (пересказ своими словами запроса пользователя);
▪️дедукция;
▪️добавление фактов (которых не было в запросе, но которые имеют отношение к задаче);
▪️сравнение альтернатив;
▪️оценка неопределённости;
▪️возврат на предыдущий этап рассуждений.
▶️Логика в том, что, по наблюдениям авторов, эти шесть действий отличают модели, способные генерировать рассуждения, от неспособных.
▶️Метод вскрытия использовали достаточно типичный — линейные активации. Мы их тут много раз встречали: берём противоположные результаты, сравниваем их векторное представление, получаем вектор, который влияет на то, к какой из двух противоположностей ответ будет ближе. Мне надо собрать себя в кучку и написать пост про то, какие у этого подхода слабости и почему он сейчас не то чтобы золотой стандарт. Успехов мне в этом.
▶️Впрочем, они ещё кое-что добавили — метод, который называется attribution patching (заплатки на активациях?). Этот метод используется, чтобы проверить наличие причинно-следственной связи: берут векторы, которые кажутся важными, и заменяют на другие, потом смотрят, что в ответе изменилось. Отсюда название: вырезали кусочек и как бы заплатку поставили.
▶️Если точнее, авторы используют не совсем его, а его приближение: оно требует существенно меньше вычислительных мощностей. Более того, они используют его не совсем по назначению.
🔸Вместо выявления причинно-следственных связей они этим методом выбирают слои модели, в которых влияние найденных векторов больше всего.
▶️В этом есть смысл: мы хотим получить эффект, поэтому ищем тот слой, в котором он заметнее. Если цель — изменить поведение модели, всё логично. Однако надо посидеть и подумать, нужно ли для этой цели ставить заплатки. Выглядит как чрезмерное усложнение как будто.
▶️Сами линейные активации авторы используют тоже не вполне в классическом формате. По классике, как мы выше сказали, нужен набор примеров, где искомое поведение есть и набор примеров, где его нет. Например, мы разбирали тут поведение “отказ отвечать на опасные запросы”. Чтобы найти нужные векторы, мы берём примеры, в которых модель соглашается отвечать на запрос и примеры, в которых отказывается.
▶️А тут взяли примеры, в которых искомое поведение (например, дедукция) есть, и просто весь набор данных. Который включает в себя примеры с искомым поведением. В результате у них всё равно получились векторы, воздействие на которые меняют результат — то есть, векторы, которые кодируют определённые виды поведения, — но вот этот подход методологически слабый, скажем так.
▶️Моё предположение в том, что сложно нагенерировать цепочки рассуждений без дедукции, например, или называния фактов, поэтому они так поступили. Но тогда как будто имеет смысл выбрать другой инструмент анализа: линейные активации — штука полезная, но у неё есть ограничения и конкретная область применимости.
🥤В общем, работа любопытная, но есть вопросики. Что думаете?