Нейроемулятор 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. Результат роботи програми
Система добре знаходить відповідні правильні слова, якщо помилку зроблено як зміну символу на інший, особливо наприкінці слова. Гірша ситуація спостерігається у разі, якщо невірно набране слово має пропуски чи зайві символи. Хемінгова відстань в цьому випадку може виявитися занадто великою. Для того, щоб згладити цей недолік, можна подавати на вхід як саме шукане слово, так і це ж слово, виключаючи по черзі по одному символу в кожній позиції і додаючи по одній букві в кожну позицію. Такий підхід дозволить знайти практично всі випадки помилок - помилка, пропуск символу, зайвий символ – на початку, всередині і наприкінці слова.
Сервіс Teachable Machine
Веб-додаток від Google для створення моделей машинного навчання для широкого кола користувачів. Вхідні дані для обробки нейронна мережа отримує через веб-камеру. Це можуть бути різні об'єкти, певний рух або звук. Наприклад, можна навчити Teachable Machine при піднятою вгору долоні говорити «Hi». При піднятому вгору великому пальці - «Cool», а при здивованому обличчю з відкритим ротом - «Wow».
Використання мережі складається з 3 етапів
1. Збір даних для навчання системи. Дані збирає сам користувач, приклади групуються за класами чи категоріями, за якими буде відбуватися розпізнавання. Для початку потрібно навчити нейромережу. Для цього слід тримати кнопку «Hold to Record» і перед веб камерою показати об'єкт, вимовити слово або здійснити рух - сервіс робить кілька десятків знімків, для того, щоб знайти на зображеннях закономірність. Набір таких знімків прийнято називати «Data Set» (рис.7).
Рис. 7. Етап збору даних для навчння нейромережі
2. Навчання (тренування) нейромережі. Для того, щоб мережа могла розпізнавати візуальні, звукові або рухові образи її потрібно навчити. Для цього користувач має надати достатню кількість образів (об'єкт в різних проекціях, слово вимовлене в різному темпі чи тональності, дещо уповільнений чи пришвидшений рух), щоб мережа запам'ятала цей образ. Присутня кнопка для миттєвого тестування. У випадку неякісного розпізнавання, потрібно надати для навчання мережі більшу кількість образів. Teachable Machine демонструє ефективну «впевненість» - наскільки система «впевнена» у розпізнанні образа (рис.8).
Рис.8. Результати навчання нейромережі, відсоток впевненості у розпізнаванні
Інструкція щодо навчання мережі.
3. Експорт навченої моделі. Навчену для певних образів мережу можна експортувати для різних проектів: сайтів, додатків тощо. Модель можна або завантажити на свій комп'ютер або розмістити її в Інтернеті (рис.9).
Рис. 9. Користувацький вибір для збереження моделі
Інструкція щодо експортування.
Використання сервісу є легким та наочним, опанування прийомами роботи є швидким, а отримані результати вражаючими.
Нейроемулятор 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.
Якщо результати не є задовільними, то слід повернутися на попередні кроки і поміняти параметри конфігурації. Повторити навчання і порівняти отримані результати.