---
# System prepended metadata

title: R-Transformer - dokumentacja wstępna

---

# R-Transformer - dokumentacja wstępna

## Skład zespołu

* Kamil Przybyła (300254)
* Urszula Tworzydło (295809)

## Opis zadania

Celem zadania jest implementacja i porównanie działania trzech różnych modeli realizujących zadanie modelowania języka. Modelami tymi są: R-Transformer oraz dwie rekurencyjne sieci składające się z komórek typu GRU oraz LSTM. 

## Zbiór danych

Każdy z modeli wytrenowany zostanie na zadanym zbiorze danych *Penn Treebank*, składającym się z 49208 zdań i 1173766 tokenów, z których 10 000 to unikalne słowa.

Zbiór danych podzielony został na dane treningowe (ok. 85%), walidacyjne (ok. 7%) oraz testowe (ok. 8%). Składa się ze znormalizowanych zdań (nie posiadających znaków interpunkcyjnych oraz wielkich liter), oddzielonych znakiem nowej linii. Każdy z tokenów oddzielony jest spacją. Wszystkie liczby zostałe zamienione na znak "N", a tokeny nienależące do słownika (OOV) oznaczone są za pomocą "\<unk\>".

## Opis architektur

Każda z sieci składać się będzie z warstwy embeddingu, przypisującej wybranemu słowu wektor o określonym rozmiarze. Pozostała część architektury zależna jest od przyjętego modelu.

### RNN (GRU/LSTM)

Zaimplementowane zostaną dwie sieci rekurencyjne, w których skład będą wchodzić sieci zawierające komórki typu GRU lub LSTM. 

Sieć rekurencyjna zostanie zastosowana jako model, który umożliwia dokonywanie predykcji także na podstawie predykcji uzyskanej dla danych przetworzonych w poprzedniej iteracji, a co za tym idzie jest odpowiednią architekturą dla przetwarzania sekwencyjnych danych (takich jak np. zapisane zdania).

Po warstwie embeddingu sieć zawierać będzie określoną liczbę warstw (ich liczba zostanie uwzględniona w przeprowadzanych eksperymentach) komórek LSTM lub GRU. Po tychże warstwach będą warstwy jednokierunkowej sieci neuronowej: warstwa dropout, liniowa oraz sigmoidalna funkcja aktywacji.

W odróżnieniu od neuronów występujących w podstawowej wersji sieci rekurencyjnej, komórki GRU oraz LSTM, składają się z tak zwanych bramek, pełniących określone funkcję i wykonują bardziej złożone obliczenia. Dzięki bardziej złożonej konstrukcji są bardziej odporne na problem zanikającego gradientu.


### R-Transformer

R-Transformer jest modelem łączącym cechy rekurencyjnej sieci neuronowej oraz Transformera. Składa się on z sieci rekurencyjnej działającej na małym oknie, której zadaniem jest modelowania lokalnych zależności danych w sekwencji. Zastępuje ona kodowanie pozycyjne, występujące w Transformerach. Dalsza część tej architektury wykorzystuje mechanizm atencji oraz warstwę liniową. Między każdą z warstw występują połączenia rezydualne oraz normalizacja.

![rtransformer](https://i.imgur.com/vzSOR6L.png)
*źródło: R-Transformer: Recurrent Neural Network Enhanced Transformer (Wang et al.)*

## Założenia projektowe

Projekt zrealizowany zostanie przy użyciu języka Python 3.8 oraz biblioteki PyTorch (która udostępnia między innymi moduł LSTM, GRU, a także Multi Head Attention). Język modelowany będzie na poziomie pojedynczych słów (tokenów) -- trenowane modele będą miały za zadanie przewidzieć słowo następujące po wejściowej sekwencji słów o stałej długości.

Jako funkcję błędu zostanie przyjęta entropia krzyżowa.


## Planowane eksperymenty

W celu zbadania działania implementowanych architektur, planowane jest przeprowadzenie następujących eksperymentów:

* zbadanie wpływu szerokości okna, w modelu R-Transformer, na skuteczność działania sieci,
* sprawdzenie różnych wymiarów wektora reprezentującego słowo (embedding) na działanie modeli,
* porównanie sprawności działania architektur dla różnej liczby warstw (w szczególności: liczby warstw komórek GRU oraz LSTM),
* zbadanie wpływu długości sekwencji słów na jakość przewidywań modelu,
* porównanie wyników osiąganych przez zaimplementowane modele.