Метод безытеративного обучения однослойной сети прямого распространения с линейной активационной функцией

в 20:39, , рубрики: дифференциальные уравнения, математика, машинное обучение, нейронная сеть

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

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

$f_{los}(W)=sum_{i=1}^n[y_i-(sum^m_{j=i}w_jcdot x^i_j)]^2$

Где $W={w_1,...w_k};$, m — количество входов в нейронной сети, n — мощность обучающей выборки, которая состоит из пар: выходного идеального значения «y» для каждого нейрона и входного вектора «x». Так же стоит отметить, что обучать каждый нейрон можно по отдельности.
Сеть будет обучена, если: $f_{los}(W) rightarrow min$, т.е. если ошибка будет минимальной.

Учитывая, что функция активации линейна, а уравнение функции ошибки квадратичное, то очевидно что максимума такая функция не имеет, а следовательно условие при котором $frac{partial f_{los}(W)}{partial w_i}=0$, это условие минимума. Давайте для начала определим эту производную и приравняем её к 0.

$frac{partial f_{los}(W)}{partial w_j}=-2cdot sum_{i=1}^{n}(y_i-sum _{j=1}^mw_jcdot x_j^i)x_k^i=0 ;$

После ряда преобразований получаем:

$sum_{j=1}^m(w_jcdot sum_{i=1}^{n}x_j^icdot x^i_k)=-sum_{i=1}^{n}x_k^icdot y_i;$

Где k — номер уравнения в системе.

Для завершения обучения нам нужно рассчитать вектор весов W. Не сложно заметить что последнее выражение, если его записать для каждого уравнения, представляет собой СЛАУ относительно W. Для решения этой системы я выбрал метод Крамера(метод Гаусса быстрее работает, но он не такой наглядный). Каждый вес нейрона можно записать как:

$\w_j=frac{det(A_j)}{det(A)}; \A=begin{pmatrix} a_{11} ..... .... a_{1m}\ ..... ....\ .. ... .. ..\ a_{m1} ..... .... a_{mm} end{pmatrix}; \B=begin{pmatrix} b_1\ ..\ ..\ b_m end{pmatrix}; \a_{kj}=sum_{i=1}^nx_j^icdot x^i_k; \b_k=-sum_{i=1}^ny_icdot x^i_k;$

Здесь матрица $A_j$ это матрица «A» в которой j-й столбец заменен на вектор B. Это обучение одного нейрона, в силу того, что нейроны никак не связаны между собой можно обучать их параллельно, независимо друг от друга.

P.S. Если есть замечания по статье, пишите, всегда рад конструктивной критики.

Автор: Zachar_5

Источник


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js