Существует множество эмпирических доказательств того, что достаточно глубокие нейронные сети могут запоминать случайные метки на огромных наборах данных (Чиюань Чжан, Сэми Бенджо, Мориц Хардт, Бенджамин Рехт, Ориол Виньялс, «Понимание глубокого обучения требует переосмысления обобщений»). Таким образом, в принципе, получая достаточно большой NN, мы всегда можем уменьшить ошибку обучения до чрезвычайно малых значений, ограниченных на практике числовой точностью, независимо от того, насколько бессмысленной является задача.
Вещи совершенно разные для ошибки обобщения . Мы не можем быть уверены, что для каждой проблемы обучения существует обучаемая модель NN, которая может привести к ошибке обобщения настолько низкой, насколько это необходимо. По этой причине первым шагом является
1. Установите свои ожидания правильно
Найдите авторитетную ссылку, которая скажет вам, что существует архитектура, которая может достичь ошибки обобщения, которую вы ищете, в вашем наборе данных или в самой похожей, для которой вы можете найти ссылки. Например, посмотрите здесь
Каковы современные сверточные нейронные сети?
найти текущее (на момент ответов) представление SOTA (State Of The Art) для CNN по различным задачам. Хорошей идеей будет попытаться воспроизвести такие результаты на этих эталонных наборах данных перед тем, как вы начнете тренироваться на своем собственном наборе данных, в качестве проверки правильности всей вашей инфраструктуры.
2. Убедитесь, что ваша процедура обучения безупречна
Все проверки описаны в ответах на вопрос
Что мне делать, если моя нейронная сеть не учится?
чтобы убедиться, что ваша учебная процедура в порядке, является необходимым условием для успешного уменьшения ошибки обобщения (если ваш NN не учится, он не может научиться обобщать). Эти проверки включают, среди прочего:
- модульные тесты
- проверки наборов данных (посмотрите на несколько случайных выборок ввода / метки для обучающего набора и тестового набора и проверьте правильность меток; проверьте ширину и размер входных изображений; перемешайте выборки в обучающем / тестовом наборе и посмотрите, влияет ли это результаты и т. д.)
- рандомизированные тесты
- стандартизировать вашу предварительную обработку и версии пакетов
- вести журнал численных экспериментов
3. Попытайтесь получить суперсходимость
«Суперконвергенция: очень быстрое обучение нейронных сетей с использованием больших скоростей обучения» Лесли Н. Смита и Николая Топина показывает, что в некоторых случаях сочетание больших скоростей обучения с методом циклического обучения Лесли Н. Смита действует как регуляризатор ускорение сходимости на порядок и уменьшение необходимости обширной регуляризации. Таким образом, это хорошая вещь, чтобы попробовать, прежде чем
4. Настройка регуляризации на MAXXX
Регуляризация часто увеличивает время обучения (плохо), увеличивает ошибку обучения и уменьшает ошибку обобщения (хорошо), но слишком большая регуляризация может фактически увеличить обе ошибки (недостаточное соответствие). По этой причине и в связи с увеличением времени обучения часто лучше вводить различные приемы регуляризации по одному, после того , как вам удастся превзойти тренировочный набор. Обратите внимание, что регуляризация сама по себе не обязательно означает, что ваша ошибка обобщения станет меньше: модель должна иметь достаточно большую емкость для достижения хороших свойств обобщения. Это часто означает, что вам нужна достаточно глубокая сеть, прежде чем вы сможете увидеть преимущества регуляризации.
Самые старые методы регуляризации - это, вероятно, ранняя остановка и снижение веса. Некоторые из других:
- уменьшить размер пакета: меньший размер пакета обычно ассоциируется с меньшей ошибкой обобщения, так что стоит попробовать. Тем не менее, обратите внимание, что некоторые оспаривают полезность мини-пакетов: по моему опыту, они помогают (если вам не нужно использовать сумасшедшие маленькие размеры, такие как ), но Elad Hoffer, Itay Hubara, Daniel Soudry Train дольше, лучше обобщать: закрыть разрыв в обобщении в крупномасштабном обучении нейронных сетей не согласен. Обратите внимание, что если вы используете пакетную норму (см. Ниже), слишком маленькие мини-пакеты будут весьма вредны.m=16
- используйте SGD, а не адаптивные оптимизаторы: это уже было рассмотрено @shimao, поэтому я упоминаю это только для полноты картины
- использовать выпадение: если вы используете LSTM, используйте стандартное выпадение только для входных и выходных единиц слоя LSTM. Для рекуррентных юнитов (ворот) используйте рекуррентный отсев, как впервые показал Ярин Гал в своей кандидатской диссертации. тезис . Однако, если вы используете CNN, выпадение используется сейчас реже. Вместо этого вы склонны ...
- ... использовать пакетную нормализацию: самые последние архитектуры CNN избегают отсева в пользу пакетной нормализации. Это может быть просто причуда, или это может быть связано с тем, что, по-видимому, отсева и нормализации партии не играют вместе (Сян Ли, Шуо Чен, Сяолинь Ху, Цзянь Ян, Понимание дисгармонии между отсева и нормализации партии по дисперсии Сдвиг ). Так как пакетная норма более эффективна, чем увольнение, когда у вас есть огромные наборы данных, это может быть причиной того, что увольнение вышло из строя для архитектур CNN. Если вы используете пакетную нормализацию, убедитесь, что распределение весов и смещений для каждого слоя выглядит примерно стандартно нормальным. Для РНН внедрение нормы партии является сложным: нормализация веса (Тим Салиманс, Дидерик П. Кингма,Нормализация веса: простая репараметризация для ускорения обучения глубоких нейронных сетей ) является жизнеспособной альтернативой.
- используйте увеличение данных: оно также имеет регуляризирующий эффект.
5. Гиперпараметр / архитектура поиска
Если больше ничего не помогает, вам придется протестировать несколько разных настроек гиперпараметра (здесь может помочь Bayesian Optimization) или несколько разных архитектурных изменений (например, возможно, в вашей архитектуре GAN и для набора данных, с которым вы работаете, пакетная норма работает только в генератор, но при добавлении к дискриминатору это тоже ухудшает ситуацию). Обязательно следите за результатами этих долгих и скучных экспериментов в хорошо упорядоченном бортовом журнале.
PS для GAN не имеет особого смысла говорить об ошибке обобщения: приведенный выше пример имел в виду только то, что в Deep Learning все еще много алхимии, и вещи, которые вы ожидаете, будут работать нормально, иногда т, или наоборот, то, что много раз работало нормально, внезапно вынуждает вас искать новый набор данных.