[Серия «Покинуть обходные пути»] Обобщить причины, по которым обучение нейронной сети не сходится или терпит неудачу.
[Серия «Покинуть обходные пути»] Обобщить причины, по которым обучение нейронной сети не сходится или терпит неудачу.

Рекомендация редактора

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

Автор丨Фэнин выдерживает @zhihu

Ссылка 丨https://zhuanlan.zhihu.com/p/285601835

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

1. Данные и метки


1. Никакой предварительной обработки данных。данные Верна ли классификационная маркировка??данные Это чисто??

2. Нет нормализации данных。Поскольку разные показатели оценки часто имеют разные измерения и единицы измерения.,Такая ситуация повлияет на результаты анализа данных.,Чтобы исключить размерное влияние между показателями,Необходимо провести стандартизацию данных,Решить вопрос сопоставимости показателей данных. Исходные данные после стандартизации данных,Все показатели одного порядка.,Подходит для комплексной сравнительной оценки. также,Большинство нейронных сетевых процессов предполагают, что вход и выход распределены около 0.,Алгоритм оптимизации от инициализации веса до активации функции, от тренировки до тренировки сети. Вычтите данные из среднего значения и удалите дисперсию.

3. Объем информации в выборке слишком велик, в результате чего сеть не может вместить все пространство выборки.。Маленькие выборки могут вызвать только проблемы переоснащения.,Взгляните на свое обучение Проигрыш на съемочной площадке сошёлся? Если вы просто подтвердите Если набор не сходится, это означает переоснащение. В это время следует учитывать различные приемы против переобучения, такие как отсев, SGD, увеличение количества минибатчей, уменьшение количества узлов в слое fc, импульс, точная настройка и т. д. и т. д.

4. Метки установлены правильно?

2. Модельный аспект


1. Настройки сети неправильные

Если вы выполняете очень сложную задачу классификации, но используете только очень мелкую сеть, это может затруднить сходимость обучения. Вам следует выбрать подходящую сеть или попытаться расширить свою текущую сеть. Вообще говоря, чем глубже сеть, тем лучше. Вы можете начать с построения сети из 3–8 слоев. Когда эта сеть будет хорошо реализована, вы можете рассмотреть возможность экспериментирования с более глубокими сетями для повышения точности. Если начать с небольшой сети, обучение будет проходить быстрее, и вы сможете установить различные параметры, чтобы увидеть влияние на сеть, а не просто накладывать больше слоев.

2. Скорость обучения не соответствует

Если он слишком велик, это не приведет к сходимости; если он слишком мал, скорость сходимости будет очень низкой.

При самостоятельном обучении новой сети можно попробовать начать с 0,1. Если потери не уменьшаются, то уменьшите их, разделите на 10 и попробуйте с 0,01. Вообще говоря, 0,01 сойдётся, если нет, используйте 0,001. Скорость установлена ​​слишком высокая, ее легко встряхнуть. Однако не рекомендуется изначально устанавливать слишком маленькую скорость обучения, особенно в начале обучения. Вначале мы не можем устанавливать слишком низкую скорость обучения, иначе потери не будут сходиться.

Мой подход состоит в том, чтобы попробовать постепенно, от 0,1, 0,08, 0,06, 0,05... и постепенно уменьшать его, пока оно не станет нормальным. Иногда скорость обучения слишком низкая, чтобы избежать недооценки. Увеличение импульса также является способом соответствующим образом увеличить значение мини-пакета, чтобы оно не сильно колебалось.

Если скорость обучения установлена ​​слишком высокой, это вызовет проблему выхода из-под контроля (потери внезапно станут очень большими). Это самая распространенная ситуация для новичков — почему сеть вдруг вылетает после того, как побегал и посмотрел, чтобы она сходилась? Наиболее вероятная причина в том, что вы использовали relu в качестве функции активации, а также использовали softmax или функцию с exp в качестве функции потерь слоя классификации.

При передаче определенного обучения на последний слой происходит переактивация определенного узла (например, 100), тогда exp(100)=Inf, происходит переполнение, и все веса после bp станут NAN, и тогда вес останется с этого момента оставьте его без изменений, и потери резко возрастут. Если lr установлен слишком высоко, он убежит и никогда не вернется. В это время, если вы остановитесь, выберете веса любого слоя и посмотрите, весьма вероятно, что все они NAN. В этой ситуации рекомендуется попробовать метод дихотомии. 0,1~0,0001. Оптимальный lr различен для разных моделей и разных задач.

3. Неверное количество нейронов скрытого слоя.

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

Количество нейронов скрытого слоя можно установить от 256 до 1024, после чего вы сможете посмотреть на цифры, использованные исследователями, которые можно использовать в качестве справочного материала. Если они используют числа, сильно отличающиеся от этих, представьте, как это работает. Прежде чем принять решение о количестве единиц в скрытом слое, очень важно учитывать минимальное количество фактических значений, необходимых для выражения информации через сеть, а затем медленно увеличивать это число.

Если вы выполняете задачу регрессии, рассмотрите возможность использования в 2–3 раза большего количества нейронов в качестве входных или выходных переменных. На самом деле количество скрытых модулей обычно оказывает довольно небольшое влияние на производительность нейронной сети по сравнению с другими факторами. А во многих случаях увеличение количества необходимых скрытых юнитов просто замедляет обучение.

4. Ошибка инициализации сетевых параметров

Если веса сети инициализированы неправильно, сеть не будет обучаться.

Обычно используемые методы инициализации весов — «he», «lecun» и «xavier». В практических приложениях эти методы имеют очень хорошую производительность, а смещение сети обычно инициализируется равным 0. Вы можете выбрать тот, который лучше всего подходит для вас. Задача, метод инициализации.

5. нет регуляризации

Регуляризация обычно представляет собой отсев, добавление шума и т. д. Даже если объем данных велик или вы считаете, что сеть вряд ли переобучится, регуляризовать сеть все равно необходимо.

Выпадение обычно начинается с установки параметра на 0,75 или 0,9 и настройки этого параметра в зависимости от того, насколько вероятно, что сеть переобучится. Кроме того, если вы уверены, что эта сеть не переобучится, вы можете установить параметр 0,99. Регуляризация не только предотвращает переоснащение, но и в этом стохастическом процессе может ускорить обучение, помочь справиться с выбросами в данных и предотвратить конфигурации сети с экстремальным весом. Усиление данных также может обеспечить эффект регуляризации. Лучший способ избежать переобучения — иметь большой объем обучающих данных.

6. Размер пакета слишком велик

Установка слишком большого размера пакета снизит точность сети, поскольку уменьшает случайность градиентного спуска. Кроме того, при тех же обстоятельствах, чем больше размер партии, тем больше эпох обучения обычно требуется для достижения той же точности.

Мы можем попробовать партии меньшего размера, например 16, 8 или даже 1. Использование меньшего размера пакета позволяет выполнять больше обновлений веса за одну эпоху. Здесь есть два преимущества. Во-первых, вы можете выпрыгнуть из точки локального минимума. Второй может показать лучшую эффективность обобщения.

7. Скорость обучения установлена ​​неправильно

Многие платформы глубокого обучения по умолчанию включают отсечение градиента, что позволяет решить проблему взрыва градиента. Это очень полезно, но также сложно найти оптимальную скорость обучения по умолчанию. Если вы правильно очистите данные, удалите выбросы и установите правильную скорость обучения, вам не нужно будет использовать отсечение градиента. Иногда вы сталкиваетесь с проблемами взрыва градиента, тогда вы можете включить отсечение градиента. Однако эта проблема обычно указывает на то, что с данными существуют другие проблемы, и отсечение градиента является лишь временным решением.

8. Функция активации последнего слоя используется неправильно

Использование неправильной функции активации на последнем слое приведет к тому, что сеть в конечном итоге не сможет вывести ожидаемый диапазон значений. Наиболее распространенной ошибкой является использование функции Relu на последнем слое, выходные данные которой не имеют отрицательных значений.

Если вы выполняете задачу регрессии, в большинстве случаев нет необходимости использовать функцию активации, если вы не знаете ожидаемое значение на выходе. Представьте, что на самом деле представляют собой ваши значения данных и каковы их диапазоны после перенормировки. Наиболее вероятный сценарий — выводить положительные и отрицательные числа без ограничений. В этом случае последний уровень не должен использовать функцию активации. Если ваше выходное значение может иметь смысл только в определенном диапазоне, например, композиция вероятностей в диапазоне 0 ~ 1. Тогда последний слой может использовать сигмовидную функцию.

9. Сеть имеет плохие градиенты

Если ошибка не меняется после обучения в течение нескольких эпох, возможно, вы используете Relu. Можно попробовать сменить функцию активации на дырявую Relu. Потому что функция активации Relu имеет градиент 1 для положительных значений и градиент 0 для отрицательных значений. Следовательно, наклон функции стоимости некоторых весов сети будет равен 0. В этом случае мы говорим, что сеть «мертва», поскольку сеть больше не может обновляться.

Как проанализировать текущее состояние сети с учетом потери поездов и тестов?


1. Потери поездов продолжают уменьшаться, а потери тестов продолжают уменьшаться, что указывает на то, что сеть все еще обучается;

2. Потери поездов продолжают уменьшаться, а потери при тестировании имеют тенденцию оставаться неизменными, что указывает на переобучение сети;

3. Потери поездов имеют тенденцию оставаться неизменными, а потери при тестировании продолжают уменьшаться, что указывает на 100% проблему с набором данных;

4. Потери поездов, как правило, остаются неизменными, а потери тестов, как правило, остаются неизменными, что указывает на то, что обучение столкнулось с узким местом и необходимо уменьшить скорость обучения или количество пакетов;

5. Потери в поездах продолжают расти, а потери в тестах продолжают расти, что указывает на то, что структура сети спроектирована неправильно, гиперпараметры обучения установлены неправильно и набор данных был очищен.

Рекомендуемые исторические статьи

Используйте LSTM для прогнозного анализа временных рядов осадков [совместное использование кода, руководство для няни! 】

Краткое обсуждение глубоких нейронных сетей

Насколько эффективен прогностический эффект измеренной метеорологической модели Паньгу на реальных объектах наблюдения?

Субъективная интерпретация главного журнала Nature Pangu-Weather

[Сообщение об опыте] Как обучить хорошую модель с помощью глубокого обучения

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose