Специалист по машинному обучению Евгений Разинков: «Нейронные сети уже ставят некоторые диагнозы точнее, чем человек»
В прошлые выходные в контейнерном центре Cube в Горкинско-Ометьевском лесу прошел образовательный IT-фестиваль Up!Date. Одним из лекторов стал Евгений Разинков, казанский специалист по машинному обучению. Мы попросили его просто и емко ответить на глупые вопросы про нейросети: как их обучают, почему в этом процессе важна математика и сколько на него нужно денег.
Евгений Разинков
кандидат физико-математических наук, ассистент кафедры системного анализа и информационных технологий института ВМиИТ КФУ, руководитель отдела машинного обучения и компьютерного зрения группы компаний FIX
Чем нейросеть отличается от обычной программы?
Обычная программа написана человеком, который полностью продумывает весь ее алгоритм и прописывает до мелочей все функции. Этот вариант подходит для очень многих задач. Когда же перед нами стоят сложные задачи вроде компьютерного зрения или распознавания речи, разработать подходящий алгоритм очень сложно. В этом отличительная особенность машинного обучения: мы только проектируем архитектуру нейронной сети для решения определенной задачи, но какие именно она будет давать ответы, мы не определяем. Для оценки точности результата специалист по машинному обучению не копается в параметрах нейронной сети, ему не они интересны. Он берет данные, которые нейросеть никогда не видела, и, в зависимости от вопроса, предоставляет их ей, а после человек смотрит на долю правильных и неправильных ответов.
Нейроны — это же клетка человека. Откуда они у компьютера?
В компьютере, очевидно, биологических нейронов нет. Нейрон в сфере машинного обучения — это функция, у которой есть несколько входов (функция активации. — Прим. «Инде). Они имеют свои параметры, также называемые весами. Каждое входное значение умножает вес, результаты суммируются, от получившейся суммы вычисляется нелинейная функция, а ее значение является выходом нейрона. Мы соединяем нейроны вместе, подавая выход одних нейронов на вход другим и так далее. Глубокая нейронная сеть может состоять из миллионов нейронов. Все в общем-то похоже на то, как устроена нервная система человека — клетки связаны между собой и передают сигнал друг другу.
Как происходит процесс обучения нейросети?
Обычно нейронные сети обучаются «с учителем» (на английском это называется supervised learning). Именно при помощи этого вида машинного обучения сейчас достигаются лучшие результаты в решении практических задач, его же чаще всего используют в бизнесе. Например, я хочу по фотографии понять, есть на ней автомобиль или нет. У меня есть тысяча фото и рисунков, на которых автомобиль есть, и другая тысяча, где его нет. Во время обучения у нас для каждого изображения есть правильный ответ — мы объясняем сети, справилась она или ошиблась, и данные выступают ее «учителем». После этого нейронная сеть смотрит на изображения и пытается понять, что общего на картинках, где автомобиль есть, и что общего на тех, где его нет. Таким образом она учится принимать решения. Это очень упрощенная схема.
Как программа для игры в го AlphaGo смогла победить профессионального игрока? Ведь раньше это считалось невозможным?
Действительно, профессиональный игрок в го Ли Седоль проиграл компьютерной программе. И это стало сенсацией, хотя и до этого было известно, что нейронные сети хорошо играют в стратегические игры. Но когда мы говорим о таких задачах, машинное обучение с учителем неприменимо. Оно подразумевало бы ручную разметку возможных позиций на доске, а эксперту в каждом случае надо было бы указывать лучший ход. Количество позиций в игре го больше количества элементарных частиц в видимой части Вселенной, нейронная сеть, которая учится имитировать ходы человека, просто не сможет его превзойти. Так что для решения этой задачи используется обучение с подкреплением (на английском это называется reinforcement learning). В этом случае нейронная сеть будет сама с собой играть в ту или иную игру. Она делает случайные ходы, совершенно не понимает, что происходит, но потом одна из копий выигрывает, а нейронная сеть подстраивает свои параметры с учетом того, что одна последовательность ходов привела к победе, а другая — к поражению. Мы ничего не отслеживаем — нейронная сеть с помощью математических алгоритмов сама постепенно понимает, как подстроить параметры, чтобы начать хорошо играть.
Евгений Разинков — о глубоких нейронных сетях в компьютерном зрении
Ваша основная сфера интересов в машинном обучении — компьютерное зрение. А существуют ли другие инструменты машинного обучения — компьютерный слух, к примеру?
Не компьютерное зрение является инструментом для машинного обучения, а машинное обучение — инструмент для компьютерного зрения. Если программа получает информацию о мире на основе изображения, это задача компьютерного зрения. Так вышло, что машинное обучение — лучший инструмент для решения задач компьютерного зрения, но его используют в распознавании и синтезе речи, анализе текста и еще в большом количестве сфер. Нейронные сети сегодня могут прочитать текст, оценить, как он эмоционально окрашен, ответить на вопросы по прочитанному или произнести его правдоподобным человеческим голосом.
Сколько раз может ошибиться нейросеть, чтобы ее могли назвать удачно сконструированной?
В СМИ бывают новости типа «Нейронная сеть научилась диагностировать депрессию, точность диагностики составила 70 процентов». И тут возникает вопрос: а 70 процентов — это достаточно или все-таки еще нет? Если говорить про нейронные сети в научных исследованиях, то как только она начнет работать, например, на один процент точнее, чем у всех остальных, то это будет значить, что у вас лучшая нейронная сеть в этой задаче — можно смело писать научную статью и отправлять на конференцию. Когда мы говорим про нейронные сети, которые решают задачи бизнеса, здесь все зависит от сферы. В одном случае точность в 70 процентов уже можно монетизировать, в другом же и 98 процентов будет недостаточно.
Мне кажется, это важное послание для бизнеса. Сейчас все с ума сходят по нейронным сетям, стремятся их использовать, но очень важно понимать, какая точность необходима для успешного применения технологии, как эта точность может измеряться и во сколько рублей, евро или долларов обходится та или иная ошибка. От этого зависит и сам процесс разработки решения на основе машинного обучения.
Предположим, что мы хотим проверять людей на туберкулез в странах, где нет квалифицированной медицинской помощи. Например, мы делаем флюорографию населению, но сталкиваемся с проблемой, что некому анализировать миллионы рентгеновских снимков. Просматривать каждый снимок глазами высокооплачиваемого врача из развитой страны — это дорого. Может ли нейронная сеть помочь? В этот момент нужно определить цену ошибки. Мы понимаем, что если будет один больной на сотню тысяч проверенных, а наша нейронная сеть, например, дает три процента ложных срабатываний, то из ста изображений мы три пометим как подозрительные. Получается, три процента мы можем отправить экспертам, и все будет хорошо. Заставить врача посмотреть лишний снимок в этой ситуации — это не проблема, а не диагностировать болезнь и позволить человеку умереть — проблема, поэтому стоимость ложноотрицательного срабатывания высока.
Это был абстрактный пример. А смогут ли нейросети в реальности заменить, к примеру, врачей-диагностов?
Постепенно начинают. Я думаю, что все идет по правильному пути в том смысле, что нейронные сети сейчас дают совет. То есть у врача есть собственное мнение, есть мнение нейронной сети, и если они расходятся, врач может провести дополнительную диагностику, обратиться за советом к коллеге — в общем, приложить усилия для исключения возможной ошибки. Я допускаю, что постепенно авторитет нейронных сетей в этих задачах будет повышаться. Нейросети уже ставят некоторые диагнозы точнее, чем человек.
«Как машина узнает человека на фотографии?»
Как быстро нейросеть учится?
Если говорить о простых задачах компьютерного зрения, то с хорошей видеокартой нейронная сеть обучается примерно за сутки. На сложные задачи может уйти неделя, две или больше — все зависит от аппаратных мощностей.
В чем преимущество технологии перед человеком?
В некоторых задачах, например в распознавании изображений и речи, нейронные сети достигают уровня человека и иногда превосходят его. Пока принципиальный недостаток нейронных сетей и принципиальное преимущество человека в том, что мы способны решать широкий круг даже новых для нас задач, а нейронные сети достигают успехов только в конкретных, узких.
В течение жизни мы накапливаем достаточное количество опыта, который можем использовать в дальнейшем. Вам, как правило, не приходится объяснять собеседнику все в мельчайших деталях, потому что у него уже есть свой багаж знаний и вы можете апеллировать к нему. Даже если люди что-то недоговаривают, они все равно понимают друг друга за счет общего контекста, а у нейронной сети этого контекста нет. У нее есть данные для решения задачи, но прожитых 20−30 и так далее лет нет.
Может ли у искусственного интеллекта появиться контекст, о котором вы говорите?
Однажды — да.
Можно ли обучить нейросеть ставить задачи самой себе?
В каком-то разумном понимании, применимом на практике, — скорее нет. Когда мы ставим нейросети задачу «придумать себе задачу», мы подрываем саму идею искусственного интеллекта. Тем не менее есть интересный сценарий обучения нейронной сети для генерации реалистичных изображений, например фотографий выдуманных человеческих лиц. Совершенно не очевидно, как математически задать такую целевую функцию. Подобные задачи решаются с помощью так называемых генеративно-состязательных сетей (на английском это называется generative adversarial network, GAN). GAN состоит из двух сетей — генератора G и дискриминатора D. Сеть G учится генерировать реалистичные изображения, но настоящие фотографии при обучении не используются. Она определяет параметры случайно, поэтому может генерировать лишь случайные картинки. После этого мы обучаем дискриминатор D отличать сгенерированные изображения от настоящих фотографий, а после начинаем учить сеть G обманывать дискриминатор, то есть генерировать такие изображения, на которых D ошибется. Этот процесс повторяется, G постепенно генерирует все более и более реалистичные изображения, а задача дискриминатора D становится сложнее и сложнее. Через какое-то время сеть G научится генерировать более или менее реалистичные изображения. Это чрезвычайно увлекательное направление в машинном обучении, я думаю, оно нас еще удивит. Конечно, это не приведет к тому, что сеть сама будет ставить себе цели. С другой стороны, процесс, когда человек просит генерировать правдоподобные человеческие лица, нельзя обратить в математические функции, но при этом у нейросети в итоге что-то получается.
При разработке нейросетей специалисты по машинному обучению используют те же языки программирования, что и остальные айтишники?
Для машинного обучения обычно используют Python с библиотеками для глубокого обучения, которые позволяют абстрагироваться от низкоуровневых команд (языки программирования низкого уровня обращаются непосредственно к процессору, давая ему максимально точные команды, а языки программирования высокого уровня оперируют более абстрактными понятиями. — Прим. «Инде») и использовать преимущества видеокарты.
Что специалисты по машинному обучению используют в большей степени: математику или программирование?
Здесь все сильно переплетено и зависит, в том числе, от той роли, которую человек выполняет в команде разработчиков. Вообще программирования в машинном обучении достаточно, но мы очень ценим наши математические и теоретические знания. Они важны, потому что, когда специалист по машинному обучению создает архитектуру нейронной сети, он использует математические функции. Есть много обучающих материалов с инструкциями, как запрограммировать простенькую нейронную сеть, способную, например, распознать цифру на изображении. Это можно сделать, ничего не понимая в математике. В итоге у некоторых людей создается ложное впечатление, что машинное обучение — это очень просто. На самом деле такие рецепты хороши только для почти тривиальных, давно решенных задач. Как только задача становится нестандартной, нужна математика.
Вы упомянули, что для машинного обучения лучше всего подходит видеокарта. Почему?
Базовые действия, которые происходят в компьютерном зрении, называются операцией свертки, то есть обработки изображения. Я не очень силен в аппаратном строении, но, насколько я понимаю, это та операция, которая на видеокартах реализована очень эффективно, потому что похожие операции используются в высокопроизводительных компьютерах для визуализации изображения. В NVIDIA (американская компания, один из крупнейших разработчиков графических ускорителей и процессоров. — Прим. «Инде») уже понимают, что их видеокарты для геймеров используют для машинного обучения. В будущем компания планирует наладить выпуск оборудования именно для нашей сферы.
«Как машина читает и генерирует текст?»
Сколько может стоить разработка нейросети?
Точные цифры назвать я не могу. Самый дорогой компонент — сбор данных: чтобы нейросеть была хорошо обучена и решала задачи, ей необходимо очень много данных. Это как раз подталкивает развитие обучения без учителя, где нейросети известна лишь часть данных. Второй компонент стоимости — это специалисты по машинному обучению. Рынок только зарождается, и сейчас это могут быть дорогие профессионалы. Третий компонент — это мощности. Чтобы обучить нейросеть, нужны хорошие машины с хорошими картами.
Над чем вы сейчас работаете?
Я руковожу отделом машинного обучения и компьютерного зрения в группе компаний FIX. Мы много работаем с компьютерным зрением, решаем задачи классификации изображений и видео, распознавания текста на изображении, поиска изображений. Также занимаемся анализом текста и временных рядов. А еще я преподаю в университете и читаю лекции по машинному обучению, глубокому обучению и компьютерному зрению для всех желающих. Недавно студенты под моим научным руководством закончили работу по синтезу речи с помощью нейронной сети. В рамках этой работы они записали более 30 часов речи, и на данный момент это самая большая обучающая выборка для синтеза речи одного компьютерного диктора на русском языке.
На лекцию Евгения Разинкова может прийти любой желающий — следите за расписанием в группе Machine Learning at KFU во «ВКонтакте». Участие бесплатное.