В задачах машинного обучения обычно перетасовывать данные и нормализовать их. Цель нормализации ясна (для того же диапазона значений признаков). Но после долгих попыток я не нашел какой-либо ценной причины для перетасовки данных.
Я прочитал этот пост здесь, обсуждая, когда мы должны перетасовать данные, но не очевидно, почему мы должны перетасовывать данные. Кроме того, я часто видел в таких алгоритмах, как Adam или SGD, где нам нужен спуск по градиенту партии (данные должны быть разделены на мини-партии, а размер партии должен быть указан). Согласно этому посту, важно, чтобы данные каждой эпохи перемешивались, чтобы иметь разные данные для каждой партии. Так что, возможно, данные перемешаны и, что более важно, изменены.
Почему мы это делаем?
Ответы:
Основываясь на том, что мы должны делать, если вопрос, опубликованный в DataScience, является дубликатом вопроса, размещенного в CrossValidated? , Я публикую свой ответ на тот же вопрос, заданный на CrossValidated ( /stats//a/311318/89653 ).
Примечание: в этом ответе я имею в виду минимизацию потерь при обучении и не обсуждаю критерии остановки, такие как потеря при проверке. Выбор критериев остановки не влияет на процесс / концепции, описанные ниже.
Процесс обучения нейронной сети состоит в том, чтобы найти минимальное значение функции потерь , где представляет матрицу (или несколько матриц) весов между нейронами, а представляет обучающий набор данных. Я использую нижний индекс для чтобы указать, что наша минимизация происходит только по весам (то есть мы ищем такой, что минимизируется), пока фиксирован.WXX ℒ WW ℒ XLИкс( W) W Икс Икс L W W L Икс
Теперь, если мы предположим, что у нас есть элементов в (то есть, есть весов в сети), - поверхность в -мерном пространстве. Чтобы дать визуальный аналог, представьте, что у нас есть только два веса нейронов ( ). Тогда имеет простую геометрическую интерпретацию: это поверхность в трехмерном пространстве. Это вытекает из того факта, что для любых заданных матриц весов функция потерь может быть оценена по и это значение становится высотой поверхности.W P ℒ P + 1 P = 2 ℒ W Xп W п L P+1 P=2 L W X
Но есть проблема невыпуклости; Поверхность, которую я описал, будет иметь множество локальных минимумов, и поэтому алгоритмы градиентного спуска могут застрять в этих минимумах, в то время как более глубокое / меньшее / лучшее решение может находиться поблизости. Это может произойти, если остается неизменным в течение всех обучающих итераций, потому что поверхность фиксирована для данного ; все его характеристики статичны, включая различные минимумы.XX X
Решением этой проблемы является мини-пакетное обучение в сочетании с перетасовкой. Перетасовывая строки и обучая только их подмножеству во время данной итерации, изменяется с каждой итерацией, и на самом деле вполне возможно, что никакие две итерации по всей последовательности обучающих итераций и эпох не будут выполняться с точно такой же , В результате решатель может легко «отскочить» от локального минимума. Представьте, что решатель застрял в локальном минимуме на итерации с обучающей мини-партией . Этот локальный минимум соответствует оцененному при определенном значении весов; мы назовем этоX i X i ℒ ℒ X i ( W i ) X i + 1 ℒ X i + 1 ( W i ) ℒ X i ( W i ) ℒ X i + 1 ℒ X i ℒ X W WX X i Xi L LXi(Wi) , На следующей итерации форма нашей поверхности потерь фактически меняется, потому что мы используем , то есть может принимать значение, от и вполне возможно, что он не соответствует локальному минимуму! Теперь мы можем вычислить обновление градиента и продолжить обучение. Для ясности: форма будет - в общем случае - отличаться от формы . Обратите внимание, что здесь я имею в виду функцию потерь на тренировочном наборе ; это полная поверхность, определенная по всем возможным значениямXi+1 LXi+1(Wi) LXi(Wi) LXi+1 LXi L X W , А не оценки этой потери (который является только скаляром) для определенного значения . Отметим также, что если мини-пакеты используются без перестановки, все еще существует степень «диверсификации» поверхностей потерь, но будет определенное (и относительно небольшое) количество уникальных поверхностей ошибок, видимых решающим устройством (в частности, он будет видеть одинаковый точный набор мини-партий - и, следовательно, поверхностей потерь - в течение каждой эпохи).W
Одной вещи, которую я сознательно избегал, было обсуждение размеров мини-пакетов, потому что существует миллион мнений по этому вопросу, и это имеет существенные практические последствия (большая параллелизация может быть достигнута с большими партиями). Тем не менее, я считаю, что стоит упомянуть следующее. Поскольку оценивается путем вычисления значения для каждой строки (и суммирования или взятия среднего значения, т. Коммутативного оператора) для заданного набора весовых матриц , расположение строк имеет никакого эффекта при использовании полной градиентный спуск (то есть, когда каждый пакет представляет собой полный , а итерации и эпохи - это одно и то же). X W X XL X W X X
источник
Перестановка данных служит для уменьшения дисперсии и обеспечения того, чтобы модели оставались общими и меньше подходили.
Очевидный случай, когда вы перетасовываете свои данные, это если ваши данные сортируются по их классу / цели. Здесь вы захотите перемешать, чтобы убедиться, что ваши обучающие / тестовые / проверочные наборы отражают общее распределение данных.
Для пакетного градиентного спуска применяется та же логика. Идея, лежащая в основе спуска градиента партии, состоит в том, что, вычисляя градиент для одной партии, вы обычно получаете довольно хорошую оценку «истинного» градиента. Таким образом, вы экономите время вычислений, так как вам не нужно каждый раз вычислять «истинный» градиент по всему набору данных.
Вы хотите перетасовать свои данные после каждой эпохи, потому что у вас всегда будет риск создания пакетов, которые не являются репрезентативными для всего набора данных, и, следовательно, ваша оценка градиента будет отклонена. Перестановка ваших данных после каждой эпохи гарантирует, что вы не будете "застревать" со слишком многими плохими партиями.
При обычном стохастическом градиентном спуске, когда каждая партия имеет размер 1, вы все равно хотите перетасовывать свои данные после каждой эпохи, чтобы сохранить свое обучение в целом. Действительно, если точка 17 данных всегда используется после точки 16 данных, ее собственный градиент будет смещен при любых обновлениях, которые точка 16 данных вносит в модель. Перетасовывая свои данные, вы гарантируете, что каждая точка данных создает «независимое» изменение в модели, без смещения одних и тех же точек перед ними.
источник
Предположим, данные отсортированы в указанном порядке. Например, набор данных, который сортируется на основе их класса. Таким образом, если вы выбираете данные для обучения, проверки и тестирования, не рассматривая этот предмет, вы выберете каждый класс для различных задач, и процесс не будет выполнен.
Следовательно, чтобы препятствовать решению подобных проблем, простым решением является перетасовка данных для получения различных наборов данных обучения, проверки и тестирования.
Что касается мини-партии, ответы на этот пост могут стать решением вашего вопроса.
источник
Нам нужно перетасовать только для мини-партии / SGD, нет необходимости в групповом градиентном спуске.
Если данные не перемешиваются, данные могут быть отсортированы или аналогичные точки данных будут лежать рядом друг с другом, что приводит к медленной конвергенции:
Я нарисовал график функции потерь L-2 для линейной регрессии для
y=2x
здесьисточник
В дополнение к ответу @ Джоша, я хотел бы добавить, что по той же причине необходимо произвести перемешивание перед пакетированием. В противном случае вы получаете такое же конечное число поверхностей.
источник
Для лучшей точности модели всегда рекомендуется, чтобы данные тренировок имели все разновидности данных.
Перестановка данных обучения помогает нам в достижении этой цели.
источник
Перетасовывая строки и обучая только их подмножеству во время данной итерации, 𝑋 изменяется с каждой итерацией, и на самом деле вполне возможно, что никакие две итерации по всей последовательности обучающих итераций и эпох не будут выполняться с одной и той же 𝑋
источник