Функциональные модели универсального нейрокомпьютера
Развитие информатики и средств вычислительной техники. Развитие систем искусственного интеллекта на базе алгоритмических языков. Искусственные нейронные сети. Нейрокибернетика. Элементарные детали вычислительных устройств. Анализ нейросетевых парадигм.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | диссертация |
Язык | русский |
Дата добавления | 12.10.2008 |
Размер файла | 1,6 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
При использовании предложенной оценки нет никаких гарантий того, что в генерируемой сетью последовательности не появятся сильно скоррелированные подпоследовательности. Для удаления корреляций можно модифицировать оценку так, чтобы она возрастала при появлении корреляций. Рассмотрим две подпоследовательности длинны L, первая из которых начинается с , а другая с . Коэффициент корреляции этих последовательностей записывается в виде:
В этой формуле приняты следующие обозначения: - среднее по последовательности, начинающейся с ; - средний квадрат последовательности начинающейся с . Вычисление такого коэффициента корреляции довольно долгий процесс. Однако вместо выборочных моментов в формулу можно подставить значения моментов, которые последовательность должна иметь. В этом случае формула сильно упрощается:
Добавку для удаления корреляций последовательностей длиной от до и смещенных друг относительно друга на смещения от до можно записать в виде:
При необходимости можно ввести и другие поправки, учитывающие требования к генератору случайных чисел.
5.6. Составные интерпретатор ответа
и оценка
При использовании нейронных сетей для решения различных задач возникает необходимость получать от сети не один ответ, а несколько. Например, при обучении сети решению задачи диагностики отклонений в реакции на стресс нейронная сеть должна была определить наличие или отсутствие тринадцати различных патологий. Если одна сеть может выдавать только один ответ, то для решения задачи необходимо задействовать тринадцать сетей. Однако в этом нет необходимости. Поскольку каждый ответ, который должна выдавать сеть, имеет только два варианта, то можно использовать для его получения классификатор на два класса. Для такого классификатора необходимо два выходных сигнала. Тогда для решения задачи достаточно получать 26 выходных сигналов: первые два сигнала - для определения первой патологии, третий и четвертый - для второй и так далее. Таким образом, интерпретатор ответа для этой задачи состоит из тринадцати интерпретаторов, а оценка из тринадцати оценок. Более того, нет никаких ограничений на типы используемых интерпретаторов или оценок. Возможна комбинация, например, следующих ответов.
Число с допуском.
Классификатор на восемь классов.
Случайное число.
При использовании таких составных оценок и интерпретаторов каждый из этих компонентов должен следить за тем, чтобы каждая частная оценка или интерпретатор получали на вход те данные, которые им необходимы.
5.7. Запросы к компоненту интерпретатор ответа
Запросы к компоненту интерпретатор ответа можно разбить на пять групп:
Интерпретация.
Изменение параметров.
Работа со структурой.
Инициация редактора и конструктора интерпретатора ответа.
Обработка ошибок.
Поскольку нейрокомпьютер может работать одновременно с несколькими сетями, то и компонент интерпретатор ответа должен иметь возможность одновременной работы с несколькими интерпретаторами. Поэтому большинство запросов к интерпретатору содержат явное указание имени интерпретатора ответа. Ниже приведено описание всех запросов к компоненту интерпретатор ответа. Каждый запрос является логической функцией, возвращающей значение истина, если запрос выполнен успешно, и ложь - при ошибочном завершении исполнения запроса.
В запросах второй и третьей группы при обращении к частным интерпретаторам используется следующий синтаксис:
<Полное имя частного интерпретатора> ::= <Имя интерпретатора>.
<Псевдоним частного интерпретатора> [[<Номер экземпляра>]]
При вызове ряда запросов используются предопределенные константы. Их значения приведены в табл. 1.
Таблица 1
Значения предопределенных констант компонентов интерпретатор ответа и оценка
Название |
Величина |
Значение |
|
Empty |
0 |
Интерпретирует один сигнал как действительное число. |
|
Binary |
1 |
Кодирование номером канала. Знаковый интерпретатор |
|
Major |
2 |
Кодирование номером канала. Максимальный интерпретатор. |
|
BynaryCoded |
3 |
Двоичный интерпретатор. |
|
UserType |
-1 |
Интерпретатор, определенный пользователем. |
5.7.1. Запрос на интерпретацию
Единственный запрос первой группы выполняет основную функцию компонента интерпретатор ответа - интерпретирует массив сигналов.
5.7.1.1. Интерпретировать массив сигналов (Interpretate)
Описание запроса:
Pascal:
Function Interpretate( IntName : PString; Signals : PRealArray;
Var Reliability, Answers : PRealArray ) : Logic;
C:
Logic Interpretate(PString IntName, PRealArray Signals, PRealArray* Reliability, PRealArray* Answers)
Описание аргумента:
IntName - указатель на строку символов, содержащую имя интерпретатора ответа.
Signals - массив интерпретируемых сигналов.
Answers - массив ответов.
Reliability - массив коэффициентов уверенности в ответе.
Назначение - интерпретирует массив сигналов Signals, используя интерпретатор ответа, указанный в параметре IntName.
Описание исполнения.
Если Error <> 0, то выполнение запроса прекращается.
Если в качестве аргумента IntName дан пустой указатель, или указатель на пустую строку, то исполняющим запрос объектом является первый интерпретатор ответа в списке интерпретаторов компонента интерпретатор.
Если список интерпретаторов компонента интерпретатор пуст или имя интерпретатора ответа, переданное в аргументе IntName в этом списке не найдено, то возникает ошибка 501 - неверное имя интерпретатора ответа, управление передается обработчику ошибок, а обработка запроса прекращается.
Производится интерпретация ответа интерпретатором ответа, имя которого было указано в аргументе IntName.
Если во время выполнения запроса возникает ошибка, то генерируется внутренняя ошибка 504 - ошибка интерпретации. Управление передается обработчику ошибок. Выполнение запроса прекращается. В противном случае выполнение запроса успешно завершается.
5.7.2. Остальные запросы
Ниже приведен список запросов, исполнение которых описано в разделе «Запросы общие для всех компонентов»:
aiSetCurrent - Сделать интерпретатор ответа текущим
aiAdd - Добавление нового интерпретатора ответа
aiDelete - Удаление интерпретатора ответа
aiWrite - Запись интерпретатора ответа
aiGetStructNames - Вернуть имена частных интерпретаторов
aiGetType - Вернуть тип частного интерпретатора
aiGetData - Получить параметры частного интерпретатора
aiGetName - Получить имена параметров частного интерпретатора
aiSetData - Установить параметры частного интерпретатора
aiEdit - Редактировать интерпретатор ответа
OnError - Установить обработчик ошибок
GetError - Дать номер ошибки
FreeMemory - Освободить память
В запросе aiGetType в переменной TypeId возвращается значение одной из предопределенных констант, перечисленных в табл. 1.
При исполнении запроса aiSetData генерируется запрос SetEstIntParameters к компоненте оценка. Аргументы генерируемого запроса совпадают с аргументами исполняемого запроса
5.7.3. Ошибки компонента интерпретатор ответа
В табл. 2 приведен полный список ошибок, которые могут возникать при выполнении запросов компонентом интерпретатор ответа, и действия стандартного обработчика ошибок.
Таблица 2.
Ошибки компонента интерпретатор ответа и действия стандартного
обработчика ошибок.
№ |
Название ошибки |
Стандартная обработка |
|
501 |
Неверное имя интерпретатора ответа |
Занесение номера в Error |
|
502 |
Ошибка считывания интерпретатора ответа |
Занесение номера в Error |
|
503 |
Ошибка сохранения интерпретатора ответа |
Занесение номера в Error |
|
504 |
Ошибка интерпретации |
Занесение номера в Error |
5.8. Запосы к компоненту оценка
Запросы к компоненте оценка можно разбить на пять групп:
Оценивание.
Изменение параметров.
Работа со структурой.
Инициация редактора и конструктора оценки.
Обработка ошибок.
Поскольку нейрокомпьютер может работать одновременно с несколькими сетями, то и компонент оценка должен иметь возможность одновременной работы с несколькими оценками. Поэтому большинство запросов к оценке содержат явное указание имени оценки. Ниже приведено описание всех запросов к компоненту оценка. Каждый запрос является логической функцией, возвращающей значение истина, если запрос выполнен успешно, и ложь - при ошибочном завершении исполнения запроса.
В запросах второй и третьей группы при обращении к частным оценкам используется следующий синтаксис:
<Полное имя частной оценки> ::=
<Имя оценки>.<Псевдоним частной оценки> [[<Номер экземпляра>]]
При вызове ряда запросов используются предопределенные константы. Их значения приведены в табл. 1.
5.8.1. Запрос на оценивание
Единственный запрос первой группы выполняет основную функцию компонента оценка - вычисляет оценку и, если требуется, массив производных оценки по оцениваемым сигналам.
5.8.1.1. Оценить массив сигналов (Estimate)
Описание запроса:
Pascal:
Function Estimate( EstName : PString; Signals, Back, Answers, Reliability: PRealArray; Direv : Logic; Var Estim : Real ) : Logic;
C:
Logic Estimate(PString EstName, PRealArray Signals, PRealArray* Back, PRealArray Answers, PRealArray Reliability, Logic Direv, Real* Estim)
Описание аргумента:
EstName - указатель на строку символов, содержащую имя оценки.
Signals - указатель на массив оцениваемых сигналов.
Back - указатель на массив производных оценки по оцениваемым сигналам.
Answers - указатель на массив правильных ответов.
Reliability - указатель на массив правильных ответов.
Direv - признак необходимости вычисления производных (False - не вычислять).
Estim - вычисленная оценка.
Назначение - вычисляет оценку массива сигналов Signals, используя оценку, указанную в параметре EstName.
Описание исполнения.
Если Error <> 0, то выполнение запроса прекращается.
Если в качестве аргумента EstName дан пустой указатель, или указатель на пустую строку, то исполняющим запрос объектом является первая оценка в списке оценок компонента оценка.
Если список оценок компонента оценка пуст или имя оценки, переданное в аргументе EstName, в этом списке не найдено, то возникает ошибка 401 - неверное имя оценки, управление передается обработчику ошибок, а обработка запроса прекращается.
Производится вычисление оценки оценкой, имя которой было указано в аргументе EstName.
Если во время выполнения запроса возникает ошибка, то генерируется внутренняя ошибка 404 - ошибка оценивания. Управление передается обработчику ошибок. Выполнение запроса прекращается. В противном случае выполнение запроса успешно завершается.
5.8.2. Остальные запросы
Ниже приведен список запросов, исполнение которых описано в разделе «Запросы общие для всех компонентов»:
esSetCurrent - Сделать оценку текущим
esAdd - Добавление новой оценки
esDelete - Удаление оценки
esWrite - Запись оценки
esGetStructNames - Вернуть имена частных оценок
esGetType - Вернуть тип частной оценки
esGetData - Получить параметры частной оценки
esGetName - Получить имена параметров частной оценки
esSetData - Установить параметры частной оценки
esEdit - Редактировать оценку
OnError - Установить обработчик ошибок
GetError - Дать номер ошибки
FreeMemory - Освободить память
В запросе esGetType в переменной TypeId возвращается значение одной из предопределенных констант, перечисленных в табл. 1.
Кроме того, во второй группе запросов есть запрос SetEstIntParameters аналогичный запросу esSetData, но определяющий частную оценку, параметры которой изменяются, по полному имени связанного с ней интерпретатора ответа.
5.8.2.1. Установить параметры (SetEstIntParameters)
Описание запроса:
Pascal:
Function SetEstIntParameters( IntName : PString; Param : PRealArray ) : Logic;
C:
Logic SetEstIntParameters(PString IntName, PRealArray Param)
Описание аргументов:
IntName - указатель на строку символов, содержащую полное имя частного интерпретатора ответа.
Param - адрес массива параметров.
Назначение - заменяет значения параметров частной оценки, связанной с интерпретатором ответа, указанного в аргументе IntName, на значения, переданные, в аргументе Param.
Описание исполнения.
Запрос передается всем частным оценкам всех оценок в списке оценок компонента оценка.
Если частная оценка связана с частным интерпретатором ответа, имя которого указано в аргументе IntName, то текущие значения параметров частной оценки заменяются на значения, хранящиеся в массиве, адрес которого передан в аргументе Param,.
5.8.3. Ошибки компонента оценка
В табл. 3 приведен полный список ошибок, которые могут возникать при выполнении запросов компонентом оценка, и действия стандартного обработчика ошибок.
Таблица 3
Ошибки компонента оценка и действия стандартного обработчика ошибок
№ |
Название ошибки |
Стандартная обработка |
|
401 |
Неверное имя оценки |
Занесение номера в Error |
|
402 |
Ошибка считывания оценки |
Занесение номера в Error |
|
403 |
Ошибка сохранения оценки |
Занесение номера в Error |
|
404 |
Ошибка вычисления оценки |
Занесение номера в Error |
6. Исполнитель
6.1. Описание компонента исполнитель
Компонент исполнитель является служебным. Это означает, что он универсален и невидим для пользователя. В отличие от всех других компонентов исполнитель не выполняет ни одной явной функции в обучении нейронных сетей, а является вспомогательным для компонентов учитель и контрастер. Задача этого компонента - упростить работу компонентов учитель и контрастер. Этот компонент выполняет всего несколько запросов, преобразуя каждый из них в последовательность запросов к различным компонентам. В данной главе содержательно рассмотрены алгоритмы исполнения всех запросов исполнителя.
Таблица 1
Параметры запроса для позадачной работы
Название параметра |
1 |
2 |
3 |
4 |
|
Перейти к следующему примеру |
+/- |
+/- |
+/- |
+/- |
|
Остановиться в конце обучающего множества |
+/- |
+/- |
+/- |
+/- |
|
Вычислять оценку |
- |
+ |
+ |
+ |
|
Интерпретировать ответ |
+ |
- |
- |
+ |
|
Вычислять градиент |
- |
- |
+ |
- |
|
Подготовка к контрастированию |
- |
- |
+/- |
- |
Как было описано в главе «Функциональные компоненты», исполнитель выполняет четыре вида запросов.
Тестирование решения примера.
Оценивание решения примера.
Оценивание решения примера с вычислением градиента.
Оценивание и тестирование решения примера.
Все перечисленные запросы работают с текущей сетью и текущим примером задачника. Однако компоненту задачник необходимо указать, какой пример подлежит обработке. Кроме того, в главе «Оценка и интерпретатор ответа» введен класс оценок, вычисляемых по всему обучающему множеству. Такие оценки позволяют существенно улучшить обучаемость сети и ускорить ее обучение. Нет смысла возлагать перебор примеров на учителя, поскольку это снижает полезность компонента исполнитель. Таким образом, возникает еще четыре вида запросов.
Тестирование решения всех примеров обучающего множества.
Оценивание решения всех примеров обучающего множества.
Оценивание решения всех примеров обучающего множества с вычислением градиента.
Оценивание и тестирование решения всех примеров обучающего множества.
Как уже отмечалось в главе «Функциональные компоненты», каждую из приведенных четверок запросов можно объединить в один запрос с параметрами. В табл. 1 приведен полный список параметров для первой четверки запросов, а в табл. 2 - для второй.
Таблица 2
Параметры запроса для обучающего множества в целом
Название параметра |
5 |
6 |
7 |
8 |
|
Вычислять оценку |
- |
+ |
+ |
+ |
|
Интерпретировать ответ |
+ |
- |
- |
+ |
|
Вычислять градиент |
- |
- |
+ |
- |
|
Подготовка к контрастированию |
- |
- |
+/- |
- |
Символ «+» означает, что в запросе, номер которого указан в первой строке колонки, возможность, задаваемая данным параметром, должна быть использована. Символ «-» - что связанная с данным параметром возможность не используется. Символы «+/-» означают, что запрос может, как использовать, так и не использовать данную возможность. Отметим, что подготовка к контрастированию может быть задействована, только если производится вычисление градиента, а вычисление градиента невозможно без вычисления оценки. Остальные параметры независимы.
Отбор примеров в обучающее множество, открытие сеанса работы с задачником должны выполняться учителем или контрастером. Исполнитель только организует перебор примеров в обучающем множестве.
При полной или частичной аппаратной реализации нейрокомпьютера компонент исполнитель эффективно реализуется аппаратно, по следующим причинам.
Исполнитель реализует исключительно связные функции по отношению к другим компонентам.
Исполняемые им запросы постоянны и не зависят от реализаций других компонентов нейрокомпьютера.
Этот компонент работает чаще, чем любой другой, и, как следствие, ускорение в работе исполнителя приводит к соизмеримому ускорению работы нейрокомпьютера.
6.2. Запросы к компоненту исполнитель
В данном разделе описаны запросы исполнителя с алгоритмами их исполнения. При описании запросов используется аргумент Instruct, являющийся целым числом, принимающим значение одной из предопределенных констант, приведенных в табл. 3., или суммы любого числа этих констант. Аргумент Instruct является совокупностью шести битовых флагов.
Таблица 3
Предопределенные константы компонента исполнитель
Название |
Иденти- |
Значение |
||
Десят. |
Шестн |
|||
Вычислять оценку |
Estimate |
1 |
H0001 |
|
Интерпретировать ответ |
Interpret |
2 |
H0002 |
|
Вычислять градиент |
Gradient |
4 |
H0004 |
|
Подготовка к контрастированию |
Contrast |
8 |
H0008 |
|
Перейти к следующему примеру |
NextExample |
16 |
H0010 |
|
Остановиться в конце обучающего множества |
StopOnEnd |
32 |
H0020 |
|
Устанавливать ответы |
PutAnswers |
64 |
H0040 |
|
Устанавливать оценки |
PutEstimations |
128 |
H0080 |
|
Устанавливать уверенность в ответе |
PutReliability |
256 |
H0100 |
В запросах не указываются используемые сеть, оценка и интерпретатор ответа, поскольку компонент исполнитель всегда использует текущие сеть, оценку и интерпретатор ответа.
6.2.1. Позадачная обработка (TaskWork)
Описание запроса:
Pascal:
Function TaskWork(Instruct, Handle : Integer; Var Answers, Reliability : PRealArray; Var Estim : Real) : Logic;
C:
Logic TaskWork(Integer Instruct, Integer Handle, PRealArray* Answers, PRealArray* Reliability; Real* Estim)
Описание аргументов:
Instruct - содержит инструкции о способе исполнения.
Handle - номер сеанса в задачнике.
Answers - указатель на массив вычисленных ответов.
Reliability - указатель на массив коэффициентов уверенности сети в ответах.
Estim - оценка решения примера.
Назначение - производит обработку одного примера.
Переменные, используемые при исполнении запроса
InArray, RelArray - адреса массивов для обменов с задачником.
Back - адрес массива для обменов с оценкой.
Описание исполнения.
Если в любой момент исполнения запроса возникает ошибка при исполнении запросов к другим компонентам, то исполнение запроса прекращается, возвращается значение ложь, ошибка компонента исполнитель не генерируется.
1. Если в аргументе Instruct установлен бит Gradient и не установлен бит Estimate, то выполнение запроса прекращается, и генерируется ошибка 001 - Некорректное сочетание флагов в аргументе Instruct.
2. Если в аргументе Instruct установлен бит Gradient, то генерируется запрос к сети NullGradient с аргументом Null.
3. Если в аргументе Instruct установлен бит NextExample, то генерируется запрос к задачнику Next с аргументом Handle. (Переход к следующему примеру)
4. Генерируется запрос к задачнику Last с аргументом Handle. (Проверка, существует ли пример)
5. Если запрос Last вернул значение истина, то
5.1. Если в аргументе Instruct установлен бит StopOnEnd, то исполнение запроса прекращается, возвращается значение ложь. (Примера нет, переход на начало не нужен)
5.2. Генерируется запрос к задачнику Home с аргументом Handle. (Переход на начало обучающего множества)
6. Переменной InArray присваивается значение Null и генерируется запрос к задачнику Get с аргументами Handle, InArray, tbPrepared (Получает от задачника предобработанные входные сигналы)
7. Генерируется запрос к сети Forw, с аргументами Null, InArray (выполняется прямое функционирование сети).
8. Освобождается массив InArray
9. Присваивает переменной Data значение Null и генерирует запрос к сети GetNetData с аргументами Null, OutSignals, Data (Получает от сети выходные сигналы).
10. Если в аргументе Instruct установлен бит Interpret, то
10.1. Генерируется запрос к интерпретатору ответа Interpretate с аргументами Data, Answers, Reliability. (Производит интерпретацию ответа)
10.2. Если в аргументе Instruct установлен бит PutAnswers, то генерируется запрос к задачнику Put с аргументами Handle, Answers, tbCalcAnswers (Передает задачнику вычисленные ответы)
10.3. Если в аргументе Instruct установлен бит PutReliability, то генерируется запрос к задачнику Put с аргументами Handle, Reliability, tbCalcReliability (Передает задачнику вычисленные коэффициенты уверенности в ответе)
11. Если в аргументе Instruct установлен бит Gradient, то создается массив Back того же размера, что и Data. В противном случае переменной Back присваивается значение Null.
12. Если в аргументе Instruct установлен бит Estimate, то
12.1. Переменной InArray присваивается значение Null и генерируется запрос к задачнику Get с аргументами Handle, InArray, tbAnswers (Получает от задачника правильные ответы)
12.2. Переменной RelArray присваивается значение Null и генерируется запрос к задачнику Get с аргументами Handle, RelArray, tbCalcReliability (Получает от задачника достоверности ответов)
12.3. Генерируется запрос к оценке Estimate с аргументами Data, Back, InArray, RelArray, Direv, Estim. Вместо Direv передается ноль, если в аргументе Instruct установлен бит Gradient, и 1 в противном случае. (Вычисляет оценку примера и, возможно, производные)
12.4. Если в аргументе Instruct установлен бит PutEstimations, то генерируется запрос к задачнику Put с аргументами Handle, Estim, tbEstimations (Передает задачнику оценку примера)
12.5. Освобождает массивы InArray и RelArray.
13. Если в аргументе Instruct установлен бит Gradient, то генерируется запрос к сети Back, с аргументами Null, Back. Освобождает массив Back. (Выполняется обратное функционирование сети)
14. Освобождается массив Data.
15. Если в аргументе Instruct установлен бит Contrast, то генерируется запрос к контрастеру ContrastExample с аргументом истина.
16. Завершает исполнение, возвращая значение истина
6.2.2. Обработка обучающего множества (TaskSetWork)
Описание запроса:
Pascal:
Function TaskSetWork(Instruct, Handle : Integer; Var Tasks : Integer; Var Correct : PRealArray; Var Estim : Real) : Logic;
C:
Logic TaskSetWork(Integer Instruct, Integer Handle, Integer* Tasks, PRealArray* Correct, Real* Estim)
Описание аргументов:
Instruct - содержит инструкции о способе исполнения.
Handle - номер сеанса в задачнике.
Tasks - число примеров в обучающем множестве.
Correct - указатель на массив, первый элемент которого равен числу правильных ответов на первую подзадачу и т.д.
Estim - средняя оценка решения всех примеров обучающего множества.
Назначение - производит обработку всех примеров обучающего множества.
Переменные, используемые при исполнении запроса
InArray, AnsArray, RelArray - адреса массивов для обменов с задачником.
Answers - указатель на массив вычисленных ответов.
Reliability - указатель на массив коэффициентов уверенности сети в ответах.
Back - адрес массива для обменов с оценкой.
Work - рабочая переменная типа Real для подсчета суммарной оценки.
Weight - рабочая переменная типа Real для веса примера.
Описание исполнения.
Если в любой момент исполнения запроса возникает ошибка при исполнении запросов к другим компонентам, то исполнение запроса прекращается, освобождаются все созданные в нем массивы, возвращается значение ложь, ошибка компонента исполнитель не генерируется.
Значение бит NextExample и StopOnEnd в аргументе Instruct игнорируются.
1. Если в аргументе Instruct установлен бит Gradient и не установлен бит Estimate, то выполнение запроса прекращается, и генерируется ошибка 001 - Некорректное сочетание флагов в аргументе Instruct.
2. Если в аргументе Instruct установлен бит Interpret, то создаются массивы Answers и Reliability того же размера, что и Correct
3. Выполняется следующий фрагмент программы (Обнуление массива количеств правильных ответов)
3.1. For I = 1 To TLong(Correct[0]) Do
3.2. Correct[I] = 0
4. Обнуляем счетчик числа примеров: Tasks = 0
5. Обнуляем суммарную оценку: Work = 0
6. Переменной Back присваивается значение Null.
7. Присваивает переменной Data значение Null и генерирует запрос к сети GetNetData с аргументами Null, OutSignals, Data. (Получает от сети выходные сигналы, для выяснения размерности массива Data. Сами значения сигналов не нужны)
8. Если в аргументе Instruct установлен бит Gradient, то
8.1. Генерируется запрос к сети NullGradient с аргументом Null.
8.2. Создается массив Back того же размера, что и Data.
9. Генерируется запрос к задачнику Home с аргументом Handle. (Переход на начало обучающего множества)
10. Переменной InArray присваивается значение Null и генерируется запрос к задачнику Get с аргументами Handle, InArray, tbPrepared (Создаем массив InArray для получения от задачника предобработанных входных сигналов)
11. Переменной AnsArray присваивается значение Null и генерируется запрос к задачнику Get с аргументами Handle, AnsArray, tbAnswers (Создаем массив AnsArray для получения от задачника правильных ответов)
12. Если в аргументе Instruct установлен бит Estimate, то создается массив RelArray того же размера, что и AnsArray.
13. Генерируется запрос к задачнику Last с аргументом Handle. (Проверка, существует ли пример)
14. Если запрос Last вернул значение ложь, то
14.1. Tasks = Tasks + 1
14.2. Генерируется запрос к задачнику Get с аргументами Handle, InArray, tbPrepared (Получает от задачника предобработанные входные сигналы)
14.3. Генерируется запрос к сети Forw, с аргументами Null, InArray. (Выполняется прямое функционирование сети)
14.4. Генерирует запрос к сети GetNetData с аргументами Null, OutSignals, Data. (Получает от сети выходные сигналы)
14.5. Если в аргументе Instruct установлен бит Interpret, то
14.5.1. Генерируется запрос к интерпретатору ответа Interpretate с аргументами Data, Answers, Reliability. (Производит интерпретацию ответа)
14.5.2. Если в аргументе Instruct установлен бит PutAnswers, то генерируется запрос к задачнику Put с аргументами Handle, Answers, tbCalcAnswers (Передает задачнику вычисленные ответы)
14.5.3. Если в аргументе Instruct установлен бит PutReliability, то генерируется запрос к задачнику Put с аргументами Handle, Reliability, tbCalcReliability (Передает задачнику вычисленные коэффициенты уверенности в ответе)
14.5.4. Генерируется запрос к задачнику Get с аргументами Handle, AnsArray, tbAnswers (Получает от задачника правильные ответы)
14.5.5. Выполняется следующий фрагмент программы (Подсчитываются правильно полученные ответы)
14.5.5.1. For I = 1 To TLong(Correct[0]) Do
14.5.5.2. If Answers[I] = AnsArray[I] Then TLong(Correct[I]) = TLong(Correct[I]) + 1
14.6. Если в аргументе Instruct установлен бит Estimate, то
14.6.1. Если в аргументе Instruct не установлен бит Interpret, то генерируется запрос к задачнику Get с аргументами Handle, AnsArray, tbAnswers (Получает от задачника правильные ответы)
14.6.2. Генерируется запрос к задачнику Get с аргументами Handle, RelArray, tbCalcReliability (Получает от задачника достоверности ответов)
14.6.3. Генерируется запрос к оценке Estimate с аргументами Data, Back, AnsArray, RelArray, Direv, Estim. Вместо Direv передается ноль, если в аргументе Instruct установлен бит Gradient, и 1 в противном случае. (Вычисляет оценку примера и, возможно, производные)
14.6.4. Генерируется запрос к задачнику Get с аргументами Handle, Weight, tbWeight (Получает от задачника вес примера)
14.6.5. Work = Work + Estim * Weight (Подсчитываем суммарную оценку)
14.6.6. Если в аргументе Instruct установлен бит PutEstimations, то генерируется запрос к задачнику Put с аргументами Handle, Estim, tbEstimations (Передает задачнику оценку примера)
14.7. Если в аргументе Instruct установлен бит Gradient, то генерируется запрос к сети Back, с аргументами Null, Back. (Выполняется обратное функционирование сети)
14.8. Если в аргументе Instruct установлен бит Contrast, то генерируется запрос к контрастеру ContrastExample с аргументом ложь.
14.9. Генерируется запрос к задачнику Next с аргументом Handle. (Переход к следующему примеру)
14.10. Переход к шагу 13 алгоритма.
15. Вычисляем среднюю оценку: If Tasks = 0 Then Estim = 0 Else Estim = Work / Task
16. Если в аргументе Instruct установлен бит Contrast, то генерируется запрос к контрастеру ContrastExample с аргументом истина.
17. Освобождаются массивы Data, AnsArray и InArray.
18. Если в аргументе Instruct установлен бит Estimate, то освобождается массив и RelArray.
19. Если в аргументе Instruct установлен бит Interpret, то освобождаются массивы Answers и Reliability.
20. Если Back <> Null освобождается массив Back.
21. Завершает исполнение, возвращая значение истина
6.2.3. Ошибки компонента исполнитель
В табл. 4 приведен полный список ошибок, которые могут возникать при выполнении запросов компонентом исполнитель, и действия стандартного обработчика ошибок.
Таблица 4.
Ошибки компонента исполнитель
и действия стандартного обработчика ошибок.
№ |
Название ошибки |
Стандартная обработка |
|
001 |
Некорректное сочетание флагов в Instruct. |
Занесение номера в Error |
7. Учитель
Этот компонент не является столь универсальным как задачник, оценка или нейронная сеть, поскольку существует ряд алгоритмов обучения жестко привязаны к архитектуре нейронной сети. Примерами таких алгоритмов могут служить обучение (формирование синаптической карты) сети Хопфилда [316], обучение сети Кохонена [130, 131] и ряд других аналогичных сетей. Однако в главе «Описание нейронных сетей» приводится способ формирования сетей, позволяющий обучать сети Хопфилда [316] и Кохонена [130, 131] методом обратного распространения ошибки. Существуют также альтернативные способы вычисления градиента функции оценки по обучаемым параметрам нейронной сети и входным сигналам (см. например, [30, 285]). Описываемый в этой главе стандарт компонента учитель ориентирован в первую очередь на обучение двойственных сетей (сетей обратного распространения ошибки). Подробный обзор существующих методов обучения нейронных сетей приведен в [243, 251, 283].
7.1. Что можно обучать методом двойственности
Как правило, метод двойственности (обратного распространения ошибки) используют для подстройки параметров нейронной сети. Однако, как было показано в главе «Описание нейронных сетей», сеть может вычислять не только градиент функции оценки по обучаемым параметрам сети, но и по входным сигналам сети. Используя градиент функции оценки по входным сигналам сети можно решать задачу, обратную по отношению к обучению нейронной сети.
Рассмотрим следующий пример. Пусть есть сеть, обученная предсказывать по текущему состоянию больного и набору применяемых лекарств состояние больного через некоторый промежуток времени. Поступил новый больной. Его параметры ввели сети и она выдала прогноз. Из прогноза следует ухудшение некоторых параметров состояния больного. Возьмем выданный сетью прогноз, заменим значения параметров, по которым наблюдается ухудшение, на желаемые значения. Полученный вектор ответов объявим правильным ответом. Имея правильный ответ и ответ, выданный сетью, вычислим градиент функции оценки по входным сигналам сети. В соответствии со значениями элементов градиента изменим значения входных сигналов сети так, чтобы оценка уменьшилась. Проделав эту процедуру несколько раз, получим вектор входных сигналов, порождающих правильный ответ. Далее врач должен определить, каким способом (какими лекарствами или процедурами) перевести больного в требуемое (полученное в ходе обучения входных сигналов) состояние. В большинстве случаев часть входных сигналов не подлежит изменению (например пол или возраст больного). В этом случае эти входные сигналы должны быть помечены как не обучаемые (см. использование маски обучаемости входных сигналов в главе «Описание нейронных сетей»).
Таким образом, способность сетей вычислять градиент функции оценки по входным параметрам сети позволяет решать вполне осмысленную обратную задачу: так подобрать входные сигналы сети, чтобы выходные сигналы удовлетворяли заданным требованиям.
Кроме того, использование нейронных сетей позволяет ставить новые вопросы перед исследователем. В практике группы «НейроКомп» был следующий случай. Была поставлена задача обучить сеть ставить диагноз вторичного иммунодефицита по данным анализов крови и клеточного метаболизма. Вся обучающая выборка была разбита на два класса: больные и здоровые. При анализе базы данных стандартными статистическими методами значимых отличий обнаружить не удалось. Сеть оказалась не способна обучиться. Далее у исследователя было два пути: либо увеличить число нейронов в сети, либо определить, что мешает обучению. Исследователи выбрали второй путь. При обучении сети была применена следующая процедура: как только обучение сети останавливалось из-за невозможности дальнейшего уменьшения оценки, пример, имеющий наихудшую оценку, исключался из обучающего множества. После того, как сеть обучилась решению задачи на усеченном обучающем множестве, был проведен анализ исключенных примеров. Выяснилось, что исключено около половины больных. Тогда множество больных было разбито на два класса - больные1 (оставшиеся в обучающем множестве) и больные2 (исключенные). При таком разбиении обучающей выборки стандартные методы статистики показали значимые различия в параметрах классов. Обучение сети классификации на три класса быстро завершилось полным успехом. При содержательном анализе примеров, составляющих классы больные1 и больные2, было установлено, что к классу болные1 относятся больные на завершающей стадии заболевания, а к классу больные2 - на начальной. Ранее такое разбиение больных не проводилось. Таким образом, обучение нейронной сети решению прикладной задачи поставило перед исследователем содержательный вопрос, позволивший получить новое знание о предметной области.
Подводя итоги этого раздела, можно сказать, что, используя метод двойственности в обучении нейронных сетей можно:
Обучать сеть решению задачи.
Подбирать входные данные так, чтобы на выходе нейронной сети был заданный ответ.
Ставить вопросы о соответствии входных данных задачника постановке нейросетевой задачи.
7.2. Задача обучения сети
С точки зрения математики, задача обучения нейронной сети является задачей минимизации множества функций многих переменных. Речь идет именно о неструктурированном множестве функций, зависящих от одних и тех же переменных. Под переменными понимаются обучаемые параметры сети, а под функциями - оценки решения сетью отдельных примеров. Очевидно, что сформулированная выше задача является как минимум трудно разрешимой, а часто и просто некорректной.
Основная проблема состоит в том, что при оптимизации первой функции, значения других функций не контролируются. И наоборот, при оптимизации всех других функций не контролируется значение первой функции. Если обучение устроено по циклу - сначала оптимизация первой функции, потом второй и т.д., то после завершения цикла значение любой из функций может оказаться не меньше, а больше чем до начала обучения. Такой подход к обучению нейронных сетей привел к появлению различных методов «коррекции» данной трудности. Так, например, появилось правило, что нельзя «сильно» оптимизировать оценку отдельного примера, для того, чтобы при оптимизации сеть «не сильно» забывала остальные примеры. Возникли различные правила «правильного» перебора примеров и т.д. Наиболее ярким примером такого правила является случайный перебор примеров, рекомендованный для обучения сетей, обучаемых без учителя (сетей Кохонена [130, 131]). Однако все эти правила не гарантировали быстрого достижения результата. Более того, часто результат вообще не достигался за обозримое время.
Альтернативой всем правилам «малой оптимизации» и «правильного перебора примеров» является выработка единой функции оценки всего обучающего множества. Правила построения оценки обучающего множества из оценок отдельных примеров приведены в главе «Оценка и интерпретатор ответа».
В случае использования оценки обучающего множества, математическая интерпретация задачи приобретает классический вид задачи минимизации функции в пространстве многих переменных. Для этой классической задачи существует множество известных методов решения [48, 104, 144, 183, 240]. Особенностью обучения нейронных сетей является их способность быстро вычислять градиент функции оценки. Под быстро, понимается тот факт, что на вычисления градиента тратится всего в два-три раза больше времени, чем на вычисление самой функции. Именно этот факт делает градиентные методы наиболее полезными при обучении нейронных сетей. Большая размерность пространства обучаемых параметров нейронной сети (102-106) делает практически неприменимыми все методы, явно использующие матрицу вторых производных.
7.3. Описание алгоритмов обучения
Все алгоритмы обучения сетей методом обратного распространения ошибки опираются на способность сети вычислять градиент функции ошибки по обучающим параметрам. Даже правило Хебба использует вектор псевдоградиента, вычисляемый сетью при использовании зеркального порогового элемента (см. раздел «Пороговый элемент» главы «Описание нейронных сетей»). Таким образом, акт обучения состоит из вычисления градиента и собственно обучения сети (модификации параметров сети). Однако, существует множество не градиентных методов обучения, таких, как метод покоординатного спуска, метод случайного поиска и целое семейство методов Монте-Карло. Все эти методы могут использоваться при обучении нейронных сетей, хотя, как правило, они менее эффективны, чем градиентные методы. Некоторые варианты методов обучения описаны далее в этой главе.
Поскольку обучение двойственных сетей с точки зрения используемого математического аппарата эквивалентно задаче многомерной оптимизации, то в данной главе рассмотрены только несколько методов обучения, наиболее используемых при обучении сетей. Более полное представление о методах оптимизации, допускающих использование в обучении нейронных сетей, можно получить из книг по методам оптимизации (см. например [48, 104, 144]).
7.3.1. Краткий обзор макрокоманд учителя
При описании методов используется набор макросов, приведенный в табл. 2. В табл. 2 дано пояснение выполняемых макросами действий. Все макрокоманды могут оперировать с данными как пространства параметров, так и пространства входных сигналов сети. В первой части главы полагается, что объект обучения установлен заранее. В макросах используются понятия и аргументы, приведенные в табл. 1. Список макрокоманд приведен в табл. 2. При описании методов обучения все аргументы имеют тип, определяемый типом аргумента макрокоманды. Если в описании макрокоманды в табл. 2 тип аргумента не соответствует ни одному из типов, приведенных в табл. 1, то эти аргументы имеют числовой тип.
Таблица 1
Понятия и аргументы макрокоманд, используемых при описании учителя
Название |
Смысл |
|
Точка |
Точка в пространстве параметров или входных сигналов. Аналогична вектору. |
|
Вектор |
Вектор в пространстве параметров или входных сигналов. Аналогичен точке. |
|
Вектор_минимумов |
Вектор минимальных значений параметров или входных сигналов. |
|
Вектор_максимумов |
Вектор максимальных значений параметров или входных сигналов. |
|
Указатель_на_вектор |
Адрес вектора. Используется для передачи векторов в макрокоманды. |
|
Пустой_указатель |
Указатель на отсутствующий вектор. |
Таблица 2
Список макрокоманд, используемых для описания учителя
Название |
Аргументы (типы) |
Выполняемые действия |
|
Модификация_вектора |
Указатель_на_векторСтарый_ШагНовый_Шаг |
Генерирует запрос на модификацию вектора (см. раздел «Провести обучение (Modify)» приложения). |
|
Вычислить_градиент |
Вычисляет градиент функции оценки. |
||
Установить_параметры |
Указатель_на_вектор |
Скопировать вектор, указанный в аргументе Указатель_на_вектор, в текущий вектор. |
|
Создать_вектор |
Указатель_на_вектор |
Создает экземпляр вектора с неопределенными значениями. Адрес вектора помещается в Указатель_на_вектор. |
|
Освободить_вектор |
Указатель_на_вектор |
Освобождает память занятую вектором, расположенным по адресу Указатель_на_вектор. |
|
Случайный_вектор |
Указатель_на_вектор |
В векторе, на который указывает Указатель_на_вектор, генерируется вектор, каждая из координат которого является случайной величиной, равномерно распределенной на интервале между значениями соответствующих координат векторов Вектор_минимумов и Вектор_максимумов. |
|
Оптимизация_шага |
Указатель_на_векторНачальный_Шаг |
Производит подбор оптимального шага (см. рис. 3). |
|
Сохранить_вектор |
Указатель_на_вектор |
Скопировать текущий вектор в вектор, указанный в аргументе Указатель_на_вектор. |
|
Вычислить_оценку |
Оценка |
Вычисляет оценку текущего вектора. Вычисленную величину складывает в аргумент Оценка. |
7.3.2. Неградиентные методы обучения
Создать_вектор В1
Создать_вектор В2
Вычислить_оценку О1
Сохранить_вктор В1
Установить_параметры В1
Случайный_вектор В2
Модификация_вектора В2, 0, 1
Вычислить_оценку О2
Если О2<О1 то переход к шагу 11
Переход к шагу 5
О1=О2
Переход к шагу 4
Установить_параметры В1
Освободить_вектор В1
Освободить_вектор В2
Рис. 1. Простейший алгоритм метода случайной стрельбы
Среди неградиентных методов рассмотрим следующие методы, каждый из которых является представителем целого семейства методов оптимизации:
Метод случайной стрельбы (представитель семейства методов Монте-Карло).
Метод покоординатного спуска (псевдоградиентный метод).
Метод случайного поиска (псевдоградиентный метод).
Метод Нелдера-Мида.
7.3.2.1. Метод
случайной стрельбы
Идея метода случайной стрельбы [48] состоит в генерации большой последовательности случайных точек и вычисления оценки в каждой из них. При достаточной длине последовательности минимум будет найден. Запись этой процедуры на макроязыке приведена на рис. 1
Остановка данной процедуры производится по команде пользователя или при выполнении условия, что О1 стало меньше некоторой заданной величины. Существует огромное разнообразие модификаций этого метода. Наиболее простой является метод случайной стрельбы с уменьшением радиуса. Пример процедуры, реализующей этот метод, приведен на рис. 2. В этом методе есть два параметра, задаваемых пользователем:
Число_попыток - число неудачных пробных генераций вектора при одном радиусе.
Создать_вектор В1
Создать_вектор В2
Вычислить_оценку О1
Число_Смен_Радиуса=1
Радиус=1/ Число_Смен_Радиуса
Попытка=0
Сохранить_вктор В1
Установить_параметры В1
Случайный_вектор В2
Модификация_вектора В2, 1, Радиус
Вычислить_оценку О2
Попытка=Попытка+1
Если О2<О1 то переход к шагу 16
Если Попытка<=Число_попыток то
переход к шагу 8
Переход к шагу 18
О1=О2
Переход к шагу 6
Число_Смен_Радиуса= Число_Смен_Радиуса+1
Радиус=1/ Число_Смен_Радиуса
Если радиус>= Минимальный_радиус
то переход к шагу 6
Установить_параметры В1
Освободить_вектор В1
Освободить_вектор В2
Рис. 2. Алгоритм метода случайной стрельбы с уменьшением радиуса
Минимальный_радиус - минимальное значение радиуса, при котором продолжает работать алгоритм.
Идея этого метода состоит в следующем. Зададимся начальным состоянием вектора параметров. Новый вектор параметров будем искать как сумму начального и случайного, умноженного на радиус, векторов. Если после Число_попыток случайных генераций не произошло уменьшения оценки, то уменьшаем радиус. Если произошло уменьшение оценки, то полученный вектор объявляем начальным и продолжаем процедуру с тем же шагом. Важно, чтобы последовательность уменьшающихся радиусов образовывала расходящийся ряд. Примером такой последовательности может служить использованный в примере на рис. 2 ряд .
Отмечен ряд случаев, когда метод случайной стрельбы с уменьшением радиуса работает быстрее градиентных методов, но обычно это не так.
7.3.2.2. Метод покоординатного спуска
Идея этого метода [48, 183] состоит в том, что если в задаче сложно или долго вычислять градиент, то можно построить вектор, обладающий приблизительно теми же свойствами, что и градиент следующим путем. Даем малое положительное приращение первой координате вектора. Если оценка при этом увеличилась, то пробуем отрицательное приращение. Далее так же поступаем со всеми остальными координатами. В результате получаем вектор, в направлении которого оценка убывает. Для вычисления такого вектора потребуется, как минимум, столько вычислений функции оценки, сколько координат у вектора. В худшем случае потребуется в два раза большее число вычислений функции оценки. Время же необходимое для вычисления градиента в случае использования двойственных сетей можно оценить как 2-3 вычисления функции оценки. Таким образом, учитывая способность двойственных сетей быстро вычислять градиент, можно сделать вывод о нецелесообразности применения метода покоординатного спуска в обучении нейронных сетей.
7.3.2.3. Подбор оптимального шага
Данный раздел посвящен описанию макрокоманды Оптимизация_Шага. Эта макрокоманда часто используется в описании процедур обучения и не столь очевидна как другие макрокоманды. Поэтому ее текст приведен на рис. 3. Идея подбора оптимального шага состоит в том, что при наличии направления в котором производится спуск (изменение параметров) задача многомерной оптимизации в пространстве параметров сводится к одномерной оптимизации - подбору шага. Пусть заданы начальный шаг (Ш2) и направление спуска (антиградиент или случайное) (Н). Тогда вычислим величину О1 - оценку в текущей точке пространства
параметров. Изменив параметры на вектор направления, умноженный на величину пробного шага, вычислим величину оценки в новой точке - О2. Если О2 оказалось меньше либо равно О1, то увеличиваем шаг и снова вычисляем оценку. Продолжаем эту процедуру до тех пор, пока не получится оценка, большая предыдущей. Зная три последних значения величины шага и оценки, используем квадратичную оптимизацию - по трем точкам построим параболу и следующий шаг сделаем в вершину параболы. После нескольких шагов квадратичной оптимизации получаем приближенное значение оптимального шага.
Рис. 3. Алгоритм оптимизации шага
Если после первого пробного шага получилось О2 большее О1, то уменьшаем шаг до тех пор, пока не получим оценку, меньше чем О1. После этого производим квадратичную оптимизацию.
7.3.2.4. Метод случайного поиска
Этот метод [48] похож на метод случайной стрельбы с уменьшением радиуса, однако в его основе лежит другая идея - сгенерируем случайный вектор и будем использовать его вместо градиента. Этот метод использует одномерную оптимизацию - подбор шага. Одномерная оптимизация описана в разделе «Одномерная оптимизация». Процедура случайного поиска приведена на рис. 4. В этом методе есть два параметра, задаваемых пользователем.
Число_попыток - число неудачных пробных генераций вектора при одном радиусе.
Минимальный_радиус - минимальное значение радиуса, при котором продолжает работать алгоритм.
Создать_вектор Н
Число_Смен_Радиуса=1
Попытка=0
Радиус=1/ Число_Смен_Радиуса
Случайный_вектор Н
Оптимизация шага Н Радиус
Попытка=Попытка+1
Если Радиус=0 то Попытка=0
Если Попытка<=Число_попыток то переход к шагу 4
Число_Смен_Радиуса= Число_Смен_Радиуса+1
Радиус=1/ Число_Смен_Радиуса
Если Радиус>= Минимальный_радиус то переход к шагу 3
Освободить_вектор Н
Рис. 4. Алгоритм метода случайного поиска
Идея этого метода состоит в следующем. Зададимся начальным состоянием вектора параметров. Новый вектор параметров будем искать как сумму начального и случайного, умноженного на радиус, векторов. Если после Число_попыток случайных генераций не произошло уменьшения оценки, то уменьшаем радиус. Если произошло уменьшение оценки, то полученный вектор объявляем начальным и продолжаем процедуру с тем же шагом. Важно, чтобы последовательность уменьшающихся радиусов образовывала расходящийся ряд. Примером такой последовательности может служить использованный в примере на рис. 4 ряд .
7.3.2.5. Метод Нелдера-Мида
Этот метод [48] является одним из наиболее быстрых и наиболее надежных не градиентных методов многомерной оптимизации. Идея этого метода состоит в следующем. В пространстве оптимизируемых параметров генерируется случайная точка. Затем строится n-мерный симплекс с центром в этой точке, и длиной стороны l. Далее в каждой из вершин симплекса вычисляется значение оценки. Выбирается вершина с наибольшей оценкой. Вычисляется центр тяжести остальных n вершин. Проводится оптимизация шага в направлении от наихудшей вершины к центру тяжести остальных вершин. Эта процедура повторяется до тех пор, пока не окажется, что оптимизация не изменяет положения вершины. После этого выбирается вершина с наилучшей оценкой и вокруг нее снова строится симплекс с меньшими размерами (например ). Процедура продолжается до тех пор, пока размер симплекса, который необходимо построить, не окажется меньше требуемой точности.
Однако, несмотря на свою надежность, применение этого метода к обучению нейронных сетей затруднено большой размерностью пространства параметров.
7.3.3. Градиентные методы обучения
Изучению градиентных методов обучения нейронных сетей посвящено множество работ [47, 65, 92] (сослаться на все работы по этой теме не представляется возможным, поэтому дана ссылка на работы, где эта тема исследована наиболее детально). Кроме того, существует множество публикаций, посвященных градиентным методам поиска минимума функции [48, 104] (как и в предыдущем случае, ссылки даны только на две работы, которые показались наиболее удачными). Данный раздел не претендует на какую-либо полноту рассмотрения градиентных методов поиска минимума. В нем приведены только несколько методов, применявшихся в работе группой «НейроКомп». Все градиентные методы объединены использованием градиента как основы для вычисления направления спуска.
7.3.3.1. Метод наискорейшего спуска
Наиболее известным [48, 104, 183] среди градиентных методов является метод наискорейшего спуска. Идея этого метода проста: поскольку вектор градиента указывает направление наискорейшего возрастания функции, то минимум следует искать в обратном направлении. Последовательность действий приведена на рис. 5.
Вычислить_оценку О2
О1=О2
Вычислить_градиент
Оптимизация шага Пустой_указатель Шаг
Вычислить_оценку О2
Если О1-О2<Точность то переход к шагу 2
Рис. 5. Метод наискорейшего спуска
Этот метод работает, как правило, на порядок быстрее методов случайного поиска. Он имеет два параметра - Точность, показывающий, что если изменение оценки за шаг метода меньше чем Точность, то обучение останавливается; Шаг - начальный шаг для оптимизации шага. Заметим, что шаг постоянно изменяется в ходе оптимизации шага.
Подобные документы
Определение перспектив, направлений и тенденций развития вычислительных систем как совокупности техники и программных средств обработки информации. Развитие специализации вычислительных систем и проблема сфер применения. Тенденции развития информатики.
реферат [19,5 K], добавлен 17.03.2011Нейрокибернетика как направление изучения "искусственного интеллекта". Программный, аппаратный и гибридный подход к созданию нейросетей. Развитие института нейрокибернетики в России. Направления внедрение нейрокибернетики и интеллектуальных систем.
контрольная работа [31,4 K], добавлен 26.02.2012Историческое развитие средств вычислений. Структурные схемы вычислительных систем. Развитие элементной базы и развитие архитектуры самих систем. Основные классы вычислительных машин. Каналы передачи данных. Требования к составу периферийных устройств.
реферат [48,7 K], добавлен 09.01.2011Искусственные нейронные сети, строящиеся по принципам организации и функционирования их биологических аналогов. Элементарный преобразователь в сетях. Экспериментальный автопилотируемый гиперзвуковой самолет-разведчик LoFLYTE, использующий нейронные сети.
презентация [1,3 M], добавлен 23.09.2015Примеры счетно-решающих устройств до появления ЭВМ. Суммирующая машина Паскаля. Счетная машина Готфрида Лейбница. "Аналитическая машина" Чарльза Бэббиджа, развитие вычислительной техники после ее создания. Поколения электронно-вычислительных машин.
презентация [1,2 M], добавлен 10.02.2015Характеристика моделей обучения. Общие сведения о нейроне. Искусственные нейронные сети, персептрон. Проблема XOR и пути ее решения. Нейронные сети обратного распространения. Подготовка входных и выходных данных. Нейронные сети Хопфилда и Хэмминга.
контрольная работа [1,4 M], добавлен 28.01.2011Понятие искусственного интеллекта как свойства автоматических систем брать на себя отдельные функции интеллекта человека. Экспертные системы в области медицины. Различные подходы к построению систем искусственного интеллекта. Создание нейронных сетей.
презентация [3,0 M], добавлен 28.05.2015Основы нейрокомпьютерных систем. Искусственные нейронные сети, их применение в системах управления. Алгоритм обратного распространения. Нейронные сети Хопфилда, Хэмминга. Современные направления развития нейрокомпьютерных технологий в России и за рубежом.
дипломная работа [962,4 K], добавлен 23.06.2012Преимущества нейронных сетей. Модели нейронов, представляющих собой единицу обработки информации в нейронной сети. Ее представление с помощью направленных графов. Понятие обратной связи (feedback). Основная задача и значение искусственного интеллекта.
реферат [1,2 M], добавлен 24.05.2015Рождение искусственного интеллекта. История развития нейронных сетей, эволюционного программирования, нечеткой логики. Генетические алгоритмы, их применение. Искусственный интеллект, нейронные сети, эволюционное программирование и нечеткая логика сейчас.
реферат [78,9 K], добавлен 22.01.2015