"Zadania z sieci neuronowych"
Transkrypt
"Zadania z sieci neuronowych"
Zestaw zada«
Wstęp do sieci neuronowych, 2015/2016
Andrzej Rutkowski, Krzysztof Rykaczewski
1
1.1
Zadania
Grupa zadań: PERCEPTRONY – można wybrać maks. 2 zadania
Zadanie 1. Napisz program, który wykorzystuje 10 perceptronów do rozpoznawania cyfr. Każdy perceptron
powinien uczyć się tylko jednej cyfry. Cyfry powinny być wyświetlane jako układy pikseli na matrycy o niewielkich wymiarach (np. 5 × 7). Program dodatkowo powinien mieć możliwość “wyklikania” cyfry (lub czegoś
cyfro-podobnego) i automatycznej klasyfikacji. Wejścia uczące należy zaburzać (tj. odwracać piksel z niewielkim
prawdopodobieństwem niezależnie dla danego piksela). W ten sposób program uzyska częściową odporność na
szumy.
Do uczenia można podać różne warianty każdej cyfry, np. różne sposoby zapisu, przesunięcia etc.
Pomysły na rozbudowanie programu:
• dodać więcej perceptronów, tak żeby można było rozpoznawać litery.
Warstwa
wejściowa
Perceptrony
Wyjście
Zadanie 2. Dla obrazków czarno-białych zaimplementuj autoasocjator graficzny, tj. układ, który jest w stanie nauczyć się obrazków lub usunąć szumy, jeśli takowe pojawią się na wejściu. Układ ten powinien składać
się z maszyn liniowych (lub perceptronów), z których każda uczy się wynikowej wartości jednego piksela. Po
treningu program wykonuje:
• na wejściu pobiera obraz zaszumiony (wszystkie piksele są wejściami do poszczególnych maszyn liniowych/perceptronów);
• na wyjściu zwraca obraz odszumiony (wyjścia wszystkich maszyn liniowych/perceptronów jako macierz
pikseli).
W celu sprawdzenia stabilności rozwiązania należy następnie wyjście programu podać jako wejście do następnego kroku odszumienia (w tym celu należy odpowiednio zaprojektować architekturę programu graficznego).
Obrazki muszą mieć rozmiar minimum 40 na 40 pikseli. Program powinien mieć możliwość pobrania obrazka
z pliku i nałożenia na niego szumu (ręcznie i/lub automatycznie).
Pomysły na rozbudowanie programu:
• zamiast maszyn liniowych można użyć perceptrony (wersja z kieszonką lub zapadką);
1
Wstęp do sieci neuronowych, 2015/2016
Andrzej Rutkowski, Krzysztof Rykaczewski
Zestaw zada«
• w przypadku maszyn liniowych można zrobić wersję wielokolorową (np. zamiast kategorii {czarny,biały},
zbiór {czarny,biały,czerwony,zielony}).
1.2
Grupa zadań: ADALINE – można wybrać od 0 do 1 zadań
Zadanie 3. Napisz program, który wykorzystuje 10 perceptronów Adaline do rozpoznawania cyfr. Każdy perceptron powinien uczyć się tylko jednej cyfry. Cyfry powinny być wyświetlane jako układy pikseli na matrycy
o niewielkich wymiarach (np. 5 × 5). Program, poza własnościami jak w zadaniu 1, powinien być odporny na
przesunięcia poprzez zastosowanie dyskretnej transformaty Fouriera. Wartości transformaty są traktowane jako
dodatkowe wejścia do perceptronu. Każda cyfra powinna być podana tylko w jednym wariancie, tzn. bez przesunięć. Rozwiązanie powinno być też wzbogacone o wykres przedstawiający jak zmieniała się wartość funkcji
błędu w trakcie uczenia.
1.3
Grupa zadań: wsteczna propagacja błędu – trzeba wybrać dokładnie jedno zadanie
Zadanie 4. Napisz program, który będzie kierował “ręką robota”. Dokładniej, zakładamy że ramie składa się
z dwóch odcinków i jest na stałe umocowane w jednym punkcie (punkcie obrotu ramienia), który jest wolnym
końcem jednego z odcinków. Program ma implementować algorytm wstecznej propagacji błędów, gdzie wejściem
jest punkt (x, y), a wyjściem kąty (α, β), α ∈ (0, π), β ∈ (0, π), oznaczające ułożenie ramienia.
Zadanie 5. Napisz autoasocjator graficzny, który uczy się obrazu RGB za pomocą wstecznej propagacji błędów.
Wejściem sieci ma być punkt (x, y) na rysunku, a wyjściem trójka (r, g, b) oznaczająca kolor obrazka w (x, y).
W celu osiągnięcia dobrych rezultatów jako dodatkowe wejście do programu należy użyć pozycje (x, y) przekształcone przez transformacje trygonometryczne (np. sin(X), cos(X), sin(2X), cos(2X), sin(3X), cos(3X) etc.,
2
Wstęp do sieci neuronowych, 2015/2016
Andrzej Rutkowski, Krzysztof Rykaczewski
Zestaw zada«
gdzie X to (x, y)).
Tak samo jak zadanie 4, istnieje możliwość rozbudowania rozwiązania o wersję na GPU.
Zadanie 6. Napisać program, który nauczy sieć wielowarstwową grać w grę Pong. Na wejściu sieć dostanie
pozycję piłki i paletek (gracza i oponenta), a na wyjściu zwróci informację o tym, w które miejsce paletka gracza
powinna się przesunąć. Sieć ma być nauczona za pomocą wstecznej propagacji błędów. Poza implementacją
algorytmu uczenia, problemem jest wygenerowanie przykładów uczących. W najprostszym przypadku mogą być
generowane na podstawie zachowania prostego algorytmu grającego w ponga (jeżeli piłka po lewej to przesuń się
w lewo, itp.). Ciekawym rozwinięciem będzie pobieranie przykładów uczących z ruchów ludzkiego oponenta —
sieć może się uczyć w trakcie gry od człowieka (z ruchów, w których udało mu się odbić piłeczkę). Pomysły na
rozbudowanie programu:
• sieć steruje dwoma paletkami. Na początku program podejmuje losowe decyzje. Kiedy programowi uda się
odbić piłeczkę, używa decyzji, która mu na to pozwoliła jako przykładu uczącego.
• użyte są dwie sieci o różnej liczbie warstw ukrytych i neuronów w sieci. Konkurują między sobą o zwycięstwo. Każda z sieci uczy się na podstawie swoich sukcesów i sukcesów przeciwnika.
Zadanie 7. Napisać program rozpoznający cyfry pisane ręcznie z bazy MNIST (dostępnej w sieci) korzystając
z wstecznej propagacji błędów. Jako dodatkowe wejście można wziąć dyskretną transformatę Fouriera.
Zadanie 8. Na wejściu mamy odczyt siły sygnału z 16 nadajników radiowych. Chcemy uzyskać na wyjściu
pozycję X, Y odbiornika. Dane treningowe są w formacie csv (liczby zmiennoprzecinkowe, oddzielone przecinkami): radio_train.zip. Dane treningowe należy podzielić na zbiór używany podczas uczenia i rozłączny zbiór do
walidacji.
1.4
Grupa zadań: algorytm Kohonena – można wybrać maks. 1 zadanie
Zadanie 9. Zaimplementuj algorytm Kohonena, który rozkłada sieć na powierzchni sfery w 3D lub na obszarach
2D określonych przez użytkownika.
https://en.wikipedia.org/wiki/File:Somtraining.svg | https://en.wikipedia.org/wiki/File:SOMsPCA.PNG
Zadanie 10. Napisz program znajdujący optymalną paletę kolorów dla obrazków RGB. Program ma wykorzystywać algorytm kohonena. Liczba kolorów docelowanych powinna być określana przez użytkownika. Po
3
Wstęp do sieci neuronowych, 2015/2016
Andrzej Rutkowski, Krzysztof Rykaczewski
Zestaw zada«
znalezieniu palety kolorów należy zmapować kolory w obrazku wejściowym na te najbliższych sąsiadów w palecie i wyświetlić tak otrzymany obraz.
http://www.slideshare.net/kzagoris/color-reduction-using-the-combination-of-the-kohonen-self-organized-feature-map-and-the-gustafsonkessel-fuzzy-algorithm
1.5
Grupa zadań: PCA
Zadanie 11. Wykorzystać regułę Oji do znalezienia kilku pierwszych składowych głównych (minimum 5) dla
zestawu zdjęć twarzy (minimum 20). Następnie zaprezentować rzuty tych zdjęć na podprzestrzeń wyznaczoną
przez znalezione składowe główne. Zdjęcia twarzy powinny być tak wykonane by oczy, nos i usta były na wszystkich zdjęciach w przybliżeniu w tych samych miejscach. Minimalna rozdzielczość zdjęć to 30x50.
Zobacz https://www.youtube.com/watch?v=5nBL_u4MF0k oraz https://www.youtube.
com/watch?v=_lY74pXWlS8; słowo kluczowe: Eigenfaces.
1.6
Grupa zadań: sieci Hopfielda – można wybrać maks. 1 zadanie
Zadanie 12. Napisać autoasocjator Hopfielda, który uczy się kilku obrazków binarnych w rozmiarze minimum
40 × 40 i potrafi odszumić zaszumione obrazy używając dynamiki Glaubera. Obrazki mają być wczytywane z
pliku. Implementacja ma wyliczać wagi sieci Hopfielda na bieżąco (wagi nie powinny być przechowywane w
pamięci).
Zadanie 13. Napisać implementację sieci Hopfielda z dynamiką Glaubera i wykorzystać ją do rozwiązania jednego z czterech problemów optymalizacji grafowej: dwupodziału grafu, kolorowania wierzchołkowego, wyszukiwania cyklu Hamiltona lub przydziału zadań. Zob. wykład: Wykorzystanie sieci rekurencyjnych w optymalizacji
grafowej.
4