Системи з самоорганізацією та самонавчанням
Лабораторна робота №4

Нейроемулятори

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

Нейроемулятори

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

Переваги таких "віртуальних" нейрокомп'ютерів для відносно невеликих завдань очевидні:

  • Не треба витрачатися на нову апаратуру, якщо можна використати комп'ютери загального призначення.
  • Користувач не повинен освоювати особливості програмування на спец-процесорах і способи їх сполучення з базовим комп'ютером.
  • Універсальні ЕОМ не накладають жодних обмежень на структуру мереж і способи їх навчання, тоді як спец-процесори найчастіше мають обмежений набір «зашитих» функцій активації і досягають пікової продуктивності лише на певному колі завдань.

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

Серед нейропакетів freeware в Інтернет можна знайти групу демонстраційних програм, використання яких дозволяє наочно демонструватирізні властивості нейромереж. Є серед цієї групи прості, що дозволяють демонструвати окремі властивості нейромереж, такі, як Sharky, Kohonen, EasyDemo, і складні пакети - для демонстрації груп властивостей, до яких можна віднести і такий комерційний пакет, як Матлаб.

Нейроемулятор FuzzySearch

Програма призначена для демонстрації можливостей мереж Хемінга в розпізнаванні образів. Завдання нечіткого пошуку обране в якості простого і зрозумілого прикладу. Це далеко не єдина область застосування цих мереж. Наприклад, вони використовуватися для відновлення образів з неповною або спотвореною інформацією.

Застосування мереж Хемінга для нечіткого пошуку

Принцип роботи пам'яті в комп'ютері з архітектурою Фон-Неймана та людини принципово відрізняються один від одного. Комп'ютер використовує для пошуку інформації адресу, а людина асоціацію. Тому, якщо знати, де шукати інформацію, комп'ютер знайде її швидко, але якщо не відомо, то доведеться все перебирати, і добре, якщо дані є не спотвореними.

Ймовірно, "якісніша" пам'ять людини дозволяє при набагато меншій обчислювальній потужності краще аналізувати. Принципову обмеженість сучасних комп'ютерів можна обійти за допомогою різного роду систем асоціативної пам'яті, наприклад, мереж Хемінга.

Принципи роботи мереж Хемінга

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

відстань 0
відстань 2
відстань 5
Рис.1. Наочний приклад визначення відстані Хемінга

Відсутність сигналу кодується як (-1), наявність (1). Мережа містить лише два прошарки.

Рис. 2. Структурна схема мережі Хеммінга

Алгоритм роботи

1. Ініціалізація вагових коефіцієнтів першого прошарку.

,
де Х – образи, що запам'ятовуються, i – відповідний компонент вектору X, j – номер образу, n – розмірність вектору X, m – кількість образів, що запам'ятовуються.

2. Розрахунок стану нейронів першого прошарку.

,
де X – невідомий образ, T = n/2 – поріг передатної функції

3. Розрахунок стану нейронів другого прошарку.

,
де p – номер ітерації, 0 < < 1/m
,
де f – порогова передатна функція.
,
де F – поріг передатної функції. Зазвичай, F вибирається найменшим, так, щоб за будь- яке допустиме значення входу не наступало насичення. На практиці F береться рівним до кількості прикладів.

4. Перевірка умови виходу

Якщо виходи не стабілізувалися, тобто змінювалися за останню ітерацію, то перехід на крок 3, інакше кінець.

Область застосування

Мережі Хемінга активно використовуються при рішенні задач оптичного розпізнавання символів (OСR). На практиці вони використовуються для відновлення зашумленого початкового сигналу, завданнях оптимізації та нечіткого пошуку.

Програма нечіткого пошуку на основі мереж Хемінга

Для реалізації цієї системи використовується штучна нейронна мережа Хеммінга. В даному нейроемуляторі розмірність розподільного шару 125 нейронів. Розмірність прихованого шару визначається кількістю слів у словнику, в якому здійснюється пошук. Розмірність вихідного шару дорівнює розмірності прихованого шару нейронної мережі.

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

На вхід пошукової системи подається текстовий файл зі списком слів V, в якому буде здійснюватися пошук слова v, яке будемо шукати. На виході отримується - номер n(w,V) слова w в списку V, яке найближче до вихідного слова v.

Вхідне слово з літер алфавіту перетворюється в слово в двійковому алфавіті (0 та 1), яке подається на вхід нейронної мережі, тобто кожній літері ставиться у відповідність слово із символів 0 і 1 (довжина 5 цифр). Кодування будується таким чином, що символи, які знаходяться поруч на комп'ютерній клавіатурі мають коди, що близькі за відстанню Хеммінга (рис.3). Таким чином має досягатися найбільш ефективне виправлення помилок.

'ф' - "00001" 'с' - "01000" ‘л' - "10110"
'ю' - "00011" 'а' - "01001" 'щ' - "10111"

Рис 3. Коди символів у цифровому словнику

Для роботи емулятора потрібно завантажити файл у форматі *.txt, що містить довільний текст (рис.4).

Рис.4. Завантаження текстового файлу

На основі цього файлу система автоматично складає словник (рис.5).

Рис.5. Автоматичне складання словника зі слів тексту

Після цього потрібно ввести слово для пошуку, програма виявить слово найбільш близьке до нього і зафіксує на ньому вказівник (рис.6). Нейроемулятор може знаходити слово в списку, навіть якщо воно спотворене (містить помилки).

Рис. 6. Результат роботи програми

Система добре знаходить відповідні правильні слова, якщо помилку зроблено як зміну символу на інший, особливо наприкінці слова. Гірша ситуація спостерігається у разі, якщо невірно набране слово має пропуски чи зайві символи. Хемінгова відстань в цьому випадку може виявитися занадто великою. Для того, щоб згладити цей недолік, можна подавати на вхід як саме шукане слово, так і це ж слово, виключаючи по черзі по одному символу в кожній позиції і додаючи по одній букві в кожну позицію. Такий підхід дозволить знайти практично всі випадки помилок - помилка, пропуск символу, зайвий символ – на початку, всередині і наприкінці слова.

Нейроемулятор Neural Network Wizard

Neural Network Wizard це програмний емулятор нейрокомп'ютера. В Neural Network Wizard реалізовано багатошарову нейронну мережу, що навчається за алгоритмом зворотного поширення похибки (Back Propagation). Програма може застосовуватися для аналізу інформації, побудови моделей процесів і прогнозування.

Можливості емулятора:

  • Отримання даних для навчання з текстового файлу.
  • Різні способи нормалізації даних.
  • Створення багатошарових нейронних мереж різної конфігурації.
  • Налаштування параметрів навчання нейроемулятора.
  • Автоматизація навчання системи.
  • Автоматичне формування навчальної і тестової множини.
  • Можливість зберегти результати навчання.
  • Відкриті вихідні тексти програмного коду (версія 1.7).

Для роботи із системою необхідно здійснити наступні операції:

  • Зібрати статистику по процесу.
  • Навчити нейромережу на приведених даних.
  • Перевірити отримані результати.

Під час навчання нейромережа самостійно підбирає значення коефіцієнтів і будує таку модель, що найточніше відбиває процес дослідження.

Підготовка вхідних даних

Дані для навчання мережі мають бути сформовані в текстовому файлі з розділювачами (Tab чи пробіл). Кількість прикладів повинна бути досить великою і вибірка має бути репрезентативною. Крім того, потрібно забезпечити, щоб дані були не суперечливі. Вся інформація повинна бути представлена в числовому виді. Причому це стосується всіх даних. Якщо інформація представляється в текстовому виді, то необхідно застосувати певний метод, щоб перевести текстову інформацію у числову. Висока якість отриманих результатів досягається, якщо вжити перед-обробку даних. Якщо текстову інформацію можна якось ранжирувати, то необхідно це враховувати. Наприклад, якщо кодувати інформацію про міста, то можна ранжирувати за чисельністю населення і задати відповідне кодування: Київ = 1, Львів = 2 тощо. Якщо ж дані не можна впорядкувати, то можна задати їм довільні номери. Взагалі, краще при кодуванні вхідної інформації збільшувати відстань між об'єктами (Київ = 1, Львів = 11) і визначати результат за відстанню між значенням, отриманим з нейромережі та кодом об'єкта. До підготовки даних для нейромережі потрібно підходити дуже серйозно. Від цього залежить 90% успіху.

Особливості навчання нейромережі

При навчанні нейромережі потрібно врахувати кілька факторів:

  • Якщо подавати на вхід суперечливі дані, то мережа може взагалі ніколи нічому і не навчитися. Вона буде не в змозі зрозуміти, чому в одному випадку 2+2=4, а в другому 2+2=5. Від суперечливих даних у навчальній і тестовій вибірці слід позбутися.
  • Кількість зв'язків між нейронами має бути меншою ніж кількість прикладів в навчальній вибірці. Інакше мережа не навчиться, а "запам'ятає" усі приведені приклади.
  • Якщо занадто довго навчати мережу, те вона може "перенавчитися". Необхідно визначати момент, коли процес буде вважатися завершеним.

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

Приклад роботи з емулятором

Крок 1. Завантаження файлу з навчальними даними

Для початку роботи з емулятором потрібно завантажити файл з навчальними даними (рис.10).

Рис.10. Початок роботи системи

В емуляторі передбачено використання двох типів файлів.

  • Текстовий файл, що містить дані навчальної вибірки, які використовується для навчання нейромережі (рис. 11).
  • Файл у форматі nnw, що містить дані про конфігурацію навченої нейромережі.
Рис.11. Формат навчальних даних
Крок 2. Визначення полів та їх властивостей

В наступному вікні буде відображено назви полів, що містять дані для навчання. Для зазначення властивостей поля, його слід виділити та обрати відповідні властивості (рис.12).

Рис. 12. Поля та його властивості

Використовувати поле як...

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

Нормалізувати поле як...

На вхід нейромережі повинна подаватися інформація в нормалізованому виді. Тобто, приведення всіх значень до діапазону від 0 до 1. Можна вибрати наступні методи нормалізації.

  • (X-MIN)/(MAX-MIN) - лінійна нормалізація.
  • 1/(1+exp(ax)) - експонентна нормалізація.
  • Авто - нормалізація, що заснована на статистичних характеристиках вибірки.
  • Без нормалізації - нормалізація не застосовується.

Параметри нормалізації...

Зазначаються значення, які будуть використані у формулах нормалізації.

Крок 3. Зазначення параметрів нейромережі

В наступному вікні зазначаються параметри нейромережі (рис.13)

Рис.13. Параметри нейромережі

Число прошарків нейромережі...

Нейронна мережа складається з прошарків – вхідного, вихідного і прихованих. Необхідно вказати кількість прихованих прошарків. Загального правила скільки повинно бути таких прошарків немає, зазвичай, обирається 1-3 прихованих прошарків. Чим більш нелінійною є задача, тим більше прихованих прошарків повинно бути.

Прошарки, Число нейронів...

В Neural Network Wizard всі елементи попереднього прошарку зв'язані зі всіма елементами наступного прошарку. Кількість нейронів у першому та останньому прошарках залежить від того, скільки полів вказано як вхідні та вихідні. Кількість нейронів в кожному прихованому прошарку необхідно задавати. Загальних правил визначення кількості нейронів немає, але необхідно, щоб число зв'язків між нейронами було меншим за кількість прикладів в навчальній вибірці. Інакше нейромережа втратить здатність до узагальнення, а просто "запам'ятає" всі приклади з навчальної вибірки. Тоді при тестуванні на прикладах, наявних у навчальній вибірці вона буде демонструвати прекрасні результати, а на реальних даних – погані.

Параметр сигмоїди...

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

Крок 4. Зазначення параметрів для навчання

На даному кроці зазначаються критерії щодо навчання, тестування та часу обчислень мережі (рис.14).

Рис. 14. Зазначення параметрів для навчання

Використовувати для навчання мережі % вибірки...

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

Швидкість навчання...

Параметр визначає амплітуду корекції ваг на кожному кроці навчання.

Момент (імпульс)...

Параметр визначає ступінь впливу i-ої корекції ваг на i+1-шу.

Розпізнано, якщо помилка за прикладом <...

Якщо результат прогнозування відрізняється від значення з навчальної множини є меншим за вказану величину, то приклад вважається розпізнаним.

Використовувати тестову множину як валідаційну...

При встановлення цього прапорця, навчання буде припинено як тільки помилка на тестовій множині почне збільшуватися. Видається відповідне повідомлення. Це допомагає уникнути ситуації перенавчання нейромережі.

Критерії зупинки навчання...

Необхідно визначити момент, коли навчання буде закінчено.

Крок 5. Перевірка налаштованої конфігурації неромережі

У цьому вікні відображаються налаштовані параметри нейромережі (рис.15).

Рис. 15. Перевірка заданих параметрів
Крок 6. Запуск навчання системи

Після налаштування навчальних даних та конфігурації, нейроемулятор здатний до навчання (рис.16).

Рис.16. Вікно навчання нейромережі

Пуск навчання/зупинка навчання...

Після запуску процесу навчання в таблиці над кнопкою можна спостерігати, як міняється помилка навчання.

Розподіл помилки...

У діаграмі відображається розподіл помилки. Зелені стовпці – помилка на навчальній вибірці, червоні – на тестовій вибірці. Чим правіше стовпець, тим вище значення помилки. Шкала від 0 до 1. Чим вище стовпець, тим більше прикладів із зазначеною помилкою.

Розподіл прикладів у навчальній/тестовій вибірці...

На цих графіках можна відслідковувати наскільки результати, що спрогнозовані нейронною мережею збігаються зі значеннями в навчальній (ліворуч) і тестовій (праворуч) вибірці. Кожен приклад позначено на графіку точкою. Якщо точка попадає на виділену лінію (діагональ), то нейромережа передбачила результат з досить високою точністю. Якщо точка знаходиться вище діагоналі, значить нейромережа недооцінила результат, нижче – переоцінила. Необхідно домагатися, щоб точки розташовувалися якнайближче до діагоналі.

Крок 7. Розрахунок кінцевого результату

Після завершення навчання можна перевірити якість навчання нейронної мережі. У наборі вхідних параметрів вводяться числа (співмірні з навчальними даними відповідного поля) і натиснути на кнопку "Розрахунок". У таблиці «розраховані параметри» висвічується результат. Слід пам'ятати, що не варто перевіряти нейромережу на числах, що виходять за межі навчальної і тестової вибірки. Якщо нейромережа навчена додавати числа в діапазоні від 0 до 10, то і тестувати нейромережу необхідно в тому самому діапазоні (рис.17).

Рис.17. Розрахунок кінцевих результатів

Якщо результати влаштовують, то дану конфігурацію можна зберегти. Neural Network Wizard зберігає всі параметри і налаштування у файлі з розширенням nnw.

Якщо результати не є задовільними, то слід повернутися на попередні кроки і поміняти параметри конфігурації. Повторити навчання і порівняти отримані результати.

Відео лабораторної роботи

Контрольні запитання

  1. Назвіть основні завдання, де використання нейронної мережі буде ефективним.
  2. Що називають відстанню Хемінга, як вона вимірюється.
  3. Які основні етапи призначені для функціонування нейронної мережі.
  4. Які фактори є важливими для навчання нейронної мережі.
  5. Яка парадигма навчання є популярною для багатошарових перцептронів.
  6. З яких міркувань обирається кількість нейронів у вхідному, вихідному і прихованому прошарках в багатошарових перцептронах.
  7. Для чого проводиться нормалізація навчальних даних.
  8. В яких пропорціях обирають кількість навчальних та тестувальних даних.
  9. Як довго проводиться навчання BackPropagation, за яких умов припиняється.
  10. Чим можна пояснити певні неточності у результатах навченої мережі.

Лабораторне завдання

  1. Ознайомитися з теоретичними матеріалами щодо нейронних мереж та їх застосування в задачах передбачення.
  2. Запустити нейроемулятор FuzzySearch. Завантажити певний фрагмент тексту (1000-2000 символів). Здійснити пошук певного слова з утвореного словника. Слово написати з кількома типами помилок, проаналізувати отримані результати, пояснити причини.
    • Невірна літера на початку, всередині, наприкінці слова.
    • Пропущена літера на початку, всередині, наприкінці слова.
    • Зайва літера на початку, всередині, наприкінці слова.
    • Кілька помилок різного типу
  3. Запустити нейроемулятор Neural Network Wizard. Пройти всі кроки тестового завдання і проаналізувати отримані результати. Для тестового завдання взяти готові навчальні множини з пакету програми (сума, множення тощо).
  4. Сформувати власні дані для навчання. Для експериментів можна взяти просту функцію (суму, множення, ділення). Приділити увагу до кількості прикладів (кілька десятків) та їх різноманіттю (не монотонність зростання чи спадання). Пройти всі кроки навчання на сформованих даних, приділити більшої уваги налаштуванню параметрів нейроемулятора: тип нормалізації, коефіцієнт сигмоїдної передатної функції, кількості нейронів у прихованому прошарку, часу навчання. Проаналізувати отримані результати і зробити висновки.
  5. Під час захисту лабораторної роботи вільно володіти теоретичним матеріалом: особливості нейронних мереж, вимоги щодо даних, фактори, що впливають на результати навчання, усталені терміни, коло практичного застосування моделей.

Зміст звіту

  1. Назва та мета виконання лабораторної роботи.
  2. Скріни основних етапів експериментів, фрагменти навчальних множин, характеристики основних параметрів налаштування.
  3. Аналітичні висновки щодо властивостей нейронних мереж для розпізнавання та передбачення та отриманих результатів.