2

Я использую tanh в качестве функции активации. Возьмем, к примеру, одну проблему.Как ускорить обучение для прямой передачи, основанные на градиенте backpropagation нейронные сети

XOR Problem: 

1 1 0 
0 1 1 
1 0 1 
0 0 0 

Когда я тренируюсь моей нейронной сети 500 эпох, Результатов выглядят следующим образом:

1 1 0.001015 
0 1 0.955920 
1 0 0.956590 
0 0 0.001293 

После еще 500 эпохи:

1 1 0.000428 
0 1 0.971866 
1 0 0.971468 
0 0 0.000525 

Еще 500 эпохи:

1 1 0.000193 
0 1 0.980982 
1 0 0.981241 
0 0 0.000227 

Похоже, что обучение замедляется. Моя нейронная сеть принимает forver, чтобы получить достаточно точную информацию для моих проблем с сущностью.

Есть ли способ ускорить обучение после того, как он начнет медленно терять?

Благодаря

+0

У вас есть активация в выходном слое? каков ваш метод обучения? используемые параметры? вы должны включить весь код – lejlot

+0

Какую функцию потерь вы используете? кросс-энтропия? Ошибка среднего квадрата? –

ответ

1

Этот вид кривой обучения является совершенно нормальным в обучения нейронной сети (или даже в real life learning). Тем не менее, хотя общая форма кривой типична, мы можем улучшить ее крутизну. В этом отношении я предлагаю вам внедрить momentum в ваш алгоритм обучения. Если этого не будет достаточно, следующим шагом будет реализация некоторого адаптивного алгоритма скорости обучения, такого как adadelta, adagrad or rmsprop. Наконец, последнее, что вы можете попробовать, это batch normalization.

+0

Как я могу применить adadelta к моей простой нейронной сети C++? Мне не удалось заставить меня просто не понимать язык математики, который хорошо. –

0

Если сеть, которую вы строите, имеет сигмоиды, применяемые к нейронам в выходном слое (кажется, что они делают из ваших результатов), вы можете рассмотреть возможность их удаления и просто иметь линейное отношение. Ваша сеть может стать немного более неустойчивой, поэтому можно сообщить о небольшом размере шага. Но вы сможете достичь большей точности.

 Смежные вопросы

  • Нет связанных вопросов^_^