Pull to refresh

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

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

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

$f_{los}(W)=\sum_{i=1}^n[y^i-(\sum^m_{j=1}w_j\cdot 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_k} = -2\cdot \sum_{i=1}^{n}(y^i-\sum _{j=1}^mw_j\cdot x_j^i)x_k^i = 0 ;$


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

$\sum_{j=1}^m(w_j\cdot \sum_{i=1}^{n}x_j^i\cdot x^i_k)=-\sum_{i=1}^{n}x_k^i\cdot 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^i\cdot x^i_k; \\b_k = -\sum_{i=1}^ny^i\cdot x^i_k;$


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

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

Articles

Change theme settings