Алгоритм наискорейшего спуска




Управляющие элементы NNTool

 

Чтобы запустить NNTool, необходимо выполнить одноименную команду в командном окне MATLAB:

>> nntool

после этого появится главное окно NNTool, именуемое "Окном управле-ния сетями и данными"

(Network/Data Manager) (рис. 1).

 

Рисунок 1. Главное окно NNTool

Панель "Сети и данные" (Networks and Data) имеет функциональные клавиши со следующими назначениями:

 

Помощь (Help) - краткое описание управляющих элементов данного окна;

Новые данные (New Data┘) - вызов окна, позволяющего создавать новые наборы данных;

Новая сеть (New Network┘) - вызов окна создания новой сети;

Импорт (Import┘) - импорт данных из рабочего пространства MATLAB в пространство переменных NNTool;

Экспорт (Export┘) - экспорт данных из пространства переменных NNTool в рабочее пространство MATLAB;

Вид (View) - графическое отображение архитектуры выбранной сети;

Удалить (Delete) - удаление выбранного объекта.

На панели "Только сети" (Networks only) расположены клавиши для работы исключительно с сетями. При выборе указателем мыши объекта любого другого типа, эти кнопки становятся неактивными.

 

При работе с NNTool важно помнить, что клавиши View, Delete, Initialize, Simulate, Train и Adapt

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

 

Создание сети

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

 

Чтобы задать матрицу, состоящую из четырех векторов-строк, как входную, воспользуемся кнопкой New Data. В появившемся окне следует произвести изменения, показанные на рис. 2, и нажать клавишу "Создать" (Create).

 

 

Рисунок 2. Задание входных векторов

После этого в окне управления появится вектор inputs в разделе Inputs. Вектор целей задаётся схожим образом (рис. 3).

Рисунок 3. Задание целевого вектора

После нажатия на Create в разделе Targets появится вектор target1. Данные в поле "Значение" (Value) могут быть представлены любым понятным MATLAB выражением. К примеру, предыдущее определение вектора целей можно эквивалентно заменить строкой вида

bitand([0 0 1 1], [0 1 0 1]).

Теперь следует приступить к созданию нейронной сети. Выбираем кнопку New Network и заполняем форму, как показано на (рис. 4).

 

Рисунок 4. Окно "Создание сети"

При этом поля несут следующие смысловые нагрузки:

ü Имя сети (Network Name) - это имя объекта создаваемой сети.

ü Тип сети (Network Type)- определяеттип сети и в контексте выбранного типа представляет для ввода различные параметры в части окна, расположенной ниже этого пункта. Таким образом, для разных типов сетей окно изменяет сво╦ содержание.

ü Входные диапазоны (Input ranges)- матрица с числом строк, равным числу входов сети. Каждая строка представляет собой вектор с двумя элементами: первый - минимальное значение сигнала, которое будет подано на соответствующий вход сети при обучении, второй - максимальное. Для упрощения ввода этих значений предусмотрен выпадающий список "Получить из входа" (Get from input), позволяющий автоматически сформировать необходимые данные, указав имя входной переменной.

ü Количество нейронов (Number of neurons)- число нейронов в слое.

ü Передаточная функция (Transfer function)- в этом пункте выбирается передаточная функция (функция активации) нейронов.

ü Функция обучения (Learning function)- функция, отвечающая за обновление весов и смещений сети в процессе обучения.

 

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

 

Итак, структура сети соответствует нашему заданию. Теперь можно закрыть окно предварительного просмотра, нажав клавишу "Закрыть" (Close), и подтвердить намерение создать сеть, нажав "Создать" (Create) в окне создания сети.

 

В результате проделанных операций в разделе "Сети" (Networks) главного окна NNTool появится объект с именем network1.

 

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

Обучение

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

 

Вернёмся в главное окно NNTool. На данном этапе интерес представляет нижняя панель "Только сети" (Networks only). Нажатие любой из клавиш на этой панели вызовет окно, на множестве вкладок которого представлены параметры сети, необходимые для её обучения и прогона, а также отражающие текущее состояние сети.

 

Отметив указателем мыши объект сети network1, вызовем окно управления сетью нажатием кнопки Train. Перед нами возникнет вкладка "Train" окна свойств сети, содержащая, в свою очередь, ещё одну панель вкладок (рис. 6). Их главное назначение - управление процессом обучения. На вкладке "Информация обучения" (Training info) требуется указать набор обучающих данных в поле "Входы" (Inputs) и набор целевых данных в поле "Цели" (Targets). Поля "Выходы" (Outputs) и "Ошибки" (Errors) NNTool заполняет автоматически. При этом результаты обучения, к которым относятся выходы и ошибки, будут сохраняться в переменных с указанными именами.

 

 

Рисунок 6. Окно параметров сети, открытое на вкладке "обучение" (Train)

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

 

На вкладке "Парамет-ры обучения" (Training parame-ters) для нашей сети (рис. 7) можно установить следующие поля:

Количество эпох (epochs)- определяет число эпох (интервал времени), по прошествии которых обучение будет прекращено.

Эпохойназывают однократное пред-ставление всех обучающих входных данных на входы сети.

Достижение цели или попадание (goal) - здесь задаётся абсолютная величина функции ошибки, при которой цель будет считаться достигнутой.

Период обновления (show) - период обновления графика кривой обучения, выраженный числом эпох.

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

 

Рисунок 7. Вкладка параметров обучения

Рассмотрим вкладку обучения (Train). Чтобы начать обучение, нужно нажать кнопку "Обучить сеть"

(Train Network). После этого, если в текущий момент сеть не удовлетворяет ни одному из условий, указанных в разделе параметров обучения (Training Parameters), появится окно, иллюстрирующее динамику целевой функции -кривую обучения. В нашем случае график может выглядеть так, как показано на рис. 9. Кнопкой "Остановить обучение" (Stop Training) можно прекратить этот процесс. Из рисунка видно, что обучение было остановлено, ко-гда функция цели достигла установленной величины (goal = 0).

 

В методических целях убедимся в правильности решения задачи путём прогона обученной сети. Для этого необходимо открыть вкладку "Прогон" (Simulate) и выбрать в выпадающем списке "Входы" (Inputs) заготовленные данные. В данной задаче естественно использовать тот же набор данных, что и при обучении data1. При желании можно установить флажок "Задать цели" (Supply Targets). Тогда в результате прогона дополнительно будут рассчитаны значения ошибки. Нажатие кнопки "Прогон се-ти" (Simulate Network) запишет результаты прогона в переменную, имя которой указано в поле "Выходы" (Outputs). Теперь можно вернуться в основное окно NNTool и, выделив мышью выходную переменную network1, нажать кнопку "Просмотр" (View). Содержимое окна просмотра совпадает со значением вектора целей - сеть работает правильно.

Следует заметить, что сеть создаётся инициализированной, то есть значения весов и смещений задаются определённым образом. Перед каждым следующим опытом обучения обычно начальные условия обновляются, для чего на вкладке "Инициализация" (Initialize) предусмотрена функция инициализации. Так, если требуется провести несколько независимых опытов обучения, инициализация весов и смещений перед каждым из них осуществляется нажатием кнопки "Инициализировать веса" (Initialize Weights).

 

Вернёмся к вкладке "Необязательная информация" (Optional Info) (рис. 8). Чтобы понять, какой цели служат представленные здесь параметры, необходимо обсудить два понятия: переобучение и обобщение.

 

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

 

Для предупреждения переобучения применяется следующая техника. Данные делятся на два множества: обучающее (Training Data) и контрольное (Validation Data). Контрольное множество в обучении не используется. В начале работы ошибки сети на обучающем и контрольном множествах будут одинаковыми. По мере того, как сеть обучается, ошибка обучения убывает, и, пока обучение уменьшает действительную функцию ошибки, ошибка на контрольном множестве также будет убывать. Если же контрольная ошибка перестала убывать или даже стала расти, это указывает на то, что обучение следует закончить. Остановка на этом этапе называется ранней остановкой (Early stopping).

 

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

 

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

 

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

 

Обучение сети можно проводить в разных режимах. В связи с этим, в NNTool предусмотрено две вкладки, представляющие обучающие функции: рассмотренная ранее вкладка Train и "Адаптация" (Adapt). Adapt вмещает вкладку информация адаптации (Adap-tion Info), на которой содержатся поля, схожие по своему назначению с полями вкладки Training Info и выполняющие те же функции и вкладку параметры адаптации (Adaption Parameters). Последняя содержит единственное поле "Проходы" (passes). Значение, указанное в этом поле, определяет, сколько раз все входные векторы будут представлены сети в процессе обучения.

 

 

Многослойный персептрон

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

Рассмотрим двухслойную сеть (рис.1). Веса нейронов первого (входного слоя) пометим верхним индексом (1), а выходного слоя – верхним индексом (2). Выходные сигналы первого слоя обозначим (), а выходного слоя - . Будем считать, что функция активации нейронов задана в сигмоидальной униполярной или биполярной форме. Для упрощения описания будем использовать расширенное обозначение входного вектора сети в виде , где =1 соответствует порогу. С вектором связаны два выходных вектора сети: вектор фактических выходных сигналов и вектор ожидаемых выходных сигналов .

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

. (1)

В выходном слое -й нейрон вырабатывает выходной сигнал

. (2)

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

 

 

 

Рис.1. Пример двухслойной нейронной сети

 

 

1. Алгоритм обратного распространения ошибки

 

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

. (3)

Минимизация целевой функции достигается уточнением вектора весов (обучением) по формуле

, (4)

где

, (5)

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

. (6)

Компоненты градиента рассчитываются дифференцированием зависимости (6). В первую очередь определяются веса нейронов выходного слоя. Для выходных весов получаем:

,

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

. (7)

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

.

Отсюда получаем

.

Если ввести обозначение

,

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

. (8)

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

. (9)

В соответствии с алгоритмом обратного распространения ошибки в каждом цикле обучения выделяются следующие этапы:

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

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

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

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

 

Рис.2. Сеть обратного распространения ошибки

 

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

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

Алгоритм наискорейшего спуска

 

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

,

где - вектор градиента.

 

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

производится с учетом модифицированной формулы определения значения

,

где - это коэффициент момента, принимающий значения в интервале .

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: