Олимпиадный тренинг

Задача . Автокодировщик на чистом NumPy


Задача

Темы:

Автокодировщик на чистом NumPy

В предыдущих заданиях вы уже разобрали прямой проход одного нейрона, backward, локальный backward ReLU и численную проверку градиента. Теперь соберите эти части в одну небольшую нейронную сеть.

Сеть получает изображение рукописной цифры размером 8×8 пикселей, то есть 64 числа, сжимает его до двух чисел, а затем пытается восстановить исходное изображение.

Архитектура: 64 → 16 → 2 → 16 → 64.

Что нужно сделать
  1. Скачайте приложенную тетрадь autoencoder_numpy.ipynb и откройте её в Google Colab или Jupyter.
  2. Реализуйте локальный backward ReLU.
  3. Реализуйте среднюю квадратичную ошибку.
  4. Реализуйте прямой проход forward всей сети.
  5. Реализуйте обратный проход backward всей сети.
  6. Напишите численную проверку отдельного веса методом центральной разности и добейтесь прохождения gradient check.
  7. Самостоятельно напишите цикл обучения: forward → loss → backward → обновление всех весов и смещений.
  8. Исследуйте восстановленные изображения и двумерное пространство bottleneck.
  9. Запустите последнюю ячейку и загрузите созданный файл autoencoder_result.npz.
Данные

Используется встроенный набор sklearn.datasets.load_digits. Отдельно скачивать датасет не нужно. Изображения имеют размер 8×8, а значения пикселей нормируются в диапазон от 0 до 1.

Каждое пятое изображение используется как контрольное и не участвует в обновлении весов.

Архитектура сети
СлойРазмерАктивация
Encoder 164 → 16ReLU
Bottleneck16 → 2нет
Decoder 12 → 16ReLU
Выход16 → 64sigmoid
Функция ошибки

L = mean((X_hat - X) ** 2)

Что проверяет система

Проверяющая система не сравнивает ваши веса с заранее заданными весами: у правильно обученных сетей они могут различаться. Она сама выполняет прямой проход с присланными весами.

  • проверяются размеры параметров и отсутствие некорректных чисел;
  • проверяется, что gradient check был пройден;
  • проверяется, что ошибка в процессе обучения заметно уменьшалась;
  • проверяется соответствие сохранённых reconstruction и embedding итоговым весам;
  • проверяется качество восстановления на контрольной выборке.

Качество расположения цифр на двумерной карте не оценивается: автокодировщик не обучается классифицировать цифры.

Ограничения

Для вычисления градиентов нельзя использовать PyTorch, TensorFlow, JAX, autograd и другие средства автоматического дифференцирования. Разрешены NumPy, matplotlib и scikit-learn для загрузки и визуализации данных.

Файл ответа

Загрузите один файл: autoencoder_result.npz.


Статистика успешных решений по компиляторам
Комментарий учителя