0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как обучить нейронную сеть

Как обучить и применить свою первую глубокую нейронную сеть

Пошаговое руководство по обучению нейронной сети.

Автор: Пит Уорден (Pete Warden)

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

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

Устанавливаем виртуальную машину

Для работы с виртуальной машиной нам понадобится компьютер с OS X или Linux и свободное ПО для виртуализации Vagrant. Если у вас еще нет Vagrant, перейдите по ссылке и следуйте инструкциям в разделе «Getting Started» («Приступая к работе»).

После установки Vagrant открываем новое окно терминала и создаем каталог для виртуальной машины с помощью следующих команд:

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

Загрузив образ, запускаем новый виртуальный сервер:

Входим в виртуальную машину:

Используем предварительно обученную нейронную сеть

Я покажу вам, как работать с фреймворком для глубокого обучения Caffe, разработанным Янцином Цзя (Yangqing Jia) и командой Berkeley Vision and Learning Center (BVLC). Данный фреймворк имеет активное сообщество разработчиков, полностью открытый исходный код (в то же время предварительно обученные модели нельзя использовать в коммерческих целях), а также массу документации, так что он может послужить хорошей отправной точкой. Чтобы начать работу, переходим в каталог фреймворка:

Мы будем использовать нейронную сеть, основанную на архитектуре Крижевского (Krizhevsky) и его команды, позволившей им выиграть соревнование ImageNet 2012. Сеть уже обучена командой BVLC, но поскольку обучение происходило на наборе изображений, доступном только для некоммерческого использования, она также может применяться только в исследовательских целях. Данная сеть способна распознавать 1 000 различных категорий объектов. Классификация выполняется с помощью простой команды:

Мы увидим ряд информационных сообщений, последнее из которых будет иметь следующий вид:

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

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

В файловой системе виртуальной машины они появятся в следующем каталоге:

Самостоятельно обучаем нейронную сеть

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

Читать еще:  Какими свойствами обладают смесовые ткани

Одной из первых задач, для решения которых были применены сверточные нейронные сети (convolutional neural network), была задача распознавания рукописных цифр. Ян Лекун (Yann LeCun) сделал большой вклад в данную область знаний в 90-е годы, а версия его архитектуры LeNet включена в состав Caffe. Загрузим набор данных MNIST, состоящий из 70 000 изображений рукописных цифр:

После загрузки изображений, нужно изменить один параметр процесса обучения. Я уже сделал это в виртуальной машине, которую вы загрузили, но если вы начинаете весь процесс с нуля, тогда необходимо открыть файл lenet_solver.prototxt в редакторе nano (или в любом другом) и изменить последнюю строку, задав CPU вместо GPU, потому что в виртуальной машине мы не можем использовать преимущества видеокарты. Запустим процесс обучения с помощью следующего скрипта:

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

Мы должны увидеть созданный файл со следующим именем:

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

В результате получим сообщение о том, что с вероятностью 100% это цифра 4, что соответствует действительности!

Руководство по установке

Ниже представлены команды, которые я выполнил, чтобы создать виртуальную машину, описанную выше. Если вы используете Vagrant, создайте чистый образ Ubuntu 14.04:

vagrant box add ubuntu-14.04 https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box

После создания и инициализации виртуальной машины, входим в нее и запускаем процесс установки CUDA. Чтобы собрать Caffe, необходимы заголовочные файлы и библиотеки CUDA, даже если мы собираемся работать только на CPU. Поэтому нам не обойтись без пакета CUDA, размер которого составляет 900 МБ.

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

Теперь установим ряд зависимостей с помощью apt-get:

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

Загружаем исходный код Caffe:

git clone https://github.com/BVLC/caffe.git
cd caffe

CUDA имеет проблемы с компилятором по умолчанию gcc 4.8, поэтому нужно заменить его на gcc 4.6:

Для работы Caffe также требуется целый ряд модулей Python, которые можно установить согласно списку с помощью pip. Этот процесс может занять некоторое время:

sudo pip install -r python/requirements.txt

В текущей версии Caffe не предусмотрена возможность смены компилятора, поэтому необходимо внести некоторые изменения в make-файлы:

Наконец, загружаем предварительно обученную нейронную сеть и метки:

Как обучить свою первую нейросеть

Главным трендом последних нескольких лет, безусловно, можно назвать нейросети, машинное обучение и все, что с ними связано. И на то есть серьезные причины, ведь в последнее время нейронные сети удивляют своими умениями. Мало того, что нейросеть уже может нарисовать портреты людей по одним только их голосам и «оживлять» портреты Достоевского и Мэрилин Монро, так она еще способна показать, как вы будете выглядеть через 20, 30 и даже 50 лет! Конечно, все это делает не одна нейросеть — в мире существует множество подобных разработок, которыми занимаются специалисты по Data Science.

Научиться обучать нейросети гораздо проще, чем кажется

Как появились нейросети

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

Читать еще:  В чём состоят особенности развития современного искусства

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

Как нейросеть генерирует новые фото

Из чего состоят нейросети

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

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

Как обучают нейросети

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

Одна из моделей машинного обучения

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

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

Можно ли самому научиться работать с нейросетями

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

Как им стать? Самостоятельно сделать это почти невозможно. Это серьезная специализация, которая требует взаимодействия с теми, кто уже работает в данной области. Поэтому школа данных SkillFactory открывает новый набор на полный курс по Data Science. В рамках курса профессионалы отрасли, в том числе сотрудники Яндекса и NVIDIA, обучают тонкостям работы, о которых не пишут в учебниках.

Все преподаватели — специалисты в области Data Science

С помощью этого курса можно освоить науку по работе с данными с нуля, даже если вы ни разу в жизни не занимались программированием. Он позволяет получить все навыки, необходимые специалисту по Data Science — от программирования на Python, в том числе углубленного изучения Pandas для анализа данных, до машинного обучения, глубинного обучения и исследования данных. Курс состоит примерно из 20% теории и 80% практики, поскольку только на реальных примерах возможность стать профи в этой области.

Программа курса рассчитана на 12 месяцев

В процессе обучения вы сможете создавать свои проекты в сфере распознавания изображений, NLP и скоринга. Вместе с преподавателями и менторами разберетесь в деталях работы и получите необходимую обратную связь. Кроме того, в SkillFactory помогают с трудоустройством и рекомендуют к стажировке в крупных компаниях. Например, выпускники получают возможность работать в «Альфа-Банке», Bayer, Henkel, «Сбербанке» и других ведущих организациях.

Читать еще:  Как убрать нитраты из аквариума

По окончании обучения выдается сертификат

Присоединяйтесь к курсу уже сейчас и получите скидку 15% на обучение по промокоду Hi-news (действует до 15.02.2020). Набор совсем скоро закончится, поэтому времени на раздумья не так много.

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

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

Для того, чтобы нейронная сети была способна выполнить поставленную задачу, ее необходимо обучить (см. рис. 1). Различают алгоритмы обучения с учителем и без учителя.
Процесс обучения с учителем представляет собой предъявление сети выборки обучающих примеров. Каждый образец подается на входы сети, затем проходит обработку внутри структуры НС, вычисляется выходной сигнал сети, который сравнивается с соответствующим значением целевого вектора, представляющего собой требуемый выход сети. Затем по определенному правилу вычисляется ошибка, и происходит изменение весовых коэффициентов связей внутри сети в зависимости от выбранного алгоритма. Векторы обучающего множества предъявляются последовательно, вычисляются ошибки и веса подстраиваются для каждого вектора до тех пор, пока ошибка по всему обучающему массиву не достигнет приемлемо низкого уровня.

Рис. 1. Иллюстрация процесса обучения НС

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

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

Пусть решением некоторой задачи является функция Y = F(X), заданная параметрами входных-выходных данных (X 1 , Y 1 ), (X 2 , Y 2 ), …, (X N , Y N ), для которых Y k = F(X k ) (k = 1, 2, …, N).

Обучение состоит в поиске (синтезе) функции G, близкой к F в смысле некторой функции ошибки E. (см. рис. 1.8).

Если выбрано множество обучающих примеров – пар (X N , Y N ) (где k = 1, 2, …, N) и способ вычисления функции ошибки E, то обучение нейронной сети превращается в задачу многомерной оптимизации, имеющую очень большую размерность, при этом, поскольку функция E может иметь произвольный вид обучение в общем случае – многоэкстремальная невыпуклая задача оптимизации.

Для решения этой задачи могут использоваться следующие (итерационные) алгоритмы:

алгоритмы локальной оптимизации с вычислением частных производных первого порядка:

градиентный алгоритм (метод наискорейшего спуска),

методы с одномерной и двумерной оптимизацией целевой функции в направлении антиградиента,

метод сопряженных градиентов,

методы, учитывающие направление антиградиента на нескольких шагах алгоритма;

алгоритмы локальной оптимизации с вычислением частных производных первого и второго порядка:

методы оптимизации с разреженными матрицами Гессе,

метод Левенберга-Марквардта и др.;

стохастические алгоритмы оптимизации:

поиск в случайном направлении,

метод Монте-Карло (численный метод статистических испытаний);

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

Источники:

http://datareview.info/article/kak-obuchit-i-primenit-svoyu-pervuyu-glubokuyu-neyronnuyu-set/
http://hi-news.ru/technology/kak-obuchit-svoyu-pervuyu-nejroset.html
http://neuronus.com/theory/nn/238-obucheniya-nejronnoi-seti.html

Ссылка на основную публикацию
Статьи c упоминанием слов:

Adblock
detector