Практикум на ЭВМ (317)/Autoencoder
Материал из MachineLearning.
(Различия между версиями)
Строка 1: | Строка 1: | ||
{{tip|Это черновик задания. Не сто́ит приступать к его выполнению до официального релиза.}} | {{tip|Это черновик задания. Не сто́ит приступать к его выполнению до официального релиза.}} | ||
+ | |||
+ | В этом задании Вам предстоит реализовать нейросетевой алгоритм сокращения размерности данных, известный как автокодировщик ([http://en.wikipedia.org/wiki/Autoencoder autoencoder]). Его нужно настроить на базе изображений рукописных цифр [http://yann.lecun.com/exdb/mnist/ MNIST]. Обратите внимание, что нейросети обучаются значительное время. | ||
== Цели == | == Цели == | ||
Строка 46: | Строка 48: | ||
* MNIST, all-dig, pretrain-tiedw-stNorm(0,0.3)-b6: MSE1(e200): 0.86, MSE2(e500): 3.1, MSE3(e200): 3.3, MSE4(e200): 9.7. Backprop, 300it: MSE=6.5 | * MNIST, all-dig, pretrain-tiedw-stNorm(0,0.3)-b6: MSE1(e200): 0.86, MSE2(e500): 3.1, MSE3(e200): 3.3, MSE4(e200): 9.7. Backprop, 300it: MSE=6.5 | ||
* MNIST, only 0, pretrain-tiedw-stNorm(0,0.3)-stoch-b150: MSE1(e200): 1.6, MSE2(e500): 4.2, MSE3(e200): 2.3, MSE4(e200): 4.7. Backprop, 500it: MSE=3.0 // 2 hours | * MNIST, only 0, pretrain-tiedw-stNorm(0,0.3)-stoch-b150: MSE1(e200): 1.6, MSE2(e500): 4.2, MSE3(e200): 2.3, MSE4(e200): 4.7. Backprop, 500it: MSE=3.0 // 2 hours | ||
- | |||
- | |||
- | |||
* MNIST, all-dig, pretrain-tiedw-stNorm(0,0.3), targ-MSE, arch-sigm+1e-4(except-linear,last): // 630 s | * MNIST, all-dig, pretrain-tiedw-stNorm(0,0.3), targ-MSE, arch-sigm+1e-4(except-linear,last): // 630 s | ||
Строка 57: | Строка 56: | ||
** backprop: 3ep, momentum=0.97, nbatches=1500, step=(k+1)(-1/4), MSE=8.0. // 630 s | ** backprop: 3ep, momentum=0.97, nbatches=1500, step=(k+1)(-1/4), MSE=8.0. // 630 s | ||
- | * MNIST, all-dig, pretrain-tiedw-stNorm(0,0.3), targ-Xentropy, arch-sigm | + | * MNIST, all-dig, pretrain-tiedw-stNorm(0,0.3), targ-Xentropy, arch-sigm: // 730 s |
** level1: 3ep, momentum=0.97, nbatches=1500, step=(k+1)(-1/4), MSE=1.7. | ** level1: 3ep, momentum=0.97, nbatches=1500, step=(k+1)(-1/4), MSE=1.7. | ||
** level2: 3ep, momentum=0.97, nbatches=1500, step=(k+1)(-1/4), MSE=5.3. | ** level2: 3ep, momentum=0.97, nbatches=1500, step=(k+1)(-1/4), MSE=5.3. |
Версия 14:03, 21 февраля 2013
Это черновик задания. Не сто́ит приступать к его выполнению до официального релиза. |
В этом задании Вам предстоит реализовать нейросетевой алгоритм сокращения размерности данных, известный как автокодировщик (autoencoder). Его нужно настроить на базе изображений рукописных цифр MNIST. Обратите внимание, что нейросети обучаются значительное время.
Содержание |
Цели
- Познакомиться с задачей сокращения размерности данных (сжатия с потерями).
- Понять, какие практические проблемы возникают при обучении искусственных нейронных сетей.
- Усвоить принципы глубинного обучения.
- Закрепить навыки манипуляции с матрицами.
Бэкграунд
- когда нужны нейросети? (большие данные, нелинейная разделяющая поверхность)
- нужно ли искать глобальный оптимум?
- проблемы использования нейросетей: вычислительно трудная оптимизация (сейчас есть кластеры), проблемы с инициализацией весов и воспроизводимостью (глубинное обучение),
- автокодировщик, идея feature learning.
Данные
MNIST:
- качаем отсюда: http://yann.lecun.com/exdb/mnist/
- конвертер от Салахутдинова: http://www.sciencemag.org/content/suppl/2006/08/04/313.5786.504.DC1/1127647code_tar.zip (или дать уже сконвертированные)
- отображение:
imshow(reshape(digitdata(1,:), 28,28)')
(транспонирование, т.к. записаны по строкам)
Детали задания
- использование кросс-энтропии при обучении (бонус — MSE)
- регуляризация — L2 (weight decay) и gaussian noise
Мои результаты
- MNIST, only 0, PCA-30: MSE=9.0
- MNIST, only 01, PCA-30: MSE=7.3
- MNIST, all-dig, PCA-30: MSE=14.2
- MNIST, only 0, PCA-18: MSE=13.0
- MNIST, only 1, PCA-18: MSE=3.7
- MNIST, only 01, PCA-18: MSE=10.6
- MNIST, all-dig, PCA-18: MSE=20.0
- MNIST, only 0, autoenc-st0b5e10: MSE=50.0 (averages everything) // 5 batches, 10 epochs (default: targ-CE, opt-CG)
- MNIST, only 0, autoenc-stNorm(0,0.3)b5e1000: MSE=12.6 (continues optimizing)
- MNIST, only 0, autoenc-stNorm(0,0.3)Tie-b5e400: MSE=16.0, 2-3 hours // seems no difference from the previous case
- MNIST, only 0, autoenc-stNorm(0,0.3[*2,4])Tie-b5e400: MSE=23.4
- MNIST, only 0, autoenc-stNorm(0,0.2)-b5e100,targ-MSE: MSE=55.0, (continues optimizing, diverse) // slower, but okay
- could not make stochastic gradient find non-trivial optimum
- MNIST, only 0, autoenc-LeCunInitTanh(Last)Mean-b5e300,targCE: MSE=131.8
- MNIST, only 0, autoenc-stLeCunInitx10-b5e300: MSE=28.7
- MNIST, only 0, pretrain-tiedw-1-stNorm(0,0.3)-b6e50: MSE=2.7, 20 min
- MNIST, all-dig, pretrain-tiedw-stNorm(0,0.3)-b6: MSE1(e200): 0.86, MSE2(e500): 3.1, MSE3(e200): 3.3, MSE4(e200): 9.7. Backprop, 300it: MSE=6.5
- MNIST, only 0, pretrain-tiedw-stNorm(0,0.3)-stoch-b150: MSE1(e200): 1.6, MSE2(e500): 4.2, MSE3(e200): 2.3, MSE4(e200): 4.7. Backprop, 500it: MSE=3.0 // 2 hours
- MNIST, all-dig, pretrain-tiedw-stNorm(0,0.3), targ-MSE, arch-sigm+1e-4(except-linear,last): // 630 s
- level1: 3ep, momentum=0.97, nbatches=1500, step=(k+1)(-1/4), MSE=3.2.
- level2: 3ep, momentum=0.97, nbatches=1500, step=(k+1)(-1/4), MSE=7.3.
- level3: 3ep, momentum=0.97, nbatches=1500, step=(k+1)(-1/4), MSE=4.1.
- level4: 3ep, momentum=0.97, nbatches=1500, step=(k+1)(-1/4), MSE=6.0.
- backprop: 3ep, momentum=0.97, nbatches=1500, step=(k+1)(-1/4), MSE=8.0. // 630 s
- MNIST, all-dig, pretrain-tiedw-stNorm(0,0.3), targ-Xentropy, arch-sigm: // 730 s
- level1: 3ep, momentum=0.97, nbatches=1500, step=(k+1)(-1/4), MSE=1.7.
- level2: 3ep, momentum=0.97, nbatches=1500, step=(k+1)(-1/4), MSE=5.3.
- level3: 3ep, momentum=0.97, nbatches=1500, step=(k+1)(-1/4), MSE=2.5.
- level4: 10ep, momentum=0.97, nbatches=1500, step=0.01*(k+1)(-1/4), MSE=7.4.
- backprop: 3ep, momentum=0.97, nbatches=1500, step=0.1*(k+1)(-1/4), MSE=8.7. // 645 s