Я читаю Neural Networks and Deep Learning (первые две главы), и я пытаюсь следовать и строить свой собственный ANN для классификации цифр из набора данных MNIST.MNIST - Обучение застряло
Я уже несколько дней царапаю голову, так как моя реализация достигает максимума ~ 57% при классификации цифр из тестового набора (около 5734/10000) после 10 эпох (точность для тренировочного набора стагнирует после десятая эпоха, а точность для тестового набора, по-видимому, ухудшается из-за переустановки).
Я использую почти ту же конфигурацию, что и в книге: 2-х слойный ANN-интерфейс (784-30-10) со всеми слоями, полностью подключенными; стандартные сигмоидные функции активации; квадратичная функция стоимости; весы инициализируются одинаково (взяты из гауссовского распределения со средним 0 и стандартным отклонением 1) Единственные различия в том, что я использую онлайн-обучение вместо пакетного/мини-пакетного обучения и скорость обучения 1,0 вместо 3.0 (Я пробовал мини-пакетное обучение + скорость обучения 3,0, хотя)
И все же моя реализация не проходит 60% процентиля после множества эпох, где, как и в книге, ANN идет выше% 90 сразу после первая эпоха с практически такой же конфигурацией. Сначала я перепутались реализации алгоритма обратного распространения, но после реализовав обратного распространения по-разному в три раза, с точно такими же результатами в каждом переопределённой, я тупик ...
Пример из результатов алгоритм обратного распространения является Производство:
С более простой сетью с обратной связью с аналогичной конфигурацией, упомянутой выше (онлайн-обучение + скорость обучения 1,0): 3 входных нейрона, 2 скрытых нейрона и 1 выходный нейрон.
Начальные веса инициализируются следующим образом:
Layer #0 (3 neurons)
Layer #1 (2 neurons)
- Neuron #1: weights=[0.1, 0.15, 0.2] bias=0.25
- Neuron #2: weights=[0.3, 0.35, 0.4] bias=0.45
Layer #2 (1 neuron)
- Neuron #1: weights=[0.5, 0.55] bias=0.6
Учитывая ввод [0,0, 0,5, 1,0], выход 0,78900331. Backpropagating за тот же вход и с требуемым выходом 1,0 дает следующие частные производные (с.в. = производная вес WRT, дБ = производная смещение WRT):
Layer #0 (3 neurons)
Layer #1 (2 neurons)
- Neuron #1: dw=[0, 0.0066968054, 0.013393611] db=0.013393611
- Neuron #2: dw=[0, 0.0061298212, 0.012259642] db=0.012259642
Layer #2 (1 neuron)
- Neuron #1: dw=[0.072069918, 0.084415339] db=0.11470326
Обновление сети с этими частными производными дает исправленный выход значение 0,74862305.
Если кто-то будет достаточно любезен, чтобы подтвердить полученные результаты, это помогло бы мне чрезвычайно, как я в значительной степени исключить обратное распространение неисправные как причина проблемы.
Неужели кто-либо сталкивался с проблемой MNIST, когда-либо сталкивался с этой проблемой? Даже предложения по вещам, которые я должен проверить, помогут, так как я действительно потерялся здесь.