Для получения дополнительных галантерейных товаров, пожалуйста, обратите внимание на публичный аккаунт WeChat «AI Frontline» (ID: ai-front)
Даже для ветеранов глубокое обучение остается загадочным искусством. Поскольку люди обычно проводят сложные эксперименты с большими наборами данных, это скрывает фундаментальную связь между наборами данных, гиперпараметрами и производительностью, и люди не могут видеть всю картину целиком.
Цель этой статьи — получить некоторые базовые представления о глубоких нейронных сетях, проведя очень простые эксперименты с небольшими наборами данных. Эти эксперименты помогают понять тенденции, которые обычно возникают в больших наборах данных. Эти эксперименты задуманы как «атомарные», поскольку они пытаются анализировать фундаментальные аспекты глубокого обучения контролируемым образом. Кроме того, эти эксперименты не требуют специального оборудования, они выполняются всего за несколько минут и не требуют графического процессора. Время выполнения измеряется на машине с одним процессором.
Все эти эксперименты написаны на Python с использованием библиотек tensorflow и sklearn, но, учитывая длину, большая часть кода в этой статье абстрагирована, чтобы упростить проведение экспериментов. См. полный код в репозитории Github (https://github.com/abidlabs/AtomsOfDeepLearning/).
Теорема об универсальном приближении утверждает, что простая нейронная сеть с прямой связью (т. е. многослойный персептрон) с одним скрытым слоем и стандартной функцией активации может аппроксимировать любую непрерывную функцию, если скрытый слой имеет достаточное количество единиц. Давайте посмотрим на это на практике и посмотрим, сколько единиц необходимо для аппроксимации какой-то конкретной функции.
метод: мы будем обучать однослойную нейронную сеть на 50 точках данных (x, y), взятых из следующей функции в области [-1,1, среднеквадратическая ошибка результирующей подгонки, MSE). Мы попробуем следующие функции (вы всегда можете попробовать свои собственные, изменив приведенный ниже код):
Предполагать:По мере увеличения количества единиц в скрытом слое Точность результирующей подгонки будет увеличиваться (ошибка будет уменьшаться).
运行实验所需的时间: 91.595 s
в заключении:По мере увеличения количества скрытых единиц ошибка аппроксимации обучающих данных обычно уменьшается.
обсуждать:Хотя теорема об универсальном приближении утверждает, что нейронная сеть с достаточным количеством параметров может аппроксимировать истинную функцию классификации/регрессии, она не говорит, могут ли эти параметры быть изучены с помощью такого процесса, как стохастический градиентный спуск. Кроме того, вы можете задаться вопросом, можем ли мы теоретически рассчитать, сколько нейронов необходимо для хорошей аппроксимации данной функции. Вы можете увидеть некоторое обсуждение этого в статье НЕЙРОННЫЕ СЕТИ ДЛЯ ОПТИМАЛЬНОЙ АППРОКСИМАЦИИ ГЛАДКИХ И АНАЛИТИЧЕСКИХ ФУНКЦИЙ.
Адрес бумаги:
https://pdfs.semanticscholar.org/694a/d455c119c0d07036792b80abbf5488a9a4ca.pdf
На практике более глубокие многослойные персептроны (с более чем одним скрытым слоем) значительно превосходят более мелкие персептроны по многим интересующим задачам. Почему это происходит? Утверждалось, что более глубокие нейронные сети могут выражать многие важные классы функций с меньшим количеством параметров. Теоретически показано, что для выражения простых радиальных и комбинаторных функций требуется использование экспоненциально большого числа параметров мелких сетей. А вот глубокие нейронные сети — нет. Спойлер: я намереваюсь использовать эксперименты для проверки статей, но не могу (это не делает результаты статьи недействительными — то, что существует набор параметров нейронной сети, не означает, что их можно проверить с помощью стохастического градиента). спуску легко научиться). Единственное, что я могу сделать, это в какой-то степени надежно воспроизвести единственные результаты из статьи «Преимущества представления сетей с глубокой прямой связью», в которой ставится ряд сложных задач классификации, которые проще для более глубоких нейронных сетей.
Репрезентативные преимущества сетей глубокой прямой связи Адрес документа: https://arxiv.org/pdf/1509.08101.pdf
Бумага о простой радиальной функции: https://arxiv.org/pdf/1512.03965.pdf
Статья о комбинаторных функциях: https://arxiv.org/pdf/1603.00988.pdf
метод:Набор данных состоит из 16 равноотстоящих друг от друга точек по оси x, причем каждая пара соседних точек принадлежит к противоположному классу. Особый тип глубокой нейронной сети (та, которая распределяет веса по слоям) имеет фиксированное количество (152) параметров, но тестируется разное количество слоев.
Предполагать:По мере увеличения количества слоев в нейронной сети с фиксированным числом параметров точность сложных задач классификации будет повышаться.
运行实验所需的时间: 28.688 s
Здесь красные и синие точки обозначают точки, принадлежащие к разным категориям. Черная пунктирная линия представляет собой самое близкое приближение к обучающим данным, полученным нейронной сетью (если оценка, присвоенная нейронной сетью, больше нуля, она прогнозируется как красная точка; в противном случае она прогнозируется как синяя точка). Нулевая линия показана черным цветом.
в заключении:В большинстве экспериментов точность увеличивается с глубиной.
обсуждать:Кажется, что более глубокие слои допускают более «крутые изгибы» изученной функции от входа к выходу. По-видимому, это связано с длиной траектории нейронной сети (т. е. с мерой того, сколько выдает нейронная сеть при изменении входных данных вдоль одномерного пути фиксированной длины).
Документ о длине траектории: https://arxiv.org/pdf/1606.05336.pdf
Глубокое обучение и большие данные тесно связаны; обычно считается, что когда размер набора данных достаточно велик, чтобы преодолеть переоснащение, глубокое обучение будет только более эффективным, чем другие методы (такие как неглубокие нейронные сети и случайные леса), и более благоприятным. увеличению выразительности глубинных сетей. Мы работаем с очень простым набором данных, состоящим из смеси выборок Гаусса.
метод:Набор данных состоит из смеси двух 12-мерных гауссианов, каждый из которых генерирует данные, принадлежащие одному классу. Два гауссиана имеют одинаковую ковариационную матрицу, но также означают 1/i1/i единиц в i-м измерении. Идея основана на том, что есть некоторые измерения, которые позволяют модели легко различать разные классы, в то время как другие измерения являются более сложными, но все же полезными для способности различать.
Предполагать:По мере увеличения размера набора данных точность проверки всех технических методов будет увеличиваться, но точность глубокой модели будет выше, чем у неглубокой модели. Мы также ожидаем, что показатели точности для методов без глубокого обучения будут насыщаться быстрее.
运行实验所需的时间: 138.239 s
в заключении:Нейронные сети постоянно превосходят SVM и случайные леса с точки зрения размера набора данных. Разрыв в производительности увеличивается по мере увеличения размера набора данных, по крайней мере, до тех пор, пока правильная скорость нейронной сети не начнет насыщаться, что указывает на то, что нейронная сеть более эффективно использует постоянно увеличивающийся набор данных. Однако при наличии достаточного количества данных даже SVM будут иметь достойную степень правильности. Глубокие сети работают лучше, чем мелкие сети.
обсуждать:Хотя увеличенный размер набора данных приносит пользу нейронной сети, как мы и ожидали. Но что интересно, нейронные сети уже работают лучше, чем другие методы, на относительно небольших наборах данных. Кажется, что двухуровневая сеть не имеет значительного переобучения, хотя мы ожидаем, что некоторые функции (например, 6-12 функций, низкий уровень сигнала) вызовут переоснащение сети. Также интересно, что у SVM достаточно данных, чтобы приблизиться к 1.0.
Когда набор данных несбалансирован (например, имеет больше выборок одного класса, чем другого), нейронная сеть может быть не в состоянии научиться различать эти классы. В этом эксперименте мы исследуем, существует ли такая ситуация. Мы также исследуем, может ли избыточная выборка, популярное средство, использующее замещающие выборки выборки из класса меньшинства, смягчить последствия проблемы.
метод: мы генерируем два двумерных результата (результаты здесь не показаны, что указывает на то, что те же результаты применимы к более высоким измерениям) гауссианы, каждый из которых дает данные, принадлежащие одному классу. Два гауссиана имеют одинаковую ковариационную матрицу, но предполагается, что они разнесены на 1/i1/i единиц в i-м измерении. Каждый обучающий набор данных состоит из 1200 точек данных, но мы изменили дисбаланс классов с 1:1 до 1:99. Набор тестовых данных фиксируется в соотношении 1:1 для простоты сравнения производительности и состоит из 300 точек. Мы также показываем границы решений в каждом случае.
Предположение: мы ожидаем, что точность теста будет снижаться по мере увеличения дисбаланса классов, но мы ожидаем, что передискретизация решит эту проблему.
运行实验所需的时间: 392.157 s
Нижние четыре графика показывают количество границ решений, проведенных вместе с точками обучения (слева) или контрольными точками (справа). В первой строке показан результат без повторной выборки, а в нижней — результат с повторной выборкой.
в заключении:Результаты показывают, что несбалансированность классов, несомненно, снижает точность классификации. Метод повторной выборки может значительно улучшить производительность.
обсуждать:Повторная выборка оказывает значительное влияние на повышение точности классификации, что может быть немного неожиданным, поскольку она не подвергает классификатор новым обученным примерам в классе меньшинства. Но рисунок показывает, что повторной выборки достаточно, чтобы «подтолкнуть» или сдвинуть границу решения в правильном направлении. В случае, когда метод повторной выборки неэффективен, может потребоваться составной метод для синтеза новых обучающих выборок для повышения точности.
Адрес связанной статьи: http://www.jair.org/media/953/live-953-2037-jair.pdf
Нейронные сети со многими параметрами имеют возможность запоминать большое количество обучающих выборок. Итак, нейронные сети просто запоминают обучающие выборки (а затем просто классифицируют контрольные точки на основе наиболее похожих обучающих точек) или они на самом деле извлекают закономерности и обобщают? Имеет ли это какое-то значение? Одна из причин, по которой считается, что это отличается, заключается в том, что нейронная сеть учится присваивать метки случайным образом иначе, чем она учится повторять метки. Это одна из стратегий, использованных в статье Arpit et al. Посмотрим, есть ли разница?
Адрес связанной статьи: https://arxiv.org/pdf/1706.05394.pdf
метод:Сначала мы создаем гауссову смесь 6D и случайным образом назначаем им метки. Мы измеряем точность обучающих данных, чтобы увеличить размер набора данных, чтобы понять объем памяти нейронной сети. Затем мы выбираем размер набора данных в пределах возможностей нейронной сети для запоминания и наблюдаем, есть ли существенная разница между нейронной сетью и метками истинности во время обучения. В частности, мы смотрим на точность каждой эпохи, чтобы определить, действительно ли нейронная сеть изучает истинные метки или случайные метки.
Предполагать:Мы ожидаем, что для случайных меток обучение должно занять больше времени. Не так с настоящими лейблами.
运行实验所需的时间: 432.275 s
в заключении:Объем памяти нейронной сети составляет около 150 точек обучения. Но даже в этом случае нейронной сети требуется больше времени, чтобы изучить случайные метки, чем метки наземной истины.
обсуждать:Этот результат не удивителен. Мы ожидаем, что истинные метки будут запоминаться быстрее, и если нейронная сеть научится правильно классифицировать конкретную точку данных, она также научится классифицировать другие подобные точки данных — если метки имеют смысл, но только если они не случайны!
При работе с данными очень высокой размерности нейронные сети могут испытывать трудности с изучением правильных границ классификации. В этих случаях перед передачей данных в нейронную сеть можно рассмотреть возможность неконтролируемого уменьшения размерности. Эта практика помогает или разрушает?
метод:Мы генерируем две 10-мерные гауссовские смеси. Гауссианы имеют ту же ковариационную матрицу, но среднее значение, разделенное единицей в каждом измерении. Затем мы добавляем к данным «виртуальные измерения», функции, которые представляют собой очень низкие случайные значения для обоих типов гауссианов и, следовательно, бесполезны для классификации. Затем мы умножаем полученные данные на матрицу случайного вращения, чтобы скрыть фиктивные размеры. Небольшой размер набора данных (n = 100) затрудняет изучение границ классификации нейронными сетями. Поэтому мы анализируем данные в меньшем измерении и смотрим, улучшится ли точность классификации.
Предполагать:Мы ожидаем, что PCA будет полезен, поскольку направление с наибольшей изменчивостью (вероятно) совпадает с направлением, наиболее благоприятным для классификации.
运行实验所需的时间: 182.938 s
в заключении:Когда размеры очень велики, неконтролируемый шаг PCA может значительно улучшить классификацию ниже по течению.
обсуждать:Мы наблюдаем интересное пороговое поведение. Когда размерность превышает 100 (интересно, что это число является количеством точек данных в наборе данных — это стоит изучить дальше), качество классификации значительно ухудшается. В этих случаях 5–10-мерный PCA может значительно улучшить классификацию ниже по течению.
В нескольких статьях сообщалось о получении небольших улучшений с помощью нейронных сетей со специальными функциями активации помимо типичных ReLU() и tanh(). Мы не пытаемся разработать специализированную функцию активации, а просто спрашиваем, можно ли использовать какую-либо старую нелинейную функцию в нейронной сети?
метод:Мы генерируем известный набор спутниковых 2D-данных и обучаем нейронную сеть с двумя скрытыми слоями, чтобы научиться классифицировать набор данных. Мы попробовали шесть различных функций активации.
Предполагать:Мы ожидаем, что функция идентификации будет работать плохо (поскольку сеть остается довольно линейной до последнего слоя softmax). Кроме того, мы можем ожидать, что стандартные функции активации будут работать лучше всего.
运行实验所需的时间: 22.745 s
в заключении:За исключением знака (x), все нелинейные функции активации очень эффективны для задач классификации.
обсуждать:Результаты несколько удивляют, так как все функции работают одинаково хорошо. Фактически, симметричные функции активации, такие как x2, работают так же хорошо, как и ReLU! Из этого эксперимента мы должны быть осторожны, чтобы экстраполировать слишком много причин. Во-первых, это относительно неглубокая нейронная сеть. Функции активации, которые хороши для таких сетей, могут сильно отличаться от тех, которые хороши для глубоких сетей. Кроме того, эта задача может быть слишком простой, даже почти идеально линейная нейронная сеть f(x)=x может достичь точности ~88%.
метод:Мы генерируем две 12-мерные гауссовские смеси. Гауссианы имеют ту же ковариационную матрицу, но среднее значение, разделенное единицей в каждом измерении. Набор данных состоит из 500 гауссов, 400 для обучения и 100 для тестирования. Мы обучаем нейронную сеть на этом наборе данных, используя различные размеры пакетов от 1 до 400. После этого мы измерили правильную скорость.
Предполагать:Мы ожидаем, что большие размеры пакетов повысят точность (менее зашумленные обновления градиента) и в некоторой степени снизят точность теста. Мы ожидаем, что время выполнения должно уменьшаться по мере увеличения размера пакета.
运行实验所需的时间: 293.145 s
в заключении:Как мы и ожидали, время выполнения уменьшается по мере увеличения размера пакета. Однако это приводит к снижению точности испытаний, поскольку точность испытаний монотонно снижается с увеличением размера партии.
обсуждать:Это интересно, но не согласуется с расхожим мнением, что, строго говоря, умеренный размер партии лучше подходит для обучения. Вероятно, это связано с тем, что мы не корректировали скорость обучения для разных размеров пакетов. Потому что большие партии работают быстрее. В целом, лучшим компромиссом для размера пакета является размер пакета 64.
Связанные документы: https://arxiv.org/abs/1508.02788
Для задач классификации обычно используется функция кросс-энтропийных потерь. Что, если мы используем среднеквадратичную ошибку, как мы обычно делаем в задачах регрессии? Имеет ли значение, что мы выбираем?
метод:Мы генерируем две 12-мерные гауссовские смеси. Гауссианы имеют ту же ковариационную матрицу, но среднее значение, разделенное единицей в каждом измерении. Набор данных состоит из 500 гауссов, 400 для обучения и 100 для тестирования. Мы обучаем нейронную сеть на этом наборе данных, используя несколько различных функций, чтобы определить, есть ли систематические различия в конечной точности. В качестве отрицательного контроля была включена инвариантная функция потерь.
Предполагать:Мы ожидаем, что функция кросс-энтропийных потерь будет работать лучше всего в качестве стандартной функции потерь для задач классификации, в то время как мы ожидаем, что другие функции потерь будут работать плохо.
运行实验所需的时间: 36.652 s
в заключении:Все потери, кроме отрицательного контроля, вели себя аналогично. Функция потерь — это разница между метками и логикой, возведенная в четвертую степень, ее производительность хуже, чем у других.
обсуждать:Выбор функции потерь не оказывает существенного влияния на конечный результат, что, возможно, неудивительно, поскольку эти функции потерь очень похожи.
метод:Мы генерируем две 12-мерные гауссовские смеси. Гауссианы имеют ту же ковариационную матрицу, но среднее значение, разделенное единицей в каждом измерении. Набор данных состоит из 500 гауссов, 400 для обучения и 100 для тестирования. Мы инициализируем значения весов в этой нейронной сети и смотрим, у кого из них лучшая производительность обучения.
Предполагать:Мы ожидаем, что потеря Ксавьера будет иметь наилучшую производительность (это значение по умолчанию используется в тензорном потоке), в то время как другие методы работают плохо (особенно константная инициализация).
运行实验所需的时间: 34.137 s
в заключении:Инициализации Xavier и Gaussian (с более низкой дисперсией) хорошо тренируются. Интересно, что инициализация константы 0 в конечном итоге приводит к обучению, а другие инициализации — нет.
обсуждать:Неудивительно, что инициализация Xavire обеспечивает наилучшую производительность. Gaussian с небольшим стандартным отклонением также работает (но не так хорошо, как Xavire). Если дисперсия становится слишком большой, то скорость обучения снижается, вероятно, из-за того, что большая часть вывода нейронной сети взрывается. Интересно, что непрерывная инициализация (которая теоретически не должна обучать нейронную сеть) приводит к тому, что обучение продолжается через несколько эпох. Это может быть связано с небольшими числовыми ошибками из-за распараллеливания ядра, что в конечном итоге приводит к расхождению разных весов. Интересно, что ничего из этого не работает, когда все веса равны 1.
В этом разделе мы изучим значения весов нейросети и визуализируем, как они меняются в процессе обучения.
Наш первый вопрос заключается в том, сходятся ли веса разных слоев с разной скоростью.
метод:Мы генерируем две 12-мерные гауссовские смеси. Гауссианы имеют ту же ковариационную матрицу, но среднее значение, разделенное единицей в каждом измерении. Набор данных состоит из 500 гауссов, 400 для обучения и 100 для тестирования. Мы обучаем нейронную сеть с 3 скрытыми слоями (получится 4 слоя весов, в том числе от входных до весов первого слоя) на этом наборе данных, и во время обучения мы строим 50 значений весов для каждого слоя. Мы измеряем сходимость, нанося на график разницу в весах между двумя круглыми числами.
Предполагать:Мы ожидаем, что веса более поздних слоев будут сходиться быстрее, поскольку изменения на более поздних этапах усиливаются по мере их обратного распространения по всей сети.
运行实验所需的时间: 3.924 s
в заключении:Мы обнаружили, что веса последнего слоя сходятся быстрее, чем веса предыдущего слоя.
обсуждать:Оказывается, что веса третьего слоя почти монотонно сходятся к своим окончательным значениям, и процесс идет очень быстро. Что касается режима сходимости весов первых нескольких слоев, то он более сложен и требует больше времени для решения.
метод:Мы генерируем две 12-мерные гауссовские смеси. Гауссианы имеют ту же ковариационную матрицу, но среднее значение, разделенное единицей в каждом измерении. Набор данных состоит из 500 гауссов, 400 для обучения и 100 для тестирования. Мы обучаем нейронную сеть с 2 скрытыми слоями на этом наборе данных и рисуем 50 значений веса на протяжении всего обучения. Затем мы повторяем процесс после включения члена регуляризации L1 или L2 в функцию потерь. Исследуем, влияет ли это на сходимость весов. Мы также построили правильный показатель и определили, значительно ли он изменился при регуляризации.
Предполагать:Мы ожидаем, что размер весов будет уменьшаться с регуляризацией. В случае регуляризации L1 мы можем получить разреженные веса. Если сила регуляризации высока, мы ожидаем, что точность упадет, но на самом деле точность может увеличиться при легкой регуляризации.
运行实验所需的时间: 17.761 s
в заключении:Отметим, что регуляризация действительно уменьшает размер весов, что приводит к разреженности в случае сильной L1-регуляризации. Как это повлияет на показатель точности, неясно.
обсуждать:Из выбранной нами выборки из 50 весов видно, что регуляризация оказывает существенное влияние на усвоение весов во время тренировки. Мы можем достичь некоторой степени разреженности с помощью регуляризации L1, хотя и с кажущейся большей силой регуляризации, что приводит к компромиссу в точности. В то время как регуляризация L2 не приводит к разреженности, она имеет только меньшие веса величины. В то же время, кажется, что это не оказывает пагубного влияния на показатель точности.
Мы только начали проводить поверхностные исследования. Например, все эти эксперименты включают (не такие глубокие) MLP, и есть много экспериментов, которые было бы интересно провести с CNN или RNN. Если вы хотите добавить эксперимент, рассмотрите следующие моменты, которые, как мне кажется, стоит изучить:
Какова связь между размером пакета и скоростью обучения?
В чем разница между сквозным обучением и обучением нейронной сети задаче?
Что такое нормализация партии? Почему это полезно?
Помогает ли трансферное обучение нейронным сетям, когда данные ограничены?
Для получения дополнительных галантерейных товаров, пожалуйста, обратите внимание на публичный аккаунт WeChat «AI Frontline» (ID: ai-front)