Настройка гиперпараметра, как правило, является самым сложным шагом в ML. В общем, мы пробуем разные значения случайным образом, оцениваем модель и выбираем те наборы значений, которые дают наилучшую производительность.
Возвращаясь к вашему вопросу, у вас высокая проблема с отклонениями (хорошая в обучении, плохая в тестировании).
Есть восемь вещей, которые вы можете сделать по порядку
- Убедитесь, что ваш тестовый и обучающий дистрибутив одинаковы.
- Убедитесь, что вы перетасовали, а затем разбили данные на два набора (тест и тренировка)
- Хороший поезд: тестовый сплит будет 105: 15K
- Использование более глубокой сети с регуляризацией Dropout / L2.
- Увеличьте размер тренировочного набора.
- Попробуйте раннюю остановку
- Изменить функцию потери
- Изменение архитектуры сети (переключение на ConvNets, LSTM и т. Д.).
В зависимости от вашей вычислительной мощности и времени вы можете установить ограничение на количество скрытых юнитов и скрытых слоев, которые вы можете иметь.
потому что в большой сети будет больше локальных минимумов.
Нет, это не совсем так, в действительности, поскольку количество входных измерений увеличивает вероятность застрять в локальных минимумах, уменьшается. Поэтому мы обычно игнорируем проблему локальных минимумов. Это очень редко. Производные по всем измерениям в рабочем пространстве должны быть нулевыми для локальных / глобальных минимумов. Следовательно, это очень маловероятно в типичной модели.
Еще одна вещь, я заметил, что вы используете линейную единицу для последнего слоя. Я предлагаю вам пойти на ReLu вместо этого. В общем, нам не нужны отрицательные значения в регрессии. Это уменьшит ошибку теста / поезда
Возьми это:
In MSE 1/2 * (y_true - y_prediction)^2
потому что y_prediction
может быть отрицательным значением. Весь термин MSE может взорвать большие значения, так как y_prediction становится очень отрицательным или очень положительным.
Использование ReLu для последнего слоя гарантирует, что y_prediction
является положительным. Следовательно, ожидается низкая ошибка.