Технологии 30 апреля 2018

Дмитрий Коробченко, NVIDIA: Нейросети как «черный ящик», они очень прожорливы

Далее

Нейросети — это частный случай искусственного интеллекта. Сейчас их используют ученые, банкиры и разработчики автопилотов. Дмитрий Коробченко, инженер по глубокому обучению NVIDIA и популяризатор нейронных сетей рассказал на AI Conference о том, как устроены нейросети, чему их можно научить и почему они стали популярны только сейчас. «Хайтек» записал самое интересное.  

Нейросеть как «черный ящик», который переводит одни данные в другие. Промежуточное представление в этом «черном ящике» — это признаки. Мы раскладываем задачу на две более простых. Сначала мы извлекаем признаки, а потом конвертируем в финальный ответ.

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

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

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


С какими данными работает нейросеть

Характеристики объекта. Это рост, вес, пол, город и другие простые данные. При классификации, например, пользователей, мы присваиваем им какую-нибудь метку о том, что пользователь принадлежит какой-то группе.

Картинки. Нейросеть может переводить картинки в абстрактную информацию, классифицировать их.

Тексты и звуки. Нейросети могут переводить их, классифицировать.


Как нейросети учат друг друга

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

Рекурретные сети — это сети с дополнительной связью, которые соединяют предыдущий момент времени с будущим. Это применяется везде, где есть последовательность. Например, предсказание слов на клавиатуре: вы написали какой-то текст, а клавиатура предсказывает следующее слово.

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

Как делать нейросети

Сейчас нет инструментов создания нейросетей, которые ориентированы на пользователей: все технологии ориентированы на разработчиков.

Нейросети не могут без «железа». Как только мы научились распараллеливать расчеты, обучение ускорилось на дни и даже часы. В плюс сыграло появление программного обеспечения для ускорения обучения. Если раньше мы обучали каждую новую модель месяцами, то сейчас можем заимствовать предварительно обученные части нейросети.

Нейронные сети очень прожорливы, они хотят очень много наборов данных. В 2012 году нейронная сеть начала работать лучше, чем другие алгоритмы и вот с тех пор все больше данных у нас накапливается, и мы можем все более сложные модели обучать. Больше данных — лучше нейросеть. Все просто.


Чаще всего нейросети используют для анализа данных или автоматического принятия решений. Они анализируют голосовые команды и переводят текст в речь. Google и Apple используют их для своих языковых сервисов.

Нейросети научились обыгрывать людей в интеллектуальные игры. Нейросеть DeepBlue обыграла в 1997 году гроссмейстера Гарри Каспарова, а Alpha Go в 2016 — чемпиона игры в Го Ли Седоля. В мобильном приложении Prisma тоже используется нейросеть: она стилизует фотографии под произведения известных художников. Нейросети — это также компоненты беспилотных автомобилей, компьютерных переводчиков, банковских аналитических системах


Для высокоуровневой разработки есть фреймворки, например TensorFlow, PyTorch или Caffe. Они понижают порог входа: опытный программист может изучить руководство какого-нибудь фреймворка и собрать нейросеть. Для низкоуровневой разработки можно использовать, например, библиотеку cuDNN. Ее компоненты используются почти во всех фреймворках. Чтобы лучше разобраться в том, как устроены нейросети, в интернете есть много информации: можно посмотреть лекции на YouTube или Deep Learning Institute на сайте NVIDIA.