Оглавление

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

Задача у нас будет такая: дан набор точек, про которые известно, что они: или чёрные, или белые. Найти цвета других точек.

Сейчас будет всё понятно. Формулировать будем на питоне:

problem = [
    '...?.....?............#',
    '......?.......?....####',
    '.?........?.....#####?#',
    '.......?.....#####?####',
    '..?..?....#############',
    '.......######?######?##',
    '....#####?#######?#####',
    '.###################?##']

Там, где стоят точки — это белые точки, там, где # — чёрные. А вопросики надо отгадать.

Давайте запрограммирует один единственный нейрон:

wx = 24
wy = 8
wb = -171

def neuron(x, y, bias=1):
    f = wx * x + wy * y + wb * bias
    if f < 0:
        return -1
    return 1

Наш нейрон принимает три входных сигнала: две координаты и «опорный сигнал», который всегда постоянен.

На выходе он выдаёт или -1, или +1 — это ответ белое, или чёрное.

Следующий кусочек кода выглядит громоздко, но он делает простую вещь: пробегает по всем точкам-символам задачи. Там, где находит вопросительный знак — вызывает наш нейрон, передавая ему координаты точки. И выводит результат: для белых точек !, для чёрных — %

y = 0
for line in problem:
    x = 0
    new_line = ''
    for char in line:
        if char == '?':
            # спрашиваем у нейрона, что он думает про эту точку
            r = neuron(x, y)
            if r < 0:
                char = '!'
            else:
                char = '%'
        new_line += char
        x += 1
    print new_line
    y += 1

На выходе мы получим:

...!.....!............#
......!.......!....####
.!........!.....#####%#
.......!.....#####%####
..!..!....#############
.......######%######%##
....#####%#######%#####
.###################%##

Как видите, наш нейрон ведёт себя вполне разумно.

Но откуда мы взяли эти коэффициенты? Как обучить нейрон? Об этом читайте дальше.