Я наблюдаю очень странное поведение при обучении сети, где после нескольких 100-тысячных итераций (от 8 до 10 часов) обучения хорошо все ломается, а уроки обучения растут:
Данные тренировки рандомизированы и распределены по многим файлам .tfrecord
, содержащим примеры 1000
, а затем снова перетасовываются на этапе ввода и сопоставляются с примерами 200
.
Фон
Я проектирую сеть, которая одновременно выполняет четыре различные задачи регрессии, например. определяя вероятность появления объекта на изображении и одновременного определения его ориентации. Сеть начинается с нескольких сверточных слоев, некоторые с остаточными соединениями, а затем вступает в четыре полностью связанных сегмента.
Поскольку первая регрессия приводит к вероятности, я использую кросс-энтропию для потери, тогда как другие используют классическое расстояние L2. Однако из-за их природы вероятность потери составляет порядка 0..1
, а потери на ориентацию могут быть намного больше, скажем 0..10
. Я уже нормализовал как входные, так и выходные значения и использовал обрезку
normalized = tf.clip_by_average_norm(inferred.sin_cos, clip_norm=2.)
в случаях, когда ситуация может стать очень плохой.
Я (успешно) использовал оптимизатор Адама для оптимизации на тензоре, содержащем все различные потери (а не reduce_sum
их), например:
reg_loss = tf.reduce_sum(tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES))
loss = tf.pack([loss_probability, sin_cos_mse, magnitude_mse, pos_mse, reg_loss])
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate,
epsilon=self.params.adam_epsilon)
op_minimize = optimizer.minimize(loss, global_step=global_step)
Чтобы отобразить результаты в TensorBoard, я тогда фактически делаю
loss_sum = tf.reduce_sum(loss)
для скалярной сводки.
Адам настроен на скорость обучения 1e-4
и epsilon 1e-4
(я вижу то же поведение со значением по умолчанию для эпизода, и он ломается еще быстрее, когда я сохраняю скорость обучения на 1e-3
). Регуляризация также не оказывает никакого влияния на это, она делает этот вид - последовательно в какой-то момент.
Я также должен добавить, что остановка обучения и перезапуск с последней контрольной точки - подразумевая, что файлы ввода обучения снова перетасовываются - приводит к такому же поведению. Обучение всегда, похоже, ведет себя аналогично в этот момент.