Это мой первый официальный образовательный пост на Medium, и я должен сказать, что Medium - действительно потрясающая платформа для блогов. В любом случае, мы идем. Проблема очень проста, мы собираемся использовать RNN, чтобы подсчитать, сколько их в данных. Если вам просто нужен видеоурок и код, перейдите по ссылкам ниже.
Ссылка на Github: https://github.com/JaeDukSeo/Only_Numpy_Basic/blob/master/rnn/a_rnn_simple.py
Как видно выше в (а), обучающие данные - это X, а тестовые данные - это Y (чистая правда). (b) У нас будет только два веса, Wx (где мы собираемся умножить на вход x) и Wrec (где мы собираемся умножить на предыдущие состояния)
Очень важно понять (c), поскольку именно наша сетевая архитектура является развернутой версией нашей сетевой архитектуры. Однако он ясно показывает, что состояние 0 (обозначается как S0) имеет некоторую связь с состоянием 1 (обозначается как S1). ЧТО ОТНОШЕНИЯ УКАЗАНО НИЖЕ!
Под (E) мы можем увидеть одно уравнение, которое проясняет связь между State.
Current_State_K = Предыдущее_Состояние K * Wrec + Current_Input_X * Wx
Эта одна строка математики представляет собой взаимосвязь между состоянием 0 и состоянием 1. Но как насчет чисел под каждым состоянием? Очень просто, это входы в каждом состоянии, поэтому в состоянии 1 вход x является вектором [0,0,1] .T.
Вы можете спросить: А как насчет состояния 0? Отличный вопрос, они все НУЛИ!
Итак, давайте разберемся с Math - Forward Feed.
Вот и все! Мы закончили с распространением прямой подачи. Кроме того, только одно примечание: мы собираемся использовать MSE в качестве функции стоимости, и с этого момента мы будем обозначать эту функцию стоимости только как обозначение рядом со звездочкой. (Извините, я не специалист по математике, я понятия не имею, как называется это обозначение.)
Теперь давайте выполним обратное распространение во времени. Мы должны получить производную по Wx и Wrec для каждого состояния. И это именно то, что мы сделали ниже!
Итак, это все! Простая математика, лежащая в основе обучения RNN. Однако попробуйте самостоятельно заполнить состояние 1. Но есть один интересный факт, на который следует обратить внимание: при получении производной от Wx и Wrec существует множество математических символов, которые повторяются с течением времени, посмотрите на изображение ниже.
Было бы более эффективно с вычислительной точки зрения получить эти повторяющиеся значения в матрице и использовать их позже, просто умножив соответствующие X или State. И это именно то, что я делаю в видеоуроке!
ДРУГОЕ, важно отметить, что когда мы получаем производную, мы умножаем Wrec несколько раз, другими словами, переменные играют ключевую роль! (Я не буду объяснять дальше, но эта тема важна!)
И, наконец, давайте выполним обновление веса с помощью стохастического градиентного спуска.
В правом верхнем углу мы соответственно складываем термины и выполняем SGD.
Обновить! Вот часть 2: Ссылка
Напоследок, как напоминание, я использовал много материала от Питера! Пожалуйста, перейдите по ссылке ниже, чтобы ознакомиться с этим замечательным руководством! И это мой первый пост, я все еще учусь делать отличные уроки, любая обратная связь будет полезна!
[пожалуйста, будьте любезны: ’(] Спасибо!
Чтобы узнать больше, посетите мой сайт и мой канал на Youtube!
Сайт: https://jaedukseo.me/
Канал на YouTube: https://www.youtube.com/c/JaeDukSeo