Алгоритмы глубокого обучения многослойных нейронных сетей. Методы глубинного обучения. Как работает глубокое обучение

Грядущая революция умных роботов предсказывалась каждые десять лет начиная с 1950-х годов. Тем не менее, она так и не произошла. Прогресс в области искусственного интеллекта происходил неуверенно, порою скучно, неся многим энтузиастам разочарование. Видимые успехи - компьютер Deep Blue, созданный в середине 1990-х IBM и обыгравший в 1997 году Гарри Каспарова в шахматы, или появление в конце 1990-х электронного переводчика - были скорее результатом «грубых» расчетов, чем переносом механизмов человеческого восприятия на процессы компьютерных вычислений.

Однако история разочарований и провалов теперь резко меняется. Всего десять лет назад алгоритмы компьютерного зрения и распознавания предметов могли идентифицировать шар или параллелепипед на простом фоне. Теперь они могут различать человеческие лица так же хорошо, как это могут делать люди, даже на сложном, естественном фоне. Полгода назад Google выпустил приложение для смартфонов, способное переводить текст с более чем 20-ти иностранных языков, считывая слова с фотографий, дорожных знаков или рукописного текста!

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

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

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

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

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

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

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

Один из самых простых способов, чтобы описать процесс работы машинного интеллекта – это визуализировать его. Команда разработчиков компании Graphcore создала коллекцию таких изображений, отображаемых на IPU. В основу легло программное обеспечение Poplar, которое визуализирует работу искусственного интеллекта. Исследователи из этой компании также выяснили, почему глубокие сети требуют так много памяти, и какие пути решения проблемы существуют.

Poplar включает в себя графический компилятор, который был создан с нуля для перевода стандартных операций, используемых в рамках машинного обучения в высокооптимизированный код приложений для IPU. Он позволяет собрать эти графы воедино по тому же принципу, как собираются POPNN. Библиотека содержит набор различных типов вершин для обобщенных примитивов.

Графы – это парадигма, на которой основывается все программное обеспечение. В Poplar графы позволяют определить процесс вычисления, где вершины выполняют операции, а ребра описывают связь между ними. Например, если вы хотите сложить вместе два числа, вы можете определить вершину с двумя входами (числа, которые вы хотели бы сложить), некоторые вычисления (функция сложения двух чисел) и выход (результат).

Обычно операции с вершинами гораздо сложнее, чем в описанном выше примере. Зачастую они определяются небольшими программами, называемыми коделетами (кодовыми именами). Графическая абстракция привлекательна, поскольку не делает предположений о структуре вычислений и разбивает вычисления на компоненты, которые процессор IPU может использовать для работы.

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

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


Граф полного цикла обучения AlexNet в прямом и обратном направлении

Графический компилятор Poplar превратил описание AlexNet в вычислительный граф из 18,7 миллиона вершин и 115,8 миллиона ребер. Четко видимая кластеризация – результат прочной связи между процессами в каждом слое сети с более легкой связью между уровнями.

Другой пример – простая сеть с полной связью, прошедшая обучение на MNIST – простом наборе данных для компьютерного зрения, своего рода «Hello, world» в машинном обучении. Простая сеть для изучения этого набора данных помогает понять графы, которыми управляют приложения Poplar. Интегрируя библиотеки графов с такими средами, как TensorFlow, компания представляет один из простых путей для использования IPU в приложениях машинного обучения.

После того, как с помощью компилятора построился граф, его нужно выполнить. Это возможно с помощью движка Graph Engine. На примере ResNet-50 демонстрируется его работа.


Граф ResNet-50

Архитектура ResNet-50 позволяет создавать глубокие сети из повторяющихся разделов. Процессору остается только единожды определить эти разделы и повторно вызывать их. Например, кластер уровня conv4 выполняется шесть раз, но только один раз наносится на граф. Изображение также демонстрирует разнообразие форм сверточных слоев, поскольку каждый из них имеет граф, построенный в соответствии с естественной формой вычисления.

Движок создает и управляет исполнением модели машинного обучения, используя граф, созданный компилятором. После развертывания Graph Engine контролирует и реагирует на IPU или устройства, используемые приложениями.

Изображение ResNet-50 демонстрирует всю модель. На этом уровне сложно выделить связи между отдельными вершинами, поэтому стоит посмотреть на увеличенные изображения. Ниже приведены несколько примеров секций внутри слоев нейросети.

Почему глубоким сетям нужно так много памяти?

Большие объемы занимаемой памяти – одна из самых больших проблем глубинных нейронных сетей. Исследователи пытаются бороться с ограниченной пропускной способностью DRAM-устройств, которые должны быть использованы современными системами для хранения огромного количества весов и активаций в глубинной нейронной сети.

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

Хотя мы еще не имеем полного представления о человеческом мозге и о том, как он работает, в целом понятно, что нет большого отдельного хранилища памяти. Считается, что функция долговременной и кратковременной памяти в человеческом мозге встроена в структуру нейронов+синапсов. Даже простые организмы вроде червей с нейронной структурой мозга, состоящей из чуть более 300 нейронов, в какой-то степени функцией памяти.

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

Поэтому полезно посмотреть на то, как память сегодня используется в центральных процессорах и системах глубокого обучения на графических ускорителях, и спросить себя: почему для них необходимы такие большие устройства хранения памяти, когда головной мозг человека отлично работает без них?

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

Например, 50-слойная сеть ResNet имеет около 26 миллионов весовых параметров и вычисляет 16 миллионов активаций в прямом направлении. Если вы используете 32-битное число с плавающей запятой для хранения каждого веса и активации, то для этого потребуется около 168Мб пространства. Используя более низкое значение точности для хранения этих весов и активаций, мы могли бы вдвое или даже вчетверо снизить это требование для хранения.

Серьезная проблема с памятью возникает из-за того, что графические процессоры полагаются на данные, представляемые в виде плотных векторов. Поэтому они могут использовать одиночный поток команд (SIMD) для достижения высокой плотности вычислений. Центральный процессор использует аналогичные векторные блоки для высокопроизводительных вычислений.

В графических процессорах ширина синапса составляет 1024 бит, так что они используют 32-битные данные с плавающей запятой, поэтому часто разбивают их на параллельно работающие mini-batch из 32 образцов для создания векторов данных по 1024 бит. Этот подход к организации векторного параллелизма увеличивает число активаций в 32 раза и потребность в локальном хранилище емкостью более 2 ГБ.

Графические процессоры и другие машины, предназначенные для матричной алгебры, также подвержены нагрузке на память со стороны весов или активаций нейронной сети. Графические процессоры не могут эффективно выполнять небольшие свертки, используемые в глубоких нейронных сетях. Поэтому преобразование, называемое «понижением», используется для преобразования этих сверток в матрично-матричные умножения (GEMM), с которыми графические ускорители могут эффективно справляться.

Дополнительная память также требуется для хранения входных данных, временных значений и инструкций программы. Измерение использования памяти при обучении ResNet-50 на высокопроизводительном графическом процессоре показало, что ей требуется более 7,5 ГБ локальной DRAM.

Возможно, кто-то решит, что более низкая точность вычислений может сократить необходимый объем памяти, но это не так. При переключении значений данных до половинной точности для весов и активаций вы заполните только половину векторной ширины SIMD, потратив половину имеющихся вычислительных ресурсов. Чтобы компенсировать это, когда вы переключаетесь с полной точности до половины точности на графическом процессоре, тогда придется удвоить размер mini-batch, чтобы вызвать достаточный параллелизм данных для использования всех доступных вычислений. Таким образом, переход на более низкую точность весов и активаций на графическом процессоре все еще требует более 7,5ГБ динамической памяти со свободным доступом.

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

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

Второй подход особенно эффективен, когда вся нейронная сеть может быть проанализированна на этапе компиляции, чтобы создать фиксированную выделенную память, так как издержки на управление памятью сокращаются почти до нуля. Выяснилось, что комбинация этих методов позволяет сократить использование памяти нейронной сетью в два-три раза.
Третий значительный подход был недавно обнаружен командой Baidu Deep Speech. Они применили различные методы экономии памяти, чтобы получить 16-кратное сокращение потребления памяти функциями активации, что позволило им обучать сети со 100 слоями. Ранее при том же объеме памяти они могли обучать сети с девятью слоями.

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

Нейронные сети и модели знаний в других методах машинного обучения можно рассматривать как математические графы. В этих графах сосредоточено огромное количество параллелизма. Параллельный процессор, предназначенный для использования параллелизма в графах, не полагается на mini-batch и может значительно уменьшить объем требуемого локального хранилища.

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

Что такое глубокое обучение (deep learning) ? March 3rd, 2016

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


Если совсем коротко, то этот новомодный термин (deep learning) о том, как собрать из каких-то простых абстракции более сложную и глубокую абстракцию (репрезентацию) притом, что даже самые простые абстракции должен собирать сам компьютер, а не человек . Т.е. речь уже не просто об обучении, а о метаобучении. Образно говоря, компьютер самостоятельно должен научиться как лучше ему учиться. И, по сути, термин «глубокое» именно это и подразумевает. Практически всегда этот термин применяемся к искусственным нейронным сетям, где используется больше одного скрытого слоя, поэтому формально «глубокий» значит ещё и более глубокую архитектуру нейронной сети.

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

Давайте посмотрим на примере задачи распознавания изображений: раньше как — запихивали в обычную нейронную сеть с одним слоем огромную (1024×768 — около 800 000 числовых значений) картинку и смотрели как компьютер медленно умирает, задыхаясь от нехватки памяти и неспособности понять, какие пиксели важны для распознавания, а какие нет. Не говоря уже об эффективности такого способа. Вот архитектура такой обычной (неглубой) нейронной сети.

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

В 2006 году сразу несколько независимых исследователей решили эту проблему (к тому же аппаратные мощности развились уже достаточно, появились достаточно мощные видеокарты). Эти исследователи: Джеффри Хинтон (и его коллега Руслан Салахутидинов) с техникой предварительного обучения каждого слоя нейросети ограниченной машиной Больцмана (простите меня за эти термины...), Ян Лекун с сверточными нейронными сетями и Йошуая Бенджио с каскадными автокодировщиками. Первые два сразу же были рекрутированы Google и Facebook, соответственно. Вот две лекции: одна — Хинтона , другая — Лякуна , в которых они и рассказывают, что такое глубокое обучение. Лучше их об этом не расскажет никто. Ещё одна классная лекция Шмидхубера про развитие глубокого обучения, тоже одного из столпов этой науки. А у Хинтона ещё есть прекрасный курс на курсере по нейронкам.

На что способны глубокие нейронные сети сейчас? Они способны распознавать и описывать объекты, можно сказать «понимают» что это. Речь идет о распознавании смыслов.

Просто посмотрите это видео распознавания того, что видит камера, в реальном времени.

Как я уже сказал, технологии глубокого обучения — это целая группа технологий и решений. Несколько из них я уже перечислил абзацем выше, другой пример — это рекуррентные сети, которые как раз используются в видео выше для описания того, что видит сеть. Но самый популярный представитель технологий данного класса — это все-таки сверточные нейронные сети ЛяКуна. Они построены по аналогии с принципами работы зрительной коры мозга кошки, в которой были открыты так называемые простые клетки, реагирующие на прямые линии под разными углами, и сложные — реакция которых связана с активацией определенного набора простых клеток. Хотя, честно говоря, сам ЛяКун не ориентировался на биологию, он решал конкретную задачу (смотрите его лекции), а потом так совпало.

Если совсем просто, то сверточные сети — это такие сети, где основным структурным элементом обучения является группа (сочетание) нейронов (обычно квадрат 3×3,10×10 и т.д.), а не один. И на каждом уровне сети обучаются десятки таких групп. Сеть находит такие сочетания нейронов, которые максимизируют информацию об изображении. На первом уровне сеть извлекает самые базовые, структурно простые элементы картинки — можно сказать, строительные единицы: границы, штрихи, отрезки, контрасты. Повыше — уже устойчивые комбинации элементов первого уровня, и так далее вверх по цепочке. Хочу ещё раз отдельно подчеркнуть главную особенность глубокого обучения: сети сами формируют эти элементы и решают, какие из них более важный, а какие — нет. Это важно, так как в области машинного обучения, создание признаков — является ключевым и сейчас мы переходим на этап, когда компьютер сам учится создавать и отбирать признаки. Машина сама выделяет иерархию информативных признаков.

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


На втором уровне — это уже будет элемент из элементов первого уровня. На третьем — из второго. Надо понимать, что данная картинка — просто демонстрация. Сейчас в промышленной применение, такие сети имеют от 10 до 30 слоев (уровней).

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

Подробнее про сверточные сети —

Из статьи вы узнаете, что такое глубинное обучение. Также статья содержит множество ресурсов, которые вы сможете использовать для освоения этой области.

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

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

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

Очевидно, глубинное обучение еще далеко от совершенства, но оно уже близко к тому, чтобы приносить коммерческую пользу. Например, эти самоуправляемые машины. Известные компании вроде Google, Tesla и Uber уже пробуют внедрить автономные автомобили на улицы города.

Ford предсказывает значительное увеличение доли беспилотных транспортных средств уже к 2021 году. Правительство США также успело разработать для них свод правил безопасности.

Что такое глубинное обучение?

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

Внешний круг – это искусственный интеллект в целом (например, компьютеры). Чуть дальше – машинное обучение, а совсем в центре – глубинное обучение и искусственные нейросети.

Грубо говоря, глубинное обучение – просто более удобное название для искусственных нейросетей. «Глубинное» в этом словосочетании обозначает степень сложности (глубины) нейросети, которая зачастую может быть весьма поверхностной.

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

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

Узлы посередине называются скрытыми, поскольку не имеют соединений с внешним миром, как узлы вывода и ввода. Они вызываются только в случае активации предыдущих слоев.

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

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

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

Методы глубинного обучения

Методы глубинного обучения делятся на два основных типа:

  • Обучение с учителем
  • Обучение без учителя

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

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

Второй же способ не подразумевает заранее заготовленных ответов и алгоритмов работы. Он направлен на выявление в данных скрытых шаблонов. Обычно его используют для кластеризации и ассоциативных задач, например для группировки клиентов по поведению. «С этим также выбирают» на Amazon – вариант ассоциативной задачи.

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

Важность глубинного обучения

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

В частности, в распознавании лиц на фотографиях с помощью глубинного обучения преуспел Facebook. Это не простое улучшение технологии, а поворотный момент, изменяющий все более ранние представления: «Человек может с вероятностью в 97.53% определить, один ли человек представлен на двух разных фотографиях. Программа, разработанная командой Facebook, может делать это с вероятностью в 97.25% вне зависимости от освещения или того, смотрит ли человек прямо в камеру или повернут к ней боком».

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

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

Google использует глубинное обучение для управления энергией в дата-центрах компании. Они смогли сократить затраты ресурсов для охлаждения на 40%. Это около 15% повышения эффективности энергопотребления и миллионы долларов экономии.

Микросервисы глубинного изучения

Вот краткий обзор сервисов, связанных с глубинным обучением.

Illustration Tagger. Дополненный Illustration2Vec, этот сервис позволяет отмечать изображения с рейтингом «защищенный», «сомнительный», «опасный», «копирайт» или «общий» для того, чтобы заранее понять содержание картинки.

  • Дополнение для Theano от Google
  • Редактируется на Python и Numpy
  • Зачастую применяется для решения определенного спектра проблем
  • Не общего назначения. Основной упор на машинное зрение
  • Редактируется на C++
  • Есть интерфейс на Python

Онлайн-курсы по глубинному обучению

Google и Udacity объединились для создания бесплатного курса по глубинному обучению , части Курса Машинного Обучения Udacity. Эту программу ведут опытные разработчики, желающие развить такую область, как машинное обучение и, в частности, глубинное обучение.

Другой популярный вариант – курс машинного обучения от Andrew Ng при поддержке Coursera и Стенфорда.

  1. Машинное обучение – Стенфорд от Andrew Ng на Coursera (2010-2014)
  2. Машинное обучение – Caltech от Yaser Abu-Mostafa (2012-2014)
  3. Машинное обучение – Carnegie Mellon от Tom Mitchell (Весна 2011)
  4. Нейросети для машинного обучения – Geoffrey Hinton на Coursera (2012)
  5. Класс по нейросетям – Hugo Larochelle из Université de Sherbrooke (2013

Книги по глубинному обучению

В то время как ресурсы из предыдущей секции опираются на довольно обширную базу знаний, книга «Grokking Deep Learning», наоборот, рассчитана на новичков. Как говорят авторы: «Если вы закончили 11 классов и примерно понимаете, как писать на Python, мы научим вас глубинному обучению».

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

  1. «Глубинное обучение» от Yoshua Bengio, Ian Goodfellow и Aaron Courville (2015)
  2. «Нейросети и глубинное обучение» от Michael Nielsen (2014)
  3. «Глубинное обучение» от Microsoft Research (2013)
  4. «Туториалы по глубинному обучению» от лаборатории LISA, Университета Монреаля (2015)
  5. «neuraltalk» от Andrej Karpathy
  6. «Введение в генетические алгоритмы»
  7. «Современный подход к искусственному интеллекту»
  8. «Обзор на глубинное обучение и нейросети»

Видеоролики и лекции

Deep Learning Simplified – чудесный YouTube-канал. Вот их первое видео:

С появления термина «глубокое обучение» прошло уже больше 20 лет, но широко заговорили о нем только недавно. Кратко объясняем, почему так получилось, что такое deep learning, чем оно отличается от машинного обучения и почему вам надо об этом знать.

  • Что это такое?

    Глубокое обучение - это ветвь развития машинного обучения, где используется модель, вдохновленная устройством мозга - взаимодействием нейронов.

    Сам термин появился еще в 1980-х, но до 2012 года для реализации этой технологии не хватало мощностей и на нее почти никто не обращал внимание. После серии статей известных ученых, публикаций в научных изданиях технология быстро стала популярной и получила внимание крупных медиа, - первым из мировых СМИ об этом написал The New York Times. Одним из поводов для материала стала научная работа специалистов из университетов Торонто Алекса Крижевского, Ильи Сатскевера и Джеффа Хинтона. Они описали и проанализировали результаты конкурса распознавания изображений ImageNet, где с большим отрывом победила их нейросеть, обученная с помощью deep learning, - система определила 85% объектов. С тех пор в конкурсе побеждала только глубокая нейросеть

  • Погодите, а что такое машинное обучение?

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

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

  • А глубокое обучение как работает?

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

    Глубокое обучение же используется в случае работы с многослойными искусственными нейронными сетями и сможет справиться с этой задачей.

    «Есть три термина, которые в последнее время часто используют почти взаимозаменяемо: искусственный интеллект, машинное обучение и глубокое обучение. Однако на самом деле это „вложенные“ термины: искусственный интеллект - это всё что угодно, что может помочь компьютеру выполнять человеческие задачи; машинное обучение - это раздел ИИ, в котором программы не просто решают задачи, а обучаются на основе имеющегося у них опыта, а глубокое обучение - это раздел машинного обучения, изучающий глубокие нейронные сети.

    Проще говоря: 1. если вы написали программу, играющую в шахматы, - это искусственный интеллект; 2. если она при этом обучается на базе партий гроссмейстеров или играя против самой себя - это машинное обучение; 3. а если обучается у неё при этом не что-нибудь, а глубокая нейронная сеть, - это глубокое обучение» .

  • Как работает глубокое обучение?

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

  • И что с помощью него уже разработали?

    Больше всего проектов с глубоким обучением применяется в распознавании фотографии или аудио, диагностике заболеваний. Например, оно уже используется в переводах Google с изображения: технология Deep Learning позволяет определить, есть ли на картинке буквы, а затем переводит их. Другой проект, который работает с фото, - система распознавания лиц под названием DeepFace. Она умеет распознавать человеческие лица с точностью 97,25% - примерно с той же точностью, что и человек.

    В 2016 году Google выпустил WaveNet - систему, которая может имитировать человеческую речь. Для этого компания загрузила в систему миллионы минут записанных голосовых запросов, которые использовались в проекте OK Google, и после изучения, нейросеть смогла сама составить предложения с правильными ударениями, акцентом и без нелогичных пауз.

    При этом глубокое обучение может семантически сегментировать изображение или видео - то есть не просто обозначать, что на картинке есть объект, но и идеально выделить его контуры. Эта технология используется в беспилотных автомобилях, которые определяют, есть ли помехи на дороге, разметку и считывают информацию с дорожных знаков, чтобы избежать аварий. Нейросеть также используют в медицине - чтобы определять диабетическую ретинопатию по фотографиям глаз пациентов например. Министерство здравоохранения США уже разрешило использовать эту технологию в государственных клиниках.

  • А почему глубинное обучение не начали внедрять раньше?

    Раньше это было затратно, сложно и долго - нужны были мощные графические процессоры, видеокарты и объемы памяти. Бум глубинного обучения как раз связан с широким распространением графических процессоров, которые ускоряют и удешевляют вычисления, практически неограниченные возможности хранения данных и развитие технологии «больших данных».

  • Это прорывная технология, она все поменяет?

    Об этом сложно сказать точно, мнения разнятся. С одной стороны, Google, Facebook и другие крупные компании уже вложили миллиарды долларов и настроены оптимистично. По их мнению, нейросети с глубинным обучением способны поменять технологическое устройство мира. Один из главных специалистов по машинному обучению - Эндрю Ынг - говорит: «Если человек может выполнить задачу в уме за секунду, скорее всего, в ближайшее время эта задача будет автоматизирована». Ынг называет машинное обучение «новым электричеством» - это техническая революция, и компании, которые ее проигнорируют, очень быстро обнаружат себя безнадежно отставшими от конкурентов.

    С другой стороны, есть и скептики: они считают, что глубокое обучение - это модное слово или ребрендинг нейронных сетей. К примеру, старший преподаватель факультета компьютерных наук ВШЭ Сергей Бартунов считает, что этот алгоритм - лишь один из вариантов (и при этом не лучший) обучения нейросети, который быстро подхватили массовые издания и о которых теперь знают все.

    Сергей Николенко, соавтор книги «Глубокое обучение»: «История искусственного интеллекта уже знала две „зимы“, когда за волной хайпа и завышенных ожиданий следовало разочарование. Оба раза, кстати, это было связано с нейронными сетями. Сначала в конце 1950-х решили, что перцептрон Розенблатта тут же приведёт к машинному переводу и осознающим себя компьютерам; но, конечно, не получилось из-за ограниченности железа, данных и отсутствия подходящих моделей.

    А в конце 1980-х ту же ошибку совершили, когда разобрались, как обучать любые архитектуры нейронных сетей. Показалось, что вот он, золотой ключик, открывающий любые двери. Это уже был не такой уж наивный вывод: действительно, если взять нейронную сеть из конца 1980-х, механически сделать её больше (увеличить число нейронов) и обучить на современных наборах данных и современном „железе“, она будет очень даже неплохо работать! Но ни данных, ни „железа“ в то время не хватало, и революцию глубокого обучения пришлось отложить до конца нулевых годов.

    Сейчас мы живём на третьей волне хайпа искусственного интеллекта. Закончится ли она третьей „зимой“ или созданием сильного ИИ - покажет только время».