Однією з найважливіших навичок розумних агентів є здатність вчитися. Ми знаємо різні способи навчання. Якщо ми логічно виводимо нове правило з уже відомого правила (наприклад, для підвищення ефективності процесу), ми говоримо про аналітичне або дедуктивне навчання. Вивчення загальної функції/правила з конкретних пар вхід-вихід називається індуктивним навчанням. Залежно від характеру зворотного зв'язку, яку отримує машина, навчання можна розділити наступним чином:

Навчання під контролем

Агент спостерігає кілька зразків пар вхід-вихід і навчається, як створити адекватний результат для введення. Надійність такого навченого алгоритму сильно залежить від розміру та якості набору навчальних даних.
Ми можемо порівняти цей процес із тим, як батьки вчать маленьких дітей розпізнавати різні речі. Наприклад вони покажуть їм книжку з картинками про тварин, де вкажуть на зображення кожної тварини та правильно позначать («собака», «кішка», «кінь» тощо). Таким чином, дитина вчиться розпізнавати окремих тварин, навіть якщо бачить їх на іншій картині або в прямому ефірі.

Навчання без нагляду

Агент намагається знайти деякі закономірності у вхідних даних без явного зворотного зв'язку (він не знає "правильних відповідей"). Важливо групувати подібні вхідні дані, якимись подібні («кластеризація»), а також розробити правила асоціації, що описують окремі групи даних та взаємозв'язки між ними.
Якщо ми покажемо такий алгоритм, напр. кілька різних фотографій собак, тож він зможе сказати, що всі вони якимось чином схожі (два ока, чотири ноги, хвіст тощо) і помістити їх в одну групу, хоча він не зможе позначити їх як собаки.

Навчання під наглядом

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

Підкріплення навчання

Агент визначив певні правила поведінки (наприклад, правила гри, в яку він повинен грати). Він вчиться методом спроб і помилок із серії нагород або покарань, які він отримує за результати своїх рішень (винагорода за перемогу, покарання за програш тощо). Він вирішує, які з дій до винагороди/штрафу були найбільш відповідальними за результат.

Індукція дерева рішень

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

Регресія

Іншою формою індуктивного навчання є регресія. Йдеться про пошук функції, яка найкраще описує взаємозв’язок між входами та виходами, тобто підбираючи їх графік залежності.
Найпростіший приклад - лінійна регресія, яка шукає функцію виду f (x) = w0x + w1. На графіку залежності вхідного сигналу від вихідного він має вигляд лінії регресії. Коефіцієнти w0 і w1 ще називають масами. При лінійній регресії алгоритм шукає значення маси таким чином, щоб сума помилок в секунду була якомога меншою. Під помилкою ми маємо на увазі різницю між фактичним значенням виходу та значенням, передбаченим для даного входу лінією регресії. Для одного входу ми можемо розрахувати квадрат похибки як (y - w0x - w1) 2, де x - значення вхідного сигналу, а y - фактичний результат (не передбачуваний). Сума квадратів помилок для всіх входів також використовується для позначення R2.
Функцією, що описує взаємозв'язок між входами та виходами, може бути, наприклад, лінійний експоненційний, многочленний тощо.

Приклад лінійної регресії:
f (x) = 0,872x + 10, R 2 = 0,666

функції активації

Приклад експоненціальної регресії:
f (x) = 23 * e 0,0161x, R 2 = 0,667

Приклад поліноміальної регресії 2-го ступеня:
f (x) = 17,8 + 0,364 x + 0,0053 x 2, R 2 = 0,684

Приклад поліноміальної регресії 3 ступеня:
f (x) = 19,8 + 0,084x + 0,0126 x 2 - 0,0000497x 3, R 2 = 0,685

Приклад поліноміальної регресії 4-го ступеня:
f (x) = 16,6 + 0,744x - 0,0167 x 2 + 0,000403x 3 - 0,00000226x 4, R 2 = 0,687

Класифікація

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

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

Лінійно роздільні

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

Лінійно нероздільні

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

Штучні нейронні мережі

В даний час відносно нова концепція - штучні нейронні мережі - дуже популярна. Це спрощені моделі нейрональних мереж в мозку тварин. Основною функцією штучного нейрона є обчислення зваженої суми його входів і повернення значення з певного діапазону (часто від 0 до 1) на основі певної функції активації (передачі). Для регулювання виходу нейрона, т. Зв упередження, константа, яку нейрон додає до зваженої суми входів перед застосуванням функції активації. Завдяки існуванню цієї константи модель нейронної мережі є більш гнучкою і може бути краще адаптована до вхідних даних. Використані вагові коефіцієнти та значення упереджень оновлюються під час навчального процесу, який може відбуватися з викладачем або без нього. Він складається з 3 основних етапів:

  1. Ініціалізація ваг - На початку ваги мають випадкові значення, що дорівнюють деяким малим числам (наприклад, від -1 до 1). Подібним чином, значення упередженості кожного нейрона на початку є дуже малим.
  2. Розрахунок виходу - Розраховується зважена сума вхідних значень і додається значення упереджень. Результат передається функції активації, яка тисне своє значення на певний діапазон (наприклад, від 0 до 1). Вибір функції активації залежить від природи очікуваних даних. Наприклад в лінійній класифікації ми можемо використовувати так звану модель нейрона. порогова логічна одиниця. Його основна операція полягає в обчисленні зваженої суми вхідних даних, а потім повертає 1, якщо ця сума перевищує певний поріг, інакше повертає 0.
  3. Розрахунок помилок і коригування ваги - Спочатку обчислюємо помилку, тобто різниця між результатом, що повертається моделлю, та очікуваним результатом. Далі значення мережі та зміщення коригуються таким чином, щоб вихідний результат моделі з наступної ітерації (повторення) був ближчим до очікуваного результату, а помилка зменшилась. Наскільки суттєвими повинні бути зміни значень, можна визначити заздалегідь за допомогою константи, що визначає швидкість навчання з кожної ітерації (зазвичай число від 0 до 1).

Етапи 2 і 3 повторюються до тих пір, поки помилка не буде зведена до мінімально можливого значення або більше не існує способу зменшити помилку. Як варіант, навчання може бути припинено навіть після досягнення певної максимальної кількості ітерацій.

Реалізація Python:
Завантажити

# Імпортувати використані модулі
імпорт випадковий, numpy
def initialize_weight ():
# Встановлення "насіння" для генератора випадкових випадків
random.seed (1)

# Сформувати випадкові початкові ваги
# (присвоєння випадкових чисел з інтервалу [-1,1) матриці 3x1)
вага = numpy.random.uniform (низький = -1, високий = 1, розмір = (3, 1))
зворотна вага

# Функція активації (у цьому випадку це сигмоїдна функція)
def sigmoid (x):
повернути 1/(1 + numpy.exp (-x))
# Ще одна допоміжна функція (виведення сигмовидної функції)
def похідна_сигмоїдна (x):
повернення x * (1 - x)
# Функція для обчислення виходу за допомогою зваженої суми, упередження та функції активації
def find_output (входи, ваги, упередження):
повернути сигмоїд (numpy.dot (вводи, ваги) + упередження)

# Навчання нейромережі
деф тренінг (вхідні дані, очікуваний_вихід, ваги, упередження, швидкість_навчання, кількість_прописів):
для ітерації в діапазоні (pocet_iteracii):

# Знайдіть результати навчальних матеріалів
output_output = find_output (вхідні дані, ваги, упередження)

# Розрахунок помилок
помилка = дериваційний_сигмоїд (розрахований_вихід) * (очікуваний_вихід - розрахований_вихід)

# Фактори коригування ваги та значення упереджень
факторH = numpy.dot (inputs.T, помилка) * швидкість_навчання
факторP = помилка * швидкість_навчання
# Регулювання ваг та значень упереджень
вага + = факторH
упередження + = факторP

# Проміжна заява про процедуру
if ((iteracia% 1000) == 0):
print ("Ітерація", ітерація)
print ("Обчислюваний результат:", vypocitany_vystup.T)
print ("Очікуваний результат:", очікуваний_вихід.T)
print ()

# Випадкові початкові ваги для мережі
вага = ініціалізувати_вагу ()

# Навчальний набір
inputs = numpy.array ([[1, 1, 1],
[1, 0, 0],
[0, 0, 1]])

# Ціль і тест набір
очікуваний_вихід = numpy.array ([[1, 0, 1]]). T
test = numpy.array ([1, 0, 1])

# Навчання нейромережі
вивчена_вага = навчання (вхідні дані, очікуваний_вихід, ваги, упередження = 0,001, швидкість_навчання = 0,98, кількість_інтерацій = 100000)

# Перевірте мережу в тестовій мережі
точність = (пошук_виходу (тест, вивчена_вага, зміщення = 0,01)) * 100
print ("Точність моделі:", точність [0], "%")

Ресурси, корисні посилання, література

РАССЕЛ, С. Дж. - НОРВІГ, П.: Штучний інтелект: сучасний підхід (3-е видання). Верхня Седл-Рівер, США: Прентис Холл, 2003. ISBN 0-13-790395-2