о размышлениях моделей
Feb. 1st, 2025 03:19 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Одна из самых "горячих" тем в ИИ сейчас - это модели с размышлением, "reasoning models", известные также как модели с CoT (Chain of Thought, поток мыслей). Это o1 от OpenAI, DeepSeek-R1, нашумевший в последнюю неделю, и вот буквально сегодня o3-mini опять от OpenAI.
Эти модели умеют перед окончательным ответом выстраивать "поток мыслей", выглядящий очень естественным, человеческим во многих случаях. Этот поток можно увидеть прямо в реальном времени.
Вместе с тем, после проверки этих моделей на разных вопросах, у меня зародилось подозрение, что иногда - пока не берусь сказать, как часто - их поток мыслей это подгонка под формат "поток мыслей" уже известного результата. То есть, я выдвигаю гипотезу, что эти модели работают следующим образом. Вы задаете модели какой-то вопрос, какую-то задачу. Она находит правильный ответ, причем как именно, неизвестно ровно в том же смысле, как и для не-"размышляющей" модели, типа ChatGPT-4o, или Claude, или Llama, никогда не было известно. Но, получив этот ответ, модель не дает его сразу, а симулирует логично выглядящий поток "размышлений" (научившись это делать в результате тренировки именно этой способности), который рано или поздно к нему приводит. А мы, пользователи, читаем этот поток и наивно радуемся тому, что наконец-то понимаем, как модель пришла к ответу.
Не знаю, писал ли кто-то еще о такой возможности, мне не попадалось (но я очень мало читаю в этой области, в основном что попадается в Твиттере). Если вам попадалось, киньте ссылку.
Недавно мне попался яркий пример этого. В комментариях мне написали, что ChatGPT-о1 решает задачу следующего вида:
Это "рекурсивная" задача - записывая пропущенное число буквами, мы меняем общее число букв. Подходят ответы "тридцать семь" или "тридцать девять".
Мне понравилась идея, и я немедленно попробовал сам, изменив при этом предложение на
"В этом предложении аж ___ букв."
чтобы не сработало известное решение, и чтобы уменьшить шансы того, что задача именно в этом виде встречалась в корпусе тренировки ("аж" просторечное слово). Модели решили мой вариант задачи (правильный ответ "тридцать" - я специально не проверял перед тем, как спросить, и не знал даже, есть ли решение). Но то, как они описывали свой поток мыслей, оказалось весьма интересным, по крайней мере в случае DeepSeek:
Модель сразу пробует правильный ответ (тридцать), но при этом неверно считает буквы и получает 28. Продолжаем (я сокращаю и убираю некоторые повторения для удобства):
По-моему ясно, что правильный ответ "тридцать" был у модели с самого начала, и она пыталась подогнать под него "размышления". Сначала не получилась, неверно подсчитала буйвы, потом тыкалась туда-сюда, потом опять вернулась к этой тридцатке, и наконец смогла правильно проверить уже известный ей (непонятно откуда, "из модели") ответ.
По-моему, такое происходит часто и в менее очевидных случаях, когда модели удается подобрать логично выглядящее "оправдание" в виде того, как она якобы пришла к ответу. А мы с радостью принимаем это оправдание за "нахождение" ответа путем логического мышления.
Эти модели умеют перед окончательным ответом выстраивать "поток мыслей", выглядящий очень естественным, человеческим во многих случаях. Этот поток можно увидеть прямо в реальном времени.
Вместе с тем, после проверки этих моделей на разных вопросах, у меня зародилось подозрение, что иногда - пока не берусь сказать, как часто - их поток мыслей это подгонка под формат "поток мыслей" уже известного результата. То есть, я выдвигаю гипотезу, что эти модели работают следующим образом. Вы задаете модели какой-то вопрос, какую-то задачу. Она находит правильный ответ, причем как именно, неизвестно ровно в том же смысле, как и для не-"размышляющей" модели, типа ChatGPT-4o, или Claude, или Llama, никогда не было известно. Но, получив этот ответ, модель не дает его сразу, а симулирует логично выглядящий поток "размышлений" (научившись это делать в результате тренировки именно этой способности), который рано или поздно к нему приводит. А мы, пользователи, читаем этот поток и наивно радуемся тому, что наконец-то понимаем, как модель пришла к ответу.
Не знаю, писал ли кто-то еще о такой возможности, мне не попадалось (но я очень мало читаю в этой области, в основном что попадается в Твиттере). Если вам попадалось, киньте ссылку.
Недавно мне попался яркий пример этого. В комментариях мне написали, что ChatGPT-о1 решает задачу следующего вида:
У меня есть предложение с пропущенным словом. Подбери слово так, чтобы предложение стало верным и напиши его правильно. Я обозначу пропущенное слово тремя подчерками.
Вот предложение:
"В этом предложении ровно ___ букв."
Это "рекурсивная" задача - записывая пропущенное число буквами, мы меняем общее число букв. Подходят ответы "тридцать семь" или "тридцать девять".
Мне понравилась идея, и я немедленно попробовал сам, изменив при этом предложение на
"В этом предложении аж ___ букв."
чтобы не сработало известное решение, и чтобы уменьшить шансы того, что задача именно в этом виде встречалась в корпусе тренировки ("аж" просторечное слово). Модели решили мой вариант задачи (правильный ответ "тридцать" - я специально не проверял перед тем, как спросить, и не знал даже, есть ли решение). Но то, как они описывали свой поток мыслей, оказалось весьма интересным, по крайней мере в случае DeepSeek:
=================
Хорошо, пользователь дал предложение с пропущенным словом: "В этом предложении аж ___ букв." Нужно подобрать подходящее слово, чтобы предложение стало верным. Сначала я должен понять, что требуется.
Пользователь хочет, чтобы я вставил слово вместо трёх подчёркиваний так, чтобы предложение было правильным. Возможно, это задание на самоссылающиеся предложения или на подсчёт количества букв. Нужно проверить, сколько букв будет в предложении, если вставить туда определённое слово.
Предложение сейчас выглядит так: "В этом предложении аж ___ букв." Если я вставлю какое-то числительное, например, "тридцать", то нужно посчитать общее количество букв в предложении. Но тогда само предложение должно содержать правильное число букв. Это как известный пример самоссылающихся предложений.
Давай попробуем. Пусть пропущенное слово — "тридцать". Тогда предложение будет: "В этом предложении аж тридцать букв." Теперь посчитаем количество букв:
В - 1
э - 1
т - 1
о - 1
...
Считаю буквы: получается 28 букв. Но если вставить "тридцать", то утверждение будет неверным, так как букв 28, а не 30. Значит, "тридцать" не подходит.
================================
Модель сразу пробует правильный ответ (тридцать), но при этом неверно считает буквы и получает 28. Продолжаем (я сокращаю и убираю некоторые повторения для удобства):
======================
Попробую другое число. Например, "двадцать восемь". Тогда предложение будет: "В этом предложении аж двадцать восемь букв." Посчитаем буквы:
В (1), э(1), т(1), о(1), м(1), п(1), р(1), е(1), д(1), л(1), о(1), ж(1), е(1), н(1), и(1), и(1), а(1), ж(1), д(1), в(1), а(1), д(1), ц(1), а(1), т(1), ь(1), в(1), о(1), с(1), е(1), м(1), ь(1), б(1), у(1), к(1), в(1). Слишком много, получится больше 30 букв. Возможно, не подходит.
Может, попробовать "двадцать семь"? Тогда предложение: "В этом предложении аж двадцать семь букв." Считаю буквы: [...] Опять много. Похоже, такой подход не работает.
Возможно, нужен другой подход. Может, использовать слово, которое обозначает количество букв в самом предложении с этим словом. То есть, самоссылающееся предложение. Например, если вставить "двадцать пять", то предложение должно содержать 25 букв. Проверю: [...] Не подходит.
[еще несколько такого рода подходов]
Может, пользователь имеет в виду что-то другое. Например, слово "пять" или "шесть". Проверим: [...] Не подходит.
Возможно, ответ — "тридцать". Хотя ранее подсчитали, что с "тридцать" получается 28 букв, но может, я ошибся в подсчёте. Давай ещё раз:
Предложение: "В этом предложении аж тридцать букв."
Считаем каждую букву:
[на этот раз посчитано правильно]
Да, точно 30 букв. Значит, если вставить слово "тридцать", то предложение будет верным, так как в нём 30 букв. Раньше я ошибся в подсчёте, теперь вижу, что правильно. Значит, правильный ответ — "тридцать".
=====================================
По-моему ясно, что правильный ответ "тридцать" был у модели с самого начала, и она пыталась подогнать под него "размышления". Сначала не получилась, неверно подсчитала буйвы, потом тыкалась туда-сюда, потом опять вернулась к этой тридцатке, и наконец смогла правильно проверить уже известный ей (непонятно откуда, "из модели") ответ.
По-моему, такое происходит часто и в менее очевидных случаях, когда модели удается подобрать логично выглядящее "оправдание" в виде того, как она якобы пришла к ответу. А мы с радостью принимаем это оправдание за "нахождение" ответа путем логического мышления.