У меня есть четырехслойный CNN для прогнозирования ответа на рак с использованием данных МРТ. Я использую активацию ReLU для введения нелинейностей. Точность и потеря поезда монотонно увеличиваются и уменьшаются соответственно. Но точность моего теста начинает сильно колебаться. Я попытался изменить скорость обучения, уменьшить количество слоев. Но это не останавливает колебания. Я даже прочитал этот ответ и попытался следовать указаниям в этом ответе, но снова не повезло. Может ли кто-нибудь помочь мне понять, где я иду не так?
machine-learning
python
deep-learning
Raghuram
источник
источник
Ответы:
Если я правильно понимаю определение точности, точность (% точек данных, классифицированных правильно) будет меньше, чем, скажем, MSE (среднеквадратическая ошибка). Вот почему вы видите, что ваш
loss
быстро растет, а точность колеблется.Интуитивно, это в основном означает, что некоторая часть примеров классифицируется случайным образом , что вызывает колебания, поскольку число правильных случайных догадок всегда колеблется (представьте точность, когда монета всегда должна возвращать «головы»). В основном чувствительность к шуму (когда классификация дает случайный результат) - это общее определение переоснащения (см. Википедию):
Еще одним свидетельством переоснащения является то, что ваша потеря увеличивается, потеря измеряется более точно, она более чувствительна к шумному прогнозу, если она не подавлена сигмоидами / порогами (что, по-видимому, относится к самой потере). Интуитивно понятно, что вы можете представить себе ситуацию, когда сеть слишком уверена в выходных данных (когда она ошибочна), поэтому в случае случайной ошибочной классификации она дает значение, значительно превышающее пороговое значение.
Что касается вашего случая, ваша модель не правильно регламентирована, возможные причины:
Возможные решения:
источник
Этот вопрос устарел, но публикуем его, поскольку на него еще не было указано:
Возможность 1 : Вы применяете какую-то предварительную обработку (нулевое значение, нормализация и т. Д.) Либо к своему обучающему набору, либо к набору проверки, но не к другому. ,
Возможность 2 : Если вы построили несколько слоев, которые по-разному работают во время обучения и выведения с нуля, ваша модель может быть неправильно реализована (например, обновляется ли среднее значение скользящего среднего и стандартное отклонение для нормализации партии во время обучения? При использовании отсева правильно масштабируются весы во время тренировки). статистические выводы?). Это может быть в том случае, если ваш код реализует эти вещи с нуля и не использует встроенные функции Tensorflow / Pytorch.
Возможность 3: Переоснащение, как все отметили. Я нахожу другие два варианта более вероятными в вашей конкретной ситуации, так как ваша точность проверки застряла на 50% с эпохи 3. В общем, я бы больше беспокоился о переобучении, если бы это происходило на более поздней стадии (если у вас нет очень специфической проблемы) под рукой).
источник
Добавление к ответу @ dk14. Если вы все еще видите колебания после правильной регуляризации вашей модели, это может быть возможными причинами:
источник
Определенно переоснащение. Разрыв между точностью данных о тренировках и данными тестов показывает, что вы слишком привыкли к тренировкам. Может быть, регуляризация может помочь.
источник
Ваша точность проверки по проблеме бинарной классификации (я полагаю) колеблется около 50%, что означает, что ваша модель дает совершенно случайные прогнозы (иногда она правильно угадывает несколько образцов больше, иногда несколько образцов меньше). Как правило, ваша модель не лучше, чем подбрасывание монеты.
В любом случае, как уже отмечали другие, ваша модель испытывает серьезное переоснащение. Я предполагаю, что ваша проблема слишком сложна , то есть очень трудно извлечь нужную информацию из ваших данных, и такая простая обученная end-end 4-слойная сеть не имеет возможности ее изучить .
источник
Есть несколько способов попробовать в вашей ситуации. Во-первых, попробуйте увеличить размер пакета, что поможет мини-пакету SGD меньше блуждать. Во-вторых, настройка скорости обучения, вероятно, установить ее меньше. В-третьих, попробуйте другой оптимизатор, например Adam или RMSProp, которые могут адаптировать скорость обучения к функциям. Если возможно, попробуйте увеличить ваши данные. Наконец, попробуйте байесовские нейронные сети с помощью аппроксимации отсева, очень интересная работа Ярина Гал https://arxiv.org/abs/1506.02158
источник
Вы пробовали меньшую сеть? Учитывая, что точность обучения может достигать> 0,99, в вашей сети, по-видимому, достаточно подключений, чтобы полностью смоделировать ваши данные, но у вас могут быть посторонние подключения, которые обучаются случайным образом (например, переобучение).
Исходя из своего опыта, я получил точность проверки устойчивости, чтобы стабилизироваться с меньшей сетью, пробуя различные сети, такие как ResNet, VGG, и даже более простые сети.
источник