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

Искусственная нейронная сеть напоминает биологический нейрон. Биологический нейрон имеет тело клетки, дендриты и синаптические окончания (которые связаны с дендритами других нейронов). Они получают сигналы через синаптические терминалы в виде электрического импульса и дают выход, который также имеет форму электрического импульса. Аналогичным образом искусственный нейрон получает сигналы или входные данные от других нейронов, выполняет вычисления и выдает соответствующий результат.

Изучая нейронные сети, мы часто слышим слова «глубокое обучение». Это не что иное, как изучение искусственных нейронов, соединенных определенным образом.

Давайте сначала начнем с основ.

Нейрон

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

Персептрон

Персептрон, с другой стороны, представляет собой один слой LTU (обсуждается ниже), который похож на искусственный нейрон, но с той лишь разницей, что входы и выходы могут не обязательно быть бинарными. Их может быть любое количество. И каждое соединение связано с весом. Как показано на рисунке ниже, LTU использует функцию f(x) для комбинации входных данных и соответствующих весов.

Линейная пороговая единица (LTU), как показано выше, представляет собой персептрон, который вычисляет линейную комбинацию этих входных данных и весов.

Z = (x1)*(w1) + (x2)*(w2)

И после этого он применяет функцию f(x) к Z, которая является результирующим выходом LTU. Но для того, чтобы LTU выдал результат, ему необходимо знать значения весов w1 и w2. А вот и тренировочная часть. Сначала LTU обучается для получения значений w1 и w2.

Персептрон состоит из одного слоя LTU. Каждый из которых подключен к каждому другому LTU предыдущего уровня LTU или, другими словами, к предыдущему персептрону.

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

Персептроны не выводят вероятность класса, а просто делают прогнозы на основе жесткого порога.

Обучение персептрона

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

W(i, j) : = W(i, j) + n*(Y-y )x

W(i, j) —вес связи между i-м входным нейроном и j-м выходным нейроном.

n —скорость обучения

Y –выход j-го выходного нейрона для текущего обучающего экземпляра.

y —целевой вывод j-го выходного нейрона для текущего обучающего экземпляра.

x —i-е входное значение текущего обучающего экземпляра.

Реализация персептрона на Python

>>> import pandas as pd
>>> import numpy as np
>>> from sklearn.datasets import load_iris
>>> from sklearn.linear_model import Perceptron
>>> iris = load_iris()
>>> X = pd.DataFrame(data = iris.data, columns = iris.feature_names)
>>> y = iris.target
>>> per_clf = Perceptron(random_state = 42)
>>> per_clf.fit(X,y)
Perceptron(alpha=0.0001, class_weight=None, early_stopping=False, eta0=1.0,fit_intercept=True, max_iter=None, n_iter=None, n_iter_no_change=5,n_jobs=None, penalty=None, random_state=42, shuffle=True, tol=None,validation_fraction=0.1, verbose=0, warm_start=False)

>>> per_clf.predict([[1,2,3,4]])
array([2])

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

Сетевая модель сети, которая имеет более одного уровня персептронов, известна как многослойный персептрон. Он состоит из входного уровня, одного или нескольких уровней LTU и одного выходного уровня. Слои, отличные от входного и выходного слоев, также известны как скрытые слои. Когда есть два или более скрытых слоя, нейронная сеть называется глубокой нейронной сетью. Двухслойный персептрон показан на рисунке ниже.

Каждый слой нейронной сети, кроме выходного слоя, имеет нейрон, который всегда дает 1 в качестве вывода. Этот нейрон известен как нейрон смещения.

Давайте теперь изучим, как тренировать MLP.

Алгоритм обратного распространения

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

Функции активации

Давайте узнаем, что это за функции f(x), g(x) и h(x).

На самом деле эти функции могут быть любой из этих.

Сигмовидная функция:

σ(z) = 1 / (1 + exp(–z))

Сигмовидная функция находится в диапазоне от 0 до 1.

Гиперболическая касательная функция:

тангенс (z) = 2σ(2z) — 1

Функция тангенса находится в диапазоне от -1 до +1.

Функция RELU:

ReLU (z) = max (0, z)

Функция RELU находится в диапазоне от 0 до бесконечности. Эта функция недифференцируема при z = 0.

На приведенном ниже рисунке показаны многие другие часто используемые функции активации.