Автокодировщик на чистом NumPy
В предыдущих заданиях вы уже разобрали прямой проход одного нейрона, backward,
локальный backward ReLU и численную проверку градиента. Теперь соберите эти части
в одну небольшую нейронную сеть.
Сеть получает изображение рукописной цифры размером 8×8 пикселей, то есть 64 числа,
сжимает его до двух чисел, а затем пытается восстановить исходное изображение.
Архитектура: 64 → 16 → 2 → 16 → 64.
Что нужно сделать
- Скачайте приложенную тетрадь
autoencoder_numpy.ipynb и откройте её в Google Colab или Jupyter.
- Реализуйте локальный backward ReLU.
- Реализуйте среднюю квадратичную ошибку.
- Реализуйте прямой проход
forward всей сети.
- Реализуйте обратный проход
backward всей сети.
- Напишите численную проверку отдельного веса методом центральной разности и добейтесь прохождения gradient check.
- Самостоятельно напишите цикл обучения: forward → loss → backward → обновление всех весов и смещений.
- Исследуйте восстановленные изображения и двумерное пространство bottleneck.
- Запустите последнюю ячейку и загрузите созданный файл
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 для загрузки и визуализации данных.
Файл ответа
Загрузите один файл: autoencoder_result.npz.