Файл: Изложение Вся основная информация в одной книге Графы, алгоритмы поиска, ранжирования и многое другое.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 23.11.2023

Просмотров: 221

Скачиваний: 6

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
– 5
– 1
0
1
5
сигмоида
0,01 0,27 0,5 0,73 0,99
tanh
– 1
-– 0,76 0
0,76
+1
выпрямитель
0 0
0 1
5

ГЛУБОКОЕ ОБУЧЕНИЕ 125 2.5
–2.5
–5 0
5 0
1 0.75 0.5 0.25 2.5
–2.5
–5 0
5
–1 1
0.5 0
–0.5 0
2 4
2.5
–2.5
–5 0
5
Отдельный искусственный нейрон можно научить отличать два множе- ства элементов. Например, взгляните на диаграмму, представленную вверху следующей страницы; на ней изображены два свойства: x
1
— на горизонталь- ной оси и x
2
— на вертикальной. Мы хотим создать систему, которая смо- жет отличить два скопления элементов. Она будет способна взять любой эле- мент и определить, к какой группе он принадлежит. Она фактически создаст
границу решений (как на нижней диаграмме). Система сможет взять элемент с любыми координатами (x
1
, x
2
) и определить, к какой области он относится: светлой или темной.

126 ГЛАВА 6 5
5 3
3 1
1
–3
–3
–5
–5
–1
–1 5
5 3
3 1
1
–3
–3
–5
–5
–1
–1
У нейрона будет всего два входа. Он станет принимать каждую пару (x
1
,
x
2
) и вычислять вывод. Если в качестве функции активации использовать сигмоиду, вывод окажется между 0 и 1. Значения, которые больше 0,5, бу- дут принадлежать одной группе, а все остальные — другой. Таким образом нейрон получит роль классификатора, который распределяет наши данные по отдельным классам. Но как он будет это делать? Откуда у нейрона может взяться способность классифицировать данные?

ГЛУБОКОЕ ОБУЧЕНИЕ 127
Процесс обучения
В момент своего создания нейрон не способен распознавать никакие виды данных; он должен научиться это делать. Обучение происходит на приме- рах. Весь процесс напоминает то, как студент изучает какую-то тему путем анализа большого количества задач и их решений. Мы просим студента про- анализировать условие и ответ. Если он как следует постарается, то после не- которого количества повторений этого процесса ему удастся понять, откуда берутся решения. Он даже сможет решать новые задачи, связанные с уже про- анализированными, но уже без доступа к готовым решениям.
В ходе этого процесса мы учим компьютер находить ответы; набор решен- ных задач называется учебным набором данных. Это пример обучения с учи-
телем, поскольку решения, словно учитель, помогают компьютеру находить правильные ответы. Это самый распространенный вид машинного обучения, отдельного раздела информатики, посвященного методам обучения компью- тера решению задач. Существует также обучение без учителя — это когда мы предоставляем компьютеру учебный набор данных, но без каких-либо реше- ний. У этого подхода есть важные сферы применения, такие как распределение наблюдений по разным кластерам (у задачи выбора подходящего кластера на- блюдений нет универсального решения). Но в целом обучение с учителем дает лучшие результаты, так как мы предоставляем больше информации для ана- лиза. Именно этот метод мы будем рассматривать в данной главе.
После обучения студент обычно сдает какие-то экзамены, чтобы показать, насколько хорошо он усвоил материал. То же самое с машинным обучением: мы даем компьютеру другой, тестовый набор данных, который он раньше не видел, и просим его найти соответствующие решения. Затем мы оцени- ваем производительность системы машинного обучения с учетом того, на- сколько хорошо ей удалось решить задачи в тестовом наборе данных.
В задаче с классификацией обучение с учителем проходит так: мы даем нейронной сети большое количество наблюдений (задач) вместе с их клас- сами (решениями). Мы ожидаем, что нейрон каким-то образом научится при- ходить от наблюдения к его классу. Затем, если мы дадим ему наблюдение, с которым он раньше не сталкивался, он должен будет его успешно классифи- цировать (в разумных пределах).
Поведение нейрона в ответ на любой ввод определяется его весами и сдви- гом. Вначале мы выбираем эти параметры случайным образом; на этом этапе нейрон подобен бестолковому студенту, который еще ничего не знает. Мы по- даем на вход пару вида (x
1
, x
2
). Нейрон сгенерирует вывод. Он будет таким же


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

ГЛУБОКОЕ ОБУЧЕНИЕ 129
случайным, как наши текущие веса и сдвиг. Но при анализе каждого наблю- дения в учебном наборе данных мы знаем, каким должен быть ответ. Благо- даря этому мы способны определить, насколько сильно вывод нейрона отли- чается от желаемого ответа. Это называется потерей: мера того, насколько ошибся нейрон при анализе заданного ввода.
Например, если нейрон выдает в качестве ответа 0,2, а желаемый вывод равен 1,0, потеря является разницей этих двух значений. Чтобы не заморачи- ваться со знаками, потеря обычно вычисляется как квадрат разницы; в данном случае это будет (1,0–0,2)
2
= 0,64. Если бы желаемый вывод был равен 0,0, по- теря была бы (0,0–0,2)
2
= 0,04. Зная потерю, мы можем ее минимизировать, откорректировав веса и сдвиг.
Вернемся к нашему студенту. После каждой неудачной попытки решить задачу, мы мотивируем его к достижению лучших результатов. Студент по- нимает, что ему нужно немного изменить свой подход и повторить попытку со следующим примером. Если он опять провалится, мы еще раз его мотиви- руем. И еще раз. Пока после целой кучи примеров в учебном наборе данных его решения не начнут становиться все ближе к верным и он не сможет спра- виться с тестовым набором.
Согласно нейробиологии, в ходе обучения структура мозга студента пре- терпевает изменения; некоторые синапсы между нейронами становятся силь- нее, а другие ослабляются или даже рассоединяются. У искусственного ней- рона нет прямого аналога этого процесса, но с ним происходит нечто похожее.
Как вы помните, поведение нейрона зависит от его ввода, весов и сдвига. Мы не можем контролировать ввод, так как он поступает извне. Но мы можем регулировать веса и сдвиги. Именно это и происходит. Мы обновляем значе- ния весов и сдвига таким образом, чтобы минимизировать ошибки нейрона.
В этом нам помогает сама природа задачи, которую должен выполнить нейрон. Мы хотим, чтобы он взял каждое наблюдение, вычислил вывод в со- ответствии с определенным классом и откорректировал веса и сдвиг для ми- нимизации потери. Таким образом нейрон пытается решить задачу мини-
мизации. Она звучит так: имея ввод и полученный вывод, откалибруйте веса
и сдвиг, чтобы минимизировать потерю.
Это требует принципиально нового подхода. До сих пор мы описывали ней- рон как некую сущность, которая принимает ввод и генерирует вывод. В этом смысле нейрон представляет собой одну большую функцию, которая берет входные значения, применяет веса, слагает произведения, добавляет сдвиг, пропускает результат через функцию активации и выдает итоговый вывод.
Но если взглянуть на это с другой стороны, ввод и вывод у нас уже есть (это


130 ГЛАВА 6
наш учебный набор данных), а вот веса и сдвиг могут меняться. Поэтому ней- рон в целом можно рассматривать как функцию с весами и сдвигом в качестве переменных, поскольку именно на эти значения мы можем повлиять; более того, мы хотим менять их с каждым вводом, чтобы минимизировать потери.
Возьмем в качестве иллюстрации простой нейрон с одним весом и без сдвига. Отношение между весом и потерей показано в левой части диаграммы на следующей странице. Толстая кривая представляет потерю в виде функции от веса для заданного ввода. Нейрон должен отрегулировать свой вес, чтобы функция возвращала минимальное значение. На диаграмме показана точка с текущей потерей для заданного ввода. К сожалению, нейрон не знает, каким должен быть идеальный вес, который свел бы потерю к минимуму. Ему из- вестно лишь значение функции в обозначенной точке; он не может свериться с представленной ниже диаграммой, как это делаем мы. К тому же вес может корректироваться (увеличиваться или уменьшаться) лишь совсем немного, приближая результат к минимуму.
Чтобы понять, что делать дальше (увеличивать или уменьшать вес), нейрон может найти касательную прямую, проходящую через текущую точку. Затем он может вычислить ее наклон, то есть угол между ней и горизонтальной осью.
Стоит отметить, что нейрону для этого не требуется никаких особых возможно- стей; он лишь должен провести вычисления в одной локальной точке. Касатель- ная прямая имеет отрицательный наклон, так как угол определяется по часовой стрелке. Эта величина показывает скорость изменения функции; следовательно, отрицательный наклон говорит о том, что с увеличением веса потеря будет уменьшаться. Таким образом нейрон узнает, что для уменьшения потери ему нужно сместиться вправо. Поскольку наклон отрицательный, а изменение веса положительное, нейрон делает вывод о том, что вес должен двигаться в направ- лении, противоположном тому, о котором сигнализирует наклон.
Теперь взгляните на правую часть диаграммы. На этот раз нейрон нахо- дится справа от минимальной потери. Он снова находит касательную прямую

ГЛУБОКОЕ ОБУЧЕНИЕ 131
и вычисляет ее наклон. Угол оказывается положительным. Положительный наклон говорит о том, что потеря увеличивается вместе с весом. Таким обра- зом нейрон понимает, что для минимизации потери он должен уменьшить вес. Так как наклон положительный, а необходимое изменение веса отрица- тельное, нейрон опять делает вывод о том, что ему нужно двигаться в направ- лении, противоположном тому, о котором сигнализирует наклон.
В обоих случаях действует одно и то же правило: нейрон вычисляет на- клон и изменяет вес в противоположном направлении. Нечто похожее можно встретить в математическом анализе. Наклон функции в заданной точке — это ее производная. Чтобы уменьшить потерю, нам нужно изменить вес на не- большую величину в направлении, противоположном производной потери.
Конечно, у нейрона обычно больше одного веса. К тому же у него есть сдвиг. Чтобы понять, как отрегулировать каждый отдельный вес и сдвиг, нейрон следует той же процедуре, которую мы описали выше, рассчитанной на один вес. Говоря математическим языком, он вычисляет так называемую
частную производную потери относительно каждого отдельного веса и сдвига.
Если у нас есть сдвиг и n весов, у нас в итоге получится n + 1 частных произ- водных. Вектор, содержащий все частные производные функции, называется
градиентом. Это эквивалент наклона для функций с множественными пере- менными; он показывает направление, в котором нужно двигаться, чтобы увеличить значение функции. Для его уменьшения следует выбрать проти- воположное направление. Таким образом, чтобы уменьшить потерю, нейрон смещает каждый вес и сдвиг в направлении, противоположном тому, о кото- ром сигнализируют частные производные его градиента.
Для проведения вычислений нам вовсе не нужно рисовать касательные и измерять углы. Существуют эффективные методы нахождения частных про- изводных и градиентов, но мы не станем вдаваться в подробности. Важно то, что у нас есть четко определенный способ регуляции весов и сдвига, который позволяет улучшать вывод нейрона. Таким образом процесс обучения можно описать в виде следующего алгоритма.
Для каждого ввода и желаемого вывода в учебном наборе данных:
1) вычисляется вывод нейрона и потеря;
2) обновляются веса и сдвиг нейрона, чтобы минимизировать потерю.
Пройдясь по всему учебному набору данных и закончив тем самым обучение, мы завершаем эпоху. Обычно на этом можно не останавливаться. Весь процесс повторяется на протяжении целого ряда эпох; это как если бы студент, изучивший весь учебный материал, начал с самого начала. Ожидается, что это даст лучшие


132 ГЛАВА 6
результаты, так как теперь он начинает не с чистого листа (то есть он не совсем бестолковый) — у него накопились кое-какие знания из предыдущей эпохи.
Чем больше повторений процесса обучения и накопленных эпох, тем лучше мы справляемся с учебными данными. Но главное здесь не переста- раться. Студент, который анализирует один и тот же набор задач снова и снова, рано или поздно выучит их наизусть, но при этом не будет иметь никакого понятия о том, как решать другие задачи, с которыми он еще не сталкивался.
Это бывает, когда студент, который вроде бы хорошо подготовился к экза- мену, с треском проваливается. Говорят, что компьютер, проходящий через машинное обучение, подгоняет данные. Если с этим переборщить, происхо- дит так называемая переподгонка (или переобучение): отличные результаты с учебным набором данных, но плохие — с тестовым.
Можно доказать, что, следуя этому алгоритму, нейрон может научиться классифицировать любые данные, которые являются линейно разделяемыми.
Если ваши данные находятся в двух измерениях (как в нашем примере), это означает, что их можно разделить прямой линией. Если помимо (x
1
, x
2
) суще- ствуют другие свойства, применяется обобщенный принцип. В трех измере- ниях, когда ввод имеет вид (x
1
, x
2
, x
3
), данные являются линейно разделяемыми, если их можно разделить простой плоскостью в трехмерном пространстве. Если измерений больше, аналог прямой и плоскости называется гиперплоскостью.
По окончании обучения наш нейрон научится разделять данные. «На- учится» в том смысле, что он подберет подходящие веса и сдвиг, как это опи- сано выше: он начнет со случайных значений и постепенно будет их обнов- лять, минимизируя потерю. Вспомните диаграмму с двумя скоплениями элементов, которые нейрон научился разделять с помощью границы реше- ний. Слева показано то, с чего мы начинали, а справа — конечный результат.
Вы можете видеть итоговые значения параметров.
Но так происходит не всегда. Отдельный нейрон, который действует сам по себе, может выполнять только определенные задачи, такие как классифи- кация линейно разделяемых данных. Для решения более сложных проблем нужно использовать сети нейронов.

ГЛУБОКОЕ ОБУЧЕНИЕ 133
От нейронов к нейронным сетям
Из взаимосвязанных нейронов формируются нейронные сети (как биологи- ческие, так и искусственные). Входной сигнал одного нейрона может быть подключен к выходу другого, а его собственный выход может служить вво- дом для других нейронов. Таким образом можно создать нейронную сеть на- подобие следующей:
x
2
x
6
x
3
x
4
x
5
x
1
Нейроны этой искусственной нейронной сети разделены по слоям. Этот прием часто применяется на практике: многие нейронные сети состоят из слоев, размещенных один над другим. Еще мы сделали так, чтобы все ней- роны текущего слоя соединялись со всеми нейронами следующего, в направ- лении слева направо. Это тоже распространенный подход, хотя использовать его необязательно. Такие слои называют плотно связанными.
Первый слой не связан с предыдущим, точно так же как последний слой не связан со следующим. Вывод последнего слоя является выводом всей сети; это значения, которые мы хотим от нее получить.
Давайте вернемся к задаче классификации. Нам теперь нужно распреде- лить два набора данных, представленных вверху следующей страницы. Дан- ные собраны в концентрические круги. Любому человеку очевидно, что они принадлежат к двум отдельным группам. Также очевидно, что они не ли- нейно разделяемые: эти два класса не сможет разделить никакая прямая ли- ния. Нам нужно создать такую нейронную сеть, которая сможет отличать эти две группы и определять, к какой из них принадлежат любые последующие наблюдения. Это то, что показано на нижней диаграмме. Любое наблюдение


134 ГЛАВА 6
на светлом фоне будет причислено нейронной сетью к одной группе, а любое наблюдение на темном фоне — к другой.
4 4
2 2
0 0
–4
–2
–4
–2 4
4 2
2 0
0
–4
–2
–4
–2
Чтобы получить результат, изображенный на нижней диаграмме, мы сформируем сеть, слой за слоем. Поместим два нейрона во входной слой, по одному для каждой координаты в наших данных. Добавим еще один слой с четырьмя нейронами, плотно соединенными с входным слоем. Поскольку у него нет прямого сообщения со входом или выходом, он является скрытым.
Добавим еще один слой с двумя нейронами, тесно соединенными с первым скрытым слоем. В конце разместим выходной слой с одним нейроном, тесно связанным с последним скрытым слоем. Во всех нейронах применяется функ- ция активации tanh (гиперболический тангенс). Выходной нейрон сгенери- рует значение между –1 и +1, демонстрирующее его уверенность в том, что данные принадлежат к той или иной группе. Мы возьмем это значение и да- дим на его основе однозначный ответ, да или нет, в зависимости от того, пре- вышает ли оно 0,0. Вот как выглядит наша нейронная сеть:
x
2
x
1

ГЛУБОКОЕ ОБУЧЕНИЕ 135
Алгоритм обратного распространения потери
Вначале нейронная сеть ни о чем не знает, и еще ничего не отрегулировано; ее веса и сдвиги подбираются случайным образом. Так выглядит невежество в мире нейронных сетей. Затем мы подаем на вход наблюдение из нашего набора данных, то есть пару координат, x
1
и x
2
. Эти значения сначала попа- дают в два первых нейрона, а затем передаются в виде вывода первому скры- тому слою. Все четыре нейрона в этом слое вычисляют свой вывод, который затем отправляется второму скрытому слою. Нейроны в этом слое передают свой вывод выходному слою, который генерирует итоговое выходное значе- ние нейронной сети. По мере выполнения вычислений результаты проходят слой за слоем, от входного до выходного.
x
2
x
1
x
2
x
1
x
2
x
1

136 ГЛАВА 6
x
2
x
1
Дойдя до выходного слоя, мы вычисляем потерю, как в примере с од- ним нейроном. Затем нам нужно отрегулировать веса и сдвиг всех нейронов в сети, чтобы свести потерю к минимуму.
Оказывается, чтобы это сделать, можно пойти в обратном направле- нии, от выходного слоя к входному. Зная потерю, мы можем обновить веса и сдвиги нейронов выходного слоя (в нашем случае это всего один нейрон, но это не всегда так). Дальше можно обновить веса и сдвиги нейронов пре- дыдущего, последнего скрытого слоя. После этого повторяем данный процесс для предпоследнего скрытого слоя и, наконец, для входного.
x
2
x
1
x
2
x
1