Глубокое обучение — Википедия

[ на главную ] 

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<N-2)
    то переход на следующий пункт
    иначе переход на п.10
  8. сгенерировать набор данных Xi+1 для следующего автоенкодера,
    для этого пропустить через пару слоёв i,i+1 набор данных Xi
  9. переход п.3
  10. конец работы

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

4. Реализация.

В этом разделе представлена реализация классификатора распознающего изображения с цифрами. Классификатор построен на основе глубокой сети прямого распространения, обучаемой методом описанным выше. В качестве набора данных будем использовать часть базы MNIST [10] (7000 образов случайно выбранных из полного набора в 70 тысяч). Автокодировщики будем обучать методом Хинтона contrastive divergence [7], тонкую настройку весов будем производить методом простого градиентного спуска. Для оценки качества работы глубокой сети, на этом же наборе обучим обычную сеть с одним скрытым слоем. Результаты приведены ниже.

4.1 Простая сеть.

Конфигурация сети:
784 нейрона — входной слой,
500 нейронов — активация ReLU,
10 нейронов — активация softmax Обучение методом простого градиентного спуска.
Наилучший результат : 89 ошибок на 1000 тестовых примеров

4.2 Глубокая сеть.

Конфигурация сети:
784 нейрона — входной слой,
500 нейронов — активация ReLU,
300 нейронов — активация ReLU,
100 нейронов — активация ReLU,
50 нейронов — активация ReLU,
10 нейронов — активация softmax Предобучение методом contrastive divergence,
Тонкая настройка весов методом простого градиентного спуска.
Наилучший результат : 49 ошибок на 1000 тестовых примеров Результат для этой сети без предобучения — 610 ошибок на 1000 тестовых примеров

 

Реализация в системе Octave [здесь].

 

Отметим, что для улучшения результатов обучения глубокой сети необходим достаточно большой набор данных. Из-за ограничений объёма данных на хостинге, пакет содержит лишь маленький (демонстрационный) набор из 300 примеров, эксперименты проводились на наборе из 7000 примеров, полный набор MINIST [10] содержит 70 тысяч примеров. Пакет включает в себя конвертер (mnist-convert) формата базы MINIST в рабочий формат системы.

Список литературы

  1. Е.С.Борисов Основные модели и методы теории искусственных нейронных сетей.
    — http://mechanoid.kiev.ua/neural-net-base.html
  2. Е.С.Борисов О методах обучения многослойных нейронных сетей прямого распространения.
    — http://mechanoid.kiev.ua/neural-net-backprop.html
  3. Павел Нестеров Предобучение нейронной сети с использованием ограниченной машины Больцмана.
    — https://habrahabr.ru/post/163819/
  4. G.E.Hinton and R.R.Salakhutdinov Reducing the Dimensionality of Data with Neural Networks. 28 JULY 2006 VOL 313 SCIENCE. — http://www.cs.toronto.edu/~hinton/science.pdf
  5. Deep Learning — http://deeplearning.net
  6. Andrew Ng CS294A Lecture notes. Sparse autoencoder.
    — http://nlp.stanford.edu/~socherr/sparseAutoencoder_2011new.pdf
  7. Е.С.Борисов Ассоциативная память на основе ограниченной машины Больцмана (RBM).
    — http://mechanoid.kiev.ua/neural-net-boltzman-restr.html
  8. G.E.Hinton Neural Networks for Machine Learning — http://www.coursera.org/course/neuralnets
  9. Hugo Larochelle Neural networks class
    — http://www.youtube.com/playlist?list=PL6Xpj9I5qXYEcOhn7TqghAJ6NAPrNmUBH
  10. The MNIST database of handwritten digits — http://yann.lecun.com/exdb/mnist/
  11. Deep Learning Tutorial: Stacked denoising auto-encoders (SdA)
    — http://deeplearning.net/tutorial/deeplearning.pdf

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

В этой практической работе по курсу “Глубокое обучение на Python” вы научитесь обучать нейронную сеть распознавать рукописные цифры из набора данных MNIST.

Обновление от 08.05.2017. Программы обновлены на Keras версии 2.

Обновление от 10.11.2017. Бэкенд Keras изменен на TensorFlow.

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

Предварительные сведения

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

Еще одно видео — как оценивать качество обучения нейронной сети.

Необходимое программное обеспечение

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

Инструкция по установке Keras и TensorFlow с дистрибутивом Anaconda.

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

Базовая версия программы

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

Также базовую версию программы можно найти в репозитории примеров курса.

Для начала запустите базовую версию программы:

Примерный вывод программы:

Для сокращения из вывода удалены данные об обучении с 11 по 89 эпохи.

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

Проанализируйте точность на проверочной выборке в процессе обучения. Она указывается после заголовка . В примере видно, что на начальных эпохах точность на проверочной выборке быстро увеличивается c 0.8505 на 1 эпохе до 0.9180 на 10 эпохе. Но ближе к окончанию обучения точность на проверочной выборке почти не меняется. На 98 эпохе точность составляет 0.9637, на 99 – 0.9639, на 100 – 0.9638. Это означает, что мы близки к переобучению и обучение необходимо останавливать.

Экспериментируем с гиперпараметрами обучения

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

  1. Количество эпох обучения. Оценим влияние количества эпох обучения на качество обучения сети. Количество эпох задается в аргументе метода :

    Попробуйте обучать сеть в течение 50, 75, 100 и 125 эпох. Выберите количество эпох, при котором самая высокая точность работы сети на тестовых данных.

  2. Размер мини-выборки. Оценим влияние размера мини-выборки на качество обучения сети. Размер задается в аргументе метода :

    Используйте размер мини-выборки 50, 100, 200 и 400.

    Antananarivo Фото со стоков и изображения

    Выберите значение, при котором самая высокая точность работы сети на тестовых данных.

  3. Количество нейронов входного слоя. Изменяйте количество нейронов во входном слое и оцените, как оно влияет на качество обучения сети. Количество нейронов задается при создании входного слоя:

    Используйте значения 500, 700, 900, 1200. Выберите значение, при котором самая высокая точность работы сети на тестовых данных.

  4. Добавляем скрытый слой. Добавим в нашу сеть скрытый слой, чтобы она стала глубокой:

    Попробуйте добавить скрытый слой с разным количеством нейронов: 500, 700, 900 и 1200. Выберите наиболее подходящее количество нейронов скрытого слоя.

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

Выбираем лучшие гиперпараметры

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

Расскажите о своих результатах

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

Попробуйте свои силы в соревнованиях Kaggle

Если у вас получилось увеличить точность обучения нейронной сети, то можете попробовать принять участие в соревнованиях по распознаванию рукописных цифр на сайте Kaggle. Это самый крупный сайт Data Scientist’ов, на котором проводятся соревнования по анализу данных, размещаются открытые наборы данных, а также ведется форум, посвященный практическому применению анализа данных для различных задач. На Kaggle есть соревнования по распознаванию рукописных цифр MNIST. В этом соревнования данные представлены не в традиционном формате MNIST, а в виде текстовых csv файлов. Как работать с такими файлами, а также как готовить данные для отправки на соревнования Kaggle, я описал в отдельной статье.

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

Авиабилеты Найроби — Антананариву

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

Cтраница 1

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

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

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

Глубокое изучение и пропаганда идей Маркса — Энгельса — Ленина — основа идеологической деятельности партийных организаций по коммунистическому воспитанию трудящихся. Готовясь к 100-летию со дня рождения В. И. Ленина, партийные организации должны усилить работу в области марксистско-ленинского образования всех коммунистов, глубокого изучения революционной теории широкими массами коммунистов и беспартийных.  [4]

Глубокое изучение и пропаганда идей Маркса — Энгельса — Ленина — основа идеологической деятельности партийных организаций по коммунистическому воспитанию трудящихся. Готовясь к столетию со дня рождения В. И. Ленина, партийные организации должны усилить работу в области марксистско-ленинского образования всех коммунистов, глубокого изучения революционной теории широкими массами коммунистов и беспартийных.  [5]

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

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

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

Глубокое изучение гидродинамики и создание основ теории лопаточных машин, которые необходимы были Борису Сергеевичу для совершенствования поршневого двигателя — увеличения высоты полета, подготовили возможность создания ТКВРД в момент необходимого повышения мощности авиадвигателей, когда весо-габаритные и экономические характеристики поршневого двигателя уже не могли соперничать с новой схемой.  [9]

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

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

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

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

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

Глубокое изучение комплексообразования алканов с карбамидом началось с 1949 г. В настоящее время карбамидная депарафинизация позволяет осуществить многотоннажное производство жидких алканов.  [15]

Страницы:      1    2    3    4

Добавить комментарий

Закрыть меню