1. Постановка задачи моделирования нейронной сети bam и составление обучающей выборки.
В качестве примера практического применения модели двунаправленной ассоциативной памяти возьмем задачу распознавания образов по заданным ассоциациям. В качестве объектов рассмотрим три группы (рис.3 ):
«N» – «n»;
«T» – «t»;
«C» – «c».
Матрица 5х5 в нашем примере отображается на слой BAM1, а матрица 5х4 – на слой BAM2.
Рис. 3. Обучающие образы.
В соответствии с принципами кодирования входных данных двунаправленной ассоциативной памяти составим обучающую выборку. 25 пикселов первой матрицы 5х5 преобразуются в строку из 25 символов. При этом закрашенный пиксель преобразуется в «1», а пустой в «–1». Вторая меньшая матрица 5х4 преобразуется по описанному правилу в строку, состоящую из 20 символов. Таким образом, получаем входную обучающую выборку, из которой за один такт берется по две входных последовательности (две i-строки) для подачи на входной слой и слой BAM 2. Входной файл mybam.nni имеет вид:
* T – t
i 1. 1. 1. 1. 1. -1. -1. 1. -1. -1. -1. -1. 1. -1. -1. -1. -1. 1. -1. -1. -1. -1. 1. -1. -1.
i -1. -1. 1. -1. -1. 1. 1. 1. 1. 1. -1. -1. 1. -1. -1. -1. -1. 1. 1. 1.
* N – n
i 1. -1. -1. -1. 1. 1. 1. -1. -1. 1. 1. -1. 1. -1. 1. 1. -1. -1. 1. 1. 1. -1. -1. -1. 1.
i 1. 1. 1. -1. -1. 1. -1. -1. 1. -1. 1. -1. -1. 1. -1. 1. -1. -1. 1. -1.
* C – c
i -1. 1. 1. 1. 1. 1. -1. -1. -1. -1. 1. -1. -1. -1. -1. 1. -1. -1. -1. -1. -1. 1. 1. 1. 1.
i -1. 1. 1. 1. 1. 1. -1. -1. -1. -1. 1. -1. -1. -1. -1. -1. 1. 1. 1. 1.
Для двунаправленной ассоциативной памяти в NeuralWorks Professional II включен интерфейс просмотра ответов сети, который запускается при выборе режима работы сети «UserIO» и задании имени подпрограммы «bam». С целью упрощения обучения сети и просмотра результатов ее работы, в программный интерфейс включена подпрограмма «Attention I/O», которая запускается при выборе из меню «Execute Network» команды «Attention I/O». При этом программа запросит имя файла с расширением .ass. Для рассматриваемого примера он имеет вид:
! PATTERN 1 for LAYER A (Input layer)
11111
1
1
1
1
! PATTERN 1 for LAYER B (Output layer)
1
11111
1
111
! PATTERN 2 for LAYER A (Input layer)
1 1
11 1
1 1 1
1 11
1 1
! PATTERN 2 for LAYER B (Output layer)
111
1 1
1 1
1 1
! PATTERN 3 for LAYER A (Input layer)
1111
1
1
1
1111
! PATTERN 3 for LAYER B (Output layer)
1111
1
1
1111
Как видно из структуры файла, входные данные легко отображаются, к тому же эта подпрограмма дает возможность изменять входной пример, внося в него ошибку.
2. Моделирование двунаправленной ассоциативной памяти.
1. Для моделирования сети BAM воспользуйтесь командой меню InstaNet и создайте сеть, состоящую из четырех слоев, причем входной слой и слой BAM1 состоят из 25 процессорных элементов каждый, а выходной слой и слой BAM2 включают по 20 элементов (рис.4).
Рис. 4. Создание сети BAM.
2. Проверьте параметры сети и слоев по таблице.
Таблица 1.2. Параметры сети ВАМ и слоев.
Параметры сети |
||
Тип нейросети |
Гетеро-ассоциативная |
|
Управляющая стратегия |
BAM |
|
Обучающее правило |
Хопфилда |
|
Входной слой (In) |
||
Суммирующая функция |
Sum |
|
Передаточная функция |
Signum |
|
Масштаб |
шкала 1.0 |
|
смещение 0.0 |
||
Ограничения |
нижняя граница -9999 |
|
верхняя граница +9999 |
||
Выходная функция |
Direct |
|
Обучающее правило |
Нет |
|
Средний (BAM I) слой |
||
Суммирующая функция |
Sum |
|
Передаточная функция |
ВАМ |
|
Масштаб |
шкала 1,0 |
|
смещение 0,0 |
||
Ограничения |
нижняя граница -9999 |
|
верхняя граница +9999 |
||
Выходная функция |
Direct |
|
Обучающее правило |
BSB: Hebb |
|
Средний (BAM II) слой |
||
Суммирующая функция |
Sum |
|
Передаточная функция |
ВАМ |
|
Масштаб |
шкала 1,0 |
|
смещение 0,0 |
||
Ограничения |
нижняя граница -9999 |
|
верхняя граница +9999 |
||
Выходная функция |
Direct |
|
Обучающее правило |
BSB: Hebb |
|
Выходной слой (Out) |
||
Суммирующая функция |
Sum |
|
Передаточная функция |
BAM |
|
Масштаб |
шкала 1.0 |
|
смещение 0.0 |
||
Ограничения |
нижняя граница -9999 |
|
верхняя граница +9999 |
||
Выходная функция |
Direct |
|
Обучающее правило |
Нет |
|
Функция Signum имеет следующий вид:
Функция
BAM
представляется как:
Итак, как видно из таблицы, двунаправленная ассоциативная память является трехслойной нейронной сетью, т.е. имеет два скрытых слоя. Причем, специфика сети в том, что для ее работы необходимо два набора входных данных – для входного и выходного слоев. Таким образом, из входного файла должны считываться две последовательные i-строки.
Создайте инструменты для просмотра входной и выходной информации.
Проба Output создается автоматически, поэтому для создания инструмента воспользуемся сразу командой Instrument/Add Instrument, в диалоговом окне которой устанавливаются следующие параметры:
Title : Output - название инструмента;
Probe : Output - имя пробы с данными;
Variable : Output - тип переменной в пробе;
Trans. mode : None - режим передачи данных;
Trans. Type : Root Meaning - тип обработки данных при передаче;
Graphing Active : Yes - флаг активности инструмента;
Vmin : 0.0000 - Минимальная граница диапазона выводимых значений;
Vmax : 1.0000 - Максимальная граница диапазона выводимых значений;
# x : 5- число позиций в строке графика;
# plots : 25 - общее число позиций в графике;
height : 100 - высота инструмента в экранных пикселях;
width : 100 - ширина инструмента в экранных пикселях;
Graph Type : Bar Graph;
Disp. Mode : Always - режим отображения инструмента на экране.
Для создания инструмента INPUT сначала создайте пробу Input, для этого командой меню Probe / Select/Edit в диалоговом окне в поле Name введите название пробы и кнопкой NEW добавьте ее в список. Добавьте в новую пробу входной слой командой Probe / Add Layer. Меню надо вызвать над любым процессорным элементом этого слоя.
Теперь создайте инструмент INPUT. На инструменте OUTPUT вызовите команду меню Instrument / Add Instrument. В диалоговом окне надо изменить всего два параметра.
Title : Input - название инструмента;
Probe : Input - имя пробы с данными;
Рис. 5. Сеть BAM с инструментами для просмотра образов во входном и выходном слоях.
Создайте инструменты для наблюдения за выходами слоев BAM1 и BAM2.
Для создания инструмента BAM1 создайте пробу Bam1, для этого командой меню Probe / Select/Edit в диалоговом окне в поле Name введите название пробы и кнопкой NEW добавьте ее в список. Добавьте в новую пробу слой BAM1 командой Probe / Add Layer. Меню надо вызвать над любым процессорным элементом этого слоя.
Для создания инструмента BAM1 на инструменте INPUT вызовите команду Instrument/Add Instrument. В диалоговом окне измените два параметра:
Title : BAM1 - название инструмента;
Probe : Bam1 - имя пробы с данными.
6. Для создания инструмента BAM2 создайте пробу Bam2, для этого командой меню Probe / Select/Edit в диалоговом окне в поле Name введите название пробы и кнопкой NEW добавьте ее в список. Добавьте в новую пробу слой BAM2 командой Probe / Add Layer. Меню надо вызвать над любым процессорным элементом этого слоя.
Для создания инструмента BAM2 на инструменте OUTPUT вызовите команду Instrument/Add Instrument. В диалоговом окне измените два параметра:
Title : BAM2 - название инструмента;
Probe : Bam2 - имя пробы с данными;
7. Перед обучением в диалоговом окне Network/Edit следующим образом:
Learn Source – Alpha = mybam (имя файла с обучающей выборкой);
Recall Source – Alpha = mybam (имя файла с тестами).
8. Перед обучением обнулите весовые коэффициенты с помощью команды Network/Zero Weights.
9. Запустите сеть на обучение, выбрав из меню «Execute Network» команду «Learn All».
10. Для проверки результатов функционирования сети выберите из меню «Execute Network» команду «Recall One».
11. Исследуйте работоспособность сети при подаче искаженных образов (рис.6).
Рис. 6. Сеть BAM с инструментами BAM1 м BAM2.
Это
можно сделать с помощью программного
интерфейса (рис.7).
Рис. 7. Программный интерфейс NeuralWorks Professional II для исследования работы сети (файл bam.ass).
Установите режим работы сети “User IO” в диалоговом окне Network/Edit. Выполните команду Execute Network/Attention I/O и введите имя своего файла с расширением .ass. Чтобы наблюдать итерационный процесс определения ассоциированных образов в слоях BAM1 и BAM2, необходимо установить в инструментах параметр Recall Divisor = 1. Перед каждой проверкой функционирования инициализируйте инструменты, вводя команду Instruments/Initialize Instruments.
12. Проверьте работоспособность сети, постепенно вводя в один из входных образов искажение. Запишите полученные результаты в таблицу:
Кол-во неверных битов |
Входной код |
Реакция сети |
Количество итераций |
0 |
|
+ |
|
1 |
|
+ |
|
N |
|
– |
|
13. Проверьте, зависит ли работоспособность сети от сочетания неверных битов во входном векторе (исследовать 4-6 комбинаций), и результаты занесите в таблицу.
№ комбинации |
Входной код с N неверными битами |
Реакция сети |
1 |
|
+ |
L |
|
– |
14. Исследуйте процесс функционирования сети, изменив значение параметра “Firing rate” в диалоговом окне Utilities/L/R Schedule. Результаты оформите в виде таблицы, приведенной в п.12.
