Ответ 1
Я согласен с вашей оценкой - весы сильно не меняются по минибарабанам. Кажется, они несколько меняются.
Как я уверен, вы знаете, вы делаете точную настройку с очень большими моделями. Таким образом, backprop иногда может занять некоторое время. Но у вас много итераций по обучению. Я действительно не думаю, что это проблема.
Если я не ошибаюсь, оба из них были первоначально обучены ImageNet. Если ваши изображения находятся в совершенно другом домене, чем что-то в ImageNet, это может объяснить проблему.
backprop equation упрощают изменение смещений с помощью определенных диапазонов активации. ReLU может быть одним, если модель сильно разрежена (т.е. Если у многих слоев есть значения активации 0, тогда веса будут бороться, но при этом смещения не будут). Кроме того, если активация находится в диапазоне [0, 1]
, градиент по отношению к весу будет выше, чем градиент по отношению к смещению. (Вот почему сигмоид - плохая функция активации).
Он также может быть связан с вашим уровнем чтения, в частности с функцией активации. Как вы вычисляете ошибку? Является ли это проблемой классификации или регрессии? Если это вообще возможно, я рекомендую использовать что-то другое, кроме сигмоида, в качестве вашей последней функции активации. tanh может быть немного лучше. Линейное считывание иногда ускоряет тренировку (все градиенты должны "проходить" через слой считывания. Если производная от уровня считывания всегда 1 - линейная - вы "позволяете больше градиентам" регулировать весы вниз модель).
Наконец, я замечаю, что гистограммы ваших весов тянутся к отрицательным весам. Иногда, особенно с моделями, которые имеют много активизации ReLU, это может быть индикатором моделировки разрешающей способности. Или показатель проблемы мертвых нейронов. Или оба - два связаны друг с другом.
В конечном счете, я думаю, что ваша модель просто пытается учиться. Я столкнулся с очень похожей гистограммой переобучения Inception. Я использовал набор данных около 2000 изображений, и я изо всех сил старался повысить его точность на 80% (как это бывает, набор данных был сильно предвзятым), что точность была примерно такой же хорошей, как случайное угадывание). Это помогло, когда я сделал переменные свертки постоянными и только внес изменения в полностью подключенный уровень.
Действительно, это проблема классификации, и сигмоидная кросс-энтропия является соответствующей функцией активации. И у вас есть значительный набор данных - безусловно, достаточно большой, чтобы точно настроить эти модели.
С помощью этой новой информации я бы предложил снизить начальную скорость обучения. У меня есть двоякое рассуждение:
(1) - мой собственный опыт. Как я уже упоминал, я не особенно знаком с RMSprop. Я использовал его только в контексте DNC (хотя DNC с сверточными контроллерами), но мой опыт там поддерживает то, что я собираюсь сказать. Я думаю, что .01
является высоким для обучения модели с нуля, не говоря уже о тонкой настройке. Это определенно высоко для Адама. В некотором смысле, начиная с небольшой скорости обучения, это "тонкая" часть тонкой настройки. Не заставляйте грузы перемещаться так сильно. Особенно, если вы настраиваете всю модель, а не последний (несколько) слой (ы).
(2) - возрастающая разреженность и смещение в сторону отрицательных весов. Основываясь на ваших участках разреженности (хорошая идея кстати), мне кажется, что некоторые веса могут застрять в разреженной конфигурации в результате перекоррекции. В результате высокой начальной скорости весы "превышают" их оптимальное положение и застревают где-то, что затрудняет их восстановление и вносит вклад в модель. То есть, слегка отрицательный и близкий к нулю, не очень хорош в сети ReLU.
Как я уже упоминал (неоднократно), я не очень хорошо знаком с RMSprop. Но, поскольку вы уже проводите много итераций обучения, дайте низкий, низкий, низкий начальный курс выстрелом и проведите свой путь вверх. Я имею в виду, посмотрим, как работает 1e-8
. Возможно, модель не ответит на тренировку с низкой скоростью, но сделайте что-то вроде неформального поиска гиперпараметров со скоростью обучения. По моему опыту с Inception с помощью Adam, 1e-4
до 1e-8
работал хорошо.