Я собираюсь поэкспериментировать с нейронной сетью для распознавания рукописного ввода, которую можно найти здесь: https://github.com/mnielsen/neural-networks-and-deep-learning/blob/master/src/network.py Если веса и смещения инициализированы случайным образом, он распознает более 80% цифр после несколько эпох. Если после инициализации я добавлю небольшой коэффициент 0,27 ко всем весам и уклонам, обучение будет происходить намного медленнее, но в конечном итоге оно достигнет той же точности, превышающей 80%:
self.biases = [np.random.randn(y, 1)+0.27 for y in sizes[1:]]
self.weights = [np.random.randn(y, x)+0.27 for x, y in zip(sizes[:-1], sizes[1:])]
Epoch 0 : 205 / 2000
Epoch 1 : 205 / 2000
Epoch 2 : 205 / 2000
Epoch 3 : 219 / 2000
Epoch 4 : 217 / 2000
...
Epoch 95 : 1699 / 2000
Epoch 96 : 1706 / 2000
Epoch 97 : 1711 / 2000
Epoch 98 : 1708 / 2000
Epoch 99 : 1730 / 2000
Если я добавлю небольшой коэффициент 0,28 ко всем весам и уклонам после инициализации, сеть больше не учится вообще.
self.biases = [np.random.randn(y, 1)+0.28 for y in sizes[1:]]
self.weights = [np.random.randn(y, x)+0.28 for x, y in zip(sizes[:-1], sizes[1:])]
Epoch 0 : 207 / 2000
Epoch 1 : 209 / 2000
Epoch 2 : 209 / 2000
Epoch 3 : 209 / 2000
Epoch 4 : 209 / 2000
...
Epoch 145 : 234 / 2000
Epoch 146 : 234 / 2000
Epoch 147 : 429 / 2000
Epoch 148 : 234 / 2000
Epoch 149 : 234 / 2000
Я думаю, что это связано с сигмовидной функцией, которая становится очень плоской, когда близка к единице и нулю. Но что происходит в этот момент, когда среднее значение весов и смещений составляет 0,28? Почему количество распознанных цифр так резко падает? И почему есть такие выбросы, как 429 выше?