2016-12-19 4 views
0

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

Я разделил весь набор данных на K-folds, где 1 fold - это набор проверки, 1-кратный набор тестов, а данные в оставшихся сложениях сбрасываются в обучающий набор.

Затем I цикл K раз, каждый раз переназначая проверки и проверки на другие складки. В каждом цикле я постоянно тренирую сеть (обновляю весы), используя только набор тренировок, пока ошибка, создаваемая сетью, не встретит некоторый порог. Однако ошибка, которая используется для принятия решения о прекращении обучения, производится с использованием набора проверки, а не набора тренировок. После завершения обучения ошибка снова производится, но на этот раз с использованием набора тестов. Эта ошибка из набора тестов записывается. Наконец, все веса повторно инициализируются (с использованием того же генератора случайных чисел, который использовался для их первоначальной инициализации) или сброшены каким-то образом, чтобы отменить обучение, которое было выполнено, прежде чем перейти к следующему набору тестов для проверки, обучения и тестирования ,

Как только все петли K завершатся, ошибки, зарегистрированные на каждой итерации K-петли, усредняются.

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

+0

Этот вопрос больше подходит для http://stats.stackexchange.com, чем к SO, поскольку речь идет не о программировании, а о статистике. –

ответ

1

Я считаю, что ваша реализация Cross-проверки правильна. Чтобы ответить на ваши вопросы:

Однако ошибка, которая используется для принятия решения о прекращении обучения, производится с использованием набора проверки, а не набора тренировок.

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

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

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

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

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

+0

Я вижу. Благодарим вас за разъяснение в отношении избыточности наличия как тестовых, так и валидационных наборов. У меня есть еще один вопрос, если вы не возражаете: если весы будут сброшены в конце каждой итерации, как следует определить пройденные значения для этих весов после перекрестной проверки? Должен ли я записывать веса в конце каждой итерации и, наконец, устанавливать значения веса для средних значений (например, я сделал с ошибкой?) Или я мог бы установить весы равными тому, что они заканчивают после обучения на последней итерации ? – Manuel

+1

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

Смежные вопросы