single
Завдання: Навчання Перцептрона
Свайпніть щоб показати меню
Перш ніж перейти до навчання перцептрона, зверніть увагу, що він використовує функцію втрат бінарної крос-ентропії, яку було розглянуто раніше. Останнє ключове поняття перед реалізацією зворотного поширення — це формула похідної цієї функції втрат відносно вихідних активацій, $a^n$. Нижче наведено формули для функції втрат та її похідної:
Ldan=−(ylog(y^)+(1−y)log(1−y^))=y^(1−y^)y^−yде an=y^
Щоб перевірити, чи перцептрон навчається правильно, метод fit() також виводить середнє значення втрат на кожній епосі. Воно обчислюється шляхом усереднення втрат по всіх навчальних прикладах у цій епосі:
for epoch in range(epochs):
loss = 0
for i in range(training_data.shape[0]):
loss += -(target * np.log(output) + (1 - target) * np.log(1 - output))
average_loss = loss[0, 0] / training_data.shape[0]
print(f'Loss at epoch {epoch + 1}: {average_loss:.3f}')
L=−N1i=1∑N(yilog(y^i)+(1−yi)log(1−y^i))
Нарешті, формули для обчислення градієнтів на кожному шарі мають такий вигляд:
dzldWldbldal−1=dal⊙f′l(zl)=dzl⋅(al−1)T=dzl=(Wl)T⋅dzlДеталі реалізації, які слід пам'ятати
Перекладаючи ці формули у Python-код для методу backward(), пам'ятайте про операції NumPy, розглянуті у попередніх розділах:
- Оператор ⊙ позначає покомпонентне множення, яке виконується стандартним оператором
*у Python. - Оператор ⋅ позначає скалярний добуток (dot product), який реалізується за допомогою функції
np.dot(). - Верхній індекс T означає транспонування матриці, що виконується через атрибут
.T. - Щоб обчислити f′l(zl), можна динамічно викликати похідну функції активації шару за допомогою
self.activation.derivative(self.outputs).
Загальна структура методу backward() виглядає так:
def backward(self, da, learning_rate):
dz = ... # using da and self.activation.derivative()
d_weights = ... # using np.dot() and .T
d_biases = ...
da_prev = ...
self.weights -= learning_rate * d_weights
self.biases -= learning_rate * d_biases
return da_prev
Аналогічно, при об'єднанні всіх частин у методі fit(), необхідно пам'ятати, що для поширення помилки потрібно ітеруватися по мережі у зворотному порядку. Загальна структура виглядає так:
def fit(self, training_data, labels, epochs, learning_rate):
# ... (Epoch loop and data shuffling) ...
# Forward propagation
output = ...
# Computing the gradient of the loss function w.r.t. output (da^n)
da = ...
# Backward propagation through all layers
for layer in self.layers[::-1]:
da = ... # Call the backward() method of the layer
Зразки навчальних даних (X_train) разом із відповідними мітками (y_train) зберігаються як масиви NumPy у файлі utils.py. Крім того, там також визначені екземпляри функцій активації:
relu = ReLU()
sigmoid = Sigmoid()
Проведіть, щоб почати кодувати
Ваша мета — завершити процес навчання багатошарового перцептрона, реалізувавши зворотне поширення помилки (backpropagation) та оновлення параметрів моделі.
Дотримуйтесь наступних кроків:
- Реалізуйте метод
backward()у класіLayer:
- Обчисліть наступні градієнти:
dz: похідна функції втрат за препроактиваційними значеннями, використовуючи похідну функції активації;d_weights: градієнт функції втрат за вагами, обчислюється як добутокdzта транспонованого вхідного вектора;d_biases: градієнт функції втрат за зсувами, дорівнюєdz;da_prev: градієнт функції втрат за активаціями попереднього шару, отримується множенням транспонованої матриці ваг наdz.- Оновіть ваги та зсуви, використовуючи швидкість навчання.
- Завершіть метод
fit()у класіPerceptron:
- Обчисліть вихід моделі, викликавши метод
forward();- Обчисліть втрати за формулою крос-ентропії;
- Обчисліть dan — похідну функції втрат за вихідними активаціями;
- Пройдіть у зворотному порядку по шарах, виконуючи зворотне поширення помилки через виклик методу
backward()кожного шару.
- Перевірте поведінку навчання:
- Якщо все реалізовано правильно, значення втрат має стабільно зменшуватися з кожною епохою при швидкості навчання
0.01.
Рішення
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат