
Stress testing. AI.
Мы недавно выложили документ с подробностями того, как разные модели OpenAI решают олимпиадные задачи. Там довольно много деталей, в том числе примеры кода, который модель генерирует и pass@1 для большого количества задач с CodeForces. Из интересного, можно заметить, что довольно часто модель может решить более сложные задачи, но при этом не справляется с простыми. Так что сложность задач очень субъективная вещь.
Примерно год назад я рассказывал про то, как правильно писать стресс тесты. Если вы придумали решение задачи, реализовали его, проверили на публичных тестах, отправили в систему на проверку, но получили вердикт "wrong answer", то нужно как-то найти баг. Обычно люди просто пытаются перечитать свое решение и заметить ошибку. Или пытаются еще раз доказать, что решение вообще правильное. Если все это не помогает, то можно написать "стресс тест".
Для этого вы пишете еще одно решение задачи, но гораздо более простое. Например, пусть вы решаете такую задачу. Нам дали
Зато, когда у вас есть два решения, можно сгенерировать много маленьких тестов и найти такой, на котором решения выдают разные ответы. А потом посмотреть, почему исходное решение ошибается и исправить баг. Очень полезная техника, рекомендую!
Так вот, модель никогда специально не учили писать стресс тесты. Но из-за того, что те цепочки рассуждений, которые делали стресс тест для проверки своих решений, чаще получили Accepted, во время Reinforcement Learning-а, такое поведение поощралось, и получилось, что итоговая модель, если не уверена в своем решении, сама его сверяет с более простым медленным способом. Если это не магия, то что тогда?
Мы недавно выложили документ с подробностями того, как разные модели OpenAI решают олимпиадные задачи. Там довольно много деталей, в том числе примеры кода, который модель генерирует и pass@1 для большого количества задач с CodeForces. Из интересного, можно заметить, что довольно часто модель может решить более сложные задачи, но при этом не справляется с простыми. Так что сложность задач очень субъективная вещь.
Примерно год назад я рассказывал про то, как правильно писать стресс тесты. Если вы придумали решение задачи, реализовали его, проверили на публичных тестах, отправили в систему на проверку, но получили вердикт "wrong answer", то нужно как-то найти баг. Обычно люди просто пытаются перечитать свое решение и заметить ошибку. Или пытаются еще раз доказать, что решение вообще правильное. Если все это не помогает, то можно написать "стресс тест".
Для этого вы пишете еще одно решение задачи, но гораздо более простое. Например, пусть вы решаете такую задачу. Нам дали
n=10^6
точек на плоскости и попросили найти две самые удаленные друг от друга. Изначально вы написали какое-то сложное решение, которое включает поиск выпуклой оболочки и метод двух указателей. Но в нем лего ошибиться. Тогда вы пишете другое решение, которое просто перебирает все пары точек и выбирает лучшую. Это буквально три строки кода, ошибиться сложно, но для n=10^6
работать не будет.Зато, когда у вас есть два решения, можно сгенерировать много маленьких тестов и найти такой, на котором решения выдают разные ответы. А потом посмотреть, почему исходное решение ошибается и исправить баг. Очень полезная техника, рекомендую!
Так вот, модель никогда специально не учили писать стресс тесты. Но из-за того, что те цепочки рассуждений, которые делали стресс тест для проверки своих решений, чаще получили Accepted, во время Reinforcement Learning-а, такое поведение поощралось, и получилось, что итоговая модель, если не уверена в своем решении, сама его сверяет с более простым медленным способом. Если это не магия, то что тогда?