Нейрон

В этой статье вы познакомитесь с основами работы искусственных нейронов. В последующих статьях мы изучим основы работы нейронных сетей и напишем простейшую нейронную сеть на python.

Нейронные сети состоят из нейронов связанных между собой, поэтому нейрон является главной частью нейронной сети. Нейроны выполняют только 2 действия: перемножают входные данные на веса и суммируют их и прибавляют смещение, и второе действие это активация.

Теперь подробнее про входные данные, веса, смещения и функцию активации.

Входные данные это данные которые получает нейрон из предыдущих нейронов или от пользователя.

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

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

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

f(x) = \frac{1}{1+e^{-x}}

Эта функция заворачивает любое число от -? до +? в диапазон от 0 до 1.

Если расписать математически, задачи, которые выполняет нейрон то, получится 2 формулы: Обозначения:

f(x) - функция активации

x - сумма произведения входных данных с весами, и смещения

i - массив входных данных

w - массив весов

b - смещение

j - количество входных данных и весов

x = i_1*w_1+...+i_j*w_j+bf(x) = \frac{1}{1+e^{-x}}

Алгоритм работы нейрона будет выглядеть так

Теперь реализуем этот алгоритм на языке программирования python.

Перед реализацией нейрона надо загрузить и подключить библиотеку numpy. Для загрузки библиотеки напишем в терминале Linux или Window:

pip install numpy

Для подключения библиотеки к нашей программе напишем в начало программы:

import numpy as np

Для удобства использования в больших программах и для простоты чтения кода мы реализуем класс Neuron, и напишем для него конструктор:

class Neuron:
    def __init__(self, number_of_weights = 1):

        self.w = np.random.normal(size=number_of_weights)
        self.b = np.random.normal()

Конструктор класса получает как параметр количество входов для нейрона, и заполняет массив весов случайными числами, потом генерируем смещение.Также для работы нейрона нам надо инициализировать функцию активации. Выглядеть она будет так:

def activate(self, inputs):
        
        x = np.dot(self.w, inputs) + self.b
        
        return sig(x)

Функция получает входные данные, суммирует их и возвращает результат сигмоиды. Для работы функции активации нам надо написать функцию сигмоиды:

def sig(x):
  return 1 / (1 + np.exp(-x)) 

Эту функцию мы поместим в файл Math.py

Перед функцией мы опять подключим numpy:

import numpy as np

Класс нейрона мы запишем в файл Neuron.py. И подключим в Neuron.py файл Math.py:

from Math import *

В итоге мы получаем 2 файла:

Neuron.py

import numpy as np

from Math import *

class Neuron:
    def __init__(self, number_of_weights = 1):

        self.w = np.random.normal(size=number_of_weights)
        self.b = np.random.normal()
        
    def activate(self, inputs):
        
        x = np.dot(self.w, inputs) + self.b
        
        return sig(x)

Math.py

import numpy as np

def sig(x):
  return 1 / (1 + np.exp(-x))

Эти файлы мы будем использовать в следующих статьях при построениях нейронных сетей.

И так, подведем итоги:

  1. Мы изучили принципы работы искусственных нейронов

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

  3. Написали класс нейрона на языке программирования Python

Если вам было что-то не понятно задавайте вопросы в комментариях.