Нейронные сети это


Бум нейросетей: Кто делает нейронные сети, зачем они нужны и сколько денег могут приносить — Будущее на vc.ru

В первой половине 2016 года мир услышал о множестве разработок в области нейронных сетей — свои алгоритмы демонстрировали Google (сеть-игрок в го AlphaGo), Microsoft (ряд сервисов для идентификации изображений), стартапы MSQRD, Prisma и другие.

Редакция vc.ru рассказывает, что из себя представляют нейронные сети, для чего они нужны, почему захватили планету именно сейчас, а не годами раньше или позже, сколько на них можно заработать и кто является основными игроками рынка. Своими мнениями также поделились эксперты из МФТИ, «Яндекса», Mail.Ru Group и Microsoft.

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

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

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

Руководитель направления «Поиск Mail.ru» в Mail.Ru Group Андрей Калинин отмечает, что нейронные сети способны решать такие же задачи, как и другие алгоритмы машинного обучения, разница заключается лишь в подходе к обучению.

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

Директор программ технологического сотрудничества Microsoft в России Влад Шершульский замечает, что сейчас нейросети применяются повсеместно: «Например, многие крупные интернет-сайты используют их, чтобы сделать реакцию на поведение пользователей более естественной и полезной своей аудитории. Нейросети лежат в основе большинства современных систем распознавания и синтеза речи, а также распознавания и обработки изображений. Они применяются в некоторых системах навигации, будь то промышленные роботы или беспилотные автомобили. Алгоритмы на основе нейросетей защищают информационные системы от атак злоумышленников и помогают выявлять незаконный контент в сети».

В ближайшей перспективе (5-10 лет), полагает Шершульский, нейронные сети будут использоваться ещё шире:

Представьте себе сельскохозяйственный комбайн, исполнительные механизмы которого снабжены множеством видеокамер. Он делает пять тысяч снимков в минуту каждого растения в полосе своей траектории и, используя нейросеть, анализирует — не сорняк ли это, не поражено ли оно болезнью или вредителями. И обрабатывает каждое растение индивидуально. Фантастика? Уже не совсем. А через пять лет может стать нормой. — Влад Шершульский, Microsoft

Заведующий лабораторией нейронных систем и глубокого обучения Центра живых систем МФТИ Михаил Бурцев приводит предположительную карту развития нейронных сетей на 2016-2018 годы:

  • системы распознавания и классификации объектов на изображениях;
  • голосовые интерфейсы взаимодействия для интернета вещей;
  • системы мониторинга качества обслуживания в колл-центрах;
  • системы выявления неполадок (в том числе, предсказывающие время технического обслуживания), аномалий, кибер-физических угроз;
  • системы интеллектуальной безопасности и мониторинга;
  • замена ботами части функций операторов колл-центров;
  • системы видеоаналитики;
  • самообучающиеся системы, оптимизирующие управление материальными потоками или расположение объектов (на складах, транспорте);
  • интеллектуальные, самообучающиеся системы управления производственными процессами и устройствами (в том числе, робототехнические);
  • появление систем универсального перевода «на лету» для конференций и персонального использования;
  • появление ботов-консультантов технической поддержки или персональных ассистентов, по функциям близким к человеку.

Директор по распространению технологий «Яндекса» Григорий Бакунов считает, что основой для распространения нейросетей в ближайшие пять лет станет способность таких систем к принятию различных решений: «Главное, что сейчас делают нейронные сети для человека, — избавляют его от излишнего принятия решений. Так что их можно использовать практически везде, где принимаются не слишком интеллектуальные решения живым человеком. В следующие пять лет будет эксплуатироваться именно этот навык, который заменит принятие решений человеком на простой автомат».

Почему нейронные сети стали так популярны именно сейчас

Учёные занимаются разработкой искусственных нейронных сетей более 70 лет. Первую попытку формализовать нейронную сеть относят к 1943 году, когда два американских учёных (Уоррен Мак-Каллок и Уолтер Питтс) представили статью о логическом исчислении человеческих идей и нервной активности.

Однако до недавнего времени, говорит Андрей Калинин из Mail.Ru Group, скорость работы нейросетей была слишком низкой, чтобы они могли получить широкое распространение, и поэтому такие системы в основном использовались в разработках, связанных с компьютерным зрением, а в остальных областях применялись другие алгоритмы машинного обучения.

Трудоёмкая и длительная часть процесса разработки нейронной сети — её обучение. Для того, чтобы нейронная сеть могла корректно решать поставленные задачи, требуется «прогнать» её работу на десятках миллионов наборов входных данных. Именно с появлением различных технологий ускоренного обучения и связывают распространение нейросетей Андрей Калинин и Григорий Бакунов.

Главное, что произошло сейчас, — появились разные уловки, которые позволяют делать нейронные сети, значительно меньше подверженные переобучению.— Григорий Бакунов, «Яндекс»

«Во-первых, появился большой и общедоступный массив размеченных картинок (ImageNet), на которых можно обучаться. Во-вторых, современные видеокарты позволяют в сотни раз быстрее обучать нейросети и их использовать. В-третьих, появились готовые, предобученные нейросети, распознающие образы, на основании которых можно делать свои приложения, не занимаясь длительной подготовкой нейросети к работе. Всё это обеспечивает очень мощное развитие нейросетей именно в области распознавания образов», — замечает Калинин.

Каковы объёмы рынка нейронных сетей

«Очень легко посчитать. Можно взять любую область, в которой используется низкоквалифицированный труд, — например, работу операторов колл-центров — и просто вычесть все людские ресурсы. Я бы сказал, что речь идет о многомиллиардном рынке даже в рамках отдельной страны. Какое количество людей в мире задействовано на низкоквалифицированной работе, можно легко понять. Так что даже очень абстрактно говоря, думаю, речь идет о стомиллиардном рынке во всем мире», — говорит директор по распространению технологий «Яндекса» Григорий Бакунов.

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

«Алгоритмы машинного обучения — это следующий шаг в автоматизации любых процессов, в разработке любого программного обеспечения. Поэтому рынок как минимум совпадает со всем рынком ПО, а, скорее, превосходит его, потому что становится возможно делать новые интеллектуальные решения, недоступные старому ПО», — продолжает руководитель направления «Поиск Mail.ru» в Mail.Ru Group Андрей Калинин.

Зачем разработчики нейронных сетей создают мобильные приложения для массового рынка

В последние несколько месяцев на рынке появилось сразу несколько громких развлекательных проектов, использующих нейронные сети — это и популярный видеосервис MSQRD, который выкупила социальная сеть Facebook, и российские приложения для обработки снимков Prisma (в июне привлёк инвестиции от Mail.Ru Group) и Mlvch и другие.

Способности собственных нейронных сетей демонстрировали и Google (технология AlphaGo выиграла у чемпиона в го; в марте 2016 года корпорация продала на аукционе 29 картин, нарисованных нейросетями и так далее), и Microsoft (проект CaptionBot, распознающий изображения на снимках и автоматически генерирующий подписи к ним; проект WhatDog, по фотографии определяющий породу собаки; сервис HowOld, определяющий возраст человека на снимке и так далее), и «Яндекс» (в июне команда встроила в приложение «Авто.ру» сервис для распознавания автомобилей на снимках; представила записанный нейросетями музыкальный альбом; в мае создала проект LikeMo.net для рисования в стиле известных художников).

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

«Игры — характерная особенность нашего поведения как биологического вида. С одной стороны, на игровых ситуациях можно смоделировать практически все типичные сценарии человеческого поведения, а с другой — и создатели игр и, особенно, игроки могут получить от процесса массу удовольствия. Есть и сугубо утилитарный аспект. Хорошо спроектированная игра приносит не только удовлетворение игрокам: в процессе игры они обучают нейросетевой алгоритм. Ведь в основе нейросетей как раз и лежит обучение на примерах», — говорит Влад Шершульский из Microsoft.

«В первую очередь это делается для того, чтобы показать возможности технологии. Другой причины, на самом деле, нет. Если речь идёт о Prisma, то понятно, для чего это делали они. Ребята построили некоторый пайплайн, который позволяет им работать с картинками. Для демонстрации этого они избрали для себя довольно простой способ создания стилизаций. Почему бы и нет? Это просто демонстрация работы алгоритмов», — говорит Григорий Бакунов из «Яндекса».

Другого мнения придерживается Андрей Калинин из Mail.Ru Group: «Конечно, это эффектно с точки зрения публики. С другой стороны, я бы не сказал, что развлекательные продукты не могут быть применены в более полезных областях. Например, задача по стилизации образов крайне актуальна для целого ряда индустрий (дизайн, компьютерные игры, мультипликация — вот лишь несколько примеров), и полноценное использование нейросетей может существенно оптимизировать стоимость и методы создания контента для них».

Основные игроки на рынке нейронных сетей

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

Среди основных игроков рынка Калинин упоминает Google и её подразделение Google DeepMind, создавшее сеть AlphaGo, и Google Brain. Собственные разработки в этой области есть у Microsoft — ими занимается лаборатория Microsoft Research. Созданием нейронных сетей занимаются в IBM, Facebook (подразделение Facebook AI Research), Baidu (Baidu Institute of Deep Learning) и другие. Множество разработок ведётся в технических университетах по всему миру.

Директор по распространению технологий «Яндекса» Григорий Бакунов отмечает, что интересные разработки в области нейронных сетей встречаются и среди стартапов. «Я бы вспомнил, например, компанию ClarifAI. Это небольшой стартап, сделанный когда-то выходцами из Google. Сейчас они, пожалуй, лучше всех в мире умеют определять содержимое картинки». К таким стартапам относятся и MSQRD, и Prisma, и другие.

В России разработками в области нейронных сетей занимаются не только стартапы, но и крупные технологические компании — например, холдинг Mail.Ru Group применяет нейросети для обработки и классификации текстов в «Поиске», анализа изображений. Компания также ведёт экспериментальные разработки, связанные с ботами и диалоговыми системами.

Созданием собственных нейросетей занимается и «Яндекс»: «В основном такие сети уже используются в работе с изображениями, со звуком, но мы исследуем их возможности и в других областях. Сейчас мы много экспериментов ставим в использовании нейросетей в работе с текстом». Разработки ведутся в университетах: в «Сколтехе», МФТИ, МГУ, ВШЭ и других.

#золотойфонд #будущее

vc.ru

Нейронные сети: практическое применение

Наталия Ефремова погружает публику в специфику практического использования нейросетей. Это — расшифровка доклада Highload++.

Добрый день, меня зовут Наталия Ефремова, и я research scientist в компании NtechLab. Сегодня я буду рассказывать про виды нейронных сетей и их применение.

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

Первая часть моего доклада будет направлена тем, кто незнаком с нейронными сетями. Я занимаюсь непосредственно deep learning. В этой области я работаю более 10 лет. Хотя она появилась чуть меньше, чем десятилетие назад, раньше были некие зачатки нейронных сетей, которые были похожи на систему deep learning. В последние 10 лет deep learning и компьютерное зрение развивались неимоверными темпами. Все, что сделано значимого в этой области, произошло в последние лет 6. Я расскажу о практических аспектах: где, когда, что применять в плане deep learning для обработки изображений и видео, для распознавания образов и лиц, поскольку я работаю в компании, которая этим занимается. Немножко расскажу про распознавание эмоций, какие подходы используются в играх и робототехнике. Также я расскажу про нестандартное применение deep learning, то, что только выходит из научных институтов и пока что еще мало применяется на практике, как это может применяться, и почему это сложно применить. Доклад будет состоять из двух частей. Так как большинство знакомы с нейронными сетями, сначала я быстро расскажу, как работают нейронные сети, что такое биологические нейронные сети, почему нам важно знать, как это работает, что такое искусственные нейронные сети, и какие архитектуры в каких областях применяются. Сразу извиняюсь, я буду немного перескакивать на английскую терминологию, потому что большую часть того, как называется это на русском языке, я даже не знаю. Возможно вы тоже. Итак, первая часть доклада будет посвящена сверточным нейронным сетям. Я расскажу, как работают convolutional neural network (CNN), распознавание изображений на примере из распознавания лиц. Немного расскажу про рекуррентные нейронные сети recurrent neural network (RNN) и обучение с подкреплением на примере систем deep learning. В качестве нестандартного применения нейронных сетей я расскажу о том, как CNN работает в медицине для распознавания воксельных изображений, как используются нейронные сети для распознавания бедности в Африке.

Что такое нейронные сети

Прототипом для создания нейронных сетей послужили, как это ни странно, биологические нейронные сети. Возможно, многие из вас знают, как программировать нейронную сеть, но откуда она взялась, я думаю, некоторые не знают. Две трети всей сенсорной информации, которая к нам попадает, приходит с зрительных органов восприятия. Более одной трети поверхности нашего мозга заняты двумя самыми главными зрительными зонами — дорсальный зрительный путь и вентральный зрительный путь. Дорсальный зрительный путь начинается в первичной зрительной зоне, в нашем темечке и продолжается наверх, в то время как вентральный путь начинается на нашем затылке и заканчивается примерно за ушами. Все важное распознавание образов, которое у нас происходит, все смыслонесущее, то что мы осознаём, проходит именно там же, за ушами. Почему это важно? Потому что часто нужно для понимания нейронных сетей. Во-первых, все об этом рассказывают, и я уже привыкла что так происходит, а во-вторых, дело в том, что все области, которые используются в нейронных сетях для распознавания образов, пришли к нам именно из вентрального зрительного пути, где каждая маленькая зона отвечает за свою строго определенную функцию. Изображение попадает к нам из сетчатки глаза, проходит череду зрительных зон и заканчивается в височной зоне. В далекие 60-е годы прошлого века, когда только начиналось изучение зрительных зон мозга, первые эксперименты проводились на животных, потому что не было fMRI. Исследовали мозг с помощью электродов, вживлённых в различные зрительные зоны. Первая зрительная зона была исследована Дэвидом Хьюбелем и Торстеном Визелем в 1962 году. Они проводили эксперименты на кошках. Кошкам показывались различные движущиеся объекты. На что реагировали клетки мозга, то и было тем стимулом, которое распознавало животное. Даже сейчас многие эксперименты проводятся этими драконовскими способами. Но тем не менее это самый эффективный способ узнать, что делает каждая мельчайшая клеточка в нашем мозгу. Таким же способом были открыты еще многие важные свойства зрительных зон, которые мы используем в deep learning сейчас. Одно из важнейших свойств — это увеличение рецептивных полей наших клеток по мере продвижения от первичных зрительных зон к височным долям, то есть более поздним зрительным зонам. Рецептивное поле — это та часть изображения, которую обрабатывает каждая клеточка нашего мозга. У каждой клетки своё рецептивное поле. Это же свойство сохраняется и в нейронных сетях, как вы, наверное, все знаете. Также с возрастанием рецептивных полей увеличиваются сложные стимулы, которые обычно распознают нейронные сети.

Здесь вы видите примеры сложности стимулов, различных двухмерных форм, которые распознаются в зонах V2, V4 и различных частях височных полей у макак. Также проводятся некоторое количество экспериментов на МРТ.

Здесь вы видите, как проводятся такие эксперименты. Это 1 нанометровая часть зон IT cortex'a мартышки при распознавании различных объектов. Подсвечено то, где распознается. Просуммируем. Важное свойство, которое мы хотим перенять у зрительных зон — это то, что возрастают размеры рецептивных полей, и увеличивается сложность объектов, которые мы распознаем.

Компьютерное зрение

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

В случае компьютерного зрения нам нужно еще больше скрытых слоёв. И только тогда система будет осмысленно распознавать то, что она видит. Итак, что происходит при распознавании изображения, я расскажу на примере лиц. Для нас посмотреть на эту картинку и сказать, что на ней изображено именно лицо статуи, достаточно просто. Однако до 2010 года для компьютерного зрения это было невероятно сложной задачей. Те, кто занимался этим вопросом до этого времени, наверное, знают насколько тяжело было описать объект, который мы хотим найти на картинке без слов. Нам нужно это было сделать каким-то геометрическим способом, описать объект, описать взаимосвязи объекта, как могут эти части относиться к друг другу, потом найти это изображение на объекте, сравнить их и получить, что мы распознали плохо. Обычно это было чуть лучше, чем подбрасывание монетки. Чуть лучше, чем chance level. Сейчас это происходит не так. Мы разбиваем наше изображение либо на пиксели, либо на некие патчи: 2х2, 3х3, 5х5, 11х11 пикселей — как удобно создателям системы, в которой они служат входным слоем в нейронную сеть. Сигналы с этих входных слоёв передаются от слоя к слою с помощью синапсов, каждый из слоёв имеет свои определенные коэффициенты. Итак, мы передаём от слоя к слою, от слоя к слою, пока мы не получим, что мы распознали лицо. Условно все эти части можно разделить на три класса, мы их обозначим X, W и Y, где Х — это наше входное изображение, Y — это набор лейблов, и нам нужно получить наши веса. Как мы вычислим W? При наличии нашего Х и Y это, кажется, просто. Однако то, что обозначено звездочкой, очень сложная нелинейная операция, которая, к сожалению, не имеет обратной. Даже имея 2 заданных компоненты уравнения, очень сложно ее вычислить. Поэтому нам нужно постепенно, методом проб и ошибок, подбором веса W сделать так, чтобы ошибка максимально уменьшилась, желательно, чтобы стала равной нулю.

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

Перед вами первая сеть, которая победила на международном соревновании ImageNet в 2012 году. Это так называемый AlexNet. Это сеть, которая впервые заявила о себе, о том, что существует convolutional neural networks и с тех самых пор на всех международных состязаниях уже convolutional neural nets не сдавали своих позиций никогда. Несмотря на то, что эта сеть достаточно мелкая (в ней всего 7 скрытых слоёв), она содержит 650 тысяч нейронов с 60 миллионами параметров. Для того, чтобы итеративно научиться находить нужные веса, нам нужно очень много примеров. Нейронная сеть учится на примере картинки и лейбла. Как нас в детстве учат «это кошка, а это собака», так же нейронные сети обучаются на большом количестве картинок. Но дело в том, что до 2010 не существовало достаточно большого data set’a, который способен был бы научить такое количество параметров распознавать изображения. Самые большие базы данных, которые существовали до этого времени: PASCAL VOC, в который было всего 20 категорий объектов, и Caltech 101, который был разработан в California Institute of Technology. В последнем была 101 категория, и это было много. Тем же, кто не сумел найти свои объекты ни в одной из этих баз данных, приходилось стоить свои базы данных, что, я скажу, страшно мучительно. Однако, в 2010 году появилась база ImageNet, в которой было 15 миллионов изображений, разделённые на 22 тысячи категорий. Это решило нашу проблему обучения нейронных сетей. Сейчас все желающие, у кого есть какой-либо академический адрес, могут спокойно зайти на сайт базы, запросить доступ и получить эту базу для тренировки своих нейронных сетей. Они отвечают достаточно быстро, по-моему, на следующий день. По сравнению с предыдущими data set’ами, это очень большая база данных.

На примере видно, насколько было незначительно все то, что было до неё. Одновременно с базой ImageNet появилось соревнование ImageNet, международный challenge, в котором все команды, желающие посоревноваться, могут принять участие. В этом году победила сеть, созданная в Китае, в ней было 269 слоёв. Не знаю, сколько параметров, подозреваю, тоже много.

Архитектура глубинной нейронной сети

Условно ее можно разделить на 2 части: те, которые учатся, и те, которые не учатся.

Чёрным обозначены те части, которые не учатся, все остальные слои способны обучаться. Существует множество определений того, что находится внутри каждого сверточного слоя. Одно из принятых обозначений — один слой с тремя компонентами разделяют на convolution stage, detector stage и pooling stage. Не буду вдаваться в детали, еще будет много докладов, в которых подробно рассмотрено, как это работает. Расскажу на примере. Поскольку организаторы просили меня не упоминать много формул, я их выкинула совсем.

Итак, входное изображение попадает в сеть слоёв, которые можно назвать фильтрами разного размера и разной сложности элементов, которые они распознают. Эти фильтры составляют некий свой индекс или набор признаков, который потом попадает в классификатор. Обычно это либо SVM, либо MLP — многослойный перцептрон, кому что удобно. По образу и подобию с биологической нейронной сетью объекты распознаются разной сложности. По мере увеличения количества слоёв это все потеряло связь с cortex’ом, поскольку там ограничено количество зон в нейронной сети. 269 или много-много зон абстракции, поэтому сохраняется только увеличение сложности, количества элементов и рецептивных полей.

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

С точки зрения того, что находится у нас внутри фильтров, сначала будут наклонные палочки плюс немного цвета, затем части лиц, а потом уже целиком лица будут распознаваться каждой клеточкой слоя. Есть люди, которые утверждают, что человек всегда распознаёт лучше, чем сеть. Так ли это? В 2014 году ученые решили проверить, насколько мы хорошо распознаем в сравнении с нейронными сетями. Они взяли 2 самые лучшие на данный момент сети — это AlexNet и сеть Мэттью Зиллера и Фергюса, и сравнили с откликом разных зон мозга макаки, которая тоже была научена распознавать какие-то объекты. Объекты были из животного мира, чтобы обезьяна не запуталась, и были проведены эксперименты, кто же распознаёт лучше. Так как получить отклик от мартышки внятно невозможно, ей вживили электроды и мерили непосредственно отклик каждого нейрона. Оказалось, что в нормальных условиях клетки мозга реагировали так же хорошо, как и state of the art model на тот момент, то есть сеть Мэттью Зиллера. Однако при увеличении скорости показа объектов, увеличении количества шумов и объектов на изображении скорость распознавания и его качество нашего мозга и мозга приматов сильно падают. Даже самая простая сверточная нейронная сеть распознаёт объекты лучше. То есть официально нейронные сети работают лучше, чем наш мозг.

Классические задачи сверточных нейронных сетей

Их на самом деле не так много, они относятся к трём классам. Среди них — такие задачи, как идентификация объекта, семантическая сегментация, распознавание лиц, распознавание частей тела человека, семантическое определение границ, выделение объектов внимания на изображении и выделение нормалей к поверхности. Их условно можно разделить на 3 уровня: от самых низкоуровневых задач до самых высокоуровневых задач.

На примере этого изображения рассмотрим, что делает каждая из задач.
  • Определение границ — это самая низкоуровневая задача, для которой уже классически применяются сверточные нейронные сети.
  • Определение вектора к нормали позволяет нам реконструировать трёхмерное изображение из двухмерного.
  • Saliency, определение объектов внимания — это то, на что обратил бы внимание человек при рассмотрении этой картинки.
  • Семантическая сегментация позволяет разделить объекты на классы по их структуре, ничего не зная об этих объектах, то есть еще до их распознавания.
  • Семантическое выделение границ — это выделение границ, разбитых на классы.
  • Выделение частей тела человека.
  • И самая высокоуровневая задача — распознавание самих объектов, которое мы сейчас рассмотрим на примере распознавания лиц.

Распознавание лиц

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

Затем мы можем этот вектор признаков сравнить со всеми векторами признаков, которые хранятся у нас в базе данных, и получить отсылку на конкретного человека, на его имя, на его профиль — всё, что у нас может храниться в базе данных. Именно таким образом работает наш продукт FindFace — это бесплатный сервис, который помогает искать профили людей в базе «ВКонтакте». Кроме того, у нас есть API для компаний, которые хотят попробовать наши продукты. Мы предоставляем сервис по детектированию лиц, по верификации и по идентификации пользователей. Сейчас у нас разработаны 2 сценария. Первый — это идентификация, поиск лица по базе данных. Второе — это верификация, это сравнение двух изображений с некой вероятностью, что это один и тот же человек. Кроме того, у нас сейчас в разработке распознавание эмоций, распознавание изображений на видео и liveness detection — это понимание, живой ли человек перед камерой или фотография. Немного статистики. При идентификации, при поиске по 10 тысячам фото у нас точность около 95% в зависимости от качества базы, 99% точность верификации. И помимо этого данный алгоритм очень устойчив к изменениям — нам необязательно смотреть в камеру, у нас могут быть некие загораживающие предметы: очки, солнечные очки, борода, медицинская маска. В некоторых случаях мы можем победить даже такие невероятные сложности для компьютерного зрения, как и очки, и маска. Очень быстрый поиск, затрачивается 0,5 секунд на обработку 1 миллиарда фотографий. Нами разработан уникальный индекс быстрого поиска. Также мы можем работать с изображениями низкого качества, полученных с CCTV-камер. Мы можем обрабатывать это все в режиме реального времени. Можно загружать фото через веб-интерфейс, через Android, iOS и производить поиск по 100 миллионам пользователей и их 250 миллионам фотографий. Как я уже говорила мы заняли первое место на MegaFace competition — аналог для ImageNet, но для распознавания лиц. Он проводится уже несколько лет, в прошлом году мы были лучшими среди 100 команд со всего мира, включая Google.

Рекуррентные нейронные сети

Recurrent neural networks мы используем тогда, когда нам недостаточно распознавать только изображение. В тех случаях, когда нам важно соблюдать последовательность, нам нужен порядок того, что у нас происходит, мы используем обычные рекуррентные нейронные сети. Это применяется для распознавания естественного языка, для обработки видео, даже используется для распознавания изображений. Про распознавание естественного языка я рассказывать не буду — после моего доклада еще будут два, которые будут направлены на распознавание естественного языка. Поэтому я расскажу про работу рекуррентных сетей на примере распознавания эмоций. Что такое рекуррентные нейронные сети? Это примерно то же самое, что и обычные нейронные сети, но с обратной связью. Обратная связь нам нужна, чтобы передавать на вход нейронной сети или на какой-то из ее слоев предыдущее состояние системы. Предположим, мы обрабатываем эмоции. Даже в улыбке — одной из самых простых эмоций — есть несколько моментов: от нейтрального выражения лица до того момента, когда у нас будет полная улыбка. Они идут друг за другом последовательно. Чтоб это хорошо понимать, нам нужно уметь наблюдать за тем, как это происходит, передавать то, что было на предыдущем кадре в следующий шаг работы системы.

В 2005 году на состязании Emotion Recognition in the Wild специально для распознавания эмоций команда из Монреаля представила рекуррентную систему, которая выглядела очень просто. У нее было всего несколько свёрточных слоев, и она работала исключительно с видео. В этом году они добавили также распознавание аудио и cагрегировали покадровые данные, которые получаются из convolutional neural networks, данные аудиосигнала с работой рекуррентной нейронной сети (с возвратом состояния) и получили первое место на состязании.

Обучение с подкреплением

Следующий тип нейронных сетей, который очень часто используется в последнее время, но не получил такой широкой огласки, как предыдущие 2 типа — это deep reinforcement learning, обучение с подкреплением. Дело в том, что в предыдущих двух случаях мы используем базы данных. У нас есть либо данные с лиц, либо данные с картинок, либо данные с эмоциями с видеороликов. Если у нас этого нет, если мы не можем это отснять, как научить робота брать объекты? Это мы делаем автоматически — мы не знаем, как это работает. Другой пример: составлять большие базы данных в компьютерных играх сложно, да и не нужно, можно сделать гораздо проще. Все, наверное, слышали про успехи deep reinforcement learning в Atari и в го. Кто слышал про Atari? Ну кто-то слышал, хорошо. Про AlphaGo думаю слышали все, поэтому я даже не буду рассказывать, что конкретно там происходит.

Что происходит в Atari? Слева как раз изображена архитектура этой нейронной сети. Она обучается, играя сама с собой для того, чтобы получить максимальное вознаграждение. Максимальное вознаграждение — это максимально быстрый исход игры с максимально большим счетом. Справа вверху — последний слой нейронной сети, который изображает всё количество состояний системы, которая играла сама против себя всего лишь в течение двух часов. Красным изображены желательные исходы игры с максимальным вознаграждением, а голубым — нежелательные. Сеть строит некое поле и движется по своим обученным слоям в то состояние, которого ей хочется достичь. В робототехнике ситуация состоит немного по-другому. Почему? Здесь у нас есть несколько сложностей. Во-первых, у нас не так много баз данных. Во-вторых, нам нужно координировать сразу три системы: восприятие робота, его действия с помощью манипуляторов и его память — то, что было сделано в предыдущем шаге и как это было сделано. В общем это все очень сложно. Дело в том, что ни одна нейронная сеть, даже deep learning на данный момент, не может справится с этой задачей достаточно эффективно, поэтому deep learning только исключительно кусочки того, что нужно сделать роботам. Например, недавно Сергей Левин предоставил систему, которая учит робота хватать объекты.

Вот здесь показаны опыты, которые он проводил на своих 14 роботах-манипуляторах. Что здесь происходит? В этих тазиках, которые вы перед собой видите, различные объекты: ручки, ластики, кружки поменьше и побольше, тряпочки, разные текстуры, разной жесткости. Неясно, как научить робота захватывать их. В течение многих часов, а даже, вроде, недель, роботы тренировались, чтобы уметь захватывать эти предметы, составлялись по этому поводу базы данных. Базы данных — это некий отклик среды, который нам нужно накопить для того, чтобы иметь возможность обучить робота что-то делать в дальнейшем. В дальнейшем роботы будут обучаться на этом множестве состояний системы.

Нестандартные применения нейронных сетей

Это к сожалению, конец, у меня не много времени. Я расскажу про те нестандартные решения, которые сейчас есть и которые, по многим прогнозам, будут иметь некое приложение в будущем. Итак, ученые Стэнфорда недавно придумали очень необычное применение нейронной сети CNN для предсказания бедности. Что они сделали? На самом деле концепция очень проста. Дело в том, что в Африке уровень бедности зашкаливает за все мыслимые и немыслимые пределы. У них нет даже возможности собирать социальные демографические данные. Поэтому с 2005 года у нас вообще нет никаких данных о том, что там происходит. Учёные собирали дневные и ночные карты со спутников и скармливали их нейронной сети в течение некоторого времени. Нейронная сеть была преднастроена на ImageNet'е. То есть первые слои фильтров были настроены так, чтобы она умела распознавать уже какие-то совсем простые вещи, например, крыши домов, для поиска поселения на дневных картах. Затем дневные карты были сопоставлены с картами ночной освещенности того же участка поверхности для того, чтобы сказать, насколько есть деньги у населения, чтобы хотя бы освещать свои дома в течение ночного времени.

Здесь вы видите результаты прогноза, построенного нейронной сетью. Прогноз был сделан с различным разрешением. И вы видите — самый последний кадр — реальные данные, собранные правительством Уганды в 2005 году. Можно заметить, что нейронная сеть составила достаточно точный прогноз, даже с небольшим сдвигом с 2005 года. Были конечно и побочные эффекты. Ученые, которые занимаются deep learning, всегда с удивлением обнаруживают разные побочные эффекты. Например, как те, что сеть научилась распознавать воду, леса, крупные строительные объекты, дороги — все это без учителей, без заранее построенных баз данных. Вообще полностью самостоятельно. Были некие слои, которые реагировали, например, на дороги. И последнее применение о котором я хотела бы поговорить — семантическая сегментация 3D изображений в медицине. Вообще medical imaging — это сложная область, с которой очень сложно работать. Для этого есть несколько причин.
  • У нас очень мало баз данных. Не так легко найти картинку мозга, к тому же повреждённого, и взять ее тоже ниоткуда нельзя.
  • Даже если у нас есть такая картинка, нужно взять медика и заставить его вручную размещать все многослойные изображения, что очень долго и крайне неэффективно. Не все медики имеют ресурсы для того, чтобы этим заниматься.
  • Нужна очень высокая точность. Медицинская система не может ошибаться. При распознавании, например, котиков, не распознали — ничего страшного. А если мы не распознали опухоль, то это уже не очень хорошо. Здесь особо свирепые требования к надежности системы.
  • Изображения в трехмерных элементах — вокселях, не в пикселях, что доставляет дополнительные сложности разработчикам систем.
Но как обошли этот вопрос в данном случае? CNN была двупотоковая. Одна часть обрабатывала более нормальное разрешение, другая — чуть более ухудшенное разрешение для того, чтобы уменьшить количество слоёв, которые нам нужно обучать. За счёт этого немного сократилось время на тренировку сети. Где это применяется: определение повреждений после удара, для поиска опухоли в мозгу, в кардиологии для определения того, как работает сердце.

Вот пример для определения объема плаценты. Автоматически это работает хорошо, но не настолько, чтобы это было выпущено в производство, поэтому пока только начинается. Есть несколько стартапов для создания таких систем медицинского зрения. Вообще в deep learning очень много стартапов в ближайшее время. Говорят, что venture capitalists в последние полгода выделили больше бюджета на стартапы обрасти deep learning, чем за прошедшие 5 лет. Эта область активно развивается, много интересных направлений. Мы с вами живем в интересное время. Если вы занимаетесь deep learning, то вам, наверное, пора открывать свой стартап. Ну на этом я, наверное, закруглюсь. Спасибо вам большое.

Доклад: Нейронные сети — практическое применение.

Теги:
  • нейронные сети
  • обучение
  • глубинное обучение
  • перцептрон
  • 21 августа 2018 в 11:00
  • 31 января 2018 в 20:39
  • 18 декабря 2017 в 16:43

habr.com

Что такое искусственные нейронные сети?

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

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

Человеческий мозг удивительно надежный: по сравнению с компьютером он не перестанет работать только потому, что несколько клеток погибнет, в то время как компьютер обычно не выдерживает каких-либо поломок в CPU. Но самой удивительной особенностью человеческого мозга является то, что он может учиться. Не нужно никакого программного обеспечения и никаких обновлений, если мы хотим научиться ездить на велосипеде. Расчеты головного мозга производятся посредством тесно взаимосвязанных нейронных сетей, которые передают информацию, отсылая электрические импульсы через нейронные проводки, состоящие из аксонов, синапсов и дендритов. В 1943 году, компания McCulloch and Pitts смоделировала искусственный нейрон, как переключатель, который получает информацию от других нейронов и в зависимости от общего взвешенного входа, либо приводится в действие, либо остается неактивным. В узле ИНС пришедшие сигналы умножаются на соответствующие веса синапсов и суммируются. Эти коэффициенты могут быть как положительными (возбуждающими), так и отрицательными (тормозящими). В 1960 годах было доказано, что такие нейронные модели обладают свойствами, сходными с мозгом: они могут выполнять сложные операции распознавания образов, и они могут функционировать, даже если некоторые связи между нейронами разрушены. Демонстрация персептона Розенблатта показала, что простые сети из таких нейронов могут обучаться на примерах, известных в определенных областях. Позже, Минский и Паперт доказали, что простые пресептоны могут решать только очень узкий класс линейно сепарабельных задач (см. ниже), после чего активность изучения ИНС уменьшилась. Тем не менее, метод обратного распространения ошибки обучения, который может облегчить задачу обучения сложных нейронных сетей на примерах, показал, что эти проблемы могут быть и не сепарабельными. Программа NETtalk применяла искусственные нейронные сети для машинного чтения текста и была первым широкоизвестным приложением. В биологии, точно такой же тип сети был применен для прогнозирования вторичной структуры белка; в самом деле, некоторые из лучших исследователей до сих пор пользуются тем же методом. С этого началась другая волна, вызвавшая интерес к исследованиям ИНС и поднявшая шумиху вокруг магического обучения мыслящих машин. Некоторые из наиболее важных ранних открытий приведены в 5 источнике. ИНС могут быть созданы путем имитации модели сетей нейронов на компьютере. Используя алгоритмы, которые имитируют процессы реальных нейронов, мы можем заставить сеть «учиться», что помогает решить множество различных проблем. Модель нейрона представляется как пороговая величина (она проиллюстрирована на рисунке 1а). Модель получает данные от ряда других внешних источников, определяет значение каждого входа и добавляет эти значения. Если общий вход выше пороговой величины, то выход блока равен единице, в противном случае – нулю. Таким образом, выход изменяется от 0 до 1, когда общая «взвешенная» сумма входов равна пороговой величине. Точки в исходном пространстве, удовлетворяющие этому условию, определяют, так называемые, гиперплоскости. В двух измерениях, гиперплоскость – линия, в то время как в трех измерениях, гиперплоскость является нормальной (перпендикулярной) плоскостью. Точки с одной стороны от гиперплоскости классифицируются как 0, а точки с другой стороны – 1. Это означает, что задача классификации может быть решена с использованием пороговой величины, если два класса будут разделены гиперплоскостью. Эти проблемы называются линейно сепарабельными и изображены на рисунке 1b.

рисунок 1

Искусственные нейронные сети. (а) Графическое представление модели нейронной сети и порогового элемента McCulloch and Pitts. Пороговый блок получает входной сигнал от N других блоков или внешних источников, пронумерованных от 1 до N. Входной i называется xi и связывается с весом wi. Общий вход в устройство измерения суммы весов по всем входам, wixi=w1x1+w2x2+.. .+wNxΣi=1 N N.Если значение ниже порога t, то выход блока будет равен 1, в противном случае – 0. Таким образом, вывод может быть выражен как wixi Σi=1 – t g( N ), где g – ступенчатая функция, которая равна 0, если аргумент отрицателен, и 1, если аргумент положительный (фактическое значение в неле не имеет значения, здесь, мы выбрали 1). Так называемая, передаточная функция, g, также может быть неприрывной и «сигмоидальной», как показано красной линией. (b) Линейная сепарабельность (отделимость). В трех измерениях пороговое значение может классифицировать моменты, которые могут разделяться плоскостью. Каждая точка представляет входное значение х1, х2, х3 на пороге блока. Зеленые точки соответствуют точкамданных класса 0, и красные точки – 1. Зеленые и красные кресты иллюстрируют логическую функцию исключающего или. Найти плоскости, которые отделяют зеленые и красные точки, (или линии в х1, х2, плоскости) невозможно.(с) Однонаправленная ИНС. Показанная сеть занимает семь входов, имеет пять единиц в скрытом слое и один выход. Это двухслойная сеть, т.к. входной слой не выполняет никаких изменений и не учитывается. (d) переобучение. Восемь точек показаны плюсами на параболе (за исключением «экспериментального» шума). Они использованы для обучения трех различных ИНС. Сети воспринимают значения х в качестве входных данных (один вход) и обучаются с у значением, как желаемым результатом. Как и ожидалось, сеть с одним скрытым блоком (зеленая) не справляется с работой на высоком уровне. Сети с 10 скрытыми элементами (синяя) приближает основные функции на удивление хорошо. Последняя сеть с 20 скрытыми элементами (фиолетовая) перерабатывает информацию хорошо, сеть прекрасно обучилась, но для некоторых промежуточных областей она чрезмерно креативна.

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

Во время тренировки гиперплоскость движется то в одну сторону, то в другую, пока не найдет правильное положение в пространстве, после чего она уже не будет значительно изменяться. Такой процесс хорошо продемонстрирован программой Neural Java (http://lcn.epfl.ch/tutorial/english/index.html); следуйте по ссылке «Adline, Percepton and Backpropagation» (красные и синие точки представляют два класса) и нажмите «play».

Рассмотрим пример задачи, для которой легко применить искусственную нейронную сеть. Из двух видов рака, только один отвечает на определенные способы лечения. Так как не существует простых биомаркеров, позволяющих отличить эти два вида рака друг от друга, вы решаете измерить генную экспрессию образцов опухоли, что бы определить тип каждой опухоли. Предположим, вы измерили значения 20 различных генов в 50 опухолях класса 0 (нереагирующих) и 50 класса 1 (реагирующих). На основе этих данных, вы обучаете пороговое устройство, который принимает 20 значений генов в качестве входных данных и выдает 0 или 1 в качестве результата для определения одного из двух классов, соответственно. Если данные линейно сепарабельны, то пороговый блок будет классифицировать обучающие данные правильно. Тем не менее, многие проблемы классификации не являются линейно сепарабельными. Мы можем разделить классы в таких нелинейных задачах путем введения большего количества гиперплоскостей, а именно за счет введения более чем одного порогового блока. Обычно это осуществляется добавлением дополнительного (скрытого) уровня порогового элемента, каждая из которых производит частичную классификацию входных данных и посылает выводные данные на последний уровень. На заключительном уровне собираются все частичные классификации для составления окончательной (рис. 1b). Такие сети называют многоуровневыми перцептонами или однонаправленной сетью. Однонаправленные нейронные сети также могут быть использованы для задач регрессии, которые требуют постоянного выхода, в отличие от бинарных выходов (0 и 1). Заменяя ступенчатую функцию непрерывной, мы получаем вещественное число в качестве выхода. Зачастую, когда используется «сигмоидальная» функция активации, она является временной пороговой функцией (рис. 1а). «Сигмоидальная» функция активации также может быть использована для задач классификации, интерпретируя выход ниже 0.5, как класс 0, и выход выше 0.5, как класс 1. Также имеет смысл интерпретировать результат как вероятность класса 1. В вышеприведенном примере, также возможны следующие варианты: класс 1 характеризуется как ярко выраженный ген 1 и бессимптомный класс — 0, или наоборот. Если оба из генов ярко выражены или бессимптомны, то присваивается класс 0 (опухоль). Это соответствует исключающему логическому «или» и является каноническим примером нелинейно сепарабельной функции (рис. 1b). В данном случае, для классификации опухолей было необходимо использовать многоуровневую сеть.
Обратная передача ошибки обучения
Вышеуказанный алгоритм обратной передачи ошибки обучения работает на однонаправленных нейронных сетях с аналоговым выходом. Обучение начинается с установки всех весов в сеть малых случайных чисел. Теперь, для каждого входного примера сеть дает выход, который начинается случайно. Мы измеряем квадрат разности между этими двумя выходами и желаемыми результатами для соответствующего класса или значения. Сумма всех этих чисел за все учебные примеры называется общей ошибкой сети. Если число равно нулю, то сеть является идеальной, следовательно, чем меньше погрешность, тем лучше сеть. При выборе весов, которые сведут суммарную погрешность к минимуму, мы получим нейронную сеть, решающую проблему лучшим способом. Это то же самое, что и линейная регрессия, где два параметра характеризуют выбранные линии так, чтобы сумма квадратов разностей между линией и информационными точками была минимальной. Такую задачу можно решить аналитически в линейной регрессии, но нет никакого решения в однонаправленных нейронных сетях со скрытыми элементами. В алгоритме обратной передачи ошибки, веса и пороги меняются каждый раз, когда предоставляется новый пример, таким образом, возможность ошибки постепенно становится меньше. Процесс повторяется сотни раз, пока ошибка не остается неизменной. Наглядное представление этого процесса можно найти на сайте Neural Java, который указан выше, перейдя по ссылке «Multi-layer Perceptron» (с выходом нейрона {0, 1}). В алгоритме обратной передачи ошибки, численный метод оптимизации называется алгоритмом градиентного спуска, который особенно упрощает математические вычисления. Название этот алгоритм получил из-за формы уравнений, которые он помогает решить. Есть несколько параметров обучения (так называемый коэффициент обучения и импульса), которые нуждаются в настройке при использовании обратной передачи ошибки. Также существуют и другие проблемы, которые стоит рассмотреть. Например, алгоритм градиентного спуска не гарантирует нахождение глобального минимума ошибки, поэтому результат обучения зависит от начальных значений весов. Тем не менее, одна проблема затмевает все остальные: проблема переобучения. Переобучение происходит, когда нейронная сеть имеет слишком много параметров, которые можно извлечь из числа имеющихся параметров, то есть, когда несколько пунктов соответствуют функции со слишком большим количеством свободных параметров (рис. 1d). Несмотря на то, что все эти методы подходят и для классификации, и для регрессии, нейронные сети обычно склонны к перепараметризации. Например, сеть с 10 скрытыми элементами для решения нашей проблемы будет иметь 221 параметр: 20 скрытых весов и пороговых величин, а также 10 весов и пороговых величин на выходе. Это слишком большое количество параметров, которые можно извлечь из 100 примеров. Сеть, которая слишком подходит для обучающих данных, вряд ли обобщит выходные данные, не являющиеся обучающими. Существует множество способов для ограничения переобучения сети (исключая создание маленькой сети), но наиболее распространенные включают усреднение по нескольким сетям, регуляризацию и использование метода Байесовской статистики. Для оценки производительности нейронных сетей, необходимо тестировать их на независимых данных, которые не использовались во время обучения сети. Обычно производится перекрестная проверка, где набор данных делится, например, на несколько комплектов одинакового размера. Тогда, сеть обучается по 9 комплектам и тестируется на десятом, и эта операция повторяется десять раз, так что все наборы используются для тестирования. Это дает оценку способности сети к обобщению, то есть, ее способности классифицировать входные данные, которым сеть не была обучена. Чтобы получить объективную оценку, что является очень важным, отдельные наборы не должны содержать похожие примеры.
Расширения и приложения
И простой персептрон с одним блоком, и многослойные сети с несколькими устройствами могут быть легко обобщены для прогнозирования более чем двух параметров, простым добавлением большего количества выходных значений. Любая проблема классификации может быть закодирована набором бинарных выходов. В вышеприведенном примере, мы могли бы, например, представить, что существуют три различных метода лечения, и для данной опухоли мы хотим знать, какой из методов лечения будет эффективным. Проблема может быть решена использованием трех выходных элементов, по одному для каждого вида лечения, которые подключены к тем же скрытым единицам. Нейронные сети применяются для многих интересных проблем в различных областях науки, медицины и техники, а в некоторых случаях они обеспечивают высокотехнологичные решения. Нейронные сети иногда случайно использовались для задач, где более простые методы давали лучшие результаты, тем самым давая плохую репутацию ИНС среди некоторых ученых.

Существуют и другие типы нейронных сетей, которые не описывались здесь. Например, машина Больцмана, неконтролируемые сети и сети Кохонена. Поддержка векторных машин тесно связанных с ИНС. Для более детального ознакомления, я советую книгу Криса Бишопа, старые книги с моим соавторством, книгу Дуда и др. Существует множество программ, которые можно использовать для создания ИНС, обученных по собственным данным. К ним относятся расширения и плагины для Microsoft Excell, Matlab, и R (http://www.r-project.org/), а также библиотеки кода и большие коммерческие пакеты. FANN библиотеки (http://leenissen.dk/fann/), которые используются для серьезных приложений. Она наполнена открытым программным кодом на С, но может быть вызвана из, например, Perl и Python программ.

Дополнительная литература
1. Minsky, M.L. & Papert, S.A. Perceptrons (MIT Press,Cambridge, 1969). 2. Rumelhart, D.E., Hinton, G.E. & Williams, R.J. Nature 323, 533–536 (1986). 3. Sejnowski, T.J. & Rosenberg, C.R. Complex Systems 1, 145–168 (1987). 4. Qian, N. & Sejnowski, T.J. J. Mol. Biol. 202, 865–884 (1988). 5. Anderson, J.A. & Rosenfeld, E. (eds). Neurocomputing: Foundations of Research (MIT Press, Cambridge, 1988). 6. Bishop, C.M. Neural Networks for Pattern Recognition (Oxford University Press, Oxford, 1995). 7. Noble, W.S. Nat. Biotechnol. 24, 1565–1567 (2006). 8. Bishop, C.M. Pattern Recognition and Machine Learning (Springer, New York, 2006). 9. Hertz, J.A., Krogh, A. & Palmer, R. Introduction to the Theory of Neural Computation (Addison-Wesley, Redwood City, 1991). 10. Duda, R.O., Hart, P.E. & Stork, D.G. Pattern Classification (Wiley Interscience, New York, 2000).

Перевод статьи (Anders Krogh NATURE BIOTECHNOLOGY VOLUME 26 NUMBER 2 FEBRUARY 2008)

Теги:
  • Алгоритмы
  • искусственные нейронные сети

habr.com

Изучаем нейронные сети за четыре шага

Рассказывает Per Harald Borgen 

В этот раз я решил изучить нейронные сети. Базовые навыки в этом вопросе я смог получить за лето и осень 2015 года. Под базовыми навыками я имею в виду, что могу сам создать простую нейронную сеть с нуля. Примеры можете найти в моих репозиториях на GitHub. В этой статье я дам несколько разъяснений и поделюсь ресурсами, которые могут пригодиться вам для изучения.

Шаг 1. Нейроны и метод прямого распространения

Так что же такое «нейронная сеть»? Давайте подождём с этим и сперва разберёмся с одним нейроном.

Нейрон похож на функцию: он принимает на вход несколько значений и возвращает одно.

Круг ниже обозначает искусственный нейрон. Он получает 5 и возвращает 1. Ввод — это сумма трёх соединённых с нейроном синапсов (три стрелки слева).

В левой части картинки мы видим 2 входных значения (зелёного цвета) и смещение (выделено коричневым цветом).

Входные данные могут быть численными представлениями двух разных свойств. Например, при создании спам-фильтра они могли бы означать наличие более чем одного слова, написанного ЗАГЛАВНЫМИ БУКВАМИ, и наличие слова «виагра».

Входные значения умножаются на свои так называемые «веса», 7 и 3 (выделено синим).

Теперь мы складываем полученные значения со смещением и получаем число, в нашем случае 5 (выделено красным). Это — ввод нашего искусственного нейрона.

Потом нейрон производит какое-то вычисление и выдает выходное значение. Мы получили 1, т.к. округлённое значение сигмоиды в точке 5 равно 1 (более подробно об этой функции поговорим позже).

Если бы это был спам-фильтр, факт вывода 1 означал бы то, что текст был помечен нейроном как спам.

Иллюстрация нейронной сети с Википедии.

Если вы объедините эти нейроны, то получите прямо распространяющуюся нейронную сеть — процесс идёт от ввода к выводу, через нейроны, соединённые синапсами, как на картинке слева.

Я очень рекомендую посмотреть серию видео от Welch Labs для улучшения понимания процесса.

Шаг 2. Сигмоида

После того, как вы посмотрели уроки от Welch Labs, хорошей идеей было бы ознакомиться с четвертой неделей курса по машинному обучению от Coursera, посвящённой нейронным сетям — она поможет разобраться в принципах их работы. Курс сильно углубляется в математику и основан на Octave, а я предпочитаю Python. Из-за этого я пропустил упражнения и почерпнул все необходимые знания из видео.

Сигмоида просто-напросто отображает ваше значение (по горизонтальной оси) на отрезок от 0 до 1.

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

Но на одних видео далеко не уедешь. Для полного понимания я решил закодить её самостоятельно. Поэтому я начал писать реализацию алгоритма логистической регрессии (который использует сигмоиду).

Это заняло целый день, и вряд ли результат получился удовлетворительным. Но это неважно, ведь я разобрался, как всё работает. Код можно увидеть здесь.

Вам необязательно делать это самим, поскольку тут требуются специальные знания — главное, чтобы вы поняли, как устроена сигмоида.

Шаг 3. Метод обратного распространения ошибки

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

Вкратце: вы оцениваете, насколько сеть ошиблась, и изменяете вес входных значений (синие числа на первой картинке).

Процесс идёт от конца к началу, так как мы начинаем с конца сети (смотрим, насколько отклоняется от истины догадка сети) и двигаемся назад, изменяя по пути веса, пока не дойдём до ввода. Для вычисления всего этого вручную потребуются знания матанализа. Khan Academy предоставляет хорошие курсы по матанализу, но я изучал его в университете. Также можно не заморачиваться и воспользоваться библиотеками, которые посчитают весь матан за вас.

Скриншот из руководства Мэтта Мазура по методу обратного распространения ошибки.

Вот три источника, которые помогли мне разобраться в этом методе:

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

Шаг 4. Создание своей нейронной сети

При прочтении различных статей и руководств вы так или иначе будете писать маленькие нейронные сети. Рекомендую именно так и делать, поскольку это — очень эффективный метод обучения.

Ещё одной полезной статьёй оказалась A Neural Network in 11 lines of Python от IAmTrask. В ней содержится удивительное количество знаний, сжатых до 11 строк кода.

Скриншот руководства от IAmTrask

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

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

После этого можно ознакомиться с руководством Wild ML от Denny Britz, в котором разбираются нейронные сети посложнее.

Скриншот из руководства WildML

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

Для поиска хороших наборов данных можете посетить мой сайт Datasets.co и выбрать там подходящий.

Так или иначе, теперь вам лучше начать свои эксперименты, чем слушать мои советы. Лично я сейчас изучаю Python-библиотеки для программирования нейронных сетей, такие как Theano, Lasagne и nolearn.

Удачи!

Перевод статьи «Learning How To Code Neural Networks»

tproger.ru


Смотрите также