1. Что видит нейросеть? Автоэнкодер

В предыдущих заданиях вы уже разобрали прямой проход одного нейрона, 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 1 64 → 16 ReLU
Bottleneck 16 → 2 нет
Decoder 1 2 → 16 ReLU
Выход 16 → 64 sigmoid
Функция ошибки

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

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

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

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

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

Ограничения

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

Финальные эксперименты

После обязательной части тетрадь превращается в небольшую лабораторию: вы увидите, какие изображения decoder создаёт из двух чисел, плавно превратите одну цифру в другую и проверите сеть на повреждённых изображениях.

Важно: checker не оценивает красоту кластеров или морфинга. Эти эксперименты нужны, чтобы увидеть смысл обученного представления.

Файл ответа

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


Ваш ответ

Для проверки решения задачи необходимо зарегистрироваться или авторизоваться!


Последний прикрепленный файл:

Выберите правильный ответ, либо введите его в поле ввода

Комментарий учителя