Вивчаємо нейронні мережі за чотири кроки

Вивчаємо нейронні мережі за чотири кроки

Крок 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.

Схожі статті