Всем привет, меня зовут Максим Шаланкин, Data Science Team Lead в команде Финтеха Big Data МТС. На ошибках учатся, и это не просто слова. Идея данного поста возникла из моих ежедневных наблюдений: многие люди вокруг остро реагируют на свои ошибки и теряют мотивацию из-за неудач. Я хочу показать, что промахиваться — нормально и даже полезно для будущего профессионального роста.

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

Неудачи — естественная часть процесса обучения и развития. Это справедливо и для людей, и для современных технологий. Например, ML-алгоритмы работают эффективнее, анализируя свои ошибки и корректируя их. Благодаря этому они с каждым разом лучше решают поставленные перед ними задачи.

Чтобы показать этот процесс наглядно, я собрал пять принципов, в которых люди и ML-модели похожи.

Дисклеймер: для полного понимания лучше иметь базовое представление о работе ML-алгоритмов.

Fail Fast — ошибайся быстро, чтобы быстрее достичь своей цели

В современном мире скорость изменений и адаптации становится важным фактором успеха. Принцип fail fast («ошибайся быстро») предлагает активно экспериментировать и исследовать доступное пространство возможностей, делая их отправной точкой для роста и развития. Представьте специалиста, который только начинает свой профессиональный путь. Руководствуясь принципом fail fast, он участвует в разных проектах, ошибается и движется дальше. Так он определяет свои интересы и сильные стороны. Вместо того чтобы оставаться в комфортной обстановке, он смело идет на риск, учится на своих ошибках и использует все доступные ему возможности, что в конечном счете приводит его к успешной карьере.

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

На картинке показаны итерации процесса байесовской оптимизации. Желтая линия должна начать повторять фиолетовую за наименьшее число итераций. Для этого происходит оценка функции в оптимальных желтых точках, которые выбираются по методу максимизации функции acquisition function в рамках гауссовой модели процесса.

Знание о неправильных подходах ценно само по себе

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

Этот принцип самоанализа и улучшения на основе неудач находит свое отражение в алгоритме Generative Adversarial Networks (GAN). Модель GAN эффективно использует отрицательный результат для совершенствования своей работы. В архитектуре GAN предусмотрены две взаимодействующие модели, решающие противоположные задачи. Генератор (G) нацелен на создание изображений, которые должны выглядеть как настоящие. Задача дискриминатора (D) — отличать сгенерированные изображения от реальных. В результате между двумя моделями идет конкурентное взаимодействие.

С каждой итерацией генератор анализирует обратную связь о своих неудачных попытках и вносит коррективы в алгоритмы для улучшения результата. Одновременно с этим дискриминатор адаптируется, все качественнее определяя генерации. Таким образом, ошибки генератора становятся основой для дальнейшего обучения и улучшения всей модели GAN.

Умение количественно оценивать ошибки может стать ценным источником опыта

Анализ ошибок — это непрерывное действие, которое начинается с комплексной оценки их влияния на рабочие процессы и результаты. Путем измерения как прямых (финансовые потери, временные затраты), так и косвенных последствий (репутация, удовлетворенность клиентов, командная мотивация) мы можем эффективно расставлять приоритеты в их устранении.

Знание о масштабе и критичности допущенной ошибки может помочь команде работать продуктивнее. Если начинающий специалист понимает, на какой объем рабочих процессов влияет его возможная ошибка, он будет выполнять задачу внимательнее и аккуратнее. Такой подход способствует развитию проактивного мышления, когда человек заранее продумывает возможные последствия своих действий и принимает меры по предотвращению критических ошибок.

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

Оценка величины ошибки используется при обучении алгоритма линейной регрессии. Модель итеративно рассчитывает ее от прямой kx+b (фиолетовая линия) до каждой точки данных (желтые точки) и подбирает коэффициенты k и b. Процесс оптимизации обычно уменьшает суммарную ошибку с помощью различных функций потерь, например среднеквадратичной ошибки (MSE), которая взвешивает влияние каждой ошибки на общую производительность модели. Такой подход помогает алгоритму адаптировать свои параметры для более точного соответствия данным, улучшая его предсказательные способности.

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

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

Знание разных направлений позволяет комбинировать идеи из них, создавать уникальные решения и быстро адаптироваться к новым условиям. Примером использования широты мышления в ML и можно считать алгоритмы градиентного спуска.

Эти алгоритмы позволяют находить оптимум в дифференцируемой функции. Если у функции несколько оптимумов, один из них будет глобальным, а остальные — локальными. Найти глобальный оптимум — та еще задачка. Для этого существует масса трюков, и управляемый learning rate (ширина шага) один из них.

Слева модель обучается медленно и застревает в локальном оптимуме. Справа, наоборот, модель имеет достаточный learning rate (ширина линии между желтыми точками), что помогает избежать ловушки локального минимума и найти наилучшее решение задачи. Да, с таким широким шагом проще промахнуться, но этот риск устраняется другими приемами.

Рост экспертизы достигается упорным трудом

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

Давным-давно известный гончар решил найти себе подмастерье и отправился в две соседние деревни. В первой он предложил гончарам за семь дней сделать один идеальный горшок и пообещал, что лучший из них станет его учеником. Во второй деревне он поставил задачу сделать за те же семь дней семь горшков.

Через неделю мастер вернулся. Горшки из второй деревни были намного лучше. Гончары упорно учились на своих ошибках, и каждый новый горшок выходил лучше предыдущего. В первой же деревне пытались сразу достичь идеала, но не успели освоить процесс в полной мере.

Эта история показывает, что упорный труд и ошибки — важные ступени на пути к настоящему мастерству. Именно через пробы и неудачи, стараясь и экспериментируя, мы развиваем свои навыки до совершенства. Так же, как и еще один ML-алгоритм — градиентный бустинг. При нем много попыток обучения в одном направлении приведут к полному заучиванию набора данных.

В этом примере алгоритм градиентного бустинга (желтая линия) изучает данные (фиолетовая линия). С увеличением числа попыток (n_estimators) модель будет все точнее повторять набор данных, и в итоге произойдет такое явление, как «переобучение» (overfitting) модели, то есть полное заучивание исходного набора данных.

Вместо заключения: не бойтесь ошибок, а учитесь на них

Их наличие неизбежно и естественно. Каждый человек имеет уникальный способ восприятия информации и усваивает новые знания с индивидуальной скоростью, аналогично тому, как различные модели адаптируются к данным. В начале карьеры нужно совершить как можно больше ошибок, чтобы потом делать их меньше. На следующих этапах становится важной скорость обнаружения и исправления ошибок. Успешные компании относятся к ним как к инвестициям в развитие сотрудников, но при условии, что каждая ошибка анализируется и не повторяется в будущем.

На этом у меня все. Я хочу закончить риторическим вопросом: являются ли ошибки ML-алгоритмов следствием человеческого фактора при их разработке или наши собственные ошибки связаны с тем, что даже компьютерные модели не идеальны?

P. S. Кстати, если вам понравилась визуализация в статье, то код для ее генерации есть в моем GitHub.

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


  1. olegkusov
    19.12.2024 13:11

    Полезнее было бы рассмотреть примеры из реального опыта. Публикация как мотивирующая получилась слишком абстрактной и не цепляющей.


    1. MaximML Автор
      19.12.2024 13:11

      Спасибо за комментарий, действительно, на это следует обратить внимание


  1. Toinfinity
    19.12.2024 13:11

    Это весьма интересное сходство обучения модели с тем как учимся на своих ошибках мы. Благодарю за увлекательное чтиво. Понравилось про принцип «fail fast».


    1. MaximML Автор
      19.12.2024 13:11

      Отлично! Спасибо за комментарий.


  1. Mimizavr
    19.12.2024 13:11

    О, я так часто и действую: иногда лучше сделать что-то неправильно или совершить элементарную ошибку, но ее исправление запускает какой-то вполне себе рабочий процесс


    1. MaximML Автор
      19.12.2024 13:11

      Это супер. Интересный кейс с ошибкой, которая приводит к запуску важного процесса. Без ошибки он мог и не запуститься, сам по себе


      1. Mimizavr
        19.12.2024 13:11

        А это частая практика: надо что-то запустить, делаешь хоть как-то, отправляешь мяч в сторону коллег: если все ок, то они подхватывают. Если нет, то говорят как надо или направляют в нужную сторону. В любом случае процесс запущен.

        Этот способ подходит для открытых задач, где стоимость ошибки на ранних этапах не очень высокая.