Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

При обучении нейронной сети функция потерь (убыток) не уменьшалась в первые несколько эпох, в чем может быть причина?

ПрограммированиеМашинное обучение+2
  · 4,3 K
Openstack DevOps and IBM/Informix Certified DBA . Phd in Math (Duality of spaces of...  · 19 февр 2022
Убедитесь, что ваш код не содержит ошибок
Среди писателей есть поговорка: «Все, что написано, — это переписывание», то есть большая часть написанного — это переделка. Для программистов (или, по крайней мере, специалистов по данным) это выражение можно было бы перефразировать как «Все кодирование — это отладка».
Каждый раз, когда вы пишете код, вам нужно убедиться, что он работает должным образом. Лучший метод проверки правильности, который я когда-либо находил, — это разбивать ваш код на небольшие сегменты и проверять, работает ли каждый сегмент. Это можно сделать, сравнив вывод сегмента с правильным ответом. Это называется модульным тестированием. Написание хороших модульных тестов — ключевой момент, чтобы стать хорошим статистиком/специалистом по данным/экспертом по машинному обучению/специалистом по нейронным сетям.
Вы должны убедиться, что ваш код не содержит ошибок, прежде чем вы сможете настроить производительность сети!
Есть две особенности нейронных сетей, которые делают проверку даже более важной, чем для других типов машинного обучения или статистических моделей.
Нейронные сети не являются готовыми алгоритмами, как случайный лес или логистическая регрессия. Даже для простых сетей с прямой связью ответственность за принятие многочисленных решений о том, как сеть сконфигурирована, подключена, инициализирована и оптимизирована, в значительной степени лежит на пользователе. Это означает написание кода, а написание кода означает отладку.
Даже когда код нейронной сети выполняется без возникновения исключения, в сети все равно могут быть ошибки! Эти ошибки могут быть даже маскированы, для которых сеть будет обучаться, но застрять на неоптимальном решении, или полученная сеть не будет иметь желаемой архитектуры.
Наиболее распространенными ошибками программирования, относящимися к нейронным сетям, являются
1.Переменные создаются, но никогда не используются (обычно из-за ошибок копирования-вставки);
  1. Выражения для обновления градиента неверны;
  2. Обновления веса не применяются;
  3. Функции потерь не измеряются в правильном масштабе (например, кросс-энтропийные потери могут быть выражены в терминах вероятности или логитов).
  4. Потеря не подходит для задачи (например, использование категориальной кросс-энтропийной потери для задачи регрессии).
  5. Dropout используется во время тестирования, а не только для обучения.
==========================
Масштабируйте свои данные
Масштаб данных может иметь огромное значение для обучения. Иногда сети просто не уменьшают потери, если данные не масштабируются. Другие сети уменьшат потери, но очень медленно. Масштабирование входных данных (а в некоторых случаях и целей) может значительно улучшить обучение сети.
===========================
Перед представлением данных в нейронную сеть стандартизация данных, чтобы они имели нулевое среднее значение и единичную дисперсию или лежали в небольшом интервале, таком как [−0,5,0,5], может улучшить обучение. Это представляет собой предварительную обработку и устраняет влияние выбора единиц измерения на веса сети. Например, длина в миллиметрах и длина в километрах представляют одно и то же понятие, но в разных масштабах. Точные детали того, как стандартизировать данные, зависят от того, как выглядят ваши данные.
============================
Нормализация и стандартизация данных в нейронных сетях
Почему масштабирование [0,1] резко увеличивает время обучения для ИНС с прямой связью (1 скрытый слой)?
Пакетная или уровневая нормализация может улучшить обучение сети. Оба стремятся улучшить сеть, сохраняя среднее значение и стандартное отклонение для активации нейронов по мере обучения сети. Не совсем понятно, почему это помогает обучению, и остается активной областью исследований. Широкие и глубокие нейронные сети, а также нейронные сети с экзотической проводкой — это сейчас самое сложное в машинном обучении. Но эти сети не возникли полностью сформированными; их конструкторы достроили до них из более мелких агрегатов. Сначала создайте небольшую сеть с одним скрытым слоем и убедитесь, что она работает правильно. Затем постепенно добавляйте дополнительную сложность модели и убедитесь, что каждая из них работает.
============================
Слишком мало нейронов в слое может ограничить представление, которое изучает сеть, что приведет к неполной подгонке. Слишком большое количество нейронов может привести к переобучению, потому что сеть будет «запоминать» обучающие данные.
Даже если вы можете доказать, что математически для моделирования проблемы требуется лишь небольшое количество нейронов, часто бывает так, что наличие «еще нескольких» нейронов облегчает оптимизатору поиск «хорошей» конфигурации. (Но я не думаю, что кто-то полностью понимает, почему это так.) Я привожу пример этого в контексте проблемы XOR здесь: не нужны ли мои итерации для обучения NN для XOR с MSE < 0,001 слишком высоким ?
=============================
Выбор количества скрытых слоев позволяет сети обучаться абстракции от необработанных данных.
Глубокое обучение сейчас в моде, и сети с большим количеством слоев показали впечатляющие результаты. Но добавление слишком большого количества скрытых слоев может создать риск переобучения или затруднить оптимизацию сети. Выбор продуманной сетевой проводки может сделать большую работу для Вас. Подходит ли ваш источник данных для специализированных сетевых архитектур?
А) Сверточные нейронные сети могут достигать впечатляющих результатов на «структурированных» источниках данных, изображениях или аудиоданных.
В) Рекуррентные нейронные сети хорошо работают с последовательными типами данных, такими как данные на естественном языке или временные ряды. Остаточные соединения могут улучшить сети с глубокой прямой связью.
=============================
Чтобы достичь современного или даже просто хорошего результата, Вы должны настроить все части так, чтобы они хорошо работали вместе. Настройка конфигурации нейронной сети, которая действительно обучается, очень похожа на взлом замка: все части должны быть правильно выстроены. Точно так же, как недостаточно иметь один тумблер в нужном месте, недостаточно иметь только архитектуру или только оптимизатор, правильно настроенным. Настроить выбор конфигурации на самом деле не так просто, как сказать, что один вид выбора конфигурации (например, скорость обучения) более или менее важен, чем другой (например, количество единиц), поскольку все эти варианты взаимодействуют со всеми другими вариантами, поэтому один выбор может преуспеть в сочетании с другим выбором, сделанным в другом месте.
===============================
Это неполный список опций конфигурации, которые не являются также опциями регуляризации или числовой оптимизации. Инициализацию сети часто упускают из виду как источник ошибок нейронной сети. Инициализация на слишком большом интервале может привести к слишком большим начальным весам, а это означает, что отдельные нейроны будут оказывать чрезмерное влияние на поведение сети.
Ключевое различие между нейронной сетью и регрессионной моделью заключается в том, что нейронная сеть представляет собой композицию множества нелинейных функций, называемых функциями активации. Классические результаты нейронной сети сосредоточены на сигмоидальных функциях активации (логистических или танх-функциях). Однако, единицы ReLU (или аналогичные) имеют тенденцию работать лучше, потому что имеют более крутые градиенты, поэтому обновления можно применять быстро.
Одним из предостережений относительно ReLU является феномен «мертвых нейронов», который может препятствовать обучению; дырявый релюс и подобные варианты позволяют избежать этой проблемы.
Касаемо Dying ReLU и новых функций активации смотри
Недостаточно информации для того, чтобы дать ответ ... По смыслу фразы могу предположить, что: I. В первые несколько эпох loss function не уменьшалась(фактически не происходило обучения), но в дальнейшем модель обучилась и достигла приемлемой точности. Причин тому может быть много, поэтому напишу первые три, наиболее вероятные с моей точки зрения --> 1) Входные данные... Читать далее