Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Навчання Моделі | Нейронна Мережа з Нуля
Вступ до нейронних мереж з Python

Навчання Моделі

Свайпніть щоб показати меню

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

Загальний алгоритм

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

Для кожного тренувального прикладу модель виконує пряме поширення (forward propagation), коли вхідні дані проходять через мережу, шар за шаром, утворюючи вихід. Цей вихід потім порівнюється з фактичним цільовим значенням для обчислення втрат.

Перемішування та пряме поширення

Далі модель застосовує зворотне поширення помилки та оновлює ваги й зміщення в кожному шарі для зменшення втрат.

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

Епоха

Швидкість навчання (α\alpha) визначає розмір кроку при оновленні ваг. Якщо вона занадто велика, модель може перескочити оптимальні значення і не збігтися. Якщо занадто мала — навчання буде повільним і може застрягти на субоптимальному рішенні. Вибір відповідної швидкості навчання забезпечує баланс між швидкістю та стабільністю навчання. Типові значення знаходяться в діапазоні від 0.001 до 0.1 залежно від задачі та розміру мережі.

Графік нижче демонструє, як відповідна швидкість навчання дозволяє втратам поступово зменшуватися оптимальними темпами:

Різні швидкості навчання

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

Метод fit()

Метод fit() у класі Perceptron відповідає за навчання моделі з використанням стохастичного градієнтного спуску.

def fit(self, training_data, labels, epochs, learning_rate):
    # Iterating over multiple epochs
    for epoch in range(epochs):
        # Shuffling the data  
        indices = np.random.permutation(training_data.shape[0])
        training_data = training_data[indices]
        labels = labels[indices]
        # Iterating through each training example
        for i in range(training_data.shape[0]):
            inputs = training_data[i, :].reshape(-1, 1)
            target = labels[i, :].reshape(-1, 1)

            # Forward propagation
            output = ...

            # Computing the gradient of the loss function w.r.t. output
            da = ...

            # Backward propagation through all layers
            for layer in self.layers[::-1]:
                da = ...
Опис коду
expand arrow
for epoch in range(epochs):

Виконує цикл тренування задану кількість епох. Кожна епоха — це повний прохід по всьому набору даних.

indices = np.random.permutation(training_data.shape[0])
training_data = training_data[indices]
labels = labels[indices]

Перемішує тренувальні дані та відповідні мітки перед кожною епохою. Це запобігає навчанню моделі шаблонам, що залежать від порядку даних.

for i in range(training_data.shape[0]):

Ітерує по кожному тренувальному прикладу. Оскільки використовується SGD, ваги оновлюються після обробки кожного окремого прикладу.

inputs = training_data[i, :].reshape(-1, 1)
target = labels[i, :].reshape(-1, 1)

Вибирає i-й тренувальний приклад і його мітку. Перетворює їх у матрицю розміром n x 1 для коректної роботи матричних операцій.

output = ...

Виконує пряме поширення для обчислення передбаченого виходу.

da = ...

Обчислює градієнт функції втрат відносно активації на виході. Це початковий градієнт для зворотного поширення.

for layer in self.layers[::-1]:
    da = ...

Виконує зворотне поширення через усі шари у зворотному порядку. Кожен шар оновлює свої ваги та зсуви за допомогою градієнтного спуску.

question mark

Як називається один повний прохід по всьому тренувальному набору даних?

Виберіть правильну відповідь

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 9

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Секція 2. Розділ 9
some-alt