Рекуррентные нейронные сети

Глубокое обучение на PyTorch: средний уровень

Michal Oleszak

Machine Learning Engineer

Рекуррентный нейрон

  • Сети прямого распространения
  • RNN: имеют обратные связи
  • Рекуррентный нейрон:
    • Вход x
    • Выход y
    • Скрытое состояние h
  • В PyTorch: nn.RNN()

Схема простого рекуррентного нейрона: нейрон применяет веса и функцию активации, получает вход x и формирует выходы y и h, где h подаётся обратно на вход.

Глубокое обучение на PyTorch: средний уровень

Развёртка рекуррентного нейрона во времени

Схема рекуррентного нейрона. На шаге 0 он получает входы h0 и x0 и формирует выходы y0 и h1.

Глубокое обучение на PyTorch: средний уровень

Развёртка рекуррентного нейрона во времени

Схема рекуррентного нейрона. На шаге 1 он получает входы h1 и x1 и формирует выход y1.

Глубокое обучение на PyTorch: средний уровень

Развёртка рекуррентного нейрона во времени

Схема рекуррентного нейрона. На шаге 2 он получает входы h2 и x2 и формирует выходы y2 и h3.

Глубокое обучение на PyTorch: средний уровень

Глубокие RNN

Схема двух рекуррентных нейронов, образующих слой. На каждом шаге выходы y передаются следующему нейрону.

Глубокое обучение на PyTorch: средний уровень

Архитектура «последовательность — последовательность»

  • Подаётся последовательность, используется весь выход
  • Пример: распознавание речи в реальном времени

Схема архитектуры: на каждом шаге поступает новый вход, а все выходы y, формируемые на каждом шаге, выделены зелёным как используемые.

Глубокое обучение на PyTorch: средний уровень

Архитектура «последовательность — вектор»

  • Подаётся последовательность, используется только последний выход
  • Пример: классификация текста по теме

Схема архитектуры: на каждом шаге поступает новый вход, а выделен зелёным только последний выход y на последнем шаге.

Глубокое обучение на PyTorch: средний уровень

Архитектура «вектор — последовательность»

  • Подаётся один вход, используется весь выход
  • Пример: генерация текста

Схема архитектуры: только один вход на первом шаге, а все выходы y, формируемые на каждом шаге, выделены зелёным как используемые.

Глубокое обучение на PyTorch: средний уровень

Архитектура «кодировщик — декодировщик»

  • Сначала подаётся вся входная последовательность, затем используется выходная
  • Пример: машинный перевод

Схема архитектуры: в первой части (кодировщик) входы поступают на каждом шаге, а выходы игнорируются; во второй части (декодировщик) входов больше нет, но используются все выходы каждого шага.

Глубокое обучение на PyTorch: средний уровень

RNN в PyTorch

class Net(nn.Module):
    def __init__(self):
        super().__init__()

self.rnn = nn.RNN( input_size=1, hidden_size=32, num_layers=2, batch_first=True, )
self.fc = nn.Linear(32, 1)
def forward(self, x): h0 = torch.zeros(2, x.size(0), 32)
out, _ = self.rnn(x, h0)
out = self.fc(out[:, -1, :]) return out
  • Определите класс модели с методом __init__
  • Определите рекуррентный слой self.rnn
  • Определите линейный слой fc
  • В forward() инициализируйте первое скрытое состояние нулями
  • Передайте вход и первое скрытое состояние через слой RNN
  • Выберите последний выход RNN и передайте его через линейный слой
Глубокое обучение на PyTorch: средний уровень

Давайте потренируемся!

Глубокое обучение на PyTorch: средний уровень

Preparing Video For Download...