Введение в нейронные сети. Общая постановка задачи. Персептрон. Функции активации нейронов.

Общая постановка задачи

Введение в нейронные сети

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

Входом в нейронную сеть могут быть:

  • сырые данные, например, звук или фотография.
  • либо уже заранее обработанные данные алгоритмом, которые по входу X выдаст признаки (feauture), которые будут передаваться нейронной сети. Данные признаки могут быть определены другой нейронной сетью.
  • и т.п.

Выходом могут являться:

  • Ответ да или нет.
  • Номер категории, к которой принадлежат входные данные.
  • Картинка, изображение, звук.
  • и т.п.

Задача программиста:

  1. определить что будет считаться входом в нейронную сеть, а что выходом.
  2. в каком формате будет принимать нейронная сеть данные.
  3. структурировать и привести в единую форму входные и выходные данные.
  4. определить признаки данных, которые могут быть дополнительно поданы на вход в нейронную сеть.
  5. определить количество слоев нейронной сети.
  6. определить дополнительные алгоритмы в архитектуре нейронной сети, как отдельные слои.
  7. создать и разметить DataSet, на котором будет проходить обучение нейронная сеть.
  8. создать правильную архитектуру нейронной сети.
  9. обучить нейронную сеть и проверить ее на контрольной выборке.
  10. внедрить полученную нейронную сеть.

Размеченный DataSet ( (D) ) — это набор данных и известных ответов к ним. По этому датасету обучаются нейронные сети. При этом датасет делится на две части. Обучающий и контрольный. По обучающему датасету нейронная сеть учится, а по контрольному тестируется. Важно, чтобы данные контрольного датасета не попадали в обучающий, иначе нейронная сеть просто заучит правильные ответы.

Правильным результатом считается, когда нейронная сеть наименьше всего ошибается на обоих дата сетах. Берутся ответы нейронной сети и сравниваются с правильными. Чем меньше ошибка, тем лучше работает нейронная сеть.

Функцией ошибки ( (Q) ) называется разница между правильными ответами и ответами, которая выдает нейронная сеть на обучающем и контрольном датасете.

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

Математикой обучения занимаются алгоритмы популярных библиотек TensorFlow, Keros.

Ахитектурой нейронной сети ( (F) ) — называется цепочка, последовательность слоев этой сети.

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

Слой — это набор персептронов или определенный алгоритм, который преобразует, по некоторому принципу, входные сигналы p в выходные p’.

Создание архитектуры нейронной сети напоминает конструктор лего, где программист опытным путем подбирает правильный порядок слоев в архитектуре нейронной сети, чтобы она на выходе выдавала правильный результат и значение функии ошибки стремилось к нулю (Q(F, D) to 0)

Введение в нейронные сети

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

Примеры слоев:

  • простой слой персептронов.
  • сверточный слой.
  • слой конвертации изображения из двухмерной картинки в одномерный вектор.
  • нахождение максимума или минимума.
  • фильтрация значения по критерию
  • измененя яркости или контрастности.
  • удаления или добавление шума.
  • Max Pooling и Average Pooling.
  • и т.п.

Архитектура нейронной сети может быть иерархической.

Введение в нейронные сети

Математическое описание задачи обучения с учителем

Дано:

(X) — это входные тестовые данные. Вектор вида ((x_1, x_2, x_3, … , x_n))
(Y) — выходные тестовые данные. Вектор вида ((y_1, y_2, y_3, … , y_k))
(D) — это обучающая выборка, множество кортежей вида ((X_i,Y_i)) , множество входных значений и ответов к ним (выходных значений), где для каждого (X_i) известно (Y_i) .
(n) — длинна вектора (X)
(k) — длинна вектора (Y)
(m) — размер выборки, количество кортежей в множестве (D)

Требуется:

Найти функцию (F) , которая (Y approx F(X))

Обозначим функцию потерь как:

(L(F,X_i)=|Y_i — F(X_i)|)

Эта функция означает, насколько ошибается функция (F) на конкретном примере ((X_i,Y_i)) .

Функция (Q) , будет называться функцией ошибки (F) на множестве (D) и определена как сумма всех значений функции (L)

(Q (F) = frac{ sum_{i=1}^{m} L(F,X_i) } {m})

Функция (F) и ее веса будут найдена при условии (Q(F) to 0)

Есть разные варианты формул ошибки:

Абсолютная ошибка:

(Q (F) = frac{ sum_{i=1}^{m} |Y_i — F(X_i)| } {m})

В Tenzorflow loss=’mean_absolute_error’

Среднеквадратическая ошибка:

(Q (F) = frac{ sqrt {sum_{i=1}^{m} (Y_i — F(X_i))^2} } {m})

В Tenzorflow loss=’mean_squared_error’

Математическая модель нейрона

Нейрон — это атом нейронной сети. У каждого нейрона есть несколько входов и один выход.

Ниже представлена математическая модель одного нейрона.

Введение в нейронные сети

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

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

(y = a(sum_{i=1}^{n} omega_i * x_i + beta))

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

(omega_i) — вес нейронной связи. Задает какой входящий сигнал и с какой силой должен учитываться, а какой нет.

(beta) — смещение bias. Это пороговое значение, которое смещает аргумент активационной функции, потому что активация (включение) нейрона может происходит не в точке 0, а в какой-то другой точке. А т.к. функция активации работает в точке ноль, то аргумент нужно сместить по оси x на смещение bias.

Ниже отображена функция активациции со смещением bias. На графике видно, что нейрон будет включаться после аргумента функции больше 2, а не больше 0. Смещение bias в данном случае равно +2.

Введение в нейронные сети

Смещение bias также является входом в нейронную сеть, для которого подбирается свой вес. Этот вес и является смещением. Обычно вес смещения является нулевым весом (omega_0) , при входном сигнале равным 1. Получается само смещение вычисляется по формуле (beta = omega_0 *1)

Тогда формула активации нейрона примет вид:

(y = a(omega_0 + sum_{i=1}^{n} omega_i * x_i))

Это удобно, потому что в данном случае формула принимает одинаковый вид, и для обучения нейрона требуется подобрать кортеж весов ((omega_0, omega_1, omega_2, omega_3, … , omega_n))

Функция ошибки и активации являются важными параметрами архитектуры нейронной сети.

Однослойный персептрон

Архитектура нейронной сети состоит из последовательности слоев, которые соединены между собой.

Нейронная сеть состоящая только из входных и выходных слоев называется однослойным персептроном и обозначается упрощенно:

Введение в нейронные сети

Данная нейронная сеть очень простая. Однослойный персептрон называют более простым термином полносвязный слой . В библиотеке Tensorflow полносвязный слой создается через класс Dense .

Многослойный персептрон

Данный вид нейронной сети имеет следующие названия:

  • нейронная сеть с прямой связью
  • Feed Forward neural network
  • полносвязная сеть
  • классификатор

Полносвязная сеть используется очень часто, и хорошо решают задачи на классификацию, например:

  1. Распознать какая цифра по ее изображению.
  2. Отличить кошку от собаки.
  3. Определить какой цветок, по его параметрам (цвет, форма цветка, длинна и т.д.)
  4. и т.п.

Во сверточных нейронных сетях, полносвязная сеть используется как классификатор на выходе. Сверточная сеть выделяет признаки по картинке и передает ее в полносвязную. А полносвязная уже квалифицирует и выдает ответ.

Многослойный персептрон (полносвязная сеть) — это последовательность полносвязных слоев однослойных персептронов. Основным отличием многослойного персептрона от одногослойного — в наличии одного или более скрытого слоя. Входные и выходные значения соединяются через скрытый слой, а не напрямую, как в однослойном персептроне.

Введение в нейронные сети

Желтым обозначены входной слой X.

Красным — выходной слой нейронов Y.

Зеленый — это скрытый слой нейронов.

Каждый выход нейрона вычисляется по формуле:

(p’_j = a(omega_0 + sum_{i=1}^{n} omega_i * p_i)) , где p — это входные значения, а p’ — это выходные значения нейрона.

В данной нейронной сети 3 слоя. Входной, скрытый и выходной слой. Данную нейронную сеть часто обозначают упрощенно:

Введение в нейронные сети

Feed Forward neural network

Текстовая нотация Feed Forward:

_x000D_ff = [_x000D_ "Input",_x000D_ "Dense",_x000D_ "Output"_x000D_];

Многослойный персептрон с более чем одним скрытым слоем называют Deep Feed Forward .

Введение в нейронные сети

Текстовая нотация Deep Feed Forward:

_x000D_dff = [_x000D_ "Input",_x000D_ "Dense",_x000D_ "Dense",_x000D_ "Output"_x000D_];

    Функции активации нейрона

    Пороговая функция активации

    (sign(x) = begin{cases} -1 & ,x < 0 \ 0 & ,x = 0 \ 1 &, x > 0 end{cases})

    Сигмоида sigm

    (sigm(x) = frac{1}{1+e^{-x}})

    Введение в нейронные сети

    relu

    (relu(x) = max(0,x) = begin{cases} 0 , x leq 0 \ x , x > 0 end{cases})

    Введение в нейронные сети

    leaky relu

    (lerelu(x) = begin{cases} 0.01x & ,x leq 0 \ x &, x > 0 end{cases})

    Материалы

    1. Обучение многослойного персептрона операции XOR
    2. Материалы для самостоятельного изучения нейронных сетей
    3. Базы датасетов для обучения нейронных сетей
    4. Архитектуры нейронных сетей