Вивчаємо нейронні мережі за чотири кроки
Крок 1. Нейрони і метод прямого поширення
Так що ж таке «нейронна мережа»? Давайте почекаємо з цим і спершу розберемося з одним нейроном.
Нейрон схожий на функцію: він приймає на вхід кілька значень і повертає одне.
Коло нижче позначає штучний нейрон. Він отримує 5 і повертає 1. Введення - це сума трьох з'єднаних з нейроном синапсів (три стрілки зліва).
У лівій частині картинки ми бачимо 2 вхідних значення (зеленого кольору) і зміщення (виділено коричневим кольором).
Вхідні дані можуть бути чисельними уявленнями двох різних властивостей. Наприклад, при створенні спам-фільтра вони могли б означати наявність більш ніж одного слова, написаного ВЕЛИКИМИ ЛІТЕРАМИ, і наявність слова «віагра».
Рівні введення множаться на свої так звані «ваги», 7 і 3 (виділено синім).
Тепер ми складаємо отримані значення зі зміщенням і отримуємо число, в нашому випадку 5 (виділено червоним). Це - введення нашого штучного нейрона.
Потім нейрон виробляє якесь обчислення і видає вихідне значення. Ми отримали 1, тому що округлене значення сигмоид в точці 5 дорівнює 1 (більш докладно про цю функцію поговоримо пізніше).
Якби це був спам-фільтр, факт виведення 1 означав би то, що текст був позначений нейроном як спам.
Ілюстрація нейронної мережі з Вікіпедії.
Якщо ви об'єднаєте ці нейрони, то отримаєте прямо поширюється нейронну мережу - процес йде від введення до висновку, через нейрони, з'єднані синапсами, як на зображенні зліва.
Крок 2. сигмоид
Сигмоїда просто-напросто відображає ваше значення (по горизонтальній осі) на відрізок від 0 до 1.
Це зайняло цілий день, і навряд чи результат вийшов задовільним. Але це неважливо, адже я розібрався, як все працює. Код можна побачити тут.
Вам необов'язково робити це самим, оскільки тут потрібні спеціальні знання - головне, щоб ви зрозуміли, як влаштована сигмоїда.
Крок 3. Метод зворотного поширення помилки
Зрозуміти принцип роботи нейронної мережі від введення до висновку не так вже й складно. Набагато складніше зрозуміти, як нейронна мережа навчається на наборах даних. Використаний мною принцип називається методом зворотного поширення помилки.
Коротко: ви оцінюєте, наскільки мережу помилилася, і змінюєте вагу вхідних значень (сині числа на першій картинці).
Процес йде від кінця до початку, так як ми починаємо з кінця мережі (дивимося, наскільки відхиляється від істини здогад мережі) і рухаємося назад, змінюючи по шляху ваги, поки не дійдемо до введення. Для обчислення всього цього вручну потрібні знання матаналізу. Khan Academy надає хороші курси по матаналізу, але я вивчав його в університеті. Також можна не морочитися і скористатися бібліотеками, які вважатимуть весь матан за вас.
Скріншот з керівництва Метта Мазура за методом зворотного поширення помилки.
Ось три джерела, які допомогли мені розібратися в цьому методі:
Крок 4. Створення своєї нейронної мережі
При прочитанні різних статей і посібників ви так чи інакше будете писати маленькі нейронні мережі. Рекомендую саме так і робити, оскільки це - дуже ефективний метод навчання.
Ще однією корисною статтею виявилася A Neural Network in 11 lines of Python від IAmTrask. У ній міститься дивовижне кількість знань, стислих до 11 рядків коду.
Скріншот керівництва від IAmTrask
Після прочитання цієї статті вам слід написати реалізацію всіх прикладів самостійно. Це допоможе вам закрити дірки в знаннях, а коли у вас вийде, ви відчуєте, ніби знайшли суперсилу.
Оскільки в прикладах часто зустрічаються реалізації, використовують векторні обчислення, я рекомендую пройти курс з лінійної алгебри від Coursera.
Після цього можна ознайомитися з керівництвом Wild ML від Denny Britz. в якому розбираються нейронні мережі складніше.
Скріншот з керівництва WildML
Тепер ви можете спробувати написати свою власну нейронну мережу або поекспериментувати з уже написаними. Дуже забавно знайти Вас набір даних і перевірити різні припущення за допомогою ваших мереж.
Для пошуку хороших наборів даних можете відвідати мій сайт Datasets.co і вибрати там відповідний.
Так чи інакше, тепер вам краще почати свої експерименти, ніж слухати мої поради. Особисто я зараз вивчаю Python-бібліотеки для програмування нейронних мереж, такі як Theano. Lasagne і nolearn.