Загрузка урока...
Существует несколько причин для использования нейронных сетей. Давайте разберемся со всеми по порядку.
Как мы действуем в классическом машинном обучении:
У нас есть данные - информация об объектах. Для обучения моделей мы (на этапе сбора, а также обработки данных) конструируем и вычисляем признаки объектов
Затем на собранном датасете обучаем алгоритм
В этом подходе работа с данными, а именно, извлечение необходимых признаков - лежит на человеке (на data scientist). Но не всегда легко понять, какие признаки нужны для того, чтобы хорошо решить задачу. А также далеко не всегда легко извлечь нужные признаки.

Пусть, к примеру, перед нами стоит задача классификации животных на изображениях - то есть необходимо построить модель, которая по фотографии будет определять, какое животное на ней находится.
Компьютер видит картинку как набор пикселей, он не видит на ней животное (в данном случае кота).
На основе каких признаков мы будем обучать модель? Например, это могут быть:
наличие усов у животного
форма ушей
форма глаз
размер носа
длина шерсти
и так далее.
На основе таких признаков мы сможем обучить хороший классификатор, однако возникают вопросы: как извлечь сами эти признаки? И все ли необходимые признаки мы перечислили?
В глубинном обучении подход к решению задачи другой:
нейронные сети не только решают поставленную задачу, но и в процессе ее решения самостоятельно извлекают из данных необходимые признаки.
Но стоит помнить, что признаки, найденные нейронной сетью не обязательно будут понятны человеку и иметь какую-то интерпретацию. К тому же, нейронные сети всё равно требуют предварительной работы с данными, например нормализацию.
Поэтому когда мы имеем дело со сложно структурированными данными (картинки, тексты, звуки и так далее), и задача самостоятельного извлечения человеком признаков из данных очень сложна, на помощь приходят нейронные сети.
Забегая вперед, скажем, что для решения задач классификации изображений в глубинном обучении используются сверточные нейронные сети.

На вход сети подается изображение (как матрица пикселей), а затем нейронная сеть последовательно извлекает из него все более сложные и содержательные признаки. Наконец, когда признаки получены, сеть обучается на них предсказывать ответ (в нашем примере - вид животного на изображении).
Нейронные сети устроены таким образом, что на каждом следующем шаге (слое) они извлекают все более содержательные признаки из данных. Затем на этих признаках решают поставленную задачу.
Рассмотрим пример.
Пусть нам надо решить задачу логического И:
у нас есть четыре объекта с признаками (x1,x2)={(0,0),(0,1),(1,0),(1,1)}(x1,x2)={(0,0),(0,1),(1,0),(1,1)}, и целевая переменная yy - логическое И переменных x1x1 и x2x2:
Это задача бинарной классификации. Объекты и ответы можно нарисовать на плоскости:

Здесь белые кружочки - это точки с y=0y=0, черный - точка с y=1y=1.
Очевидно, эти точки можно разбить на два класса прямой линией - то есть для решения этой задачи сгодится простой линейный классификатор.
Например, мы можем придумать его сами:
a(x)=[x1+x2−1.5>0],a(x)=[x1+x2−1.5>0],
где [t][t] - индикатор события tt, равный 11, если событие в tt выполняется, и 00 иначе.
XOR задается таблицей
Давайте изобразим данные на плоскости:

Эти данные невозможно разбить линейным классификатором (прямой линией) на два класса безошибочно - то есть линейным классификатором задача не решается.
Однако, можно решить задачу при помощи двух прямых (двух линейных классификаторов):

То есть решение задачи происходит в два этапа:
сначала мы проводим две вспомогательные прямые (обучаем два линейных классификатора)
далее на их основе делаем прогноз: если объект находится между прямыми, то он имеет класс y=1y=1, в противном случае относим его к классу y=0y=0.
Вспомогательные прямые можно провести по-разному, а можно позаимствовать формулы (возможны и другие) для решения задач логического И и логического ИЛИ:
a1(x)=x1+x2−1.5, a2(x)=x1+x2−0.5.a1(x)=x1+x2−1.5, a2(x)=x1+x2−0.5.
Нарисуем решение в виде графа:

Поясним:
1) Сначала мы провели две вспомогательные прямые a1a1 и a2a2
2) Затем на основе них строим классификатор: если точка находится над одной и под другой прямой, то y=1y=1, иначе y=0y=0.
Точка находится над прямой a1a1, если в этой точке b1=sign(a1)>0b1=sign(a1)>0, и под прямой - если знак отрицательный. Получается, что условие нахождения точки между прямыми: сумма знаков b1+b2=0b1+b2=0. Это и отражено на графе.
Посмотрим еще раз на полученный граф-решение задачи:

мы провели две вспомогательные прямые a1a1 и a2a2, то есть построили два линейных классификатора
затем мы взяли функции от полученных результатов (функции signsign)
после этого сложили полученные результаты - это эквивалентно еще одному линейному классификатору
наконец, взяли функцию от результата (индикатор, [a=0][a=0])
То, что мы получили - это двухслойная полносвязная нейронная сеть.
В реальных задачах не мы проводим вспомогательные прямые (или же извлекаем вспомогательные признаки из данных), а нейронная сеть в результате обучения сама проведет нужные ей прямые.
То есть, обучившись, нейронная сеть самостоятельно извлечет полезные для решения задачи вспомогательные признаки и на них решит поставленную задачу!
Изучим общее устройство полносвязных нейронных сетей:

Шаг 0: На вход полносвязной сети подаются признаки объекта x1,x2,...,xdx1,x2,...,xd (они могут быть не очень осмысленными - например, яркости пикселей на изображении)
Шаг 1: Затем на основе входных признаков строится несколько вспомогательных признаков - то есть вычисляются суммы
zi=∑j=1dwijxj,zi=j=1∑dwijxj,
где w1,w2,...,wdw1,w2,...,wd - некоторые числа (веса). Вычисление каждого вспомогательного признака - это построение некоторой линейной модели. Эти вспомогательные признаки называются нейронами.
Шаг 2: После вычисления вспомогательных признаков от них берутся некоторые нелинейные функции (в примере с XOR это были signsign и индикатор). Они называются функциями активации.
Затем шаги 1-2 можно несколько раз повторить.
Вспомогательные признаки с идущей за ними функцией активации образуют полносвязный слой нейронной сети.
На рисунке изображена полносвязная нейронная сеть с двумя полносвязными слоями (они иногда называются скрытыми слоями или hidden layer).
В каждом полносвязном слое после вычисления линейной комбинации признаков с предыдущего слоя мы применяем к результату некоторую нелинейную функцию - функцию активации.
Существует список чаще всего используемых функций активации, некоторые из них изображены на рисунке ниже:

Подробнее про функции активации мы поговорим в следующих уроках, но сейчас надо разобраться, почему эти функции так необходимы? Почему без них не обойтись?
Ответ довольно простой: если взять несколько линейных комбинаций исходных признаков, а затем (без функции активации) взять линейную комбинацию от полученных результатов (без функции активации), то мы снова получим линейную комбинацию исходных признаков!
Пример:
1. a1=x1+x2+1,a2=2x1−x2−3a1=x1+x2+1,a2=2x1−x2−3
2. b=a1−2a2=(x1+x2+1)−2(2x1−x2−3)=−3x1+3x2+7.b=a1−2a2=(x1+x2+1)−2(2x1−x2−3)=−3x1+3x2+7.
Видим, что линейная комбинация от линейных комбинаций - снова линейная комбинация исходных признаков. То есть достаточно бессмысленно использовать полносвязную нейронную сеть без функций активации, потому что в этом случае она будет эквивалентна одной линейной модели на исходных признаках.
Чем же хороши полносвязные нейронные сети и насколько сложные задачи они могут решить?
Существует теорема (Цыбенко), которая утверждает что если у нас есть y=g(x)y=g(x) - непрерывная функция от признаков xx, то всегда можно построить двухслойную нейронную сеть, приближающую эту функцию сколь угодно точно.
Другими словами теорема утверждает, что любую задачу регрессии можно очень хорошо решить даже двухслойной нейронной сетью! То есть нейронные сети ОЧЕНЬ МОЩНЫЕ!
Тут, конечно, кроются подводные камни. Теорема не говорит, сколько нейронов нам потребуется на скрытых слоях - а их может потребоваться очень много (миллионы или даже больше). Такая архитектура будет требовать очень много данных для обучения и, возможно, будет переобучаться.
Поэтому на полносвязных нейронных сетях все не заканчивается (а только начинается), и для каждого класса задач (для зрения, для текстов, для звуков и тд) придуманы специальные подходы в глубинном обучении, позволяющие решить задачу с высокой точностью.
В этом материале нет файлов для просмотра.