Нейронные сети за 1 день |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2017-01-31 07:05 Всем привет. В этот раз мы попытаемся разобраться с нейронными сетями без биологии и за 1 день. Зачем они нужны? Для того чтобы понять зачем нужны нейронные сети, нужно разобраться с тем, что они из себя представляют. Искусственный нейрон Перед тем как переходить к строению нейронных сетей, нужно разобраться с их единицей — нейронами.За входы обозначены x1, x2. На них поступают данные, либо в вещественном виде, либо в целом. Очень часто приходится проводить нормализацию входных данных. Для этого достаточно: Количество входов зависит от задачи. Так же мы имеем веса: w1, w2. В них и заключается суть нейронных сетей, через них проходит обучение. О нём чуть позднее. Перед началом обработки данных, входы умножаются на соответствующие им веса. Т.е x1 * w1, x2 * w2. Далее результаты произведений поступают на нейрон и суммируются. (x1 * w1) + (x2 * w2) Например: x1 = 1; x2 = 3; w1 = 0; w2 = -1; (1 * 0) + (3 * (-1) ) = -3 Усвоим для себя, что количество весов должно соответствовать количеству входов. Далее результат суммирования поступает в блок нелинейного преобразования. В нём должна находиться функция активации. Функция активации Функции активации нужны для нормализации выходных данных. Допустим ответ -3 нам ни о чём не говорит, и мы хотели бы преобразовать его к 1 или 0.Для такого имеется функция единого скачка. Когда в нейроне заряд превысил какой-то порог, то нейрон выдаёт 1. Если заряд ниже порога, то нейрон выдаст 0. Например, T — порог. Он равен 0. Результат суммирования -3. -3 < 0, значит и ответ нейрона 0. Если заряд был бы больше, например равный 0.5 или 1 или 124124, то нейрон выдал бы 1.Порог устанавливается по вашему желанию, так как нейронная сеть всё равно подстроиться под него.Когда нам необходимо преобразовать данные для большего выбора варианта, то нам необходимо преобразовать суммированный результат в вид от 0 до 1. Для такого у нас имеется логистическая функция. Или: a — степень крутизны на графике функции.net — результат суммированияВ нашем случае -3 преобразуется в 0.9525741268224334В таком случае мы можем просклонять такой ответ к хорошему результату. Практика Представим себе такую задачу. Мы хотели бы получить подсказку от нейронной сети, встречаться ли нам с девушкой или нет. Мы имеем такие входные данные:Рост девушки, (в метрах) Допустим установим все эти входы такими числами: 1.66, 100%, 1, 1 4 входа — 4 веса. t(порог) = 400 Установим сейчас веса без обучения, как степень важности параметра: 1, 5,5, 4. Умножаем входы на соответствующие им по номеру веса: (1.66 * 1) + (100 * 5) + (1 * 5) + (1 * 4) = 1.66 + 500 + 5 + 4 = 510.66 > 400, значит встречаться с девушкой можно, так как нейрон выдаст 1. Теперь попробуем проверить через логистическую функцию. 1 / (1 + exp(-510.66)) = 1.0 В данном случае мы тоже получили 1, значит встречаться можно. Но здесь у нас больше вариантов, ибо тут мы можем распределить ответы НС так: net => 0.80, встречаться можно. net < 0.80 && net != 0.5, нужно ещё подумать. net <= 0.5, встречаться не нужно. Надеюсь вам было понятно. Типы нейронных сетей Теперь нужно понять строение нейронных сетей. Они разделяются на однослойные и многослойные, с прямыми связями и обратными связями . Однослойные НС В таких НС данные с входных слоёв передаются сразу на выходные нейроны, которые обрабатывают сигналы. В данном примере три входных нейрона(x1, x2, x3), три выходных нейрона(out1, out2, out3). Многослойные НС Такие НС работают гораздо сложнее, но и способны они на большее. Главная их отличительная особенность — они имеют скрытые(обрабатывающие) слои. Сети с прямыми связями Сети с прямыми связями могут быть однослойные и многослойные, вы уже видели их на рисунках выше. Таким образом связи из входов направляются к выходному слою или к скрытому слою и т.д к выходному.Такие сети способны на прогнозирование, линейную интерполяцию, распознавание образов, не редко на классификацию и многое другое.Сети с обратными связями Данные сети имеют как прямые связи, так и обратные. Такие нейронные сети могут иметь разное количество слоёв, или могут быть вообще однослойными. Но главная их особенность — они имеют ассоциативную (кратковременную) память. На таких нейронных сетях вы можете сделать чат-ботов. Так же они могут применяться в управлении, решать задачи классификации и многое другое. Персептрон Персептрон — нейронная сеть рецептор. Он имеет входной слой(S), обрабатывающие слои(A),выходной слой®.Нейроны S слоя входные. Они могут находиться в состоянии возбуждения(1), либо в состоянии покоя(-1 или 0). Конечно же, никто не запрещает вам использовать и другие числа. Так же вы можете их нормализовать, например 1 / num, где num — ваше число.Прежде чем попасть в A слой, сигналы с S слоя должны пройти по весам SA, значения которых могут быть в пределах от -1 до 1 в вещественном виде. Далее, сигналы поступают в A слой, суммируются, проходят через функцию активации. Далее, сигналы которые идут по AR весам. Здесь они могут иметь уже любые значения, которые установятся обучением. В нейронах R слоя сигналы так же обрабатываются, проходят через функцию активации и вы получайте ответ. Обучение Вот мы и перешли к самой важной, но и в то же время очень сложной части. Обучение нейронной сети — это процесс, при котором изменяются весовые коэффициенты. Собственно, благодаря этим весовым коэффициентам и работают нейронные сети.Правило Хебба №1 Данное правило действует чаще всего с однослойными персептронами, входные сигналы которых равны 1, -1 или 0. С остальными числами у вас оно работать не будет.Работает оно просто:1. Если нейронная сеть выдаёт правильный результат, то весовые коэффициенты не изменяются. Правило Хебба №2 Данное правило работает со всеми числами. По-другому оно называется delta правилом. Оно имеет две формулы, в которых нужно разобраться, так как delta правило присутствует в методах обучения для многослойных нейронных сетей.Для delta формулы нам необходимо знать ошибку сети. Чаще всего, ошибка — это разность правильного и неправильного ответов. Где d — правильный ответ, b — ответ сети.Теперь рассмотрим саму формулу: w(t + 1) — новый весовой коэффициент.w — старый весовой коэффициентerr — ошибка(разность правильного ответа и ответа сети)n — скорость обученияxi — значение которое пришло на i-ый входЯ думаю, что вам не совсем понятна скорость обучения и как её искать. Ищется она в диапазоне чисел от 0 до 1, очень часто ставят 0.001, 0.0001 или 1. Метод обратного распространения ошибки Это самый лучший метод обучения сетей, который используется как с многослойными, так и однослойными сетями. Чем-то он может напомнить вам delta правило, ибо формула та же.В данном случае, нам необходимо создать счётчик ошибок. Если показатель счётчика равен 0 — значит нейронная сеть обучена. Конечно же, в данном случае нам необходимо иметь обучающую подборку.Алгоритм такого обучение следующий:1. Инициализация весов случайными значениями. Практика Вот теперь мы практикуем свои знания. Сейчас мы попробуем сделать однослойный персептрон, который будет работать с методом обратного распространения ошибки.Пусть он строит логическую таблицу функций 'AND' и 'OR'. Кто знаком с алгеброй логики, тот поймёт. Начнём описывать эту сеть через ООП. Мы видим, что у нас два входных нейрона, две связи, один выходной нейрон.
Теперь нам необходимо создать матрицу готовых ответов и входов для таблицы AND.
Создаём обработку входных данных. Здесь не так всё сложно. Если вы помните, то входные данные умножающие на соответствующие им по индексу веса и результаты произведений суммируются. Воспользуемся пороговой функцией. Если выход > 0.1, то НС даёт 1.
Теперь пишем обучение сети. Метод обратного распространения ошибки. Создали счётчик ошибок, запускаем цикл. Копируем в входы НС входные данные из обучающей таблицы. Запускаем обработчик, получаем ошибку. Дальше используем delta правило.
Теперь мы запускаем тестер НС. Включаем обучение; НС обучилась; проверяем её работу.
Включаем тестирование при запуске программы.
Вот такой результат мы получаем: Заключение Конечно, многое может быть вам было не понятно. На сайте я буду писать множество статей о создании разных проектов с НС, поэтому объяснять о них я буду не один раз. Я надеюсь, что кому-то эта статья понравится. Спасибо за внимание, удачного кода и послушного ИИ.Источник: habrahabr.ru Комментарии: |
|