Что касается согласованности сверточных нейронных сетей - PullRequest
1 голос
/ 28 июня 2019

В настоящее время я строю 2-канальную (также называемую двухканальной) сверточную нейронную сеть, чтобы классифицировать 2 двоичных изображения (содержащих двоичные объекты) как «похожие» или «разные».

Проблема, с которой я столкнулся, заключается в том, что кажется, что сеть не всегда сходится к одному и тому же решению.Например, я могу использовать один и тот же порядок тренировочных пар и все те же параметры и т. Д., И когда я запускаю сеть несколько раз, каждый раз выдает другое решение;иногда сходится к частоте ошибок ниже 2%, а иногда я получаю 50% ошибок.

У меня такое ощущение, что это как-то связано со случайной инициализацией весов сети, что приводит к различным путям оптимизации при каждом запуске сети.Эта проблема возникает даже тогда, когда я использую SGD с импульсом, поэтому я не знаю, как «заставить» сеть каждый раз сходиться к одному и тому же решению (global optima)?

Может ли это чем-то заняться?с тем фактом, что я использую двоичные изображения вместо полутоновых или цветных изображений, или есть что-то присущее нейронным сетям, которое вызывает эту проблему?

1 Ответ

1 голос
/ 01 июля 2019

Есть несколько источников случайности в обучении. Инициализация одна. Сам SGD, конечно, стохастичен, поскольку содержание мини-пакетов часто случайное. Иногда такие слои, как выпадение, тоже случайны. Единственный способ обеспечить получение одинаковых результатов - это исправить случайное начальное число для всех них.

Учитывая все эти источники случайности и модель со многими миллионами параметров, ваша цитата

«Я действительно не знаю, как« заставить »сеть каждый раз сходиться к одному и тому же решению (глобальная оптима)?»

- это нечто, что каждый должен сказать - никто не знает, как найти одно и то же решение каждый раз, или даже локальный оптимум, не говоря уже о global Оптима.

Тем не менее, в идеале желательно, чтобы сеть работала одинаково при попытках обучения (с фиксированными гиперпараметрами и набором данных). Конечно, все остальное может вызвать проблемы с воспроизводимостью.

К сожалению, я подозреваю, что проблема присуща CNN. Возможно, вам известно о компромиссной дисперсии . Для мощной модели, такой как CNN, смещение, вероятно, будет низким, но дисперсия очень высокая. Другими словами, CNN чувствительны к шуму данных, инициализации и гиперпараметрам. Поэтому неудивительно, что многократное обучение одной и той же модели дает совершенно разные результаты. (Я также получаю это явление, когда производительность меняется между тренировками на целых 30% в одном проекте, который я сделал.) Мое главное предложение уменьшить это - более сильная регуляризация.

Может ли это быть как-то связано с тем, что я использую двоичные изображения вместо полутоновых или цветных изображений, или есть что-то присущее нейронным сетям, которое вызывает эту проблему?

Как я уже говорил, эта проблема в некоторой степени присутствует для глубоких моделей. Тем не менее, использование двоичных изображений также может быть фактором, так как пространство самих данных довольно прерывисто. Возможно, стоит подумать об «смягчении» входных данных (например, фильтрации входных данных) и использовании дополнения данных. Известно, что подобный подход помогает, например, в сглаживании меток .

...