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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Важно

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

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

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

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

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

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

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

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

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

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

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

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

Совет

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

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

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

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

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

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

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

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

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

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

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

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

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

Удачи!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

mkdir ~/dl_webcast cd ~/dl_webcast

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

vagrant box add dl_webcast https://d2rlgkokhpr1uq.cloudfront.net/dl_webcast.box

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

vagrant init dl_webcast vagrant up

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

vagrant ssh

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

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

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

cd ~/caffe

Мы будем использовать нейронную сеть, основанную на архитектуре Крижевского (Krizhevsky) и его команды, позволившей им выиграть соревнование ImageNet 2012.

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

Данная сеть способна распознавать 1 000 различных категорий объектов. Классификация выполняется с помощью простой команды:

python python/classify.py –print_results examples/images/cat.jpg foo

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

[('kit fox', '0.27215'), ('red fox', '0.19984'), ('wood rabbit', '0.13209'), ('hare', '0.07283'), ('Egyptian cat', '0.06632')]

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

https://github.com/BVLC/caffe/blob/master/examples/images/cat.jpg

Важно

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

~/dl_webcast/

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

/vagrant/

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

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

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

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

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

cd data/mnist ./get_mnist.sh cd ../.. cd examples/mnist

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

prototxt в редакторе nano (или в любом другом) и изменить последнюю строку, задав CPU вместо GPU, потому что в виртуальной машине мы не можем использовать преимущества видеокарты.

Запустим процесс обучения с помощью следующего скрипта:

./train_lenet.sh

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

ls -l

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

lenet_iter_10000

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

python python/classify.py –print_results –model_def examples/mnist/lenet.prototxt –pretrained_model examples/mnist/lenet_iter_10000 –force_grayscale –center_only –labels_file data/mnist/mnist_words.txt –images_dim 28,28 data/mnist/sample_digit.png foo

В результате получим сообщение о том, что с вероятностью 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 МБ.

sudo apt-get install linux-headers-uname -r curl -O “http://developer.download.nvidia.com/compute/cuda/6_0/rel/installers/cuda_6.0.37_linux_64.run” chmod +x cuda_6.0.37_linux_64.run sudo ./cuda_6.0.37_linux_64.run –kernel-source-path=/usr/src/linux-headers-3.13.0-30-generic/Совет

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

echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64' >> ~/.bashrc source ~/.bashrc

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

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

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

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

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

Например, в контексте управленческой классификации при использовании обученной нейронной сети можно предугадать, выберет ли клиент новый продукт, основываясь на выраженных в числах данных о клиенте, таких как последняя купленная марка, интерес к предварительному экспонированию, возможность дополнительного экспонирования и интерес к нему. Эти кванторные признаки атрибутов являются входами в обученную нейронную сеть. Активация «+1», полученная от нейронной сети, может указывать на то, что клиент выберет новое изделие, а «-1» — наоборот.

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

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

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

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

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

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

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

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

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

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

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

Нейронная сеть должна развить собственное представление стимулов входа без помощи учителя.

При смешанном обучении часть весов определяется посредством обучения с учителем, в то время как остальная получается с помощью самообучения.

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

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

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

Важно

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

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

Принцип коррекции по ошибке при обучении состоит в использовании сигнала (d-y) для модификации весов, обеспечивающей постепенное уменьшение ошибки. Обучение имеет место только в случае, когда перцептрон ошибается. Известны различные модификации этого алгоритма обучения [J. Hertz, A.

Krogh, and R.G. Palmer, Introduction to the Theory of Neural Computation, Addison-Wesley, Reading, Mass., 1991].

Обучение Больцмана. Представляет собой стохастическое правило обучения, которое следует из информационных теоретических и термодинамических принципов [J.A. Anderson and E. Rosenfeld, “Neurocomputing: Foundation of Research”, MIT Press, Cambridge, Mass., 1988.].

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

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

Правило Хебба. Самым старым обучающим правилом является постулат обучения Хебба [D.O. Hebb, The Organization of Behavior, John Wiley & Sons, New York, 1949.].

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

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

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

Это явление известно как правило “победитель берет все”. Подобное обучение имеет место в биологических нейронных сетях.

Совет

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

При обучении модифицируются только веса “победившего” нейрона. Эффект этого правила достигается за счет такого изменения сохраненного в сети образца (вектора весов связей победившего нейрона), при котором он становится чуть ближе ко входному примеру. На рис. 3 дана геометрическая иллюстрация обучения методом соревнования.

Входные векторы нормализованы и представлены точками на поверхности сферы. Векторы весов для трех нейронов инициализированы случайными значениями. Их начальные и конечные значения после обучения отмечены Х на рис. 3а и 3б соответственно.

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


Рис. N.
Пример обучения методом соревнования: (а) перед обучением; (б) после обучения

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

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

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

Эти особенности обучения методом соревнования известны под названием дилеммы стабильности-пластичности Гроссберга.

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

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

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

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

Adaline и Madaline [R.P.Lippmann, “An Introduction to Computing with Neural Nets”, IEEE ASSP Magazine, Vol.4, No.2, Apr. 1987, pp. 4-22.],

линейный дискриминантный анализ], проекции Саммона [A.K. Jain and J. Mao, “Neural Networks and Pattern Recognition”, in Computational Intelligence: Imitating Life, J.M. Zurada, R.J. Marks II, and C.J. Robinson, eds., IEEE Press, Piscataway, N.J., 1994, pp. 194-212.],

метод/анализ главных компонентов [J. Hertz, A. Krogh, and R.G. Palmer, Introduction to the Theory of Neural Computation, Addison-Wesley, Reading, Mass., 1991.].

Таблица 2. Известные алгоритмы обучения.

Парадигма
Обучающее правило
Архитектура
Алгоритм обучения
Задача

С учителем
Коррекция ошибки
Однослойный и многослойный перцептрон
Алгоритмы обучения перцептрона Обратное распространение Adaline и Madaline
Классификация образов Аппроксимация функций Предсказание, управление

Больцман
Рекуррентная
Алгоритм обучения Больцмана
Классификация образов

Хебб
Многослойная прямого распространения
Линейный дискриминантный анализ
Анализ данных Классификация образов

Соревнование
Соревнование
Векторное квантование
Категоризация внутри класса Сжатие данных

Сеть ART
ARTMap
Классификация образов

Без учителя
Коррекция ошибки
Многослойная прямого распространения
Проекция Саммона
Категоризация внутри класса Анализ данных

Хебб
Прямого распространения или соревнование
Анализ главных компонентов
Анализ данных Сжатие данных

Сеть Хопфилда
Обучение ассоциативной памяти
Ассоциативная память

Соревнование
Соревнование
Векторное квантование
Категоризация Сжатие данных

SOM Кохонена
SOM Кохонена
Категоризация Анализ данных

Сети ART
ART1, ART2
Категоризация

Смешанная
Коррекция ошибки и соревнование
Сеть RBF
Алгоритм обучения RBF
Классификация образов Аппроксимация функций Предсказание, управление

Дата добавления: 2016-12-27; просмотров: 3715;

2.5. Алгоритмы обучения нейронных сетей с учителем

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

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

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

Обучение НС может вестись с учителем или без учителя.

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

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

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

Рассмотрим алгоритм обучения с учителем (рис. 2.11).

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

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

По этому принципу строится, например, алгоритм обучения однослойного персептрона.

Важно

Рассмотрим более подробно алгоритм обучения НС с учителем для однослойной нейронной сети, примером которой является однослойный персептрон (см. рис. 2.7).

1) Проинициализировать элементы весовой матрицы (обычно небольшими случайными значениями).

Рис. 2.11. Схема процесса обучения нейросети с учителем

2) Подать на входы один из входных векторов, которые сеть должна научиться различать, и вычислить ее выход.

3) Если выход правильный, перейти на шаг 4.

Иначе вычислить разницу между идеальным  и полученным  значениями выхода:

.

Модифицировать веса в соответствии с формулой

,

где t и t+1 – номера соответственно текущей и следующей итераций;  – коэффициент скорости обучения, 0< Ny. Во-вторых, Nw/Ny > 1000.

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

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

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

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

Совет

При этом каждый логический уровень – “1” и “0” – будет обозначать отдельный класс. На двух выходах можно закодировать уже 4 класса и так далее. Однако результаты работы сети, организованной таким образом, можно сказать – “под завязку”, – не очень надежны.

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

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

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

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

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

Поэтому в качестве h обычно выбирается число меньше 1, но не очень маленькое, например, 0.1, и оно, вообще говоря, может постепенно уменьшаться в процессе обучения.

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

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

Нейронные сети. C чего начать?

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

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

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

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

Из чата я узнал, как люди изучают построение нейронных сетей с нуля.

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

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

В этом мне помогли следующие два видео:

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

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

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

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

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

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

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

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

Важно

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

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

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

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

Один из таких курсов начинается на Coursera с 30 октября 2017 года. “Введение в машинное обучение” – это стартовый курс по машинному обучению от Школы Анализа Данных Яндекса и Высшей Школы Экономики. Я беру этот курс сейчас, у вас тоже есть возможность присоединиться. Курс бесплатный, если вы не хотите получить сертификат о прохождении по завершению. 

https://www.coursera.org/learn/vvedenie-mashinnoe-obuchenie#

Чтобы получить приглашение в чат о нейронных сетях, свяжитесь со мной в telegram @vintego

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

Нейронные сети: обучение без учителя

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

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

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

Совет

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

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

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

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

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

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

(1)

где yi(n-1) – выходное значение нейрона i слоя (n-1), yj(n) – выходное значение нейрона j слоя n; wij(t) и wij(t-1) – весовой коэффициент синапса, соединяющего эти нейроны, на итерациях t и t-1 соответственно; – коэффициент скорости обучения. Здесь и далее, для общности, под n подразумевается произвольный слой сети. При обучении по данному методу усиливаются связи между возбужденными нейронами.

Существует также и дифференциальный метод обучения Хебба.

(2)

Здесь yi(n-1)(t) и yi(n-1)(t-1) – выходное значение нейрона i слоя n-1 соответственно на итерациях t и t-1; yj(n)(t) и yj(n)(t-1) – то же самое для нейрона j слоя n. Как видно из формулы (2), сильнее всего обучаются синапсы, соединяющие те нейроны, выходы которых наиболее динамично изменились в сторону увеличения.

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

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

2.

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

На входы сети подается входной образ, и сигналы возбуждения распространяются по всем слоям согласно принципам классических прямопоточных (feedforward) сетей[1], то есть для каждого нейрона рассчитывается взвешенная сумма его входов, к которой затем применяется активационная (передаточная) функция нейрона, в результате чего получается его выходное значение yi(n), i=0…Mi-1, где Mi – число нейронов в слое i; n=0…N-1, а N – число слоев в сети.

3. На основании полученных выходных значений нейронов по формуле (1) или (2) производится изменение весовых коэффициентов.

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

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

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

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

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

(3)

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

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

Важно

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

Максимальное произведение дает выигравший нейрон.

Другой вариант – расчет расстояния между этими векторами в p-мерном пространстве, где p – размер векторов.

, (4)

где j – индекс нейрона в слое n, i – индекс суммирования по нейронам слоя (n-1), wij – вес синапса, соединяющего нейроны; выходы нейронов слоя (n-1) являются входными значениями для слоя n. Корень в формуле (4) брать не обязательно, так как важна лишь относительная оценка различных Dj.

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

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

, (5)

где xi – i-ая компонента вектора входного образа или вектора весовых коэффициентов, а n – его размерность. Это позволяет сократить длительность процесса обучения.

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

, (6)

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

, (7)

где n – размерность вектора весов для нейронов инициализируемого слоя.

Совет

На основе рассмотренного выше метода строятся нейронные сети особого типа – так называемые самоорганизующиеся структуры – self-organizing feature maps (этот устоявшийся перевод с английского, на мой взгляд, не очень удачен, так как, речь идет не об изменении структуры сети, а только о подстройке синапсов).

Для них после выбора из слоя n нейрона j с минимальным расстоянием Dj (4) обучается по формуле (3) не только этот нейрон, но и его соседи, расположенные в окрестности R. Величина R на первых итерациях очень большая, так что обучаются все нейроны, но с течением времени она уменьшается до нуля.

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

Большая Энциклопедия Нефти и Газа

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

Cтраница 1

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

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

Обычно итеративная настройка весов связей осуществляется в соответствии с обучающей выборкой.

Свойство сети обучаться на примерах делает их более привлекательными по сравнению с системами, которые следуют системе правил функционирования, сформулированной экспертами.  [2]

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

Впроцессе обучения нейронной сети значения D и а постепенно уменьшаются.  [4]

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

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

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

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

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

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

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

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

В результате, после окончанияпроцесса обучения нейронной сети, состоящего из построения матрицы связей, которая обеспечивает восстановление компонент набора векторов Y по определенному набору векторов X, и проверки качества обучения нейронная сеть способна выполнять процедуру восстановления функции распределения параметров физических полей по набору интегральных данных, поступающих от измерительных линий распределенной волоконно-оптической измерительной сети. На рис. 11.1 приведены результаты, иллюстрирующие работу кибернетической нейронной сети типа двухслойный персептрон для восстановления пространственной функции распределения физического поля, в сравнении с результатами, получаемыми при реконструкции этой функции распределения с использованием традиционного итерационного вычислительного метода.  [8]

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

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

Процесс обучения нейронной сети в программе BrainMaker возможно сочетать со многими контрольными функциями, основной из которых является тестирование сети в процессе обучения. Это означает, что набор обучающих примеров можно разбить в определенной пропорции ( по умолчанию, 1 / 9) на тестирующий и обучающий наборы.  [10]

Функционал F в выражении (11.1) определяется матрицей коэффициентов связи W ( wij) между нейронами входного и выходного слоев нейронной сети. Значения элементов матрицы связей формируются впроцессе обучения нейронной сети.  [11]

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

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

Совет

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

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

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

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

Совет

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

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

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

Страницы:      1

Оцените статью
Просто о технологиях
Добавить комментарии

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: