Алгоритм увеличения точности нейронных сетей и его приложения
![]()
|
= ∑︁ 𝛾 𝜕𝑒 𝜕𝑧 𝛾 𝜕𝑧 𝛾 𝜕𝑧 𝛽 ′ Второй сомножитель вычисляется схожим с (1.2.10) образом: 𝜕 𝜕𝑧 𝛽 ′ 𝑧 𝛾 = 𝜕 𝜕𝑧 𝛽 ′ ⎡ ⎣ 𝑡 𝛾 + ∑︁ 𝛽 𝑊 𝛾𝛽 𝜎 (︀𝑧 𝛽 )︀ ⎤ ⎦ = 𝑊 𝛾𝛽 ′ 𝜎 ′ (︁ 𝑧 𝛽 ′ )︁ Подставляя все результаты окончательно получаем 𝜕𝑒 𝜕𝑧 𝛽 ′ = ∑︁ 𝛾 𝜕𝑒 𝜕𝑧 𝛾 𝑊 𝛾𝛽 ′ 𝜎 ′ (︁ 𝑧 𝛽 ′ )︁ = 𝜎 ′ (︁ 𝑧 𝛽 ′ )︁ ∑︁ 𝛾 𝜕𝑒 𝜕𝑧 𝛾 𝑊 𝛾𝛽 ′ Здесь мы вынесли 𝜎 ′ (︁ 𝑧 𝛽 ′ )︁ из под знака суммирования, так как он не зависит от 𝛾 ′ . Таким образом, градиент 𝑒 по активностям нейронов сперва вычисляется на выходном слое, а затем распространяется обратно по сети. Градиент 𝑒 по вектору сдвига 𝑡 𝛽 аналогичен выражению (1.2.12). Фактически, мы решили поставленную задачу. Хоть этого и не требуется для вычис- ления градиента по весам, рассмотрим ещё одну замену. Для первого слоя можно записать 𝑒 (︀𝑧 𝛽 )︀ → 𝑒 (𝑥 𝛼 ) а следовательно 𝜕𝑒 𝜕𝑥 𝛼 = ∑︁ 𝛽 ′ 𝜕𝑒 𝜕𝑧 𝛽 ′ 𝜕𝑧 𝛽 ′ 𝜕𝑥 𝛼 , где 𝜕 𝜕𝑥 𝛼 𝑧 𝛽 ′ = 𝑊 𝛽 ′ 𝛼 То есть 𝜕𝑒 𝜕𝑥 𝛼 = ∑︁ 𝛽 ′ 𝜕𝑒 𝜕𝑧 𝛽 ′ 𝑊 𝛽 ′ 𝛼 На первый взгляд это выражение связывает изменение ошибки с малым изменением входного вектора 𝑥 , однако это не так. На самом деле ∇𝑒 должен вычисляться следующим образом: (∇𝑒) 𝛼 = 𝜕 𝜕𝑥 𝛼 1 2 (𝑣 − 𝑓 ) 2 = (𝑣 − 𝑓 ) (︂ 𝜕𝑣 𝜕𝑥 𝛼 − 𝜕𝑓 𝜕𝑥 𝛼 )︂ В нашей цепочке вычислений мы предполагали 𝑓 константой, что было разумно, так как никакие изменения весов не приводили бы к изменению 𝑓 . Однако, при изменении входного вектора это уже не так. Выражение, которое мы получили, оказывается равно только части истинного градиента: 𝜕𝑒 𝜕𝑥 𝛼 = ∇𝑒 ⃒ ⃒ ⃒ 𝑓 = const = (𝑣 − 𝑓 ) 𝜕𝑣 𝜕𝑥 𝛼 19 Полный градиент можно получить, добавив недостающий член ∇𝑒 = ∑︁ 𝛽 ′ 𝜕𝑒 𝜕𝑧 𝛽 ′ 𝑊 𝛽 ′ 𝛼 − (𝑣 − 𝑓 ) 𝜕𝑓 𝜕𝑥 𝛼 Можно также отметить, что если на выходном слое положить 𝑒 = 𝑣 , то при достижении входного мы получим ∇𝑣 (⃗ 𝑥) . Такой алгоритм называется «быстрым вычислением градиен- та», в том смысле, что его сложность слабо зависит от размерности вектора ⃗ 𝑥 . Для удобства выпишем все соотношения прямого и обратного прохода для двух смежных слоёв 𝜃 и 𝜅 : 𝑧 𝜃 = 𝑡 𝜃 + ∑︁ 𝜅 𝑊 𝜃𝜅 𝜎 (𝑧 𝜅 ) , (1.2.14) 𝜕𝑒 𝜕𝑊 𝜃𝜅 = 𝜕𝑒 𝜕𝑧 𝜃 𝜎 (𝑧 𝜅 ) , (1.2.15) 𝜕𝑒 𝜕𝑧 𝜅 = 𝜎 ′ (𝑧 𝜅 ) ∑︁ 𝜃 𝜕𝑒 𝜕𝑧 𝜃 𝑊 𝜃𝜅 , (1.2.16) 𝜕𝑒 𝜕𝑡 𝜃 = 𝜕𝑒 𝜕𝑧 𝜃 (1.2.17) С их помощью можно вычислить градиент ошибки для сетей произвольной глубины. Вначале непосредственным дифференцированием вычисляется производная ошибки по активностям нейронов выходного слоя. Затем эта величина распространяется обратно с помощью фор- мулы (1.2.16). С помощью градиента по активностям последующего 𝜕𝑒/𝜕𝑧 𝜃 и производной 𝜎 ′ (𝑧 𝜅 ) предыдущего слоя вычисляется градиент по матрице весов 𝑊 𝜃𝜅 , связывающей эти два слоя. Градиент 𝑒 по параметрам сдвига 𝑡 𝜃 численно равен 𝜕𝑒/𝜕𝑧 𝜃 Обсудим процесс генерации начального состояния нейронной сети. Так как градиент является локальной величиной, то от этого состояния напрямую зависит результат мини- мизации [63]. Исследовать поверхность ошибки в пространстве весов и выбирать какую-то специальную точку довольно затруднительно. Вместо этого можно поступить согласно ра- ботам [3, 64, 65]. Рассмотрим состояние сети, при котором на некоторый нейрон подается значение 𝑧 ≫ 1 . При таком аргументе функция активации будет близка к насыщению, а её производная в выражении (1.2.16) близка к нулю. Это значит, что настройка весов, при- ходящих в этот нейрон, может затянуться. Идея состоит в том, чтобы избежать подобной ситуации в начальном состоянии сети. Для этого аргумент 𝜎 ′ (то есть активность каждого нейрона) должен быть порядка единицы. Согласно выбранной функции активации, каждый нейрон передает на следующий слой величину в интервале (0, 1) . Считая, что все значения из этого интервала равновероятны, а начальные веса распределены равномерно в интервале [−1, 1] , получим, что среднее значение, поступающее на каждый нейрон следующего слоя, равно нулю. Однако, если количество нейронов 𝜅 >> 1 , то дисперсия этой величины, про- порциональная √ 𝜅 , будет велика и много нейронов окажется в пересыщенном состоянии. Для того чтобы дисперсия также была порядка единицы, распределим начальные веса в 20 Рис. 1.2.3. CIFAR-10 интервале ±𝑐/ √ 𝜅. Множитель 𝑐 ∼ 1 можно подбирать экспериментально, в данной работе 𝑐 = 2 . Разумеется, можно непосредственно подать тренировочное множество на вход сети, вычислить диспер- сии входа каждого нейрона и скорректировать веса соответствующим образом, однако для рассматриваемых в данной работе задач, подобные методы не приносят ощутимой пользы. 1.2.3. Задачи малой размерности. Очередной всплеск популярности нейронных се- тей произошел после того, когда с их помощью была удовлетворительно решена задача о распознавании образов [1]. В данной работе будут рассмотрены задачи, которые сильно от- личаются от широко известных применений нейронных сетей [2–5,12–15]. Чтобы объяснить различия между ними, сперва опишем задачу распознавания. Классификатор образов можно рассматривать как функцию, определённую на множестве изображений. Минималистичным примером такого множества может служить CIFAR-10 – 60000 цветных фотографий разме- ром 32 × 32 , на которых изображены объекты из 10 попарно не пересекающихся классов 4 , примеры которых можно видеть на Рисунке 1.2.3. Одно такое изображение задается векто- ром длины 32×32×3 = 3072 . Классификатор является функцией в пространстве 𝑁 = 3072 , и способность нейронных сетей обходить «проклятье размерностей» [8, 9] оказалась крайне важна. Аналогичные рассуждения справедливы и для распознавания голоса, где 𝑁 ∼ 100 Существенно и то, что такие задачи едва ли могут быть решены классическими аппрокси- маторами на основе сплайнов, рядов или представлением функций на сетке. В результате, наиболее известной областью применения нейронных сетей оказалась аппроксимация функ- ций в пространствах большой размерности. 4 https://www.cs.toronto.edu/∼kriz/cifar.html 21 В данной работе нейронные сети будут использованы для аппроксимации в простран- ствах относительно малой размерности 𝑁 ≤ 5 . Особенности, а также критерии качества для таких задач иные. Поясним это утверждение. Пусть дан классификатор, на входной слой ко- торого подается изображение, а число нейронов выходного слоя равно количеству искомых классов. При некоторых условиях, значение каждого выхода можно трактовать как вероят- ность принадлежности изображения к каждому классу, а ответом сети можно считать класс, выходной нейрон которого набрал наибольшую вероятность. В такой постановке, значения остальных выходов вообще не будут влиять на ошибку. В целом, для изображений характерно то, что у точных значений пикселей нет определенного смысла – их можно достаточно сильно видоизменять, применять фильтры, искажать геометрию, в целом не нарушая визуальной картины. Этот факт находит отражение и в нейронных сетях, работающих с изображени- ями. Однако, для задач компьютерного моделирования точность становится важна – если выход нейронной сети есть значение некоторой физической величины, то она, как правило, может быть точно вычислена, например путём решения уравнения математической физи- ки. Такие величины чаще всего определены в некоторой области трехмерного пространства, в котором мы можем указать достаточно точек, чтобы наглядно описать поведение функ- ции. Классификатор же определен в пространстве размерности 𝑁 ∼ 3000 , и даже малую окрестность в таком пространстве нельзя покрыть каким-либо приемлемым числом точек. Также было обнаружено [66,67], что в окрестности любого правильно классифицированно- го изображения существует направление (разное для разных классификаторов), двигаясь в котором, можно из правильного ответа получить любой другой, пройдя при этом расстояние настолько малое, что на глаз изменения в изображении будут совершенно не видны. То есть даже хорошо обученная сеть на самом деле ведет себя крайне нетривиальным образом в пространстве изображений, хотя в целом хорошо выполняет свою функцию. Подобная ситу- ация, разумеется, не может быть приемлемой для, скажем, поля температуры в трехмерном пространстве. Чтобы продемонстрировать особенности обучения малоразмерных нейронных сетей, рассмотрим пример. Пусть 𝑁 = 2 , а целевая функция задается формулой 𝑓 (𝑥 1 , 𝑥 2 ) = 𝑥 1 + sin 𝑥 2 + 𝑥 2 1 + 𝑥 2 cos 𝑥 1 (1.2.18) Областью аппроксимации выберем квадрат [0, 1] 2 . Как можно видеть, все производные 𝑓 имеют порядок единицы. Множество точек для обучения создадим как равномерную сетку с шагом 𝜆 = 1/8 , она будет содержать 𝑀 = 81 точку. Инициализируем полносвязную нейронную сеть 𝑣 (𝑥 1 , 𝑥 2 ) с конфигурацией слоёв 2 * , 64, 64, 64, 64, 64, 64, 1 * , где звездочками обозначены линейные функции активации. Вычислим значения сети на тре- нировочном множестве и глобальную ошибку 𝐸 = ∑︀ (𝑣 − 𝑓 ) 2 . Первая проблема, с которой мы столкнемся при попытке минимизации 𝐸 с помощью обратного распространения ошибки 22 – это быстрое уменьшение градиента по мере продвижения к входному слою. Действитель- но, определенная на выходном слое величина (1.2.7) будет порядка единицы, однако, при каждом шаге назад согласно (1.2.16) она умножается на производную функции активации (Рисунок 1.2.2), то есть величину порядка ∼ 0.2 . При шестикратном умножении градиент 𝐸 по весам входной матрицы становится равным ∼ 6 · 10 −5 , и это сильно затягивает их настройку. Проблему можно попробовать обойти, если использовать информацию о гради- енте не напрямую, а косвенно. Например, можно предположить, что с помощью градиента вычисляется не изменение весов, а изменение скорости весов 𝑀 (𝑛) = 𝜂𝑀 (𝑛 − 1) + 𝜕𝐸 𝜕𝑊 (𝑛) , 𝑊 (𝑛 + 1) = 𝑊 (𝑛) − 𝜇𝑀 (𝑛) . Для простой оценки предположим, что градиент ошибки по какому-нибудь весу всё время равен 1. Обычный градиентный спуск будет приближаться к минимуму по этому весу ли- нейно по числу итераций. Модифицированный алгоритм в частном случае 𝜇 = 1 будет на каждом шаге прибавлять к скорости постоянную величину, и движение будет равноускорен- ным – алгоритм будет приближаться к минимуму квадратично быстро. Однако, в реальных ситуациях это может приводить к возникновению осцилляций, поэтому выбирают 𝜇 < 1 . Та- кой алгоритм в силу инерции также сможет проскакивать неглубокие локальные минимумы. Существуют также алгоритмы вычисления размера шага на основе кривизны поверхности ошибки [68]. Однако, наиболее быструю настройку обеспечивает алгоритм RProp (Resilent backPropagation) [69]. В указанных условиях он будет приближаться к минимуму экспонен- циально быстро. В нём для обновления весов используется только знак градиента: 𝑊 (𝑛 + 1) = 𝑊 (𝑛) − 𝛿𝑊 (𝑛) · sign 𝜕𝑒 𝜕𝑊 (𝑛) , а величина шага 𝛿𝑊 вычисляется следующим образом: 𝛿𝑊 (𝑛) = ⎧ ⎪ ⎪ ⎨ ⎪ ⎪ ⎩ 𝜂 + · 𝛿𝑊 (𝑛 − 1) 𝜕𝑒 𝜕𝑊 (𝑛) · 𝜕𝑒 𝜕𝑊 (𝑛−1) > 0 𝜂 − · 𝛿𝑊 (𝑛 − 1) 𝜕𝑒 𝜕𝑊 (𝑛) · 𝜕𝑒 𝜕𝑊 (𝑛−1) < 0 𝛿𝑊 (𝑛 − 1) в остальных случаях Он обычно инициализруется с параметрами 𝜂 + = 1.2, 𝜂 − = 0.5, 𝛿𝑊 (0) = 10 −4 Для многоразмерных задач RProp, однако, применяется довольно редко, поскольку содер- жит один важный недостаток – он не может работать в режиме постепенного перебора тре- нировочного множества (в литературе он часто называется on-line). Для многих приклад- ных задач оказывается, что веса можно обновить на основании градиента ошибки только 23 0 200 400 600 800 1000 0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 эпоха ϵ RProp RMSProp ADAM Рис. 1.2.4. Минимизация ошибки нейронной сети с помощью трёх градиент- ных алгоритмов. на небольшой части тренировочного множества. Для RProp же нужно обязательно сложить градиенты для всех векторов в обучающем множестве. Когда это множество состоит из тысяч или даже миллионов изображений, on-line режим оказывается быстрее, потому что перебрав все входные вектора один раз, мы сделаем много шагов, в то время как в первом случае - только один. RProp не может работать в таком режиме потому, что он использует не зна- чение градиента, а только лишь его знак. Действительно, пусть для двух входных векторов градиент по некоторому весу равен -1, а для третьего 3. Суммарный градиент будет равен 1, и вес необходимо уменьшать, однако если последовательно выполнить три шага RProp, то вес увеличится на 𝛿𝑊 (0)+𝛿𝑊 (0)·1.2−𝛿𝑊 (0)·1.2/0.5 = 𝛿𝑊 (0)·0.6 . В задачах из данной работы тренировочные множества невелики и их можно обрабатывать целиком. Существу- ет множество попыток построения on-line алгоритма с адаптивным шагом, среди них можно отметить ADAM [70] и RMSProp [71], однако они не содержат экспоненциально быстрой под- стройки. Сравним результаты работы разных алгоритмов на выбранном примере. Графики среднеквадратичной ошибки 𝜖 = √︂ 1 𝑀 ∑︁ (𝑣 − 𝑓 ) 2 в зависимости от итерации обучения для RProp, RMSProp и ADAM приведены на Рисунке 1.2.4. Как следует из графиков, RProp оказывается значительно быстрее. Для малоразмер- ных задач невозможность on-line обучения непринципиальна, так как тренировочное множе- ство невелико, поэтому далее во всех случаях мы будем использовать RProp. Разумеется, целью процедуры обучения нейронной сети является не среднеквадратич- ная ошибка 𝜖 на тренировочном множестве, а мера ошибки на всей области аппроксимации, либо её оценка на основе тестового множества. В малоразмерном случае можно легко вы- числить и меру, однако, мы воспользуемся упорядоченностью сетки и создадим тестовое множество из точек, равноудаленных от точек тренировочного множества. В данном случае это будет равномерная сетка с тем же шагом, но сдвинутая на 𝜆/2 по 𝑥 1 и 𝑥 2 . При рассмотре- нии переобучения возможны два принципиально разных случая: целевая функция содержит 24 0 200 400 600 800 1000 0.000 0.005 0.010 0.015 0.020 0.025 эпоха ϵ трен тест Рис. 1.2.5. Обучение сети с 2 · 10 4 весов (64 нейрона на слой) на зашумлённых данных по 81 точке. 0 200 400 600 800 1000 0.000 0.005 0.010 0.015 0.020 0.025 эпоха ϵ трен(64) тест(64) трен(16) тест(16) Рис. 1.2.6. Обучение сети с 1.4 · 10 3 весов (16 нейронов на слой) на зашумлён- ных данных по 81 точке. Серым цветом даны кривые из Рисунка 1.2.5. шум, либо целевая функция известна точно. Сначала разберем первый – добавим к 𝑓 на тренировочном множестве равномерный шум из интервала [−0.02, 0.02] и пронаблюдаем за среднеквадратичной ошибкой на тестовом множестве (без шума) в процессе обучения сети. Её график изображён на Рисунке 1.2.5. Как и следовало ожидать, сеть с 21121 параметра- ми в процессе обучения на 81 точке начала «подстраиваться» под шум. При этом точность на тестовом множестве после ∼ 300 итераций начала ухудшаться. Вводя количественную оценку переобучения: 𝑟 = 𝜖 тест 𝜖 трен , получим для последней эпохи 𝑟 = 20 . Если уменьшить количество параметров сети, оставив в каждом скрытом слое по 16 нейронов, ситуация будет принципиально другой (Рисунок 1.2.6). В данном случае, обучение сети с меньшим числом параметров не только менее затратно, но и обеспечивает лучший результат аппроксимации. Таком образом, в случае зашумлённых 25 0 200 400 600 800 1000 0.000 0.005 0.010 0.015 0.020 0.025 эпоха ϵ трен(64) тест(64) трен(16) тест(16) Рис. 1.2.7. Обучение на данных без шума для сетей с 64 и 16 нейронами на каждый скрытый слой. данных нет никаких причин выбирать для двумерной задачи с таким количеством паттернов сеть большого размера. В реальных данных, например изображениях, неизбежно присутству- ет шум (в том числе в виде посторонних объектов), и правило о том, что число параметров сети должно быть меньше количества условий, которым она должна удовлетворять, справед- ливо. В случае точно известных данных это не так. Сгенерируем множество для обучения без шума, и пронаблюдаем за ошибками обеих сетей, эволюция которых изображена на Рисунке 1.2.7. Теперь ошибки на тренировочном и тестовом множестве оказываются скоррелированы, а сеть с большим числом параметров лучше аппроксимирует целевую функцию. Но ведь для сети с шириной 64 нейрона количество настраиваемых параметров на два порядка больше, чем количество соотношений, которые мы пытаемся выполнить. Казалось бы, это должно привести к тому, что нейронная сеть идеально повторит значения на обучающем множестве (сведет ошибку к машинному нулю), однако, этого не происходит. Согласно работе [60], ней- ронная сеть способна приближать не только значения, но и производные целевой функции. В данном примере ошибка первых производных сети примерно в десять раз больше, чем ошибка значений. Следовательно, вблизи тренировочной точки можно записать 𝑣 (⃗ 𝑥 + Δ⃗ 𝑥) − 𝑓 (⃗ 𝑥 + Δ⃗ 𝑥) ≃ 𝑣 (⃗ 𝑥) − 𝑓 (⃗ 𝑥) + (∇𝑣, Δ⃗ 𝑥) − (∇𝑓, Δ⃗ 𝑥) ∼ 10 (𝑣 (⃗ 𝑥) − 𝑓 (⃗ 𝑥)) Δ𝑥. При достаточно малом Δ𝑥 по всем направлениям, тестовая ошибка не будет сильно отли- чаться от тренировочной, что и происходит в данном случае. Однако, условие на мелкость шага приводит к экспоненциальному росту количества точек при увеличении размерности задачи, то есть такая ситуация реализуема только при относительно малых 𝑁 . Что касает- ся абсолютного значения ошибки, то на практике градиентное обучение не способно найти набор весов, который бы свел ошибку во всей области к машинному нулю даже для простой функции вида (1.2.18). Вместо этого, как мы увидим позднее, точность нейронных сетей оказывается ограничена некоторой характерной величиной. |