Автор оригинала: FreeCodeCapm Team.
Самаем Шамдасани
Нейронные сети могут быть запугиваться, особенно для людей, новых для машинного обучения. Тем не менее, этот учебник сломается, насколько именно работает нейронная сеть, и у вас будет работающая гибкая нейронная сеть к концу. Давайте начнем!
Понимание процесса
С приблизительно 100 миллиардов нейронов человеческий мозг обрабатывает данные на скоростях так быстро, как 268 миль в час ! По сути, нейронная сеть – это коллекция Нейроны подключен синапсы Отказ
Эта коллекция организована на три основных уровня: вход спустя, скрытый слой и выходной слой.
Вы можете иметь много скрытых слоев, где термин глубокое обучение вступает в игру. В искусственной нейронной сети есть несколько входов, которые называются Особенности , которые производят хотя бы один вывод – который называется этикетка Отказ
На рисунке выше круги представляют нейроны, а линии представляют синапсы.
Роль синапса состоит в том, чтобы взять и умножить входы и Вес Отказ
Вы можете подумать о весах как «силы» связи между нейронами. Вес в первую очередь определяют вывод нейронной сети. Однако они очень гибки. После того, как функция активации применяется для возврата вывода.
Вот краткий обзор того, как работает простая нейронная сеть FeedForward:
- Возьмите входы в виде матрицы (2D Array номеров)
- Умножьте входы на набор весов (это делается Matrix умножение , ака, принимая «точечный продукт»)
- Примените функцию активации
- Вернуть вывод
- Ошибка рассчитывается путем принятия разности между желаемым выходом из модели и прогнозируемого выхода. Это процесс, называемый градиентным спуском, который мы можем использовать для изменения веса.
- Затем веса регулируются, согласно ошибке, найденной на шаге 5.
- Для тренировки этот процесс повторяется 1000 раз. Чем больше данных обучается, тем более точные наши результаты будут.
В их основных, нейронные сети просты.
Они просто выполняют умножение матрицы с помощью ввода и веса и применяют функцию активации.
Когда веса регулируются с помощью градиента функции потери, сеть адаптируется к изменениям для создания более точных выходов.
Наша нейронная сеть моделирует один скрытый слой с тремя входами и одним выходом. В сети мы будем предсказывать счет нашего экзамена на основе входов, сколько мы изучали, и сколько часов мы спали накануне. Вывод – «тестовый балл».
Вот наши образцы данных того, что мы будем тренировать нашу нейронную сеть на:
Как вы, возможно, заметили, ?
В этом случае представляет то, что мы хотим, чтобы наша нейронная сеть предсказать. В этом случае мы предсказываем тестовый счет кого-то, кто учился в течение четырех часов и спал в течение восьми часов на основе их предыдущей производительности.
Передние пропаганды
Давайте начнем кодировать этот плохой мальчик! Откройте новый файл Python. Вы захотите импортировать numpy
Как это поможет нам с определенными расчетами.
Во-первых, давайте импомнем наши данные в виде Numpy Armays, используя np.array
Отказ Мы также захочем нормализовать наши подразделения, так как наши данные в течение нескольких часов, но наш выход – это тестовый балл с 0-100. Следовательно, нам нужно масштабировать наши данные, разделив максимальное значение для каждой переменной.
Далее давайте определим Python Класс
и напишите init
Функция, где мы укажем наши параметры, такие как входные, скрытые и выходные слои.
Пришло время для нашего первого расчета. Помните, что наши синапсы выполняют Точечный продукт или матричное умножение ввода и веса. Обратите внимание, что веса генерируются случайным образом и от 0 до 1.
Расчеты за нашей сетью
В наборе данных наши входные данные Х
, это матрица 3×2. Наши выходные данные, y
, это матрица 3×1. Каждый элемент в матрице Х
Необходимо умножить на соответствующий вес, а затем добавляется вместе со всеми другими результатами для каждого нейрона в скрытом слое. Вот как первый входной элемент данных (2 часа изучения и 9 часов сна) вычисляет вывод в сети:
Это изображение разбивает то, что наша нейронная сеть на самом деле делает для производства вывода. Во-первых, продукты произвольных генерированных весов (.2, 0,6, .1, 0,8, 0,3, .7) на каждом синапсе и соответствующих входах суммируются, чтобы поступить в качестве первых значений скрытого слоя. Эти суммы находятся в небольшом шрифте, так как они не являются конечными значениями для скрытого слоя.
Чтобы получить окончательное значение для скрытого слоя, нам нужно применить Функция активации Отказ
Роль функции активации – ввести Нелинейность Отказ Преимущество этого заключается в том, что вывод сопоставлен из диапазона 0 и 1, что облегчает изменение весов в будущем.
Там есть много функций активации, для многих различных случаев использования. В этом примере мы будем придерживаться одной из самых популярных – функция сигмовидной.
Теперь нам нужно снова использовать умножение матрицы, с другим набором случайных весов, для расчета нашего значения выходного слоя.
Наконец, для нормализации вывода мы просто применим функцию активации снова.
И, там вы идете! Теоретически, с этими весами, внеуронная сеть будет рассчитаться .85
Как наш тестовый счет! Тем не менее, наша цель была .92
Отказ Наш результат не был плохим, это просто не лучшее, что он может быть. Мы просто повезло, когда я выбрал случайные весы для этого примера.
Как мы тренируем нашу модель, чтобы узнать? Ну, мы узнаем очень скоро. На данный момент давайте встречаемся кодировать нашу сеть.
Если вы все еще запутались, я настоятельно рекомендую вам проверить это Информативное видео, которое объясняет структуру нейронной сети с тем же примером.
Реализация расчетов
Теперь давайте создадим наши веса случайным образом, используя NP.RANDOM.RANDN ()
Отказ Помните, нам понадобится два набора весов. Один, чтобы перейти от входа в скрытый слой, а другой, чтобы перейти от скрытого на выходной слой.
Как только у нас есть все переменные, мы готовы написать наше вперед
Функция распространения. Давайте пройдем на наш вклад, Х
И в этом примере мы можем использовать переменную z
Для моделирования активности между входным и выходным слоями.
Как объяснено, нам нужно предпринять точечный продукт входов и веса, применить функцию активации, предпринять другой точечный продукт скрытого слоя и второго набора весов и, наконец, применяет окончательную функцию активации для получения нашего выхода:
Наконец, нам нужно определить нашу сигмоидную функцию:
И там у нас это есть! (Неподготовленная) нейронная сеть, способная производить вывод.
Как вы, возможно, заметили, нам нужно тренировать нашу сеть, чтобы рассчитать более точные результаты.
Назадпропагация – «обучение» нашей сети
Поскольку у нас есть случайный набор весов, нам нужно изменить их, чтобы наши входы были равными соответствующими выходами из нашего набора данных. Это делается через метод, называемый обратной обработкой.
Пропагация работает с использованием потеря Функция для расчета того, как далеко сеть была из целевого вывода.
Расчет ошибки
Одним из способов представления функции потери является использованием Средняя сумма в квадрате потери Функция:
В этой функции o
Наш прогнозируемый вывод и y
Наш фактический вывод. Теперь, когда у нас есть функция потери, наша цель состоит в том, чтобы получить ее как можно ближе к тому, как мы можем 0. Это означает, что нам нужно будет близко к отсутствию потери вообще. Как мы тренируем нашу сеть, все, что мы делаем, минимизируют потери.
Чтобы выяснить, какие направление изменять веса, нам нужно найти скорость изменения нашей потери в отношении наших весов. Другими словами, нам нужно использовать производную функцию потери для понимания того, как веса влияют на вход.
В этом случае мы будем использовать частичную производную, чтобы позволить нам принять во внимание другую переменную.
Этот метод известен как Градиентный спуск Отказ Знание того, какой способ изменить наши веса, наши выходы могут стать более точными.
Вот как мы рассчитаем инкрементное изменение наших весах:
- Найти Ошибка ошибки выходного слоя (o), принимая разницу прогнозируемого выхода и фактического вывода (Y)
- Применить Производное нашей функции активации Sigmoid к ошибке выходного слоя. Мы называем это результатом Дельта Выходная сумма Отказ
- Используйте выходу Delta выходов ошибки выходного слоя, чтобы выяснить, насколько наша наша z² (скрытый) слой внес вклад в выходную ошибку, выполнив точечный продукт с нашей матрицей веса. Мы можем назвать это ошибкой z².
- Рассчитайте сумму выхода DELTA для слоя Z², применяя производную нашу функцию активации SIGMoid (просто как шаг 2).
- Отрегулируйте веса для первого слоя, выполняя Точечный продукт входного слоя с Скрытый ( z² ) Дельта Выходная сумма Отказ Для второго веса выполните точечный продукт скрытого (Z²) слоя и Вывод (O) Delta Выходная сумма Отказ
Вычисление суммы вывода дельты, а затем применение производной функции сигмоиды очень важна для обратной передачи. Производное сигмоида, также известное как Сигмоид Prime , даст нам скорость изменения или наклона функции активации на выходе.
Давайте продолжим код нашего Neural_network
Класс, добавив функцию SigmoidPrime (производное Sigmoid):
Тогда мы захочем создать наши назад
Функция распространения, которая делает все, что указано в четырех шагах выше:
Теперь мы можем определить наш выход через инициирование пропаганды вперед и инициируйте обратную функцию, вызвав ее в Поезд
Функция:
Чтобы запустить сеть, все, что нам нужно сделать, это запускать Поезд
функция. Конечно, мы захочем сделать это несколько, или, возможно, тысячи раз. Итак, мы будем использовать для
петля.
Вот полные 60 линий удивительности:
Там у вас есть! Полноценная нейронная сеть, которая может учиться у входов и выходов.
Пока мы подумали о наших входах как на часы, изучающие и спать, и наши выходы как тестовые оценки, не стесняйтесь менять их к тому, что вам нравится, и соблюдайте, как сеть адаптируется!
В конце концов, все сети сети являются номерами. Расчеты, которые мы сделали, как сложны, как они, казалось, были, все играли большую роль в нашей модели обучения.
Если вы хотите предсказать вывод на основе наших подготовленных данных, таких как прогнозирование теста, если вы учились в течение четырех часов и спали в течение восьми, проверьте Полный учебник здесь.
Демо-источник
Рекомендации
Стивен Миллер
Welch Labs
Кабир Шах
Это руководство было первоначально опубликовано на Enlight , сайт, который проходит различные учебные пособия и проекты, чтобы учиться построению! Проверьте это для большего количества таких проектов:)