====== Sztuczne Sieci Neuronowe ======
W semestrze letnim 2021/22 wykład odbywa w poniedziałki o godz. 11:30-13:00 w sali PK6. \\
W razie przejścia na zdalne nauczanie wykład odbędzie się za pośrednictwem platformy Moodle. \\
Adres kursu w Moodle: https://moodle.umk.pl/WFAIIS/course/view.php?id=41
===== Zaliczenie wykładu ====
Zaliczenie wykładu się na podstawie egzaminu oraz dwóch projektów zaliczeniowych.
Wynik egzaminu to 50% oceny końcowej, każdy z projektów to 25% do oceny.
Projekt składa się z aplikacji oraz raportu zawierającego opis zastosowanej metody , opis aplikacji (funkcjonalności, wymagania dotyczące instalacji i uruchamiania aplikacji), opis symulacji i rezultatów działania aplikacji z przykładami. \\ Pierwszy projekt to samodzielna implementacja od podstaw wybranej sieci neuronowej, np. demonstracja działania wybranego algorytmu z wykładu (np. MLP, SOM). \\
Drugi projekt wymaga użycia oprogramowania lub frameworku umożliwiającego trening głębokich sieci neuronowych (np. TensorFlow, Keras) do realizacji bardziej ambitnego zadania (np. rozpoznawanie twarzy, generowanie muzyki, detekcja obiektów na obrazach, itp.).
===== Wykład =====
{{zajecia:nn_2022_1:nn-wyklad.pdf|Sztuczne sieci neuronowe}} - slajdy ze wszystkich wykładów w jednym pliku.\\
Uwaga: plik jest aktualizowany w miarę postępu wykładu.
- {{zajecia:nn_2022_1:01-intro.pdf|Wstęp: podstawowe pojęcia i wprowadzenie do tematu sieci neuronowych}}
* CI, AI, ML, NN, DL - definicje, uporządkowanie pojęć
* rys historyczny;
* rodzaje uczenia: uczenie nadzorowane, nienadzorowane i uczenie z krytykiem
* ogólnie o procesie uczenia sieci: architektura + funkcja kosztu + alg. uczenia + ocena jakości sieci
* ogólne własności modeli neuronowych
* Biologiczny model neuronu i inspiracje biologiczne
* Model neuronu McCulloch-Pitts'a
* Rodzaje sieci: jednokierunkowe, rekurencyjne, dynamiczne, konwolucyjne, ...
- {{zajecia:nn_2022_1:02-perceptrony.pdf|Perceptrony i reguły uczenia}}
* Perceptron Rosenblatta
* Reguły uczenia: reguła perceptronowa, Widrowa-Hoffa, reguła delta
* Algorytm uczenia perceptronu, algorytm kieszonkowy, algortym kieszonkowy z zapadką
* Klasyfikacja binarna wzorców za pomocą perceptronu, separacja liniowa, problem XOR
* Funkcje aktywacji: binarna, liniowa, sigmoidalna, tanh, ReLU
* Sieć wieżowa, sieć piramidalna
* Uczenie metodą największego spadku gradientu
* Klasyfikacja wieloklasowa, Adeline, maszyna liniowa
* Do poczytania:
* [[http://cs231n.github.io/neural-networks-1/|Neural Networks Part 1: Setting up the Architecture]], [[http://cs231n.github.io/linear-classify/|Linear Classification]] - Andrej Karpathy notes
* [[https://sebastianraschka.com/faq/docs/diff-perceptron-adaline-neuralnet.html|What is the difference between a Perceptron, Adaline, and neural network model?]] Machine Learning FAQ
* [[http://neuralnetworksanddeeplearning.com/chap1.html|Using neural nets to recognize handwritten digits]] - Michael Nielsen, Neural Networks and Deep Learning
* [[https://the-learning-machine.com/article/ml/perceptron|Rosenblatt's perceptron algorithm]] - demonstracja on-line
- {{zajecia:nn_2022_1:03-mlp.pdf|Sieci wielowarstwowe jednokierunkowe MLP}}
* budowa i działanie sieci wielowarstwowej
* algorytm wstecznej propagacji błędu, uogólniona reguła delta
* własności wielowarstwowych perceptronów
* funkcje kosztu MSE i Cross Entropy
* softmax w wyjściu sieci
* dobór architektury i funkcji kosztu do typowych zadań
* Dodatkowe materiały:
* [[https://playground.tensorflow.org/|TensorFlow PLayground]]
* [[https://cs.stanford.edu/people/karpathy/convnetjs/|ConvNetJS - Deep Learning in your browser]]
* [[https://eli.thegreenplace.net/2016/the-softmax-function-and-its-derivative/|The Softmax function and its derivative]] Eli Bendersky's website
- {{zajecia:nn_2022_1:04-mlp2.pdf|Ulepszenia wstecznej propagacji błędów}}
* powierzchnie błędu, minima lokalne i globalne
* dobór współczynnika uczenia, uczenie z momentem, wielokrotny start
* inicjaliacja wag sieci, przygotowanie danych treningowych
* algorytmy optymalizacji: Quickprop, RPROP, metoda Newtona, algorytm Levenberg-Marquardta, gradientów sprzężonych
* Dodatkowe materiały:
* [[https://www.neuraldesigner.com/blog/5_algorithms_to_train_a_neural_network|5 algorithms to train a neural network]] by Alberto Quesada, Artelnics.
* [[http://neuralnetworksanddeeplearning.com/chap3.html#variations_on_stochastic_gradient_descent|Variations on stochastic gradient descent]]
* [[http://neuralnetworksanddeeplearning.com/chap3.html#weight_initialization|Weight initialization]]
- {{zajecia:nn_2022_1:05-mlp3.pdf|Generalizacja i regularuzacja treningu MLP}}
* Generalizacja, ewaluacja treningu, przeuczenie i niedouczenie modelu
* Zbiór walidacyjny i metoda wczesnego zatrzymania
* Dobór liczby neuronów sieci
* Regularyzacja L2, L1
* Upraszczanie sieci (pruning): metody wrażliwościowe redukcji, Optimal Brain Damage
* Sieci rozrastające się: korelacja kaskadowa
* Regularyzacja poprzez modyfikację danych treningowych
* Dodatkowe materiały:
* [[http://neuralnetworksanddeeplearning.com/chap3.html#overfitting_and_regularization|Overfitting and regularization]]
* [[https://playground.tensorflow.org/|Tensorflow Playground]] demo MLP z regularyzacją L1 i L2
- {{zajecia:nn_2022_1:06-rbf.pdf|Radialne Funkcje Bazowe}}
* relacje lokalne vs. nie-lokalne
* Radialne funkcje bazowe
* Teoria RBF, aproksymacja i klasyfikacja RBF
* Reularyzacja RBF
* Inicjalizacja i adaptacja centrów i rozmyć funkcji radialnych
* Rozrastające się sieci RBF
* Dodatkowe materiały:
* {{http://mccormickml.com/2013/08/15/radial-basis-function-network-rbfn-tutorial/|Radial Basis Function Network (RBFN) Tutorial}} by Chris McCormick
* {{http://mccormickml.com/2015/08/26/rbfn-tutorial-part-ii-function-approximation/|RBFN Tutorial Part II - Function Approximation}} by Chris McCormick
- {{zajecia:nn_2022_1:07-som.pdf|Samoorganizacja - uczenie konkurencyjne}}
* Uczenie konkurencyjne, WTA, reguła Kohonenea
* Kwantowanie wektorowe
* Samoorganizujące się odwzorowanie topologiczne Kohonena
* Gaz Neuronowy
* Growing Cell Structures, Growong Neural Gas
* Przykłady zastosowań i wizualizacji
* Samoorganizacja i mapy ekwiprobabilistyczne
* Mapy samoorgnizujące SOM
* Dodatkowe materiały:
* {{https://www.demogng.de/JavaPaper/t.html|Some Competitive Learning Methods}} by Bernd Fritzke
* {{https://www.demogng.de/|DemoGNG.js}} by Dr. Bernd Fritzke
* {{https://www.cs.hmc.edu/~kpang/nn/som.html|Self-organizing Maps}} Kevin Pang
* {{http://www.gamasutra.com/view/feature/131499/image_compression_with_vector_.php|Image Compression with Vector Quantization}} by Ivan-Assen Ivanov
- {{zajecia:nn_2022_1:08-hebb.pdf|Samoorganizacja - uczenie hebowskie}}
* SOM i MDS, odwzorowanie Sammona
* reguła Hebba
* reguła Oji
* PCA
* Uogólniony algorytm hebbowski
* Uczenie anty-hebbowskie
* APEX
* Dodatkowe materiały:
* {{http://fourier.eng.hmc.edu/e161/lectures/nn/node4.html|Hebb's Learning}} - Ruye Wang
* {{http://downloads.hindawi.com/archive/2012/847305.pdf|Neural Network Implementations for PCA and Its Extensions}} - by Qiu, Wang, Lu, Zhang and Du
* {{https://fizyka.umk.pl/publications/kmk/96-sommds.pdf|Multidimensional scaling and Kohonen's self-organizing maps}} by Duch and Naud (1996)
- {{zajecia:nn_2022_1:09-hopfield.pdf|Sieci dynamiczne i pamięci asocjacyjne}}
* Sieci ze sprzężeniami zwrotnymi
* Model Hopfielda
* Zastosowania w modelowaniu pamięci autoasocjacyjnej i optymalizacji
* Pamięć heteroasocjacyjna: sieć Hamminga, BAM
* Dodatkowe materiały:
* {{https://page.mi.fu-berlin.de/rojas/neural/chapter/K13.pdf|The Hopfield Model}} - by Raul Rojas (rozdział 13 książki {{https://page.mi.fu-berlin.de/rojas/neural/|Neural Networks - A Systematic Introduction}})
* {{https://neuronaldynamics.epfl.ch/online/Ch17.S1.html|Associations and memory}}, {{https://neuronaldynamics.epfl.ch/online/Ch17.S2.html|Hopfield Model}} - Wulfram Gerstner, Werner M. Kistler, Richard Naud and Liam Paninski (rozdziały z książki {{https://neuronaldynamics.epfl.ch/online/index.html|Neuronal Dynamics}})
* {{https://ml-jku.github.io/hopfield-layers/|Hopfield Networks is All You Need}} by Johannes Brandstetter
- {{zajecia:nn_2022_1:10-dnn.pdf|Głebokie uczenie - wstęp i modele DNN}}
* Kiedy model jest głęboki?
* Głębokie vs. "płytkie" modele, dlaczego głębokość ma znaczenie?
* Modele hierarchiczne i uczenie się reprezentacji wiedzy
* Przykładowe zastosowania: MNIST, CIFAR, ASR, ...
* Modele end-to-end
* Problemy uczenia głębokich sieci: niestabilny gradient, przeuczenie, koszt pamięci (ilość parametrów uczenia), koszt czasu treningu (duże dane)
* Głębokie sieci jednokierunkowe (DNN)
* Sieci z jednostkami ReLU, modyfikacje ReLU (PReLU, ELU, ReLU6), Maxout - przykłady zastosowań
* Algorytm uczenia SGD z momentem Nesterova, AdaGrad, RMSProp, Adam, AdaDelta
* Do poczytania:
* {{https://machinelearningmastery.com/what-is-deep-learning/|What is Deep Learning?}} by Jason Brownlee
* {{https://www.tinymind.com/learn/terms/relu|ReLU}}
* [[https://cs.stanford.edu/people/karpathy/convnetjs/demo/trainers.html|ConvNetJS Trainer demo on MNIST]] porównanie alg. uczenia na MNIST
* {{http://ruder.io/optimizing-gradient-descent/index.html|An overview of gradient descent optimization algorithms}} by Sebastian Ruder
* {{https://paperswithcode.com/sota|Brwose State-of-the-Art}}
- {{zajecia:nn_2022_1:11-cnn.pdf|CNN - sieci splotowe}}
* splot 1D, 2D, 3D, mapy cech, pola recepcyjne
* warstwa pooling, max pooling, avg pooling
* porównanie z sieciami MLP
* sygnały wejściowe sieci konsolacyjnych: audio, obrazy, video - jedno/wielo-kanałowe
* Architektury : LeNet-5, AlexNet, GoogleNet/Inception, VGG Net, ResNet
* Batch Normalization, Dropout, połączenia skrótowe, zwielokrotnianie danych weksciowych, splot filtrem 1x1
* Do poczytania:
* {{https://www.freecodecamp.org/news/an-intuitive-guide-to-convolutional-neural-networks-260c2de0a050/|An intuitive guide to Convolutional Neural Networks}}
* {{https://towardsdatascience.com/types-of-convolutions-in-deep-learning-717013397f4d|An Introduction to different Types of Convolutions in Deep Learning}} by Paul-Louis Pröve
* {{https://cv-tricks.com/cnn/understand-resnet-alexnet-vgg-inception/|ResNet, AlexNet, VGGNet, Inception: Understanding various architectures of Convolutional Networks}}
* {{https://medium.com/@sidereal/cnns-architectures-lenet-alexnet-vgg-googlenet-resnet-and-more-666091488df5|CNN Architectures: LeNet, AlexNet, VGG, GoogLeNet, ResNet and more}} by Siddharth Das
* {{http://yann.lecun.com/exdb/lenet/|LeNet-5, convolutional neural networks}}
* {{http://scs.ryerson.ca/~aharley/vis/conv/flat.html|LeNet-5 visualization}}
* {{http://scs.ryerson.ca/~aharley/vis/|An Interactive Node-Link Visualization of Convolutional Neural Networks}} by Adam W. Harley.
* {{https://cs.stanford.edu/people/karpathy/convnetjs/demo/cifar10.html|Demo: Classify CIFAR-10 with Convolutional Neural Network}}
- {{zajecia:nn_2022_1:12-rnn.pdf|RNN - sieci rekurencyjne i uczenie sekwencji}}
* Modelowanie sekwencji za pomocą sieci jednokierunkowych, MLP + dane z kontekstem, TDNN
* Algorytm wstecznej propagacji w czasie (BPTT)
* Rodzaje architektur: generowanie sekwencji, przekształcanie sekwencji, klasyfikacja sekwencji, ..
* Modele encoder-decoder (seq2seq)
* Sieci RNN jednokierunkowe/dwukierunkowe
* Jednostki Long-Short Term Memory (LSTM), Gate Recurrent Unit (GRU)
* Funkcja kosztu CTC
* Zastosowania:
* Modelowanie języka: CharRNN
* Rozpoznawanie mowy: DeepSpeach 2
* Do poczytania:
* [[http://karpathy.github.io/2015/05/21/rnn-effectiveness/|The Unreasonable Effectiveness of Recurrent Neural Networks]], Andrej Karpathy blog
* [[http://colah.github.io/posts/2015-08-Understanding-LSTMs/|Understanding LSTM Networks]] - colah's blog
* [[https://medium.com/jim-fleming/implementing-lstm-a-search-space-odyssey-7d50c3bacf93|An LSTM Odyssey]] by Jim Fleming
* [[http://www.paddlepaddle.org/docs/develop/book/08.machine_translation/index.html|Machine Translation]]
* [[http://www.hexahedria.com/2015/08/03/composing-music-with-recurrent-neural-networks/|Composing Music With Recurrent Neural Networks]]
* [[http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/|Recurrent Neural Network Tutorial]] by Denny Britz (part [[http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/|1]], [[http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-2-implementing-a-language-model-rnn-with-python-numpy-and-theano/|2]], [[http://www.wildml.com/2015/10/recurrent-neural-networks-tutorial-part-3-backpropagation-through-time-and-vanishing-gradients/|3]], [[http://www.wildml.com/2015/10/recurrent-neural-network-tutorial-part-4-implementing-a-grulstm-rnn-with-python-and-theano/|4]])
- {{zajecia:nn_2021_1:13-ae.pdf|Ucznie reprezentacji i modele generatywne}}
* autoenkodery i kodowanie sygnału
* kompresja sygnału, feature extraction
* Denoising Autoencoders
* stacked autoencoders
* autoenkodery konwolucyjne, rekurencyjne
* Deep Belief Networks (DBNs), sieci składające się z warstw Restricted Boltzmann Machines (RMBs)
* greedy pryer-wise e-training
* sieci GAN
* Do poczytania:
* [[https://blog.manash.me/implementing-pca-feedforward-and-convolutional-autoencoders-and-using-it-for-image-reconstruction-8ee44198ea55|Implementing PCA, Feedforward and Convolutional Autoencoders and using it for Image Reconstruction, Retrieval & Compression]] by Manash Kumar Mandal
* [[http://cs.stanford.edu/people/karpathy/convnetjs/demo/autoencoder.html|ConvNetJS Denoising Autoencoder demo]]
* [[https://kwonkyo.wordpress.com/2017/04/15/unsupervised-learning-using-restricted-boltzmann-machines/|Unsupervised learning using restricted Boltzmann machines]] by Kyo Jin Kwon
* [[https://hackernoon.com/generative-adversarial-networks-a-deep-learning-architecture-4253b6d12347|Generative Adversarial Networks — A Deep Learning Architecture]] by Gautam Ramachandra
* [[http://anotherdatum.com/vae.html|Variational Autoencoders Explained]] [[http://anotherdatum.com/vae2.html|VAE in Detail]] from Another Datum
* [[https://towardsdatascience.com/intuitively-understanding-variational-autoencoders-1bfe67eb5daf|Intuitively Understanding Variational Autoencoders]] by Irhum Shafkat
* [[https://towardsdatascience.com/generative-adversarial-networks-history-and-overview-7effbb713545|Generative Adversarial Networks- History and Overview]] by Kiran Sudhir
* [[https://thispersondoesnotexist.com/]]
* [[https://magenta.tensorflow.org/sketch-rnn-demo|Sketch-RNN-demo]]
===== Literatura i kilka przydatnych odnośników =====
**"Klasyczne" sieci neuronowe**
* J. Żurada, M. Barski, W., Jędruch Sztuczne sieci neuronowe, Wydawnictwo Naukowe PWN 1996
* Osowski S.: Sieci neuronowe w ujęciu algorytmicznym, Wydawnictwo Naukowo-Techniczne, Warszawa 1996
* Tadeusiewicz R.: Sieci neuronowe, Akademicka Oficyna Wydawnicza RM, Warszawa 1993
* {{http://www.is.umk.pl/~duch/Wyklady/NN_plan.html|Sztuczne Sieci Neuronowe}} - wykład prof. W. Duch
* {{http://www-users.mat.umk.pl/~piersaj/www/teaching_current.php|Wstęp do Sieci Neuronowych}} - wykład Jarosław Piersa,
* Raul Rojas, {{https://page.mi.fu-berlin.de/rojas/neural/|Neural Networks - A Systematic Introduction}}, 1996
**Deep Learning**
* Deep Learning, I. Goodfwllow, Y. Bengio, A. Courville, [[http://www.deeplearningbook.org/|Deep Learning]], MIT Press, 2016
* M. Nielsen, [[http://neuralnetworksanddeeplearning.com/|Neural Networks and Deep Learning]]
* {{http://www.cs.toronto.edu/~hinton/nntut.html|Neural Network Tutorials}} by Geoffrey E. Hinton
* {{https://d2l.ai/index.html|Dive into Deep Learning}} by A. Zhang, Zack C. Lipton, Mu Li, Alex J. Smola, on {{https://github.com/d2l-ai/d2l-en|GitHub}}
* {{https://julien-vitay.net/lecturenotes-neurocomputing/intro.html|Neurocomputing}} - lectures by Julien Vitay (youtube, slides and notes)
* [[wp>Deep_learning|Deep Learning]]
* [[https://deepnotes.io/|DeepNotes]]
* [[http://yerevann.com/a-guide-to-deep-learning/|A Guide to Deep Learning by YN2]]
* [[https://cilvr.nyu.edu/doku.php?id=deeplearning:slides:start|Material for the Deep Learning Course NTU]]
* [[http://www.wildml.com/deep-learning-glossary/|Deep Learning glossary]]
* [[http://deeplearning.net/tutorial/|Deep Learning Tutorials]]
* [[https://rodrigob.github.io/are_we_there_yet/build/|Are we there yet ?]]
* [[https://github.com/syhw/wer_are_we|WER are we?]]
* [[https://github.com/kjw0612/awesome-deep-vision|Awsome Deep Vison]]
* [[http://machinelearningmastery.com/inspirational-applications-deep-learning|8 Inspirational Applications of Deep Learning]]
* [[https://github.com/kjw0612/awesome-rnn|Awesome Recurrent Neural Networks]]
* [[https://github.com/TensorFlowKR/awesome_tensorflow_implementations|Awesome Tensorflow Implementations]]
* [[http://yann.lecun.com/exdb/mnist/|MNIST]]
* [[https://www.cs.toronto.edu/~kriz/cifar.html|CIFAR]]
* [[http://image-net.org/challenges/LSVRC/2017/|ImageNet]]
* {{https://experiments.withgoogle.com/collection/ai|AI Experiments}} with Google
===== Frameworki DL =====
* Deep Learning Frameworks https://developer.nvidia.com/deep-learning-frameworks
* [[wp>Comparison_of_deep_learning_software]]
* [[https://www.tensorflow.org/get_started/|TensorFlow]] (Google)
* [[https://keras.io/|Keras]] - high-level neural networks API, written in Python and capable of running on top of TensorFlow, CNTK, or Theano.
* [[http://deeplearning.net/software/theano/|Theano]]
* [[https://github.com/Lasagne/Lasagne|Lasagne]] - Lightweight library to build and train neural networks in Theano
* [[https://docs.microsoft.com/en-us/cognitive-toolkit/|Microsoft Cognitive Toolkit (CNTK)]]
* [[http://caffe.berkeleyvision.org/|Caffe]]
* [[http://torch.ch/|Torch]] (Facebook AI) [[https://pytorch.org/|PyThotch]] zawiera m. in .Coffe 2 (Facebook AI)
* [[https://www.mathworks.com/solutions/deep-learning.html|MATLAB Deep Learning]]
* [[https://deeplearning4j.org/|deeplearning4j]] - Deep Learning for Java