Исследования в Machine Learning: как, кому и зачем
Всем привет, я Александр Гончар — AI Solution Architect в Mawi Solutions. Занимаюсь разработкой и внедрением state of the art решений для анализа биосигналов. В этой статье я расскажу про то, что делают исследователи в области искусственного интеллекта и как идеи из research переносятся на прикладные задачи, в чем их ценность и как начать заниматься более продвинутым машинным обучением.
Дисклеймер: речь пойдет не о новых «ResDenseXYZNet», которые на ImageNet дали еще плюс 0.05% в точности и надо срочно стянуть их модельки с GitHub, а более интересных и фундаментальных вещах :)
Как я пришел в Machine Learning
Для меня путешествие в мир машинного обучения (далее я буду жонглировать фразами «искусственный интеллект», «машинное обучение», «data science» как взаимозаменяемыми) началось давно. Это было летом после вымученного первого курса КПИ на кафедре прикладной математики, куда я поступил после окончания гимназии с углубленным изучением иностранных языков.
После первых двух сессий, когда я оказывался в шаге от отчисления, я начал задумываться над тем, что раз меня уже забросило в математику, то надо найти мотивацию и желание заниматься ею профессионально. Я просто начал гуглить что-то вроде «what applied mathematicians do» и относительно быстро узнал про тогда еще не настолько популярную область как machine learning. Мне понравилось, и я начал учиться по случайным урокам в интернете и, конечно, на знаменитом курсе Andrew Ng.
Через год я нашел свою первую работу по специальности, где сначала трудился «за еду». Спустя еще полгода я уже работал на двух, получая бесценный опыт, и даже совмещал это с учебой. Оценки в универе не только не ухудшились, а наоборот, стали только лучше, так как я вовсю занимался той самой прикладной математикой, которой должен был учиться.
О создании портативного кардиографа
Сегодня я заканчиваю магистратуру по математике в University of Verona, веду относительно популярный блог на Medium, читаю публичные лекции и отвечаю за машинное обучение в компании Mawi Solutions, где мы разработали свой портативный кардиограф на «стероидах» в виде машинного обучения. Почему кардиограф и сердце? Как минимум потому, что именно болезни сердца являются убийцами номер один в мире, и доступность анализа состояния сердца, хотя бы на уровне определения мерцательной аритмии и других сбоев ритма сердца, позволит спасти множество жизней за счет того, что человек сможет делать электрокардиограмму (ЭКГ) каждый день дома, а не у врача раз в пару лет, когда уже может быть поздно.
Конечно, помимо больших и глобальных целей есть много простых, но не менее важных. Кроме определения аномалий работы сердца, с помощью ЭКГ, которую делает наш браслет, можно следить за состоянием нервной системы, а это открывает огромный простор для анализа стресса и восстановления, сна и засыпания, эмоций. Мы также исследуем нестандартные кейсы, например, использование ЭКГ в качестве биометрического идентификатора (по сути, как отпечатка пальца) в совместном проекте с «ПриватБанком» и использование ЭКГ как биомаркера старения в исследовании с Insilico.
Кстати, мы приглашаем исследователей, у которых есть интересные идеи и гипотезы, но нет технической возможности собрать, отцифровать и проанализировать данные, присоединиться к нашей research-платформе. От нас — браслет, который трекает ЭКГ и все, что с ней связано, активность и сон человека (есть встроенный акселерометр), SDK и помощь с аналитикой. От вас — любые интересные эксперименты, хоть и о том, как каждая выкуренная сигарета влияет на состояние сердца.
Конкуренция за искусственный интеллект
Разумеется, искусственным интеллектом сейчас никого не удивишь, потому что он уже везде и потихоньку превращается в обычную часть нашей жизни. Разве что совсем чуть-чуть нас еще удивляют воссоздающие способности алгоритмов: генерация фейковых фото, видео, голосовых записей и немножко текстов). Компании уже не соревнуются в том, что у кого-то есть чат-бот, отвечающий на вопросы кастомеров, а у кого-то до сих пор команда SMM-щиков. Более того, потихоньку начинают умолкать споры о том, кто же лучше в ряде задач — человек или робот (разумеется, последний).
Конкуренция идет на нескольких уровнях. На уровне цифр — процента правильных решений, затраченного времени на разработку, скорости принятия решений в реальном времени, количества сэкономленных денег и других бизнес-показателей, ради которых это все в итоге и делается. И на уровне сложности инновации. У кого-то чат-бот, который на самом деле представляет собой кучу легаси кода с rule-based принятиями решений, с десятками версий, которые отдельно заточены под каждый из языков клиентов. А у кого-то state of the art нейронка, которая сама справляется с разными языками, да еще и есть speech synthesis алгоритм, так что можно не только попереписываться, а и поболтать.
В каком-то стартапе, связанном с диетологией, нейронка распознает 100 типов еды на картинке и записывает их названия, а у кого-то — 10000 блюд, да еще и автоматом подсчитает калории и сгенерирует рецепт. В задачах первого уровня часто можно соревноваться с помощью инженерии (оптимизировать код, инфраструктуру, нанять специалиста из более толкового универа, который даст +3.76% к точности) и UI/UX или продакт-дизайнера (более удобная интерпретация outputs нейронки, выбор правильных метрик). Со вторым все несколько сложнее — это уже вопрос настоящих исследований или адаптации существующих state of the art решений для конкретного продукта.
Как обучается ИИ
Когда мы говорим про исследования в машинном обучении, то чаще всего речь идет о тех, которые направлены на то, чтобы искусственный интеллект был более похожим на человеческий. Как примерно работает типичный ИИ сейчас?
- Дайте мне много (или не очень много) примеров входных и выходных данных.
- Через какое-то время (от пары минут до недели) я научусь более-менее точно по более-менее похожим входным данным давать правильные выходные данные.
Например, в моем случае это могут быть 10 тысяч
- Не просто смотрит на изображения, которые надо отнести к какой-то категории, а взаимодействует с контекстом, в котором эти изображения были получены. Более того, изображения человек будет «фотографировать» и анализировать сам, какие помогают решать задачу, а какие — нет (методом проб и ошибок, в отличие от supervised learning, где мы просто даем кучу картинок с тегами) (вот вам и reinforcement learning).
- Не нужно много примеров объектов, чтобы разобраться в них. Зачем мне смотреть на тысячу изображений собак раз эдак по двадцать, чтобы понять, что это собака? (one-shot learning, few-shot learning, bayesian machine learning).
- Соответственно не нужно много времени на обучение (теория оптимизации).
- Может приспосабливаться к разным условиям. Ребенок, увидев котиков в книжке, с легкостью узнает их и в жизни, и на экране, даже в карикатурном виде (domain adaptation, transfer learning).
- Может переносить знания и опыт с одной предметной области на другую (transfer learning, meta-learning).
- С каждого канала информации, например слухового, одновременно берет много информации: кто говорит, какая интонация, какие конкретно слова и их смысл, какие фоновые звуки и так далее (multitask learning).
- И наоборот, если мы хотим узнать что-то одно, например, определить эмоцию, с которой человек что-то говорит, то полезно и увидеть его, и услышать, и понять текст, который он произносит, а иногда даже дотронуться до руки (multimodal learning).
- Может объяснить и мотивировать свои решения (interpretable AI).
- И многое-многое другое (память, абстракции, ethics, logical reasoning, эволюция мышления и так далее).
- ... и чтобы все это вообще автоматически делалось! (autoML).
Хорошая новость в том, что для прикладных задач нам не всегда нужно абсолютно все вышеперечисленное, но как минимум парочка пунктов бывают очень полезны. Нужна ли вам нейронка, которая работает с голосом только восточно-европейского акцента английского (это я про domain adaptation)? А если у вас автоматизированная инвестиционная система, вы точно будете доверять ей, как магической коробочке, при сделках на миллионы долларов или все-таки попросите объяснения (interpretable AI)?
Когда человек делает минутный замер ЭКГ, и я хочу поймать у него признаки мерцательной аритмии, других аномалий сердца, то нужно знать также, хорошо ли он выспался, его эмоциональное состояние, уровень стресса, биологический возраст сердца и еще парочку показателей. Хочу ли я обучать для всего этого десятки разных нейронок или мне хватит одной, которая за один раз даст мне все эти ответы?
Multitask learning
Несложно догадаться, что один из моих исследовательских интересов — multitask learning — способность алгоритмов машинного обучения решать несколько задач за раз. Самое интересное заключается в том, что таким образом мы достигаем намного большего, чем просто экономия времени работы нейронок.
Рассмотрим простой пример: распознавание эмоций на лице человека. На вход — фотка лица, на выход — одна из 7 базовых эмоций (радость, грусть, злость, удивление, отвращение, страх, презрение). Сейчас нейронка должна сама как-то выучить соответствие пикселей, отвечающих за разные части лица разным эмоциям. А что если мы ей поможем, задавая напутствующие вопросы: «А поднялись ли брови?», «Открыт ли рот?». Фишка в том, что эти вопросы мы подаем именно как дополнительные задачи, которые это нейронная сеть должна научиться решать. Более того, мы можем покреативить дальше и добавить новые «подсказки», например, на основе того, что разные этнические культуры выражают свои эмоции по-разному. И это работает!
Знатоки машинного обучения могут интерпретировать это как экспертную регуляризацию основной оптимизационной задачи. В итоге получается, что одной и той же нейронкой, не добавляя новых ресурсов на вход, а только заставляя ее учить больше, чем обычно, можно получить намного лучшие результаты, чем если бы она решала одну изначальную задачу.
Как начать заниматься исследованиями и воплощать идеи в жизнь
Это все, конечно, круто, но как подготовиться, выбрать область, следить за новыми статьями, практиковать и вообще не потеряться в мире рисерча? Я подразумеваю, что вы уже на каком-то уровне занимаетесь машинным обучением или аналитикой. А если вы только думаете о смене деятельности, то вот отличная ссылка для новичков. Самое главное, как по мне, — это математическая база. Мне вообще тяжело представить занятия машинным обучением без знаний теории вероятности, алгебры, анализа, основ компьютерных наук. Но если мы говорим про research — я считаю, что без программы минимум магистратуры никак.
Я не самый большой фанат высших учебных заведений (хоть и учусь в них), но мне очень помогает понимание функционального анализа, дифференциальной геометрии, стохастических процессов и других «продвинутых» предметов для разбора публикаций с топовых конференций по машинному обучению. Даже если не хотите учиться в универе — найдите программы нормальных вузов типа Stanford, возьмите десяток курсов, посмотрите лекции или прочитайте рекомендованную литературу. После этого попробуйте сами для себя сдать какой-то выпускной экзамен (они тоже просто гуглятся). Также есть много мастер-классов выходного дня, где можно повторить материалы, которые уже подзабылись.
После того как мы разобрались с математикой, самое время начать ее воплощать в жизнь. С этим проще — надо всего лишь овладеть парой-тройкой основных инструментов для scientific computing, которые по совместимости и будут инструментами для машинного обучения. Экосистемы Tensorflow, NumPy и scikit-learn будут практически безошибочным выбором. Основной критерий тут — навык запрограммировать прототип алгоритма машинного обучения из любой статьи. Как находить такие статьи? Я уже писал об этом в своем блоге, поэтому не буду повторяться. Вкратце: следите за конкретными организациями и личностями из мира ИИ и о чем они между собой общаются.
И последнее: как же делаются рисерчи? Он самый простой, по крайней мере в контексте прикладных исследований. Вы просто берете проблему, которую вы или кто-то другой уже решает «обычным» способом, идею из статьи, которая, возможно, вообще не касается вашей задачи. Немного думаете над тем, могут ли они полюбить друг друга, и если да — соединяете их. Например, вы увидели статью по domain adaptation в компьютерном зрении и сразу подумали о том, как это поможет в вашем бизнесе по анализу видео, где датасеты есть в Full HD, а у вас старые видеокамеры висят. Или впечатлились, например, моделями, которые могут переводить с одного языка на другой, не имея параллельных текстов. Грубо говоря, модель учится переводить с английского на немецкий, имея две абсолютно разные книги. И вы вспомнили про свою ситуацию в анализе сигналов, где вам хорошо бы приводить данные с акселерометров разной природы к одному типу, а параллельно записывать с них возможности нет. Круто же!
Выводы
Не новость, что машинное обучение сейчас в тренде и решает много важных задач, но, как и в любой другой профессии, в нем полно рутины. Скраппинг данных, визуализация, чистка данных, подготовка и нормализация, выбор моделей, их обучение, валидация и даже вывод в продакшн — все это либо очень рутинные задачи, либо даже автоматизированные. И этим занимаются очень и очень многие специалисты.
Но если вы следите за рисерчами и понимаете абстракцию за ними — перед вами открывается невероятный горизонт того, как улучшить текущие алгоритмы и продукты. Как использовать дополнительные источники данных, как оптимизировать десятки нейронных сетей, как учить модели точнее и быстрее, как делать их более адаптирующимися под новые данные, как интерпретировать результаты и многое другое. Не забывайте о том, что еще сотни тысяч команд во всем мире точно так же, как и вы, берут код и модельки с GitHub и дергают за веревочки параметров, пока не получится что-то «нормальное». Понимание математики и исследований за этими модельками — возможность обогнать других не просто по какому-то одному показателю, а по всем фронтам.
И еще 24 ноября на конференции Data Science UA я буду рассказывать более детально о том, что такое multitask learning, почему он работает, какие есть кейсы и state of the art решения в этой области исследований. А еще в тот же день проведу мастер-класс — будем запускать код, учить нейронки и все такое. Приходите, я буду очень рад всех видеть и пообщаться.