Нейронные сети. Часть 1 — Введение

МЕНЮ


Новости ИИ
Поиск

ТЕМЫ


Внедрение ИИНовости ИИРобототехника, БПЛАТрансгуманизмЛингвистика, рбработка текстаБиология, теория эволюцииВиртулаьная и дополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информации

АРХИВ


Июнь 2017
Май 2017
Апрель 2017
Март 2017
Февраль 2017
Январь 2017
Декабрь 2016
Ноябрь 2016
Октябрь 2016
Сентябрь 2016
Август 2016
Июль 2016
Июнь 2016
Май 2016
Апрель 2016
Март 2016
Февраль 2016
Январь 2016
0000

RSS


RSS новости
птичий грипп

Новостная лента форума ailab.ru

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

Нужно понять, зачем мы вообще их изучаем. Зачем мы хотим создать нейронную сеть? В большинстве случаев — искусственный интеллект. А что такое искусственный интеллект?
1. наука о создании интеллектуальных (умных) машин (чаще всего — компьютерных программ).

2. свойство интеллектуальной системы выполнять творческие функции, которые считаются прерогативой человека.

Конечно же, их можно использовать не только для создания искусственного интеллекта, но и так же для прогнозирования, для решения сложных задач, для управления и т.д

Разберёмся с вопросом: что такое биологические нейронные сети? Ведь именно с их исследования всё началось. По сути, наш мозг — это и есть сложная биологическая нейронная сеть. Проще говоря — совокупность биологических нейронов. А что такое биологический нейрон? Нервная клетка.

Рассмотрим строение биологического нейрона.

image
Действительно сложно. А самое главное — мы не сможем описать все его химические процессы программируя. Но ведь они нам и не нужны. Оставим только самое важное. Дендриты — входы нейрона; обработчик — сумматор; аксон — отросток, который передаст сигнал на синапсы; синапсы — выходы нейрона. Тогда мы получаем такую модель:

image
Стало более просто. А теперь упростим биологическую нейронную сеть. Получаем такой результат:

image
К сожалению, у нейронных сетей есть недостатки:

1. Ответ приблизителен.
2. Не способны на вычислительные задачи.

Вроде это всё.

Теперь отставим биологию. Будем разбираться только с искусственными нейронами.

Когда вы увидели схему искусственного нейрона — вы могли заметить формулы. Это и есть обработка данных нейроном.

Давайте рассмотрим их подробнее. У многих, не понимающих в математике вопрос: что за символ ?. Это сигма. Сигма нужна для более простой записи суммирования.

Может быть не совсем понятно. Поэтому опишем это на примере простого нейрона. У нашего нейрона есть входные данные. Пускай это будет 1 и 1. Два входа у нейрона. Пускай он имеет веса (синапсы). В них кстати, заключается сама суть нейрона и нейронных сетей. Мы их можем использовать как память, а так же для получения правильного результата. Ибо входные данные нам менять не нужно, сумматор никак не изменим, функции активации — смысла нет. Поэтому меняем мы веса. Сейчас мы их установим как -1 и 0, а потом разберёмся с обучением, то есть с их изменением на нужный вариант, в следующих частях.

Теперь мы имеем такие данные: inp1, inp2 которые = 1. Мы имеем веса: w1, w2 (-1, 0).

Перед тем как наш нейрон получит данные, мы умножим каждый соответствующий вес на соответствующий ему вход. То есть — inp1 * w1 и inp2 * w2 ( 1 * (-1) и 1 * 0 )

А теперь мы переходим как сумматору, той самой сигме. Нам нужно суммировать полученные результаты от умножения. Получается -1 + 0. И ответ нашего нейрона — -1. В принципе — это выход нашего нейрона. Обычно добавляют функцию активации. Но о них в следующих частях.

Нужно запомнить то, что они преобразуют ответ в более правильный. Например: функция единого скачка. Это когда результат суммирования достиг или превысил какой-то порог. Если превысил — 1, если нет — 0. Но функций активации на самом деле больше.

Хорошо. Мы с вами описали работу нейрона. Теперь приступим к практике. Программировать я буду на Java.

Создадим класс, опишем данные:

public class Neuron {    int inputs[] = {1, 1}; // входы ( дендриты )    int weights[] = {-1, 0}; // веса ( синапсы )    int output; // выход 

Далее создадим метод, который будет выполнять работу нейрона.

 void power(){     int net = 0;  // будем хранить сумму      for (int i = 0; i < inputs.length; i++ )        net+=inputs[i]*weights[i]; // умножаем вес на вход, суммируем          output = net; // запишем в выход   } } 

На этом урок заканчивается. В следующей части поговорим о функциях активации.

Некоторые материалы были взяты из wikipedia.

Источник: habrahabr.ru