Информация к новости
  • Просмотров: 1519
  • Автор: sulicompany
  • Дата: 16-02-2013, 05:18
 (голосов: 0)
16-02-2013, 05:18

Нейронная сеть

Категория: Электроника » Arduino


 

Нейронная сеть - введение


Искусственные нейронные сети (ИНС – она же нейросеть (neuronet)) – звучит таинственно и загадочно. Пахнет искусственной жизнью и могуществом ИИ.

Между тем, эти математические структуры давно прочно вошли в наш быт:
автоматизация процессов распознавания образов, 
адаптивное управление,
прогнозирование,
и т.д…
Основу нейронной сети составляет нейрон — элемент, который имитирует работу нейронов мозга.



Нейрон характеризуется своим состоянием и, по аналогии с реальным нейроном, может быть либо возбуждён — либо заторможен.


Как видно – у нейрона есть входы (синапсы), которые соединены с выходами других нейронов. И есть выход (аксон) сигнал с которого поступает на синапсы других нейронов.
Каждый синапс характеризуется величиной синаптической связи – её так же называют весом Wi.
По физическому смыслу, вес синоптической связи – это электрическая проводимость данного синапса.


Состояние нейрона определяется, как сумма состояний его входов.


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

       
float sum = 0;
       
for(int i = 0; i < N; i++) {
                sum
+= inputs[i]*weights[i];
       
}


Значение на выходе нейрона – это функция от его состояния. 
Y = f(s)


Функция f называется активационной и может иметь различный вид:



Чаще всего, используется логистическая функция или функция S-образного вида(сигмоид):



#define  NN_FUNC_SIGMA_LOGISTIC(x) ( 1 / (1 + exp(-(x))) )
...
value
= NN_FUNC_SIGMA_LOGISTIC( sum );


Одна из причин, по которой сигмоид используется в нейронных сетях, это простое выражение его производной через саму функцию (которое и позволило существенно сократить вычислительную сложность метода обратного распространения ошибки, сделав его применимым на практике):
S'(x) = S(x)*(1 - S(x))


решение:

           
1
S
(x) = -----------
       
1 + exp(-x)

            exp
(-x)        1 + exp(-x) - 1      1             1
S
'(x) = --------------- = ---------------- = ----------- - ---------------
        (1 + exp(-x))^2    (1 + exp(-x))^2   1 + exp(-x)   (1 + exp(-x))^2

теперь, если вынести S(x) за скобки, то и получим требуемое выражение.


Формально, искусственный нейрон – является однослойным перцептроном (персептроном), т.е. моделью, в которой входные элементы напрямую соединены с выходными с помощью системы весов, и выполняет функциюлинейной классификации.

Классификация – это процесс группировки/разбиения объектов исследования или наблюдения в соответствии с их общими признаками. 

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


Однослойный перцептрон хорош для решения задач линейной классификации, т.е. именно для случая двумерного пространства и классифицирующей линии, но он не сможет решить задачу, которая не может быть решена линейным разделением.
Классический пример задачи, которая не по зубам однослойному перцептрону — исключающее ИЛИ (XOR — exclusive OR).

Рассмотрим точки (0,0), (1,0), (0,1), и (1,1) в пространстве. 
Для XOR, не существует способа провести одну линию, которая отделяет точки TRUE: (1,0) и (0,1) от точек FALSE: (0,0) и (1,1). 


Т.о. точки XOR линейно неразделимы.
Выходит, однослойный перцептрон не может быть обучен, для разделения по XOR.

Чтобы решить проблему XOR, нужно создать многослойный перцептрон!
Для решения задачи XOR, многослойный перцептрон будет иметь два входа, затем «скрытый» слой, и один выход.



Скрытый слой — это, фактически, несколько нейронов, которые сообща справляются с одной и той же задачей.

Т.о. если взять группу нейронов, объединить их в слои, то мы получим эту таинственную Искусственную Нейронную Сеть!

— самый распространённый тип ИНС — многослойный перцептрон.
Как видим, данная сеть состоит из трёх слоёв (обычно их называют – входной (сенсорный), скрытый и выходной). Нейроны каждого слоя соединены по принципу «каждый с каждым».

Теоретически, число слоев и число нейронов в каждом слое, может быть произвольным. Однако, в реальности, оно ограничено ресурсами компьютера или микросхемы, на которых реализуется данная ИНС ;)
Выбор структуры ИНС осуществляется в соответствии с особенностями и сложностью задачи. Для решения некоторых отдельных типов задач уже существуют оптимальные, на сегодняшний день, конфигурации.

Выбор структуры ИНС определяется решаемой задачей:
Пример 1: 
простая нейронная сеть для решения задачи логического И/ИЛИ/искл. ИЛИ
Два нейрона первого(входного) слоя, 4 нейрона скрытого слоя и один нейрон на выходе.
Пример 2: 
нам нужно распознать, символ цифры на матрице 10x10, то входной слой будет состоять из 100 нейронов – по нейрону на ячейку. А выходной слой должен иметь столько нейронов, сколько символов для распознавания. Т.к. нужно распознавать цифру – то должно быть 10 выходных нейронов. Со скрытым слоем такой определённости нет :) 
Пример 3: 
ещё пример, который сразу приходит на ум – это входные нейроны на каждый рецептор робота, а выходные нейроны на каждый исполнительный механизм :)


Итак, у нас есть ИНС, однако, очевидно, что её функционирование зависит от величин синаптических связей. Поэтому, необходимо подобрать оптимальные величины этих переменных для решения поставленной задачи. Этот этап и называется обучением ИНС.

Как видим, в попытке создания ИИ методом копирования природы мы приходим к тем же терминам, что используются в нашей жизни :)


Обучение ИНС может вестись с учителем или без него. 

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

Сразу вспоминается школа и зубрёжка таблицы умножения :)


При обучении без учителя — выходы ИНС формируются самостоятельно, а веса изменяются по алгоритму, учитывающему только входные и производные от них сигналы.

Вот мы и познакомились с ИНС. 
Всего несколько минут чтения, а от таинственности ИНС не осталось и следа ;) Даже как-то грустно, что это, всего лишь, матрицы коэффициентов :(
«Формула жизни» опять ускользнула в туман загадок :)

Однако, это ничуть не умаляет возможностей ИНС и скоро мы с ними познакомимся :) 

далее: 

Ссылки:




 


Нейронная сеть - обучение ИНС с помощью алгоритма обратного распространения

  •   

Принцип обучения многослойной нейронной сети с помощью алгоритма обратного распространения

Рассмотрим процесс обучения нейронной сети с использованием алгоритма обратного распространения ошибки (backpropagation).

Для иллюстрации этого процесса используем нейронную сеть состоящую из трёх слоёв и имеющую два входа и один выход:
здесь, автор считает слои по-другому и не учитывает «2 нейрона» входного слоя


Каждый нейрон состоит из двух элементов.
Первый элемент – дендриты — добавляют весовые коэффициенты ко входным сигналам. 
Второй элемент – тело — реализует нелинейную функцию, т.н. функцию активации нейрона. 
Сигнал е – это взвешенная сумма входных сигналов
у = f (е)
— выходной сигнал нейрона. 


Чтобы обучить нейронную сеть мы должны подготовить обучающие данные(примеры). 
В нашем случае, тренировочные данные состоят из входных сигналов (х1 и х2) и желаемого результата z. 
Обучение – это последовательность итераций (повторений).
В каждой итерации весовые коэффициенты нейронов подгоняются с использованием новых данных из тренировочных примеров. 
Изменение весовых коэффициентов и составляют суть алгоритма, описанного ниже.

Каждый шаг обучения начинается с воздействия входных сигналов из тренировочных примеров. После этого мы можем определить значения выходных сигналов для всех нейронов в каждом слое сети. 
Иллюстрации ниже показывают, как сигнал распространяется по сети. 
Символы W(Xm)n представляют вес связи между сетевым входом Xm и нейрона n во входном слое. 
Символы y(n) представляют выходной сигнал нейрона n.




Распространение сигнала через скрытый слой. 
Символы Wmn представляют весовые множители связей между выходом нейрона m и входом нейрона n в следующем слое.


Распространение сигнала через выходной слой

На следующем шаге алгоритма, выходной сигнала сети y сравнивается с желаемым выходным сигналом z, который хранится в тренировочных данных. 
Разница между этими двумя сигналами называется ошибкой d выходного слоя сети.


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


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



Когда вычисляется величина ошибки сигнала для каждого нейрона – можно скорректировать весовые коэффициенты каждого узла ввода(дендрита) нейрона.
В формулах ниже df(e)/de — является производной от функции активации нейрона (чьи весовые коэффициенты корректируются).
как , для активационной функции типа сигмоид 

           
1
S
(x) = -----------
       
1 + exp(-x)
производная выражается через саму функцию:
S'(x) = S(x)*(1 - S(x))
, что позволяет существенно сократить вычислительную сложность метода обратного распространения ошибки








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

продолжение следует...

Ссылки: