При изучении любой технологии самое главное — увидеть живой пример. Теория — теорией, а зачастую не хватает простого примера, от которого можно оттолкнуться. Многие знают о нейронных сетях. На хабре зачастую проскакивали материалы на эту тему, но вот примеров реализаций достаточно мало. В этом посте я хочу вам показать теорию и практику работы перцептрон Розенблатта, который, на мой взгляд, является самым простым примером обучающейся сети.
Теория
Итак мы сделаем нейросеть которая сможет отличать 2 буквы, цифры, символа или фигуры, друг от друга.
Перцептрон Розенблатта представляет собой нейронную сеть с одним обрабатывающим слоем, где в качестве функции активации используется пороговая функция.
Схема сети:
Как она работает:
На вход x1,x2,..,xn поступают сигналы. После они обрабатываются по следующей формуле:
, где w — весовые коэффициенты, x — входные данные, T — порог.
После используем формулу:
В итоге на выходе мы получаем -1 или 1.
Итак у нас есть изображение буквы.
Для начала уменьшим объем входной информации для нейросети. Для этого разобьем изображение на квадраты 4х4 пикселя, если в нем больше 1 черного, то этот квадрат прием за черный, иначе за белый.
Получаем вот это:
Далее подадим на вход нейронной сети сигналы в соответствии с состоянием квадратов. Если цвет квадрата черный — подаем 1, иначе -1.
Смотрим что получилось на выходе. Если 1 то это А, иначе Б.
Откуда же нам найти w и T? Для этого необходимо обучить сеть. Мы подаем данные. Если получили правильный ответ, то ничего не делаем. В случае неправильного необходимо подкорректировать w и T.
Для каждого w применяем
, где a — скорость обучения( задается в пределах от 0 до 1), e — Эталонное значение(правильный ответ), y — ответ сети.
Пример
Демка(протестирована в Chrome,Opera,Firefox.)
Рисуем на розовом фоне букву. Нажимаем посчитать. Если ответ неправильный нажимаем Это А или Это Б. Нажимаем очистить. Внизу мы можем видеть таблицу W для каждого квадрата и T.
Обучим сеть. Я обучал её отличать А и Б. Вы можете обучать её чем угодно. После 15 картинки она начала выдавать хорошие ответы.
Вот получившиеся W:
Из этого рисунка видно, что те области, которые характерны для А стали красными(w>0), те что характерным для Б стали зелеными(w<0)
Однако стоить заметить, что эта сеть способна отличать только достаточно различные образы. Попытки отличать Н и И, Z и 2 не увенчались успехом. К тому же мы используем простой алгоритм обработки изображения и поэтому нам важно чтобы буквы были всегда примерно в одном месте.
Автор: numitus
Подскажите, а как быть если у нас 3 буквы? А, Б и В например