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


Рисунок 1 – Классический подход решения задач

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


Рисунок 2 – Машинное обучение

2. Нейронные сети

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

На рисунке вы можете увидеть сходство между устройством биологического нейрона и математическим представлением нейрона, используемого в машинном обучении (рисунок 3).


Рисунок 3 – Математическое представление нейрона

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

3. Персептрон

Математическая модель нейронной сети, состоящего из одного нейрона, который выполняет выполняет две последовательные операции (рисунок 4):

  • вычисляет сумму входных сигналов с учетом их весов (проводимости или сопротивления) связи

    ${sum=\ \vec{X}}^T\vec{W}+\vec{B}=\sum_{i=1}^{n}{x_iw_i}+b$



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

    $out=\varphi(sum)$



Рисунок 4 – Математическая модель персептрона

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

Заметка:

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

Таблица 1 - Распространенные активационные функции
Имя Формула График
Linear function

$\varphi\left(x\right)=x$

.
Sigmoid function

$\varphi\left(x\right)=\frac{1}{1+e^{-x}}$


Softmax function

$\varphi\left(x_j\right)=\frac{e^{x_j}}{\sum_{i} e^{x_i}}$

$\varphi \left ( \begin{bmatrix} 1.2\\ 0.9\\ 0.4 \end{bmatrix} \right ) = \begin{bmatrix} 0.46\\ 0.34\\ 0.20 \end{bmatrix} $


Используется для задач классификации (где количество классов более 2)
Hyperbolic Tangent function

$\varphi\left(x\right)=\frac{e^x-e^{-x}}{e^x-e^{-x}}$



Сжимает входной сигнал в интервале [-1, 1]. Применяется в скрытых слоях нейронной сети, так как центрирует выходной сигнал относительно нуля, что ускоряет процесс обучения
Rectified Linear Unit (ReLU)

$\varphi\left(x\right)=\max(0,x)$



Используется в скрытых слоях нейронной сети, имеет лучшую сходимость, чем sigmoid и tanh функции
Leaky ReLU

$\varphi\left(x\right)=\max(0.01x,x)$



Лишен недостаток ReLU функции в интервале отрицательных выходных сигналов, где частичная производная равна 0