Skip to main content

ДЗ1 AE

Created on February 25|Last edited on February 25

Блок первый: тренируем АЕ

Я взяла базовые классы UpsampleBlock и DownsampleBlock из семинара и строила все архитектуры AE по схожему принципу:
Downsample до 1 x 1 x hidden_size, Upsamble обратно, после блока Upsamles 1d свертка, чтобы сделать 1 канал и Tanh(), чтобы перевести в [-1, 1] так как мы нормализуем изображения. Следовательно все эксперименты с моделями проводились за счет изменения количества параметров, регулированием количества каналов в каждом из блоков. Также я эспериментировала с разными размерами hidden space: 16, 32, 64. При одинаковом размере модели и времени обучения, восстановление получается лучше с меньшим hidden_size.
Все из приведенных экспериментов были проведены с Adam-ом и lr=1e-3, в качестве функции потерь использовался MSE.
Размеры моделей варьируются от 4 млн (AE MSE big), до 400 тыс. (AE MSE small)
Я не сразу начала логировать изображения, поэтому примеры есть для более менее приличных big и чуть меньше, но тоже вполне себе big.

Run set
6


Классификация

MNIST

Для классификации MNIST-а я также воспользовалась Downsample блоками и добавила два линейных слоя сверху. Получилась небольшая модель на 120 тыс. параметров, с точностью 99+% на трейне и тесте. Училась эта малышка 4 минуты, экспериментировать я с ней не стала, потому что для наших целей качества точно хватит.
Для подсчета FID я использовала активации из последней свертки.
FID автоэкодера с размером hidden-a 32 совпадает с FID изображения, зашумленного с шумом 0.1, для hidden-а 64:, для 128:

Run set
1


Omniglot

Для классификации Omniglot я взяла схожую архитерктуру, но увеличила количество каналов (и следовательно параметров).
Можно заметить довольно значительное переобучение, его можно было бы полечить, например, добавлением dropout-а или L1/L2 регуляризацией. Но качество получилось довольно неплохим по сравнению с рандомом (~71% accuracy на тесте), поэтому я решила, что для наших целей вполне хватает.

Run set
2


Классификация с помощью скрытых представлений

Тут ничего хорошего у меня не вышло. Попробовала разные классификаторы: LightGBM, SVC, LogisticRegression, KNN.
hidden size опять 16, 64, 128.
LGBMSVCLogRegKNN
161%2%2%2%
64-4%5%4%
128-4%5%4%

Думаю, что для высокого качества, следовало сжимать изображения не в 32+ раз, а, например, в 8. Тогда информации для линейного классификатора будет больше.

Bloopers

По фану решила попробовать MSE vs L1 Loss, ничего шокируещего не произошло, c L1 особо не учится

L1 Loss
MSE