Нейронные сети — XOR [JS] |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2017-02-11 22:12 Добрый день. В прошлой статье «Нейронные сети за 1 день» мы рассмотрели НС которая решала задачу AND, причём сеть была однослойная. В этот раз мы создадим нейронную сеть, которая будет способна решить задачу XOR, она будет многослойная. Эта статья научит вас использовать метод обратного распространения ошибки, введёт в классификацию. О задаче Часто, для того чтобы продемонстрировать ограниченные возможности однослойных персептронов при решении задач прибегают к рассмотрению так называемой проблемы XOR – исключающего ИЛИ. Данная логическая функция принимает два аргумента, которые могут быть 1 или 0. Функция принимает значение 1 когда один из двух аргументов 1, а другой 0. Если же оба равняются 0 или 1, то в результате мы получаем 0. На такое однослойная НС не способна. Модель Посмотрите внимательно на данную картинку.В прошлый раз у нас было два входных нейрона, один выходной и от двух входных нейронов связи шли к выходному. Теперь мы имеем нейронную сеть, входные нейроны которые отправляют сигнал на скрытый слой, где у нас два обрабатывающих нейрона, и те передают сигнал на выходной нейрон, который тоже обрабатывает сигнал. Для такой задачи мы используем двумерные матрицы для скрытых нейронов, так как каждый нейрон имеет две связи. Это будет гораздо удобней, чем использовать обычные матрицы. Если вы не поняли что такое матрицы — примите это за массив. Программируем Программировать будем на JavaScript. Для начала нам необходимо написать все необходимые массивы и переменные: синапсы, входы, выход и нейроны.
Теперь создадим матрицу обучения сети.
Далее мы описываем сумматор, функции активации, передачу сигнала. В этот раз это выглядит чуть сложнее, чем в прошлый раз.
Обратное распространение ошибки Уйдём ненадолго от программирования. Метод обратного распространения ошибки похож на delta правило. То есть сначала мы вычисляем ошибку(правильный ответ минус ответ сети), и затем меняем веса по формуле: w = w_last + err * n * x Где w_last — прошлый вес, err — ошибка, n — скорость обучения и x — входной сигналВ данном случае мы передаём ошибку по таким же связям, откуда пришёл сигнал. То есть от выхода к входу. Ещё необходимо завести счётчик ошибок обрабатывающего слоя и глобальную ошибку(gError = Math.abs(lErr))
Теперь пишем скрипт на запуск сети:
Мы получим такой результат: 0 1 1 0 Если вам интересно — демонстрация обучения и написание сети на видео: Финал Данные метод не демонстрирует полные возможности многослойных сетей, лишь вводит вас в классификацию. Всем спасибо!Источник: habrahabr.ru Комментарии: |
|