середа, 26 травня 2021 р.

Поняття про навчання штучної нейронної мережі

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

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

Хоча один нейрон не може розділити такі два класи, але ми можемо спробувати провести дискримінантну площину так, щоб мінімізувати помилку такого розділення.

Розглянемо метод метод Уїдроу - Хоффа, або дельта-правило найменшого середнього квадрату навчання одного нейрону, для задачі класифікації двох типів класів $\omega_1$ i $\omega_2$. На кожному кроці навчання мінімізується помилка між фактичною та бажаною реакцією нейрона. Розглянемо нейрон $$ y(X)= f\left(W X+b \right), X \in \mathbb{R}^n $$ Для зручності розширимо ваговий вектор і вектор ознак поклавши $$ W=(w_1,w_2,\ldots, w_n,1),X=(x_1,x_2, \ldots, x_n, b). $$ Тоді нейрон перепишеться компактніше $$ y(X)= f\left(W X\right). $$ Розглянемо функцію втрат(loss function) $$ E(W)=\frac{1}{2}(r-W X)^2, $$ тут $r$ -- бажана реакція нейрона, тобто $r=1$ якщо вектор ознак належить класу $\omega_1$ і $r=2$ якщо вектор ознак належить до другого класу $\omega_2$

Нам потрібно знайти мінімум цієї функції, як функції невідомих ваг. Це класична задача оптимізації для наближеного розв'язання якої використовують ітеративний алгоритм градієнтного спуску (gradient descent). Ідея алгоритму базується на простому факті -- для диференційовної функції від $n$-змінних $F(X)$ її градієнт $$\nabla F(X)=\left(\frac{\partial F(X)}{\partial x_1}, \frac{\partial F(X)}{\partial x_2}, \ldots, \frac{\partial F(X)}{\partial x_n}, \right)$$ обчислений в деякій точці $X_0$, напрямлений в бік найбільшого зростання функції в даній точці. З цього випливає, що в точці $$ X_1=X-\lambda \nabla F(X) $$ при достатньо малому значенні $\lambda$ значення функції менше ніж значення функції в точці $X_1$ тобто $F(X_0)>F(X_1)$. Це означає, що віднявши $\lambda \nabla F(X)$ ми здійснили рух проти градієнта, тобто рух у напрямку мінімуму функції. Тому ми будуємо таку послідовність точок $X_0, X_1, X_2, \ldots, $ що $$ X_{k+1}=X_k-\lambda_k \nabla F(X_k), $$ і сподіваємося, що ця послідовність збігається до точки мінімуму.

Для багатьох хороших функцій і при правильному виборі $\lambda_k$ ця послідовність справді збігається до точки мінімуму. Число $\lambda_k$ називається швидкістю навчання ( learning rates). На практиці вибирають швидкість навчання з інтервалу $(0.1, 1)$.

Повернемося тепер до цільової функції $E(W)$ простої нейронної мережі. Нехай $W(0)$ деяке початкове наближення значень вагових коефіцієнтів. Тоді, ми будуємо ітеративний процес $$ W(k+1)=W(k)- \lambda \frac{\partial E(W)}{E(\partial W)} \Big|_{W=W(k)}, k=1,2,3, \ldots $$ і після деякої кількості ітерацій знаходимо оптимальне значення вагових коефіцієнтів, тобто таке значення, яке мінімізує цільову функцію. Тим самим процес навчання нейрона буде завершеним.

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

Зауважимо, шо навіть коли класи $\omega_1$, $ \omega_2$ лінійно відокремлювані, то цей алгоритм не обов'язково побудує дискримінантну гіперплощину.

Навчання мережі методом зворотного поширення помилки (back propagation).

Розглянемо багатошарову нейронну мережу в якому кожен нейрон одного шару з'єднаний з кожним нейроном наступного шару і більше ніяких зв'язків між нейронами немає, наприклад нейрони одного і того ж шару ніяк не зв'язані. Такі нейронні мережі називаються повнозв'язні мережі прямого поширення (Fully Connected Neural Network)

Повнозв'язна нейронна мережа із трьома прихованими шарами
Навчання методом зворотного поширення помилки є модифікацією методу градієнтного спуску і схоже на навчання одного нейрона. Навчання починають із нейронів останнього вихідного шару $L$ за аналогією із навчанням одного нейрону. Цільова функція, за аналогією із одним нейроном може мати такий вигляд $$ E(W_{L})=\frac{1}{2} \sum_{n \in L }(r_n-L_n(X) )^2, $$ тут $r_n$ бажане значення нейрона взяте із тестового прикладу, а $L_n(X)$ -- фактичний відгук $n$-го нейрона вихідного шару на $X$.

Знайшовши мінімум цільової функції, ми тим самим визначимо вагові коефіцієнти всіх нейронів вихідного шару. Знаючи, як реагує вихідний шар ми можемо за цим самим алгоритмом знайти вагові коефіцієнти нейронів останнього прихованого шару, потім наступного шару і так далі. Рухаючись до початку, тобто поширюючи помилку від шару до шару, ми поступово визначимо ваги всієї нейронної мережу. Крім штучних багатошарових нейронних мереж прямого поширення існують інші архітектури нейронних мереж, зокрема рекурентні та згорткові. Сукупність алгоритмів та методів навчання таких мереж називається Глибоким навчанням (deep learning) і є частиною ширшої дисципліни Машинне навчання ( Maсhine learning).

Немає коментарів:

Дописати коментар