Создаем с нуля собственную нейронную сеть на Python |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2019-04-29 10:15 На повестке дня интересная тема — будем создавать с нуля собственную нейронную сеть на Python. В ее основе обойдемся без сложных библиотек (TensorFlow и Keras). Основное, о чем нужно знать — искусственная нейронная сеть может быть представлена в виде блоков/кружков (искусственных нейронов), имеющие между собой, в определенном направлении, связи. В работе биологической нейронной сети от входов сети к выходам передается электрический сигнал (в процессе прохода он может изменяться). Электрические сигналы в связях искусственной нейронной сети — это числа. Ко входам нашей искусственной нейронной сети мы будем подавать рандомные числа (которые бы символизировали величины электрического сигнала, если бы он был). Эти числа, продвигаясь по сети будут неким образом меняться. На выходе мы получим ответ нашей сети в виде какого-то числа.
Искусственный нейрон Для того, чтобы нам понять как работает нейронная сеть изнутри — внимательно изучим модель искусственного нейрона: Поступающие на вход рандомные числа умножаются на свои веса. Сигнал первого входа ?? умножается на соответствующий этому входу вес ??. В итоге получаем ?. И так до ??-ого входа. В итоге на последнем входе получаем ?.После этого все произведения передаются в сумматор, который суммирует все входные числа, умноженные на соответствующие веса: Справка по Сигме.Итогом работы сумматора является число, называемое взвешенной суммой: Отмечу, что просто так подавать взвешенную сумму на выход бессмысленно. Нейрон должен обработать ее и получить адекватный выходной сигнал. Для этих целей используют функцию активации (мы будем использовать Sigmoid). Функция активации (Activation function) — функция, принимающая взвешенную сумму как аргумент. Значение этой функции и является выходом нейрона . Обучение нейронной сети Обучение нейронной сети представляет собой процесс тонкой настройки весов и смещений из входных данных. Конечно, правильные значения для весов и смещений определяют точность предсказаний.
Опишем все это в коде:
Оценивать качество наших результатов (набор весов и смещений, который минимизирует функцию потери) мы будем вместе с суммой квадратов ошибок (среднее значение разницы между каждым прогнозируемым и фактическим значением): Далее, после измерения ошибки нашего прогноза, нам нужно найти способ распространения ошибки обратно и обновить наши веса и смещения. В этом нам поможет градиентный спуск. Здесь мы не сможем вычислить функции потерь по отношению к весам и смещениям, так как её уравнение не содержит весов и смещений. Ура! Мы получили то, что нам нужно—производную функции потерь по отношению к весам. Теперь мы сможем регулировать веса. Добавим функцию backpropagation в наш код:
На этом наша сеть готова. Выводы по качеству нейронной сети предлагаю каждому сделать самостоятельно. Всем знаний! Ответ 1500 итераций: Источник: habr.com Комментарии: |
|