-Поиск по дневнику

Поиск сообщений в rss_rss_hh_new

 -Подписка по e-mail

 

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 17.03.2011
Записей:
Комментариев:
Написано: 51


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

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

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

$f_{los}(W)=\sum_{i=1}^n[y_i-(\sum^m_{j=i}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_j} = -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. Если есть замечания по статье, пишите, всегда рад конструктивной критики.
Как Вы считаете, такой метод стоит развивать или нет?

Проголосовало 3 человека. Воздержалось 4 человека.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/332936/

Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку