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

в 9:21, , рубрики: java, Исследования и прогнозы в IT, нейронные сети, Учебный процесс в IT

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

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

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.

Автор: EmeraldSoft

Источник

Поделиться

* - обязательные к заполнению поля