Нейронные сети с глубинным обучением

Глубокое обучение: быстрый старт для разработчиков

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

20 октября 201711 минут15364

Здравствуйте!

Глубокое обучение считается чем-то вроде rocket science: звучит круто, выглядит сложно и содержит всякую математику. На самом деле все не так сложно. Вот вам перевод руководства по глубокому обучению «Deep Learning for Developers: Tools You Can Use to Code Neural Networks on Day 1» от Эмиля Волнера.

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

Arif Wahid, Unsplash

Обратите внимание

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

Вам не нужна особая подготовка. Достаточно базового понимания Python, командной строки и Jupyter notebook.

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

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

Так нейронная сеть в итоге классифицирует собак и кошек.

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

Основная логика

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

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

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

Важно

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

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

Мелкая искусственная нейронная сеть

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

Поиграйтесь с симулятором нейронной сети пару часов, чтобы примерно почувствовать, как это работает. Мы начнем с создания простой нейронной сети, чтобы познакомиться с синтаксисом TFlearn. Классическая проблема для начала — оператор OR. Хотя нейронные сети лучше подходят для других типов данных, для начала сойдет и такой вариант, чтобы понять, как это вообще работает.

Все программы глубокого обучения следуют одной логике:

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

Вот код нашей сети.

# 1. Import library of functions import tflearn # 2. Logical OR operator / the data OR = [[0., 0.], [0., 1.], [1., 0.], [1., 1.]] Y_truth = [[0.], [1.], [1.], [1.]] # 3. Building our neural network/layers of functions neural_net = tflearn.input_data(shape=[None, 2]) neural_net = tflearn.fully_connected(neural_net, 1, activation='sigmoid') neural_net = tflearn.regression(neural_net, optimizer='sgd', learning_rate=2, loss='mean_square') # 4. Train the neural network / Epochs model = tflearn.DNN(neural_net) model.fit(OR, Y_truth, n_epoch=2000, snapshot_epoch=False) # 5. Testing final prediction print(«Testing OR operator») print(«0 or 0:», model.predict([[0., 0.]])) print(«0 or 1:», model.predict([[0., 1.]])) print(«1 or 0:», model.predict([[1., 0.]])) print(«1 or 1:», model.predict([[1., 1.]]))

Вывод программы:

Training Step: 2000  | total loss: 0.00072 | time: 0.002s | SGD | epoch: 2000 | loss: 0.00072 — iter: 4/4 Testing OR operator 0 or 0: [[ 0.04013482]] 0 or 1: [[ 0.97487926]] 1 or 0: [[ 0.97542077]] 1 or 1: [[ 0.99997282]]

Строка 1

Источник: https://geekbrains.ru/posts/deep_learning_guide

Deep learning. Stacked Autoencoders. Методы обучения нейронных сетей с большим количеством скрытых слоёв

Е.С.Борисов

понедельник, 21 марта 2016 г.

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

1. Введение

Математические модели биологического нейрона появились ещё в середине прошлого века [1]. Потом были первые модели нейронных сетей с одним обрабатывающим слоем, возможности которых были ограничены проблемой линейной неразделимости.

Позже появился метод обратного распространения [2] — способ позволяющий эффективно обучать нейронные сети с одним или двумя скрытыми слоями.

Многослойный перцептрон с тремя обрабатывающими слоями имеет возможность строить в пространстве признаков поверхности практически любой формы.

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

До недавнего времени не удавалось эффективно обучать нейронные сети с числом скрытых слоёв более двух.

Одной из причин является проблема «исчезающего» градиента (vanishing gradient) [3] — при вычислении градиента (направления наибольшего роста ошибки сети в пространстве весовых коэффициентов) методом обратного распространения происходит его уменьшение по мере прохождения от выходного слоя сети к входному.

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

В результате этих усилий в середине 2000-х годов появилась концепция deep learning [4](глубокое или глубинное обучение).

Deep learning [5] рассматривает многоуровневые (представленные несколькими слоями) модели интеллектуальных систем, такие как искусственные нейронные сети.

Совет

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

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

2. Модель autoencoder

Обычный autoencoder [6] это трёхслойная нейронная сеть прямого распространения, в которой вторая половина сети зеркально повторяет первую (Рис.1). Как следует из названия, autoencoder отображает входной образ в себя, т.е. эта сеть обучается таким образом, что бы воспроизводить учебное множество.
Рис.

1: Autoencoder

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

Аutoencoder также используют как систему шумоподавления (denoising autoencoder). Для этого при обучении на входной образ накладывают шум и требуют от сети восстановить исходный образ, в этом случае размер скрытого слоя задают большим чем размер входного (и соответственно выходного) слоя.

Рис.2: Autoencoder с шумоподавлением

Обучать autoencoder можно как обычный перцептрон с одним скрытым слоем используя градиентные методы[2] .

Далее мы вернёмся к задаче обучения искусственной нейронной сети с большим количеством слоёв и решению проблемы «исчезающего» градиента.

3. Предобучение многослойной нейронной сети с помощью autoencoder

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

чем дальше слой от выхода тем меньше получаются значения изменения его весов.

Эту проблему можно решить «правильно» выбрав начальные значения весов.

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

Таким образом процедура обучения сети разделилась на следующие две фазы.

  1. предобучение сети (pretraining)
  2. тонкая подстройка весов (fine-tuning)

Со второй фазой всё более-менее ясно, это всё те же градиентные методы и обратное распространение[2] .

Первая фаза (pretraining) это последовательное попарное обучение соседних слоёв сети как autoencoder. Этот метод известен как stacked autoencoders [11]. Рассмотрим процедуру предобучения подробней.

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

  1. загрузка учебного набора данных X0
  2. определить параметры сети — количество (N) и размеры слоёв
    установить номер текущего слоя i=0
  3. построить автоенкодер для слоёв i, i+1
  4. обучить автоенкодер на наборе Xi
  5. убрать вспомогательный (выходной) слой автоенкодера
  6. сохранить веса Wi связей слоёв i,i+1
  7. если есть ещё пары слоёв для обработки (i

Источник: http://mechanoid.kiev.ua/neural-net-mlp-deep.html

Основой будущей технологической революции станут нейронные сети

Сети. Ещё лет пятьдесят назад это слово ассоциировалось преимущественно с ловлей рыбы.

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

Но наступает время новых сетей — нейронных. Эксперты пророчат, что именно нейронные сети станут основой будущей технологической революции.

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

В этом приветствии обычному человеку непонятно ничего, кроме «добро пожаловать». Поясняем. Слово «хакатон» родилось в начале 2000-х от союза «хакера» и «марафона».

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

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

Михаил Бурцев — специалист в области искусственного интеллекта, заведующий лабораторией нейронных сетей и систем глубокого обучения МФТИ. Организатор международных хакатонов по глубокому машинному обучению DeepHack.Game и Deep-Hack.Q&A. Кандидат физико-математических наук, директор по науке компании DeepHackLab

Хакатоны в России проводятся всё чаще — с их помощью удаётся двигать вперёд самые последние технологии. Например, всё то же глубокое обучение.

Читайте также:  Глубокое обучение способно предсказать неполадки с машиной, прежде чем вы их заметите

Объяснить это словосочетание гораздо сложнее. Понятие относится к области нейронных сетей. Умные люди говорят, что за ним будущее — эра машинного разума и прочие фантастические штуки… Чтобы во всём этом разобраться, мы обратились к Михаилу Бурцеву, возглавляющему лабораторию МФТИ, в которой создают, обучают и исследуют нейронные сети.

Слоёный пирог, который сам себя готовит

[КОТ ШРЁДИНГЕРА] В последнее время мы часто слышим слово «нейросети». Объясните, пожалуйста, что это такое.

[МИХАИЛ БУРЦЕВ] С удовольствием! Нейронные сети — это такой класс алгоритмов, который пытается использовать наши знания об устройстве мозга, чтобы совершать эффективные вычисления. Мы знаем из биологии, что наша способность обучаться основана на уникальных свойствах мозга, состоящего из 80 миллиардов нейронов.

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

В процессе распространения по сети информация меняется — этот процесс мы называем обучением.

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

[КШ] Что такое глубинное обучение?

[МБ] Как вы сказали: «глубокое» или «глубинное»? Перевод термина Deep Learning ещё не устоялся. Архитектура нейросети может состоять из многих слоёв — обработка информации делится на множество этапов. Отсюда и «глубина».

Обратите внимание

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

В общем, мы не позволим говорить «глубинное обучение»! Мы будем с этим бороться!

[КШ] И чем же глубокие нейронные сети лучше неглубоких?

[МБ] «Глубокие»? Правильно, вы быстро учитесь! Глубокие сети позволяют строить многоэтапные алгоритмы обработки информации — это как слоёный пирог, который сам себя готовит.

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

Не надо больше вручную задавать признаки, по которым машина будет распознавать объекты. Теперь сеть сама выбирает направление обучения.

Нейросеть слышит и видит

[КШ] Чего удалось достичь благодаря глубине обучения?

[МБ] Начали решать задачи, прежде казавшиеся фантастикой. Вы, наверное, слышали про How-old.net? Это такое приложение Microsoft, определяющее по фото возраст и пол человека. Кстати, те же ребята выпустили программу, способную распознавать эмоции.

[КШ] Говорят, эти сервисы пока работают весьма неточно. Но понятно, что у них всё впереди.

[МБ] Может показаться, что глубокие нейросети — это отдалённое будущее. Но очень возможно, что вы пользуетесь подобными приложениями на своём смартфоне уже год или два, не подозревая об этом.

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

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

Источник: https://rg.ru/2016/07/26/neuro.html

Нейронные сети и глубокое обучение: будущее рядом

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

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

Что такое нейронная сеть?

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

Математически, искусственный нейрон осуществляет преобразование вектора входных сигналов (воздействий) X в вектор выходных сигналов Y при помощи функции, называемой функцией активации.

В рамках соединения (искусственной нейронной сети — ИНС) функционируют три вида нейронов: входные (принимающие информацию из внешнего мира – значения интересующих нас переменных), выходные (возвращающие искомые переменные – к примеру, прогнозы, или управляющие сигналы), а также промежуточные – нейроны, выполняющие некие внутренние («скрытые») функции.

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

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

Обучение нейронной сети

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

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

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

В общем случае, обучение ИНС заключается в следующем:

  1. входные нейроны принимают переменные («стимулы») из внешней среды;
  2. в соответствии с полученной информацией изменяются свободные параметры НС (работают промежуточные слои нейронов);
  3. в результате изменений в структуре НС сеть «реагирует» на информацию уже иным образом.

Таков общий алгоритм обучения нейронной сети (вспомним собаку Павлова – да-да, внутренний механизм образования условного рефлекса именно таков – и тут же забудем: все же наш контекст предполагает оперирование техническими понятиями и примерами).

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

Важно

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

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

Глубокое обучение

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

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

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

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

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

Это и есть главное преимущество «глубокого» подхода: машинное обучение с учителем, особенно в случае глубоких структур, требует колоссальных временных – и трудовых – затрат.

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

Совет

Идея, как водится, прекрасная, но на пути подхода встают вполне естественные проблемы – прежде всего, коренящиеся в его претензии на универсальность.

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

Очевидно, что в ближайшие n лет вряд ли удастся создать «искусственного Леонардо Да Винчи» или даже – хотя бы! — «искусственного homo sapiens».

Тем не менее, перед исследователями искусственного интеллекта уже встает вопрос этики: опасения, высказываемые в каждом уважающем себя научно-фантастическом фильме, начиная с «Терминатора» и заканчивая «Трансформерами», уже не кажутся смешными (современные изощренные нейросети уже вполне могут считаться правдоподобной моделью работы мозга насекомого!), но пока явно излишни.

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

Концепция глубокого обучения – один из шагов на пути к этой мечте.

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

Источник: http://datareview.info/article/neyronnyie-seti-i-glubokoe-obuchenie-budushhee-ryadom/

Введение в курс «Глубокие нейронные сети на Python»

Глубокие нейронные сети (deep neural networks) в настоящее время становятся одним из самых популярных методов машинного обучения.

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

Преимущества глубоких нейронных сетей

Работа традиционных алгоритмов машинного обучения существенно зависит от того, какие данные из общего объема доступных данных будут выбраны для решения задачи. Такие данные называются признаки (features).

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

В противном случае задача остается нерешенной.

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

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

Обратите внимание

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

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

Использование глубоких нейронных сетей

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

  • Оформление фото или видео в стиле изображений известных художников (мобильные приложения Prisma и Artisto).
  • Робототехника и электронные помощники (Робот-консьерж в отеле Хилтон)
  • Анализ медицинских изображений
Читайте также:  Очки дополнительной реальности стали революционным открытием!

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

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

  1. В последнее время накоплено много данных большого объема (Big Data). Так как глубокая нейронная сеть устроена сложно и содержит большое количество параметров, для ее обучения требуется много данных. Имеющихся раньше данных было недостаточно для обучения сетей, способных решать практически полезные задачи.
  2. Производительность компьютеров резко возросла. Появились многоядерные процессоры и графические ускорители (GPU), которые по производительности превосходят суперкомпьютеры, доступные ученым в 80-е и 90-е годы прошлого века. Такие вычислительные мощности нужны для того, чтобы обучать глубокие нейросети на большом объеме данных.
  3. Методы глубокого обучения нейронных сетей были усовершенствованы. В последнее время было предложено много небольших улучшений, таких как методы нормализованной инициализации весов, слои пакетной нормализации и многое другое. Это позволило успешно применять глубокие нейронные сети для решения большого количества практических задач, что раньше не удавалось сделать из-за проблемы исчезающего градиента.
  4. Появилось большое количество готовых к использования программ глубокого обучения нейронных сетей. Уже не требуется реализовывать глубокое обучение самостоятельно, можно взять готовую библиотеку и сразу использовать ее для решения практических задач.

Особенности курса

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

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

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

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

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

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

Структура курса

Курс включает три вида занятий:

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

Курс состоит из трех основных частей:

  1. Общая часть, посвященная устройству глубоких нейронных сетей, разным архитектурам сетей (полносвязные, сверточные, рекуррентные), существующим программным системам для глубокого обучения и основам их применения для решения практических задач. Рассматриваются подходы к оценке качества обучения и его увеличению.
  2. Компьютерное зрение. В этой части подробно рассматривается применение глубоких нейронных сетей для решения задач компьютерного зрения: классификация и сегментация изображений, использование сетей, предварительно обученных на наборе данных ImageNet, подготовка своего набора данных из изображений и т.п.
  3. Обработка естественного языка с помощью глубоких нейронных сетей. Рассматриваются различные варианты представления данных на естественном языке в виде, пригодном для использования нейронной сетью (векторное представление слов и т.п.). Решаются задачи определения тональности текста, темы текста, а также автоматической генерации текста.

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

Все примеры программ курса доступны в репозитории GitHub.

Желаю успехов в изучении и практическом применении глубоких нейронных сетей!

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

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

Источник: https://www.asozykin.ru/courses/nnpython-intro

Глубинное обучение для автоматической обработки текстов

03.05.2017 Дмитрий Ильвовский, Екатерина Черняк

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

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

Повышенное внимание лингвистов к нейронным сетям обусловлено несколькими причинами.

Важно

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

Первые работы по глубинному обучению (deep learning) относятся к середине XX века. В начале 1940-х годов Уоррен Маккаллок и Уолтер Питтс предложили формальную модель человеческого мозга — искусственную нейронную сеть, а чуть позже Фрэнк Розенблатт обобщил их работы и создал модель нейронной сети на компьютере.

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

Однако оказалось, что, несмотря на красоту и изящество идеи имитации мозга, обучение «традиционных» нейронных сетей занимает много времени, а результаты классификации на небольших наборах данных сопоставимы с результатами, полученными более простыми методами, например машинами опорных векторов (Support Vector Machine, SVM).

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

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

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

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

Совет

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

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

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

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

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

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

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

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

Рис. 1. Архитектуры нейронных сетей, используемые в автоматической обработке текстов

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

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

Обратите внимание

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

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

В 2013 году Томаш Миколов опубликовал работу [1], в которой предлагал использовать нейронные сети для обучения векторам слов, но для меньшей размерности: по кортежам (слово, контексты) обучалась нейронная сеть простейшей архитектуры, на выходе каждому слову в соответствие ставился вектор из 300 элементов.

Оказалось, что такие вектора лучше передают семантическую близость слов. Например, на них можно определить арифметические операции сложения и вычитания смыслов и получить следующие уравнения: «Париж – Франция + Россия = Москва»; «король – мужчина + женщина = королева».

Или найти лишнее слово в ряду «яблоко, груша, вишня, котенок». В работе [1] были представлены две архитектуры, skip-gram и CBOW (Continuous Bag of Words), под общим названием word2vec. Как позже было показано в [2], word2vec — это не что иное, как факторизация матрицы «слово-контекст» с весами PPMI.

Сейчас принято относить word2vec к дистрибутивной семантике, а не к глубинному обучению [3], однако исходным толчком для создания этой модели послужило применение нейронной сети.

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

Читайте также:  Искусственный интеллект вычислит хакеров по исходному коду программ

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

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

Важно

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

Один из подходов заимствован из области анализа изображений и заключается в использовании сверточных нейронных сетей (convolutional neural network, CNN) (рис. 2).

Рис. 2. Сверточная нейронная сеть для классификации предложения по тональности (на два класса: позитивный и негативный)

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

Слой свертки, в свою очередь, состоит из фильтров и слоя «субдискретизации». Фильтр — это нейрон, вход которого формируется при помощи окон, передвигающихся по тексту и выбирающих последовательно некоторое количество слов (например, окно длины «три» выберет первые три слова, слова со второго по четвертое, с третьего по пятое и т. д.).

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

Для их обучения используется стандартный алгоритм обратного распространения ошибки, а за счет того, что веса фильтров равномерно распределены (вес i-го слова из окна одинаков для любого фильтра), число параметров у сверточной нейронной сети невелико.

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

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

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

Реализовать это требование на практике помогают рекуррентные нейронные сети, расширяющие идею языковых моделей (language model), предложенных в конце прошлого века. Классическая языковая модель предсказывает вероятность того, что слово i встретится после слова i-1.

Совет

Языковые модели можно использовать и для предсказания следующего слова: какое слово с наибольшей вероятностью встретится после данного?

Рис. 3. Рекуррентная нейронная языковая модель

Для обучения языковых моделей нужны большие корпусы — чем больше обучающий корпус, тем больше пар слов модель «знает». Использование нейронных сетей для разработки языковых моделей позволяет сократить объем хранимых данных. Представим себе простую архитектуру сети, в которой на вход поступают слова i-2 и i-1, а на выходе нейронная сеть предсказывает слово i.

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

Эту проблему решают рекуррентные нейронные сети (рис. 3), в которых внутреннее состояние скрытого слоя не только обновляется после того, как на вход приходит новое слово, но и передается на следующий шаг. Таким образом, скрытый слой рекуррентной сети принимает входы двух типов: состояние скрытого слоя на предыдущем шаге и новое слово.

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

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

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

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

Развитием рекуррентных нейронных сетей стали архитектуры вида Seq2seq, состоящие из двух соединенных рекуррентных сетей, одна из которых отвечает за представление и анализ входа (например, вопроса или предложения на одном языке), а вторая — за генерацию выхода (ответа или предложения на другом языке). Сети Seq2seq лежат в основе современных систем «вопрос-ответ», чат-ботов и систем машинного перевода.

Обратите внимание

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

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

В отличие от задачи классификации, в задаче снижения размерности нет четких критериев качества, однако изображения, получаемые при использовании автокодировщиков, выглядят достаточно «убедительно». С математической точки зрения автокодировщик — это нейронная сеть без учителя, которая обучается линейной функции f(x) = x и состоит из двух частей: кодировщика и декодировщика.

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

Как и сверточные нейронные сети, автокодировщик не имеет никакой лингвистической интерпретации, поэтому может считаться скорее инженерным, чем аналитическим инструментом.

***

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

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

Важно

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

В 2015 году Крис Маннинг, глава группы компьютерной лингвистики в Стэнфорде и президент ACL, четко очертил круг применимости нейронных сетей [4]. В него он включил задачи классификации текстов, классификации последовательностей и снижения размерности. Однако благодаря маркетингу и популяризации глубинного обучения возросло внимание собственно к компьютерной лингвистике и ее новым приложениям.

Литература

Дмитрий Ильвовский (dilvovsky@hse.ru) — сотрудник Международной лаборатории интеллектуальных систем и структурного анализа, Екатерина Черняк (echernyak@hse.ru) — преподаватель центра непрерывного образования, факультет компьютерных наук, НИУ ВШЭ (Москва). Работа выполнена в рамках Программы фундаментальных исследований НИУ ВШЭ.

Источник: https://www.osp.ru/os/2017/02/13052221/

Решения для машинного обучения Deep Learning, нейронных сетей

                                                   ГЛУБОКОЕ ОБУЧЕНИЕ (DEEP LEARNING
    Специалисты по обработке и анализу данных как в промышленности, так и в научных кругах используют GPU в сфере машинного обучения, чтобы добиться  значительных усовершенствований в широком спектре приложений, включая приложения для классификации изображений, анализа видеоданных,  распознавания речи и обработки текстов на естественном языке. Глубокое обучение, то есть использование сложных, многоуровневых нейронных сетей для  создания систем, которые могут выявлять признаки из большого объема немаркированных данных, — именно та область, в которой ведутся активные  исследования и инвестиционная деятельность.   Хотя машинное обучение существует уже десятки лет, две относительно новые тенденции привели к его широкомасштабному использованию: доступность большого объема данных, а также производительность и эффективность параллельной обработки данных, которая возможна благодаря вычислениям на GPU. GPU используются для обучения этих глубоких нейронных сетей с помощью намного более крупных обучающих последовательностей в более сжатые сроки, с использованием меньшей инфраструктуры ЦОД. GPU также используются, чтобы воспроизводить эти учебные модели машинного обучения для выполнения задач классификации и прогнозирования на облаке. При этом графические процессоры позволяют работать с данными большего объема и с более высокой производительностью, потребляя меньше энергии и на базе меньшей инфраструктуры. 

                                                    Решения NVIDIA для глубокого обучения

Как идентифицировать потенциальные DL проекты

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

критериев и классификации объектов.

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

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

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

NVIDIA GPU могут помочь вам в этом, сократив время обучения до нескольких дней или часов по сравнению с месяцами на системах на базе CPU. _____________________________________________________________________________________________________________________________________________________________

Почему именно GPU используются для глубокого обучения?

 До
 Tesla
 После
 Tesla
 Стоимость инфраструктуры   $5 000 000   $200 000
 Число серверов 1000 серверов  16 серверов на базе Tesla
 Энергопотребление  600 кВт  4 кВт
 Производительность  1x  6x

GPU используют преимущества параллелизма Нейронные сети, в особенности, сверточные нейросети, по сути являются параллельными алгоритмами.

GPU оптимизированы для матричных операций

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

GPU помогают добиться результатов быстрее

Обучение нейронных сетей занимает месяцы на CPU. На GPU тот же самый процесс выполняется за несколько дней или часов. ___________________________________________________________________________________________________________________________________________________________

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

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

Большой объем данных:

Источник: http://pimnara.ru/mashinnoe-obuchenie/

Ссылка на основную публикацию