Я всегда вижу, как новичок в машинном обучении спрашивает: «Почему моя нейронная сеть не работает?» на Stack Overflow, которые немедленно закрываются, так как они не являются вопросами программирования. Не бойся, я здесь, чтобы решить твои проблемы.

1. Вы не нормализовали свои данные.

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

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

Вы можете сделать это с помощью этого простого уравнения:

new_value = (max_value-old_value)/min_value

Где max_value — это наибольшее значение, которое появляется для этой функции, а min_value — наименьшее значение, которое появляется для этой функции.

2. Ваши данные не сбалансированы.

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

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

3. У вас недостаточно данных.

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

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

4. Вы не используете данные проверки.

Попробуйте построить прогнозы ваших данных вместе с истинными значениями y. Если ваши прогнозы кажутся «соединяющими точки». Это означает, что ваша сеть переоснащена.

Попробуйте разделить данные на данные проверки и данные обучения. Хорошее эмпирическое правило заключается в том, что данные проверки должны составлять не менее 10% данных. Данные проверки будут проверкой, чтобы увидеть, действительно ли ваша сеть изучает шаблоны, которые соответствуют данным, или только этот набор данных.

5. Ваша нейронная сеть слишком глубокая.

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

Вы можете попытаться уменьшить количество слоев или количество нейронов нейронной сети. Это ничего не стоит и даже сокращает время обучения.

6. Вы используете неправильный тип слоя.

У определенных слоев есть определенные функции: использование LSTM для обработки данных изображения неэффективно и может привести к ложным результатам. Вот список, в котором соответствующие типы слоев соответствуют типам данных:

  • Данные временных рядов — LSTM
  • Данные изображения — сверточные слои
  • Генерация — деконволюционные слои

7. Вы используете неправильную функцию потерь.

Определенные потери дополняют определенные типы нейронных сетей:

  • Двоичная классификация — Двоичная кросс-энтропия
  • Мультиклассовая классификация — разреженная категориальная кросс-энтропия
  • Регрессия — MSE, MAE или RMSE

8. Вы используете не тот оптимизатор.

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

9. У вас неправильная скорость обучения.

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

10. У вас неправильное время тренировки.

Я всегда вижу большой диапазон эпох, используемых для обучения, но я никогда не видел, чтобы кто-то использовал обратный вызов с ранней остановкой. Просто поставьте большое количество эпох, примените терпение ранней остановки как 10% от общего количества эпох. Это гарантирует, что если ваша сеть может сходиться, она будет сходиться.

Вывод:

В заключение я хотел бы напомнить вам, что неспособность вашей модели работать может быть отдельной проблемой или сложной проблемой из множества разных проблем. Удачи, и спасибо, что прочитали мою статью!