Sieci neuronowe: Projekt 2020/21

Table of Contents

1. Informacje ogólne

Wszystkie projektu realizowane z zespołach dwuosobowych.

60 punktów do uzyskania za część projektową. W trakcie semestru realizujemy trzy projekty. Żeby zaliczyć zajęcia projektowe potrzeba:

  • min. 31 punktów w sumie w trzech projektów,
  • co najmniej 50% punktów z każdego projektu biorąc pod uwagę wyniki przed naliczeniem kary za spóźnienie (w przypadku pierwszego projektu liczymy sumę za pierwszą i druga część),
  • projekty oddane później niż tydzień po zakończeniu zajęć, nie będą sprawdzane.

Każdy projekt polega na wykonaniu eksperymentu (eksperymentów) mających zbadać działanie zadanej sieci neuronowej i zaprezentowanie przeprowadzonych eksperymentów i wniosków w formie raportu. Wykonanie samego programu, bez raportu, nie wystarcza do zaliczenia. Jeśli zostały przeprowadzone jakieś eksperymenty lub inne działania, które nie są opisane w raporcie, nie są one brane pod uwagę przy ocenie projektu. Każdy raport musi zawierać:

  • opis rozwiązywanego problemu, zrozumiały dla osoby, która nie widziała treści zadania,
  • opis zastosowanej sieci i jej implementacji,
  • opis przeprowadzonych eksperymentów,
  • wyniki (prezentowane w czytelny sposób) i wnioski,
  • raporty powinny też zawierać odniesienia do bibliografii podpierające opisywane własności (staramy się nie pisać, że zjawisko X jest powszechnie znanym faktem występującym przy stosowaniu sieci Y, a wskazujemy pozycję z literatury, która zawiera analizę tego zjawiska i/lub jego wyjaśnienie).

Dodatkowo wyniki i wnioski z trzeciego projektu trzeba przedstawić w formie 10-minutowej prezentacji na ostatnich zajęciach.

Raport w formie typowej dla dokumentów opisujących badania naukowe, musi zawierać:

  • streszczenie,
  • wstęp,
  • główną część,
  • podsumowanie i wnioski,
  • bibliografię. Odnośniki do pozycji w bibliografii muszą się pojawić w tekście raportu. Nie wpisujemy pozycji wiszących, do których nie ma odnośników.

1.1. Oddawanie etapów i opóźnienia

Na oddaniu musi być obecny cały zespół.

W terminie należy oddać (daty w harmonogramie):

  • pierwszą część pierwszego projektu (raport i program),
  • drugą część pierwszego projektu (rozszerzony poprzedni raport lub załącznik do raportu),
  • drugi projekt (raport i program),
  • konspekt trzeciego projektu (konspekt w formie pisemnej),
  • trzeci projekt (raport, prezentacja, program).

Oddawanie pierwszego, drugiego i trzeciego projektu to prezentacja programu i raportu prowadzącemu i sprawdzenie raportu po zajęciach. Dodatkowo ocenianym elementem trzeciego projektu jest konspekt (na początku) i prezentacja (na końcu)

Za opóźnienie o tydzień któregokolwiek z elementów, oprócz oddania trzeciego projektu: -5 punktów. Opóźnienie o tydzień oddania trzeciego projektu -10 punktów.

1.2. Harmonogram 2021/22

  1. [2021-10-05 wto] Zajęcia wprowadzające, wyjaśnienie pierwszego projektu
  2. [2021-10-12 wto] Konsultacje
  3. [2021-10-26 wto] Wstępne oddanie pierwszego projektu
  4. [2021-11-02 wto] Oddanie pierwszej części pierwszego projektu
  5. [2021-11-09 wto] Oddanie drugiej części pierwszego projektu, wyjaśnienie drugiego projektu
  6. [2021-11-16 wto] Konsultacje
  7. [2021-11-23 wto] Wstępne oddanie drugiego projektu
  8. [2021-11-30 wto] Oddanie drugiego projektu, wyjaśnienie trzeciego projektu
  9. [2021-12-07 wto] Wstępny konspekt trzeciego projektu
  10. [2021-12-14 wto] Konspekt trzeciego projektu
  11. [2022-01-04 wto] Konsultacje
  12. [2022-01-11 wto] Wstępna implementacja
  13. [2022-01-18 wto] Wstępne wyniki
  14. [2022-01-25 wto] Wstępne oddanie programu i raportu
  15. [2022-02-01 wto] Oddanie ostatecznej wersji programu i raportu, prezentacje

1.3. Powtarzalność eksperymentów

Planując eksperymenty i opisując wyniki należy pamiętać, że proces nauki sieci nie jest w 100% powtarzalny. Często rozpoczynamy uczenie od losowej inicjacji wag. W zależności od wyniku tego losowania końcowy efekt może być różny. Oczywiście dobrze działająca metoda uczenia powinna dawać zbliżone rezultaty, niezależnie od wag początkowych (tak długo jak początkowe wagi są wybierane z rozsądnego rozkładu).

Należy zaadresować ten problem, na przykład przez przeprowadzenie uczenia dla wielu różnych układów startowych i sprawdzenie powtarzalności wyników.

2. Projekt 1: klasyfikacja i regresja z użyciem perceptronu (20 punktów)

2.1. Część pierwsza (15 punktów)

Przez pierwsze trzy tygodnie należy zbudować program pozwalający rozwiązywać zadanie klasyfikacji i regresji z użyciem perceptronu wielowarstwowego i wizualizujący jego działanie, w tym uczenie sieci z użyciem algorytmu propagacji wstecznej błędu. Wymagana jest również wizualizacja wyników uczenia sieci dla problemu regresji dla funkcji \(\mathbb{R} \rightarrow \mathbb{R}\) i problemu klasyfikacji wektorów w \(\mathbb{R}^2\).

2.1.1. Zbiory danych

  • na pierwszych zajęciach będzie zestaw zbiorów danych na których należy przeprowadzić eksperymenty badające skuteczność działania sieci,
  • w tygodniu, kiedy następuje ostateczne oddanie będzie trzeba zademonstrować działanie programu na innych, nie udostępnionych wcześniej zbiorach danych.

2.1.2. Uwagi do implementacji

Implementację należy wykonać na poziomie podstawowym, tak aby kod pokazywał zrozumienie zasad działania i uczenia sieci, nie można korzystać z bibliotek implementujących sieci neuronowe.

2.1.3. Elementy do zaimplementowania

  • możliwość zainicjowania (powtarzalnego) procesu uczenia z zadanym ziarnem generatora liczb losowych
  • łatwa konfiguracja liczby warstw w sieci i neuronów w warstwie, obecności biasów (w dniu oddania będzie trzeba szybko dostosować architekturę sieci)
  • wizualizacja zbioru uczącego i efektów klasyfikacji oraz regresji
  • wizualizacja błędu propagowanego w kolejnych iteracjach uczenia (na każdej z wag)
  • wizualizacja wartości wag w kolejnych iteracjach uczenia

2.1.4. Elementy do zbadania

  • Wpływ funkcji aktywacji na skuteczność działania sieci – sprawdzić funkcję sigmoidalną i dwie inne, dowolne, funkcje aktywacji wewnątrz sieci. Uwaga: funkcja aktywacji na wyjściu musi być dobrana odpowiednio do rodzaju problemu.
  • Wpływ liczby warstw ukrytych w sieci i ich liczności. Zbadać różne liczby warstw od 0 do 4, kilka różnych architektur
  • Wpływ miary błędu na wyjściu sieci na skuteczność uczenia. Sprawdzić dwie miary błędu dla klasyfikacji i dwie dla regresji.

Wyniki i wnioski koniecznie opisać w raporcie z projektu.

2.2. Część druga (5 punków)

Z użyciem implementacji wytworzonej w części pierwszej, modyfikując jedynie parametry sieci (liczbę warstw, neuronów, funkcję aktywacji, itp.), ale nie rozszerzając implementacji o nowe funkcjonalności, nauczyć sieć rozpoznawać cyfry ze zbioru MNIST. Można modyfikować kod programu w celu zoptymalizowania go. Techniką, która na pewno poprawi wydajność będzie odejście od obiektowej reprezentacji neuronów na rzecz tablic wartości w każdej z warstw.

Ocena z tego etapu zależy od skuteczności sieci na zbiorze testowym:

Punkty wynik >=
5 97%
4 94%
3 90%
2 80%
1 65%
0 0%

Zbiór MNIST jest dostępny tutaj: http://yann.lecun.com/exdb/mnist/ W procesie uczenia sieci korzystamy JEDYNIE ze zbioru oznaczonego jako uczący, a zbiór testowy wykorzystujemy tylko do oceny jakości już nauczonej sieci.

Sieć zgłoszona do oceny wyników musi umożliwiać powtórzenie procesu uczenia. To oznacza, że trzeba dostarczyć wszelkie konieczne parametry programu do powtórzenia uczenia. Jeśli uczenie korzysta z generatora liczb pseudolosowych, należy również dostarczyć ziarno generatora, żeby można było powtórzyć proces uczenia dokładnie.

Uwaga. Uczenie na dużym zbiorze zajmuje odpowiednio dużo czasu. W ramach wstępnych eksperymentów można wybrać jakiś podzbiór danych uczących i uczyć tylko na nich, a dopiero po wstępnym rozpoznaniu robić pełne uczenie.

3. Drugi projekt: pamięć skojarzeniowa z użyciem sieci Hopfielda (10 punktów)

Temat będzie wyjaśniony i omówiony na zajęciach, na których oddawane są raporty z drugiej części pierwszego projektu.

Zaimplementować pamięć skojarzeniową z użyciem sieci Hopfielda uczonej dwiema metodami: regułą Hebba i regułą Oji (imię nazwisko w mianowniku: Erkki Oja).

Sieć powinna pozwalać na łatwą konfigurację liczby neuronów i udostępniać wizualizację bieżącego stanu w formie prostokątnej bitmapy. Wizualizacja powinna pozwalać na obejrzenie kolejnych kroków zbiegania sieci do stanu stabilnego. Zaimplementować dwa warianty symulacji: synchroniczny i asynchroniczny.

Zagadnienia do sprawdzenia:

  • skuteczność każdej z reguł uczenia i jej wpływ na liczbę stabilnych wzorców uczących,
  • na początku projektu zostanie udostępniony zbór wzorców. Których spośród dostarczonych zbiorów sieć uczy się poprawnie, a których nie? W których przypadkach wzorce uczące nie są stanami stabilnymi i dlaczego? [Uzasadnienie w raporcie odnieść do istniejących prac na temat sieci Hopfielda].
  • pośród zbiorów są dwa, które zawierają prawie identyczne wzory (jeden w wersji 25×25 i drugi w wersji 25×50). Dlaczego skuteczność odzyskiwania różni się znacząco na tych zbiorach?
  • jaka jest skuteczność odzyskiwania oryginałów z uszkodzonego wejścia w zależności od liczności i rodzaju zbioru?
  • porównać skuteczność na zbiorze, w którym są grupy elementów dość podobnych i takim, który jest całkiem zróżnicowany gdy zbiory są o podobnej liczności?
  • jak nauczona sieć reaguje na podanie losowego wejścia?
  • zaproponować zbiór wektorów o długości 25 (5×5), możliwie liczny, taki, żeby w nauczonej sieci wszystkie wzorce z tego zbioru były stabilne.
  • zaproponować zbiór uczący i wzorzec wejściowy, którego podanie do sieci zakończy się oscylacją między dwoma stanami.
  • przeprowadzić eksperyment dla zbioru złożonego z dużych bitmap (co najmniej 200x300), na przykład odpowiednio skonwertowanych zdjęć kotów.

Uwaga! Raport, poza informacjami jak działają reguły uczenia, powinien zawierać też wyjaśnienie dlaczego te metody uczenia działają.

4. Trzeci projekt: przewidywanie pogody na podstawie danych historycznych (30 punktów)

Projekt należy zrealizować z użyciem sieci MLP, stosując do niej metody uczenia bazujące na SGD/propagacji wstecznej błędu. Nie można stosować algorytmów typowych dla uczenia głębokiego. Nie można używać gotowych funkcji składających wielowarstwową sieć. Można wykorzystywać metody uczenia (metody optymalizacji wag) zaimplementowane w bibliotekach, jednak w raporcie należy szczegółowo opisać użyte metody. Brak opisu metod uczenia w raporcie oznacza niezaliczenie projektu.

Dostarczony jest (będzie w dniu startu projektu) zbiór danych pogodowych zbudowany na bazie zbioru https://www.kaggle.com/selfishgene/historical-hourly-weather-data. Zbiór ten zawiera obserwacje pogodowe dla kilkudziesięciu miast. Należy zbudować rozwiązanie, które z użyciem sieci neuronowych będzie na podstawie trzech poprzednich dni przewidywać dla dnia jutrzejszego (nie dzisiejszego):

  • średnią dzienną temperaturę – przyjmujemy że temperatura jest dobrze przewidziana, jeśli błąd bezwzględny nie przekracza 2 stopni (to intuicyjnie oznacza, że bardziej zależy nam na tym, żeby większość punktów miała predykcje w miarę dokładne wartości predykcji, niż na tym, żeby część miała superdokładne predykcje, a część beznadziejne),
  • czy będzie dość silny wiatr; przyjmujemy że dość silny wiatr, to wystąpienie przynajmniej jednego punktu pomiarowego w danym dniu, gdzie szybkość wiatru była \(\geq 6\frac{m}{s}\).

Okno przewidywania. Należy przewidywać dane dla dnia jutrzejszego, a nie dzisiejszego, to znaczy rozważamy pięciodniowe (zachodzące na siebie) okna, każdy znak symbolizuje jeden dzień IIIXO, trzy litery I oznaczają trzy dni z których pochodzą wejścia do modelu, X – dzień nieuwzględniany, a O to dzień, dla którego należy zrobić predykcję.

Skuteczność przewidywania dość silnego wiatru na zbiorze testowym należy zmierzyć metryką AUC.

W przygotowanym konspekcie należy postawić hipotezy badawcze, uwzględniając następujące obszary:

  • różne kodowanie dla danych wejściowych i wyjściowych,
  • różne miary błędu wykorzystywane do uczenia sieci,
  • różne architektury sieci. Można rozważyć niepełne połączenia i/lub uwspólnianie wag w różnych kawałkach sieci,
  • różne funkcje aktywacji,
  • agregacja danych wejściowych,
  • wykorzystanie predykcji dla dnia pośredniego (pominiętego) jako wejścia do predykcji dla dnia jutrzejszego.

Celem jest otrzymanie jak najlepszej predykcji na dostarczonych zbiorach testowych. Oceniany jest jednak głównie przeprowadzony proces badawczy i jego prezentacja w raporcie i w ramach ustnej prezentacji na ostatnich zajęciach.

4.1. Ramowe wymagania na poszczególne daty z harmonogramu

4.1.1. Konspekt

  • opis problemu i hipotez badawczych
  • wstępny plan eksperymentów i sposób weryfikacji hipotez, w szczególności planowane dane uczące i testowe oraz sposób obróbki statystycznej wyników
  • harmonogram działań
  • planowana architektura programu, użyte biblioteki, inne aspekty techniczne, w tym formaty danych i możliwość sprawnego uruchomienia eksperymentów na większą skalę
  • jaka sieć lub sieci zostaną zastosowane do rozwiązania problemu; czy będzie to pojedyncza sieć;
  • opis sposobu przygotowania programu i prowadzenia eksperymentów zapewniający powtarzalność wyników, w tym sposoby skojarzenia wyników eksperymentów, z elementami takimi jak:
    • wersją programu użytą do ich uzyskania
    • zbiorem uczącym/danymi wejściowymi (w tym ew. podziałem zbioru na walidacyjny, testowy, uczący)
    • użytym ziarnem generatora liczb losowych.

4.1.2. Wstępna implementacja

Implementacja sieci, uczenie i sieć musi działać przynajmniej dla wybranego, przykładowego zbioru danych.

4.1.3. Częściowe wyniki

Policzone i obrobione wyniki na części założonych zbiorów danych.

4.1.4. Oddanie i prezentacja

Oddanie raportów oraz około 10-minutowa prezentacja podsumowująca działania, przedstawiająca wyniki i wnioski.

Created: 2021-11-30 wto 08:57