Дано: задача «на будущее», которая все время откладывалась

Привет, Хабр! У нас в Департаменте анализа безопасности «Группы Астра» недавно случился первый опыт участия в Большой математической мастерской, как раз им и хотелось бы поделиться в статье. Мы расскажем, как это участие помогло команде протестировать новую методологию для решения внутренних задач. Есть ощущение, что наш кейс может быть полезен коллегам по цеху.

Мы в компании постоянно совершенствуем способы анализа безопасности программного обеспечения. Не так давно наше внимание привлекла появившаяся технология выявления уязвимостей в программном коде, основанная на больших языковых моделях (Large Language Models). Конкретнее, нас интересовали возможности больших языковых моделей не только для того, чтобы определять уязвимость в коде, но и чтобы давать подсказки разработчику, как именно тот или иной участок кода изменить и сделать безопасным. Такая методология существует и представлена в ряде научных работ. Но нам нужно было ее проверить и сделать выводы, насколько эта методология применима на практике для решения наших задач.

Данная задача была той самой, которая относится к категории «не срочно», «на будущее» (а, как известно, задачи «на будущее» имеют свойство откладываться до тех пор, пока это самое «будущее» не наступит).

Мы уже давно знали о существовании Большой математической мастерской (БММ) и представляли, какого уровня задачи решают там ребята. Мероприятие проводится с 2020 года. Это своеобразный математический офлайн-хакатон, где математики — больше студенты и молодые специалисты, но не только они, — собираются для решения математических задач, задач из других областей науки и реального сектора. В 2024 году Мастерская проводилась в четырех городах: Новосибирск, Томск, Омск и Майкоп.

И тут нам пришла мысль: «будущее» наступило наш кейс может хорошо вписаться в формат БММ. Безусловно, мы могли бы и сами провести все необходимые эксперименты, сделать выводы полностью своими силами. Но, с другой стороны, можно было бы поделиться с организаторами Мастерской действительно интересной задачей из рабочей практики, которая, тем более, не требует длительного вхождения в специфику работы. И хоть эта задача была далека от конформных отображений и когомологий, по содержанию она довольно хорошо вписывалась в мероприятие. Так мы решили подать заявку с нашим кейсом на Большую математическую мастерскую.

Переходим к практике

Нельзя так просто взять и предложить задачу.
Чтобы заявленную задачу приняли для решения в рамках БММ, надо пройти довольно строгий отбор. Во-первых, решение должно подразумевать использование методов высшей математики, иначе задачу могут отклонить уже на этапе подачи заявки. Например, задача «Запрограммируйте нам сайт интернет-магазина» не подходит. А вот задачи «Спрогнозируйте спрос в нашем интернет-магазине» или «Оптимизируйте наши складские запасы» — вполне допустимые. Нам здесь, по-видимому, сыграло на руку то, что для работы с исходным кодом традиционно используются методы дискретной математики, в частности, теория графов, а машинное обучение тоже во многом основано на математическом анализе, математической статистике и численных методах.

Во-вторых, задача должна быть достаточно привлекательна для участников, поскольку они сами выбирают, в каких проектах они хотели бы участвовать. Если проект никто не выберет, то он не запустится. По всей видимости, наша тема заинтересовала студентов-математиков —они расценили, что могли бы включить ее в свое портфолио. Также в анонсе мы обещали, что будем готовы пригласить участников нашего проекта к нам в команду на стажировку —это тоже могло сыграть свою роль. На Мастерской были представлены и другие проекты, связанные с большими языковыми моделями.

За два месяца до старта очного этапа, на стадии подготовки к Мастерской, организаторы БММ выделили нам куратора. Куратор — это руководитель проекта со стороны Мастерской: именно он отвечает за организацию процесса решения поставленной задачи и именно с ним мы взаимодействовали по всем процессам. Куратор внимательно изучил нашу задачу и подготовил вводные материалы для участников. Помимо этого, куратор отвечал за отбор участников на проект.

Подробнее с нашей задачей можно ознакомиться здесь.

Час Х (3 недели): очный этап

Основной этап Мастерской длится три недели — вся практическая работа происходит как раз на нем. Участники приезжают в город проведения (в нашем случае, это был Новосибирск) и работают над решением задач. В нашей команде кроме куратора оказалось четыре человека: три студента старших курсов математических направлений ведущих российских вузов —Новосибирского государственного университета, МАИ и ИТМО —и кандидат физико-математических наук. Куратором у нас выступала магистрантка Новосибирского государственного университета, обучающаяся по направлению «Науки о данных и искусственный интеллект».

Наша команда смогла погрузиться в тему буквально за один день, во многом благодаря тщательной подготовке куратором вводных материалов. Уже на второй день очного этапа работа по решению задачи закипела: участники изучали научные публикации, пробовали воспроизвести результаты, опытным путем выясняли возможности и ограничения различных методов, пробовали модели на «своих» данных. Организаторы позаботились и об общении участников из разных проектов между собой: на мероприятии устраивались регулярные общие доклады и «вертушки» —когда одна команда приходит «в гости» к другой. Так, нашей команде довелось плотно пообщаться с командами других проектов, связанных как с большими языковыми моделями, так и с анализом программного кода. Это неизбежно дало определенный синергетический эффект.

Когда ребята закончили работу над нашей задачей, результат нас заинтересовал и в целом мы были довольны . Во-первых, команда предоставила нам подробный документ, содержащий обзор научных статей, методов и наборов данных по автоматическому исправлению уязвимостей. Помимо обзора, который ценный уже сам по себе, документ включал "результаты испытаний" многих методов, перечисленных в плане, и анализ их применимости в наших условиях. К примеру, команда разобралась, какие модели реально работают в условиях запрета передачи исходного кода третьим лицам, и что из себя представляют различные наборы тренировочных данных, представленные в публикациях — насколько они актуальны для наших задач. Помимо этого, в отчете был анализ эффективности различных промптов при разных условиях. Естественно, мы получили от команды и фрагменты кода, которые использовались для апробации методов. Отдельно отмечу, что по итогам Мастерской к нашей команде присоединился один из участников БММ. У нас он продолжил заниматься автоматическим исправлением уязвимостей в программном коде.

Могли бы мы достигнуть этого своими силами внутри Астры, без привлечения Большой математической мастерской? Конечно могли. Но совместная с Мастерской работа, с одной стороны, придала нам дополнительный импульс, чтобы начать решать перспективную, но не "горящую" прямо сейчас задачу. С другой стороны, дала нам дополнительные ресурсы на период сложного старта. Для нас также было ценным получить свежий взгляд на задачу выявления уязвимостей с помощью машинного обучения в целом, чтобы проверить, насколько это соответствует тому устоявшемуся "консенсусу", который существует в нашей команде в Астре. И конечно же, исключительно благодаря Мастерской мы получили нового друга и компетентного коллегу.

Джамал, младший программист-исследователь:

Я учусь в МАИ на прикладной математике и мне хотелось получить опыт работы над IT‑проектом с коллегами из индустрии.

Самое важное, что работа проходила в определенной среде: несколько команд и множество людей, объединенных идеями, находились вместе. Мы постоянно рефлексировали и получали обратную связь со стороны экспертов и участников. Причастность к БММ дала не только полезный опыт и новые знакомства, но и развитие важных навыков коммуникации.

Рекомендовали бы мы другим организациям участвовать в Большой математической мастерской? Да. Но следует при этом осознавать и ограничения. Во-первых, задача, которую вы выносите на Мастерскую, должна иметь математическое содержание, или предполагать решение математическими методами. Впрочем, математика — настолько всепроникающая наука, что довольно многие задачи могут быть представлены как математические. Во-вторых, задача не должна быть очень срочной: время от крайнего срока подачи заявки (1 февраля) до конца очного этапа (конец июля) составляет целых полгода. Кажется, для этих целей лучше всего подойдут задачи из условного бэклога, которые оставлены командой "на подумать в будущем". Надо помнить, что задача должна решаться средствами и данными, находящимися в открытом доступе. Ну и конечно же надо быть готовыми к тому, что метод решения задачи будет также опубликован вовне.

Комментарии (2)


  1. Vad344
    13.12.2024 16:06

    Мы расскажем, как это участие помогло команде протестировать новую методологию для решения внутренних задач

    Это, типа, вы тут бложик "внутренних задач' решили вести? Общедоступный форум по "Астра" накрылся давно, теперь и внутренний недоступен?


  1. jack_lark
    13.12.2024 16:06

    чем не устраивают статические анализаторы кода типа PVS studio или что там недавно гугл выкатил ?
    зачем лезть в ИИ-хайп ? LLM нагаллюцинирует всякий бред, а разработчику отписываться.