Deep Learning на пальцах — Часть 1

Source: Deep Learning on Medium


Этот учебник представляет из себя сверхбыстрое введение в понятия Deep Learning, рекомендуется использовать его как справочный материал к некоторому курсу, например этот. Статьи в первую очередь нацелены на школьников, поэтому есть своя специфика :)


Искусственный нейрон

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

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


У нашего нейрона есть некоторые входы, по которым поступают данные x , где каждый икс представляет из себя число, отвечающее за конкретный признак. Так, например, если мы хотим предсказывать, пойдет ли сегодня дождь, то признаком x1 может быть текущая температура, x2 – влажность, x3 – облачность и так далее.

У каждого входа есть вес w, который говорит то, на сколько для данного нейрона важен этот признак. Чем больше вес, тем сильнее нейрон будет реагировать на изменение этого признака.

Как только данные поступают в нейрон, каждый x умножается на свой вес w, после чего все иксы складываются. Таким образом нейрон накапливает сигнал S.

Далее сигнал поступает в функцию активации F, которая задает правило – как именно нейрон будет реагировать на полученый сигнал.

Функций активации бесчисленное множество, но самые популярные из них — ReLU и Sigmoid

Так, например, нулевой сигнал пройдя через сигмоиду вернет 0.5, а через relu 0.

Выход сигнала из функции называется активационным сигналом, чем он больше, тем нейрон более активен соответсвенно.


Объединение нейронов в сеть

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

Первый слой сети является входным, а значит, что именно он отвечает за прием данных. А последний слой является выходом сети соответсвенно, именно он дает нам конечный ответ.

Важно запомнить следующее:

  • Если у вас стоит задача регрессии одной переменной, например, прогнозирование цены дома, тогда выходом сети является один нейрон без активации
  • Если у вас стоит задача бинарной классификации, тогда по-прежнему остается один нейрон с сигмоидальной активацией.
  • В случае, если у вас три и более классов, тогда количество выходных нейронов равно количеству классов. Где каждый нейрон будет отвечать за свой класс, а в качестве ответа будет выбран тот класс, активация чьего нейрона наибольшая. В данной постановке использовать активацию не принято, пока лучше принять это на веру, т.к. объяснение может выйти на целую главу :)

Тренировка сети

До сих пор мы не обсуждали, каким образом происходит обучение нейронных сетей. Если вы все еще не забыли, у каждого нейрона имеется набор весов w – это тренеруемые параметры сети. По сути тренировка сети заключается в том, что нам необходимо найти такие параметры для всех нейронов, при которых вся сеть будет работать наиболее качественно.

Если вы сейчас готовитесь к ЕГЭ (а если нет, то пора бы уже начать 😏), вы могли заметить задание в профильной части математики — задача с параметром. Там вам давалась некоторая изменяемая функция, для которой мы должны подобрать параметры так, чтобы при всех заданых xвыражение было бы истинным.

В нашем случае задача схожая, наша нейронная сеть так же является функцией, которая зависит от множества параметров, и необходимо найти такие параметры w, при которых ошибка на данных x будет минимальна.

О том, что такое ошибка и какой она бывает пойдет разговор далее.


Функция ошибки (Loss)

Мы уже поговорили о том, что такое тренировка сети, во время объяснения мы упомянули такую штуку, как функция ошибки. Что же это такое?

Функция ошибки — это некоторое правило, которое мы задаем нейронной сети, так, чтобы она искала параметры, необходимые именно для нашей задачи. В ходе тренировки нейронная сеть пытается минимизировать функцию потерь (она же loss), т.е. получить наименьшую ошибку на тренировочной выборке.

Как может выглядеть самая простая функция ошибки?

Например так: 𝐿(𝑦,𝑦𝑝)=(𝑦−𝑦𝑝)^2 Здесь мы пытаемся минимизировать квадрат разности между истинным ответом 𝑦 и нашим предсказанием 𝑦𝑝. Данная ошибка называется 𝑀𝑆𝐸 и применяется для задач регрессии.

Теперь коротко о применяемых функциях ошибки, без лишней математики и кратким описанием:

  • 𝑀𝑆𝐸 — мы рассматривали ее выше, применяется для задач регрессии
  • 𝐵𝐶𝐸 — binary cross entropy применятся для задач бинарной классификации
  • 𝐶𝑟𝑜𝑠𝑠𝐸𝑛𝑡𝑟𝑜𝑝𝑦 — применяется для задач мульти классификации (когда классов больше двух)

Краткий пример обучения сети в виде гифки:

Во время обучения сеть старается минимизировать loss, и в итоге график зависимости ошибки сети от времени обучения будет выглядеть так.


Оптимизаторы

С функцей ошибки все понятно, осталось разобраться в том, как же все-таки искать необходимые параметры для нашей сети. Для этого существуют оптимизаторы функций.

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

Здесь вы можете посмотреть, как каждый алгоритм пытается найти минимум некоторой функции.


Минибатчи и эпохи

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

Во время обучения нейронной сети выборку принято делить не небольшие кусочки — батчи, по 16/32/64 объекта в каждом.

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

Разделение на батчи имеет под собой множество оснований:

  • Во-первых, зачастую у нас нет возможности прогнать сразу всю выборку через нейронную сеть. Для этого у нас может попросту не хватить оперативной памяти.
  • Во-вторых, современные компьютеры еще не способны обрабатывать большое количество данных за один такт.
  • А так же умные математики за нас доказали, что таким образом сетки лучше учатся. Ребята математики явно умнее нас и им можно верить :D

Таким образом мы прогоняем через сеть все батчи, что у нас есть, каждый раз чуть-чуть изменяя веса. Однако может так оказаться, что одного прохода по обучающей выборке не хватает и нужно пройтись еще несколько раз (5, 20, 30 или 100), каждый такой проход называется эпохой. Количество эпох задается заранее исследователем. По своей сути, эпоха — это количество раз, которое мы будем прогонять всю выборку через нашу сеть.

Конец первой части

На этом мы заканчиваем общий обзор работы с нейронными сетями и переходим к практике уже во второй части!