Как работают RNN. Глубокие рекуррентные нейросети | #22 нейросети на Python

preview_player
Показать описание
Что дает рекурсия рекуррентным нейронным сетям и как ее можно выразить на языке математики. Примеры архитектур глубоких сетей: Deep Transition RNN (DT-RNN), Deep Transition Deep Output RNN (DOT-RNN), Stacked RNN. Пример реализации Stacked RNN в Keras.

Рекомендации по теме
Комментарии
Автор

Спасибо автору за прекрасные лекции.
Хотелось бы также увидеть подробный разбор механизма внимания и трансформеров.
Немного критики к данному уроку:
- судя по всему сеть просто переобучилась accuracy достигает 1.0;
- было бы неплохо добавить также тестовую выборку;

jvjpghn
Автор

Здравствуйте, очень интересные уроки, спасибо за них. Хотелось бы еще увидеть от вас архитектуру Трансформера, очень интересно послушать ваше мнение

mr.dipperxaki
Автор

Интересно было бы увидеть применение реккурентных сетей в задачах идентификации объекта управления.

konstantingoncharov
Автор

Предупреждаю, синтаксис кераса 3.0.4 в слое Embedding более не поддерживает аргумент input_length, долго пытался понять и думал что у меня проблемы с интерпретатором, пока не узнал что input_shape=(x, ) делает тоже самое но так то удобнее, и без него вы даже сеть скомпилировать не сможете

Responsible_Show-off
Автор

Можно использовать такие архитектуры? public static IModel CreateGibridSimpleModel()
{
// Параметры модели
int seqLength = 4; // Длина последовательности ходов
int numFeatures = 52; // Количество признаков (карт в колоде)
int trumpFeatures = 5; // Количество признаков для козырной масти (предполагая 4 масти и отсутствие козыря)

// Входные данные для последовательности ходов
var seqInput = keras.Input(shape: new Shape(seqLength, numFeatures), name: "sequence_input");

// Входные данные для козырной масти
var trumpInput = keras.Input(shape: new Shape(trumpFeatures), name: "trump_input");

// LSTM слой для обработки последовательности ходов
var lstmOut = new LSTM(128).Apply(seqInput);

// Слой для анализа козырной масти с активацией "relu"
var trumpAnalysis = new Dense(32, activation:

// Объединение выходов LSTM и анализа козырной масти
var merged = Tensors(lstmOut, trumpAnalysis));

// Дополнительные Dense слои с Dropout
var x = new Dense(128, activation: "relu").Apply(merged);
x = new Dropout(0.5f).Apply(x);
var output = new Dense(numFeatures, activation: "softmax").Apply(x);

// Создание модели
var model = keras.Model(inputs: new Tensors(seqInput, trumpInput), outputs: output);

// Компиляция модели
var optimizer = 0.001f);
model.compile(optimizer: optimizer, loss: keras.losses.CategoricalCrossentropy(), metrics: new string[] { "accuracy" });

model.summary();

return model;
}

rnxcxsp
Автор

Комментарий в поддержку канала)
Кстати говоря, добавив этот слой к предыдущей программе я получил на выходе последовательность одинаковых слов. Т.е. каждые 3 слова следующие после исходных повторяются. Не означает ли это переобучение сети? Я попробовал добавить в начале Dropout слой перед слоем Dense, это не помогло. Добавление BatchNormalization перед Dense привело к повторению последовательности 6 слов, т.е вроде частично повлияло на решение проблема

VenatoresnamIgnotis
Автор

Спасибо, отличное объяснение! Но в последнем примере не совсем понятно какие преимущества даёт второй рекуррентный слой для решения задачи, можете вкратце объяснить?

MurzNN
Автор

А можно еще объяснить unet, segnet итд?

meowxd
Автор

Спасибо за лекцию. Подскажите что именно передается на вход второго рекуррентного слоя(помимо вектора состояния второго слоя) в stacked RNN: выход первого слоя или вектор состояния первого слоя? Насколько я понял судя по схеме many to many, показанной Вами на 8:00, во второй слой на вход идет именно выход первого слоя, хотя в учебниках указано что должен идти вектор состояния первого слоя.

upjumpful
Автор

Надо полагать, скоро доберемся до сетей с подкреплением)))

franzditr
Автор

Скажите пожалуйста про return_sequences=True. Если я правильно понял, то по умолчанию у рекуррентной ячейке выход осуществляется 1 раз и только после того как завершится рекурсия.
Но когда мы пишем return_sequences=True, то выход формируется не только в конце, но и каждом временном шаге. Если первый рекуррентный слой принимает на вход векторное представление слов, и так слово за словом, то второй рекуррентный слой принимает последовательность выходов предыдущего слоя в каждый момент времени?

То есть, если в первом случае на вход рекуррентного слоя подается слово за словом из исходной последовательности, то во второй рекуррентный слой подается последовательность
выходов предыдущего рекуррентного слоя, выход за выходом? Я правильно понял суть или это работает как то иначе?

qbbojve