Юрий Гущин, сооснователь Banuba, партнер Виктора Прокопени в ИТ-проектах, и Дмитрий Пекарь, Data Science компании, рассказывают, как отдают роботам исследовать нейросети, чтобы фокусировать разработчиков на творческих, интеллектуальных и изобретательских задачах.
Как именно вы исследуете нейросети?
Юрий: Нейросети, в том виде, в котором они существуют сегодня, — это обучаемые системы аппроксимации функций. Они действуют по формулам в соответствии с заданным группами алгоритмов, запоминая и учитывая имеющийся опыт. В этом случае говорим про машинное обучение.
Дмитрий: Нейросеть состоит из нейронов — «кирпичей», соединенных синапсами по принципу биологических нейронов в разных вариантах. «Кирпичей» из которых строится нейронная сеть, относительно немного. Комбинаций их соединения — десятки миллионов. Задача программиста, который исследует нейронные сети, — вручную соединять нейроны различными способами («перебирать» варианты) и исследовать результаты.
Юрий: Собрал, запустил, измерил, подсчитал, записал результат. Поменял, собрал, запустил, измерил, подсчитал, записал. Механическая работа. Для такого «соединить и проверить» человек не нужен. Это как раз тот случай, когда работать должна машина. Эксперты в области AI, компьютерного зрения не должны заниматься механической конвейерной работой.
Теперь робот-кодер в Banuba LAB «перебирает» вместо человека разные варианты соединения нейронов?
Юрий: «Перебирает», но по определенной схеме и определенному правилу. Алгоритмы планирования эксперимента с учетом прошлого опыта решают, какой путь будет короче. При их разработке этому моменту уделяется много внимания. Задача программиста — не только запрограммировать и понимать, в каком направлении роботу исследовать. Важно минимизировать количество итераций.
Дмитрий: Робот-кодер, в Banuba LAB исследующий нейросети, — это итеративный алгоритм, синтезирующий другие алгоритмы по аналогии с генетическим кодом человека. Роботизированная оптимизация кода с применением генетических алгоритмов производительнее человека в сотни раз за определенный промежуток времени при условии один алгоритм — один человек.
Разработчики не боятся, что останутся без работы?
Юрий: Не боятся. Более того, они сами предложили роботизированную оптимизацию кода. И за год не раз проверяли, насколько хорошо программа исследует архитектуры. Сейчас это успешный кейс, результатам которого мы доверяем. У наших математиков хорошие скиллы в программировании, но точностью задач в 96%, к примеру, при распознавании лица технологиями компьютерного зрения, сегодня никого не удивишь.
Интересны решения, в которых доходишь до 99,2—99,8%. Все «бьются» за последние процентные доли. Таким цифрам нужны решения кардинально другого качества.
«Делегировать» задачи программе?
Дмитрий: Программе, которая выполнит их эффективнее и поможет получить те самые последние процентные доли.
Генерацией роботом программного кода тоже никого не удивишь. Чем ваш робот-кодер отличается от многих других? Какая разница между между роботизацией и автоматизацией?
Юрий: Нюансы роботизации — в сложности решений, отданных на откуп машине. Мы в компании называем роботизацией штуки, которые намного сложнее сборочных скриптов, компилирующих программ, билд-скриптов. Которые в состоянии сами спланировать серию экспериментов и провести аналог исследования. Которые из определенного количества вариантов найдут оптимальный путь достижения результатов. Вот это для нас робот.
Дмитрий: Есть в Banuba LAB и простые системы. К примеру, найтли-билд в системах Continuous Integration.
По ночам билд-боты собирают приложения (непрерывные ночные сборки-тестирования, система автоматически запускается вечером), утром разработчики смотрят, все ли тесты пройдены или что-то поломалось.
Юрий: Корпоративно мы стремимся роботизировать и автоматизировать все рутинные процессы. Исследование архитектуры — не единственное направление.
Где Banuba еще применяет роботизацию?
Юрий: Второй фокус — оптимизация производительности. Есть разные техники, на которых основываются роботы. К примеру, Google делает определенные вещи на технологии RNN (рекуррентные нейронные сети), мы — на генетических алгоритмах.
Facebook и его Tensor Comprehensions тоже используют генетические алгоритмы.
Юрий: Проект на очень ранней стадии, хотя и весьма интересный. Проект выложен в открытый доступ, можно посмотреть код — в системе оптимизируется только индивидуальный слой сети. Мы же оптимизируем работу всей нейросети. Эта часть performance-оптимизации производительности, которая генерирует конкретную специализацию конкретного программного кода с учетом определенных особенностей, которая эту оптимизацию делает.
Вопрос в другом. Делает ли машина эти задачи лучше математика?
Юрий: Человек устал, отвлекся, неправильно определил решение, сделал ветку в другую сторону, получил не тот результат, сделал паузу, выпил кофе… Рабочий день закончен. Ушел домой, ночью спит, не работает. Его нельзя клонировать. А робота — можно.
Робот работает 24/7. За сутки один автомат исследует несколько тысяч архитектур, человек — десяток. Разница по производительности в сотни раз. Его решения получаются с меньшими вычислительными затратами и более высокого качества. Машине не жалко «выбросить» свой труд и начать все сначала. Она находит те оптимальные варианты, которые человек найти не может. Например, из-за стереотипов.
Ну, робот точно лишен стереотипов.
Дмитрий: И лишен нехватки времени — его можно масштабировать, допустим, в облачных сервисах на Amazon или локально на собственных. Но главное — технологии позволяют оперировать такими архитектурами, с которыми человек работать не может. Размерность задач слишком большая для его понимания и исследования.
История, когда системный эксперимент — та вещь, где математик не справится на длинной дистанции?
Юрий: Чем дальше и глубже он «копает», тем эксперименты становятся сложнее. Человек не в состоянии охватить всю сложность эксперимента, который бы хотелось поставить. При этом фундаментальных разработок в теме почти нет. Одни математики опираются на опыт, другие на математические алгоритмы, третьи на интуицию. Исследуют нейросети практически вслепую. Робот в состоянии сделать такого рода эксперименты при совсем другом качестве и других скоростях — в которых пять тысяч шагов и нельзя ошибиться ни в одном.
Разве робот не ошибается?
Дмитрий: Сбои могут быть, когда реализуется новая идея или концепция, новая размерность или степень свободы. Когда не просто проверяется архитектура, а исследуется целое направление.
Юрий: Ошибки робота — это ошибки разработчика робота. Собственных ошибок он не делает. Это как отношения между разработчиком и продукт-менеджером, который неправильно понимает рынок, продукт и его позиционирование. Запрограммируешь ерунду — получишь ерунду. Только цена ошибки, сделанной машиной, меньше. А итерации быстрее.
Какие ошибки могут делать разработчики?
Юрий: Количество и виды ошибок зависят от стиля программиста и его опыта, квалификации, настроения, состояния здоровья, все ли хорошо у него в личной жизни, хорошо ли он спал. Плотность ошибок, условно, одна на сотню строк кода. Кто-то делает две, кто-то двадцать на сотню. Кто-то одну на пять тысяч строк.
Дмитрий: Чем меньше вручную он пишет строк кода, тем меньше ошибок он сделает. И тем больше останется ошибок на непонимание задачи, заблуждение или неизбежность.
Неизбежность?
Юрий: Потому что это эксперимент. Допустим, человек запрограммировал нейросеть, запустил, обучил — а получилось хуже, чем было.
Получается, айтишников пора заменить роботами-кодерами — они производительнее и самостоятельно не ошибаются?
Юрий: Качество решений и производительность нейросетей, выбранных роботом, например, при отделении волос или человека от фона, стали на порядок выше. Это факт. Но нужно понимать, что для одних задач хорош робот, а для других — пока еще человек.
В каких задачах? Что делает разработчик, пока робот исследует нейросети?
Дмитрий: Думает, как его совершенствовать, как можно еще соединять нейросети, какие есть степени свободы и варианты, как это все лучше формализовать. Перед ним задача более высокого уровня абстракции — программировать все более сложных роботов. Роботов, которые бы ставили правильный системный эксперимент, понимали, какие эксперименты ставить и почему, ограничивать их определенным образом.
Юрий: У разработчиков Banuba LAB высвобождается время на чтение научных исследовательских статей, на изучение опыта и результатов других.
Дмитрий: Причем важно не просто прочитать и обсудить статью — осмыслить с точки зрения новых измерений, в которых можно двигаться.
Так вы видите трансформацию процессов в компании?
Юрий: У нас в компании сильно смещен фокус от «программировать» в сторону «думать и понимать», что мы делаем. Робот генерирует программный код, собирает, обучает до определенной степени, проверяет, тестирует. А люди определяют, в какую сторону правильно проводить исследования.
Прокачиваете и софт, и хард скилы?
Дмитрий: Мониторим научные публикации, книги экспертов в области компьютерного зрения, нейронных сетей и глубокого машинного обучения. Поиск, анализ, прокачка непрерывны: конференции, интенсивы, исследование работ ученых и малых университетах — открытия могут сделать где угодно. Смотрим соревнования kaggle — что люди делают, какие техники применяют. По утрам на «дейли» каждый день обсуждаем, критикуем, поддерживаем, генерируем гипотезы, ищем новые связи.
Юрий: 15-минутные скрам-репортинг-дейли Banuba LAB переросли в ежедневные полторачасовые брейншторминги и Knowledge Sharing. Это время, когда команда думает. Как правило всплывает пара тем, обсуждаемых глубже. Достиг результата — интересного, противоречивого, отрицательного? Поделись.
Почти 100 лет назад Форд сказал, что думать — самая трудная работа, поэтому этим занимаются немногие. Ну и пусть роботы кодят — за логикой машин стоит только то, о чем мы сами их просим. Впереди тот, кто умеет думать.
Ваша работа — думать?
Дмитрий: Такие гиганты, как Google, Facebook, Snapchat и другие, заведомо обладают большими вычислительными, человеческими, финансовыми ресурсами. Они могут быстро протестировать любую идею. И неважно, выстрелит она или нет.
Юрий: Но при избытке ресурсов возникает соблазн меньше напрягаться, что стартапы позволить себе не могут. И это их преимущество.
Дмитрий: Чтобы конкурировать, мы должны быть эффективнее во всем: в исследованиях, во взаимодействии, в работе, в умении думать.
Юрий: Поэтому сначала очень много думаем, а только потом реализуем очевидно успешные идеи.
Человек обучил робота, а дальше что? Процесс самообучения?
Юрий: Самообучение роботов — святой грааль AI. Я бы аккуратно говорил об этом. Сказать, что роботы у нас самообучаются… Скорее, есть системы, которые существенно больше принимают во внимание результаты собственной работы и внешнего мира, нежели просто скрипт, который делает просто сборку.
Дмитрий: По сути машинное обучение — это условие, при котором система работает без программирования в явной форме. При этом происходит непрерывный процесс тонкой настройки обучения, улучшающий всю систему.
Что ещё улучшает процессы в компании?
Юрий: Лучший способ гибче думать — это разнообразие.
Дмитрий: Разнообразия подходов и инструментария дает качественно разные результаты. Если использовать одну технологию, упремся в одни и те же проблемы и ограничения. И тогда остановимся. Нет препятствий одному взять Tensorflow, а другому Torch. Некоторые делают свои мини-фреймворки и мини-библиотеки — для них они удобнее общего инструментария.
Система, создаваемая для решения проблемы, обладающей разнообразием, должна иметь еще большее разнообразие, чем разнообразие проблемы. Вы сторонник Закона необходимого разнообразия Эшби?
Юрий: Я верю также в теорему Фишера Diversity prediction theorem — это красная нить, которая проходит в стартапе через все. Чем разнообразия больше, тем лучше результаты.
Читать и смотреть по теме
- Авторы: Yoshua Bengio, Andrej Karpathny, Andrew Ng, Yann LeCun, Geoffrey E. Hinton, Ian Goodfellow.
- Проекты: OpenAI, Google Brain проект, Facebook AI, Uber AI.
- Лекции Андрея Карпатного из Стенфорда по свёрточным сетям и слайды к его лекции, Andrew Ng по машинному обучению, машинное обучение от Yandex
- Блоги: Андрея Карпатного, AI-блог Google, Facebook AI-блог, Baidu AI-блог.
Стартап, созданный летом 2016. Занимается частной наукой: исследованиями и разработкой в области компьютерного зрения, искусственного интеллекта, дополненной реальности. «Сердце» компании — Banuba Lab — находится в Минске, офисы — в Гонконге и на Кипре. В команде работает более 100 разработчиков в области AI, AR. В 2017 стартап привлек $5 млн, в планах — выпустить десяток приложений на основе «умных» технологий.
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.