# 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.