Компонент исполнитель является служебным. Это означает, что
он универсален и невидим для пользователя. В отличие от всех других компонентов
исполнитель не выполняет ни одной явной функции в обучении нейронных сетей, а
является вспомогательным для компонентов учитель и контрастер. Задача этого
компонента – упростить работу компонентов учитель и контрастер. Этот компонент
выполняет всего несколько запросов, преобразуя каждый из них в
последовательность запросов к различным компонентам. В первой части главы
содержательно рассмотрены алгоритмы исполнения всех запросов исполнителя, а во
второй части приведено их формальное описание. Отметим, что ввиду универсальности
компонента исполнитель стандарт первого уровня отсутствует.
7.1 Описание запросов исполнителя.
Как было описано в главе «Функциональные компоненты»,
исполнитель выполняет четыре вида запросов.
- Тестирование решения примера.
- Оценивание решения примера.
- Оценивание решения примера с вычислением градиента.
- Оценивание и тестирование решения примера.
Таблица 1
Параметры запроса для позадачной работы
Название параметра |
1 |
2 |
3 |
4 |
Перейти к следующему примеру |
+/– |
+/– |
+/– |
+/– |
Остановиться в конце обучающего множества |
+/– |
+/– |
+/– |
+/– |
Вычислять оценку |
– |
+ |
+ |
+ |
Интерпретировать ответ |
+ |
– |
– |
+ |
Вычислять градиент |
– |
– |
+ |
– |
Подготовка к контрастированию |
– |
– |
+/– |
– |
Все перечисленные запросы работают с текущей сетью и текущим
примером задачника. Однако компоненту задачник необходимо указать, какой пример
подлежит обработке. Кроме того, в главе «Оценка и интерпретатор ответа» введен
класс оценок, вычисляемых по всему обучающему множеству. Такие оценки позволяют
существенно улучшить обучаемость сети и ускорить ее обучение. Нет смысла возлагать
перебор примеров на учителя, поскольку это снижает полезность компонента исполнитель.
Таким образом, возникает еще четыре вида запросов.
- Тестирование решения всех примеров обучающего множества.
- Оценивание решения всех примеров обучающего множества.
- Оценивание решения всех примеров обучающего множества с вычислением градиента.
- Оценивание и тестирование решения всех примеров обучающего множества.
Таблица 2
Параметры запроса для обучающего множества в целом
Название параметра |
5 |
6 |
7 |
8 |
Вычислять оценку |
– |
+ |
+ |
+ |
Интерпретировать ответ |
+ |
– |
– |
+ |
Вычислять градиент |
– |
– |
+ |
– |
Подготовка к контрастированию |
– |
– |
+/– |
– |
Таблица 3
Предопределенные константы компонента исполнитель
Название |
Идентификатор |
Значение |
Десят. |
Шестн. |
Вычислять оценку |
Estimate |
1 |
0001 |
Интерпретировать ответ |
Interpret |
2 |
0002 |
Вычислять градиент |
Gradient |
4 |
0004 |
Подготовка к контрастированию |
Contrast |
8 |
0008 |
Перейти к следующему примеру |
NextExample |
16 |
0010 |
Остановиться в конце обучающего множества |
StopOnEnd |
32 |
0020 |
Устанавливать ответы |
PutAnswers |
64 |
0040 |
Устанавливать оценки |
PutEstimations |
128 |
0080 |
Устанавливать уверенность в ответе |
PutReliability |
256 |
0100 |
Как уже отмечалось в главе «Функциональные компоненты»,
каждую из приведенных четверок запросов можно объединить в один запрос с параметрами.
В табл. 1 приведен полный список параметров для первой четверки запросов, а в
табл. 2 – для второй.
Символ «+» означает, что в запросе, номер которого указан в
первой строке колонки, возможность, задаваемая данным параметром, должна быть
использована. Символ «–» – что связанная с данным параметром возможность не
используется. Символы «+/–» означают, что запрос может, как использовать, так и
не использовать данную возможность. Отметим, что подготовка к контрастированию
может быть задействована, только если производится вычисление градиента, а
вычисление градиента невозможно без вычисления оценки. Остальные параметры независимы.
Отбор примеров в обучающее множество, открытие сеанса работы
с задачником должны выполняться учителем или контрастером. Исполнитель только
организует перебор примеров в обучающем множестве.
7.2 Стандарт компонента исполнитель второго уровня
В данном разделе описаны запросы исполнителя с алгоритмами
их исполнения. При описании запросов используется аргумент Instruct,
являющийся целым числом, принимающим значение одной из предопределенных
констант, приведенных в табл. 3., или суммы любого числа этих констант.
Аргумент Instruct является совокупностью шести битовых
флагов.
В запросах не указываются используемые сеть, оценка и
интерпретатор ответа, поскольку компонент исполнитель всегда использует текущие
сеть, оценку и интерпретатор ответа.
7.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 – адрес массива для обменов с оценкой.
Описание исполнения.
Если в любой момент исполнения запроса возникает ошибка при
исполнении запросов к другим компонентам, то исполнение запроса прекращается,
возвращается значение ложь, ошибка компонента исполнитель не генерируется.
- Если в аргументе Instruct установлен бит Gradient и не установлен бит Estimate,
то выполнение запроса прекращается, и генерируется ошибка 001 – Некорректное
сочетание флагов в аргументе Instruct.
- Если в аргументе Instruct установлен бит Gradient, то генерируется запрос к сети NullGradient
с аргументом Null.
- Если в аргументе Instruct установлен бит NextExample, то генерируется запрос к задачнику Next с аргументом Handle. (Переход к
следующему примеру)
- Генерируется запрос к задачнику Last с аргументом Handle. (Проверка, существует ли пример)
- Если запрос Last вернул значение истина, то
5.1. Если в аргументе Instruct установлен бит StopOnEnd, то исполнение запроса прекращается, возвращается
значение ложь. (Примера нет, переход на начало не нужен)
5.2. Генерируется запрос к задачнику Home с аргументом Handle. (Переход на начало обучающего
множества)
- Переменной InArray присваивается значение Null и
генерируется запрос к задачнику Get с аргументами Handle,
InArray, tbPrepared (Получает
от задачника предобработанные входные сигналы)
- Генерируется запрос к сети Forw, с аргументами Null, InArray (выполняется прямое
функционирование сети).
- Освобождается массив InArray
- Присваивает переменной Data значение Null и генерирует запрос к сети GetNetData
с аргументами Null, OutSignals, Data (Получает от сети выходные сигналы).
- Если в аргументе Instruct установлен бит Interpret, то
10.1. Генерируется запрос к интерпретатору ответа Interpretate с
аргументами Data, Answers, Reliability. (Производит интерпретацию ответа)
10.2. Если в аргументе Instruct установлен бит PutAnswers,
то генерируется запрос к задачнику Put с аргументами Handle,
Answers, tbCalcAnswers (Передает задачнику вычисленные ответы)
10.3. Если в аргументе Instruct установлен бит PutReliability, то генерируется запрос
к задачнику Put с аргументами Handle, Reliability, tbCalcReliability (Передает
задачнику вычисленные коэффициенты уверенности в ответе)
- Если в аргументе Instruct установлен бит Gradient,
то создается массив Back того же размера, что и Data. В противном случае переменной Back
присваивается значение Null.
- Если в аргументе 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.
- Если в аргументе Instruct установлен бит Gradient, то генерируется запрос к сети
Back, с аргументами Null, Back. Освобождает массив Back. (Выполняется обратное
функционирование сети)
- Освобождается массив Data.
- Если в аргументе Instruct установлен бит Contrast,
то генерируется запрос к контрастеру ContrastExample с
аргументом истина.
- Завершает исполнение, возвращая значение истина
7.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 игнорируются.
- Если в аргументе Instruct установлен бит Gradient и не установлен бит Estimate,
то выполнение запроса прекращается, и генерируется ошибка 001 – Некорректное
сочетание флагов в аргументе Instruct.
- Если в аргументе Instruct установлен бит Interpret, то создаются массивы Answers
и Reliability того же размера, что и Correct
- Выполняется следующий фрагмент программы (Обнуление массива количеств
правильных ответов)
For I = 1 To TLong(Correct[0]) Do
Correct[I] = 0
- Обнуляем счетчик числа примеров: Tasks = 0
- Обнуляем суммарную оценку: Work = 0
- Переменной Back присваивается значение Null.
- Присваивает переменной Data значение Null и генерирует запрос к сети GetNetData
с аргументами Null, OutSignals, Data. (Получает от сети выходные сигналы, для выяснения
размерности массива Data. Сами значения сигналов не нужны)
- Если в аргументе Instruct установлен бит Gradient, то
8.1. Генерируется запрос к сети NullGradient с аргументом Null.
8.2. Создается массив Back того же размера, что и Data.
- Генерируется запрос к задачнику Home с аргументом Handle. (Переход на начало обучающего множества)
- Переменной InArray присваивается значение Null и генерируется запрос к задачнику Get с аргументами Handle,
InArray, tbPrepared (Создаем массив InArray для получения от задачника предобработанных входных сигналов)
- Переменной AnsArray присваивается значение Null и генерируется запрос к задачнику Get с аргументами Handle,
AnsArray, tbAnswers (Создаем массив AnsArray для получения от задачника правильных ответов)
- Если в аргументе Instruct установлен бит Estimate, то создается массив RelArray того же размера,
что и AnsArray.
- Генерируется запрос к задачнику Last с аргументом Handle. (Проверка, существует ли пример)
- Если запрос 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. Выполняется следующий фрагмент программы (Подсчитываются правильно полученные ответы)
For I = 1 To TLong(Correct[0]) Do
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 алгоритма.
- Вычисляем среднюю оценку: If Tasks = 0 Then Estim = 0 Else Estim = Work / Task
- Если в аргументе Instruct установлен бит Contrast, то генерируется запрос к контрастеру ContrastExample с
аргументом истина.
- Освобождаются массивы Data, AnsArray и InArray.
- Если в аргументе Instruct установлен бит Estimate, то освобождается массив и RelArray.
- Если в аргументе Instruct установлен бит Interpret, то освобождаются массивы Answers и Reliability.
- Если Back <> Null освобождается массив Back.
- Завершает исполнение, возвращая значение истина
7.2.3 Ошибки компонента исполнитель
Таблица 4
Ошибки компонента исполнитель и действия стандартного обработчика ошибок
№ |
Название ошибки |
Стандартная обработка |
001 |
Некорректное сочетание флагов в аргументе Instruct. |
Занесение номера в Error |
В табл. 4 приведен полный список ошибок, которые могут
возникать при выполнении запросов компонентом исполнитель, и действия
стандартного обработчика ошибок.
|