# Mateo Borina
Ovo su termini o kojima smo danas raspravljali, pa šaljem za svaki par poveznica čisto da se možeš orijentirati.
## Federated Learning - FL
- [Originalni FL rad](https://arxiv.org/pdf/1602.05629.pdf)
- [Advances and Open Problems in Federated Learning](https://arxiv.org/pdf/1912.04977.pdf) (extra literatura) - opisano sve što je napravljeno u FL-u i što su još otvorena pitanja.
- Za FL postoji i gotov paket [`tensorflow_federated`](https://www.tensorflow.org/federated) kojem se samo preda podaci svakog klijenta pa on simulira treniranje, kao što bi se to i zbilo na realnom zadatku s stvarnim fizičkim uređajima.
U biti, FL je samo način orkestracije učenja na malim klijentima (najčešće mobilnim uređajima) gdje se model trenira na lokalnim podacima svakog uređaja. Podaci se nikad ne šalju na server. Server šalje model na podskup klijenata, klijenti svaki napravi lokalno treniranje na tom modelu i onda svi ti klijenti vrate model natrag na server. Server tada ažurira svoj globalni model s tim novim pristiglim modelima. FL se koristi kada su podaci decentralizirani i privatni, pa se ne može napraviti agregacija podataka na centralni server (što je naravno optimalno rješenje).

## Jednostavni primjeri za keras/tensorflow treniranje modela
Najednostavniji paket za treniranje dubokih mreža je možda tensorflow (keras). Keras je baš user-friendly modul paketa za lakše korištenje tensorflowa i sadržan je u samom paketu (`from tensorflow import keras` - vidjet ćeš kroz primjere).
- [Example of Neural Network in Python With Keras (N.1)](https://medium.com/@tibastar/example-of-neural-network-in-python-with-keras-n-1-303e879c8c8d)
- [Keras](https://keras.io/examples/) primjeri - [MNIST](https://keras.io/examples/vision/mnist_convnet/) primjer je možda najednostavniji za isprobat
## Transformeri
[Transformer](https://machinelearningmastery.com/the-transformer-model/) je samo jako kompliciran deep neural model. Jedne od poznatijih arhitektura transformera jesu GPT modeli koji se bave procesiranjem teksta. Posljednji update je GPT-3, ali on je prezahtjevan za nas, pa možda bolje pogledati [GPT-2](https://jalammar.github.io/illustrated-gpt2/) jer najmanji model ima oko 500MB. Postoji i PyTorch i Tensorflow [implementacija](https://huggingface.co/docs/transformers/model_doc/gpt2) GPT-2 modela. Ti GPT modeli su nam zanimljivi jer su oni već iztrenirani na brdu podataka i imaju već dosta dobro razumijevanja teksta.
## Ideje
Danas smo raspravili par ideja:
1. Napraviti FL treniranje na nekoliko dataseta i vidjeti koliko personalizacija nosi poboljšanje (personalizacija je samo fine-tunning već naučenog modela). Ovo je [rad](https://arxiv.org/pdf/1811.03604.pdf) u kojem je Google napravio u stvarnom svijetu treniranje modela za predikciju sljedeće riječi za Gboard keyboard aplikaciju. Nakon toga, objavili su još jedan [rad](https://arxiv.org/pdf/1910.10252.pdf) gdje su ovaj prethodno naučeni FL globalni model trenirali još malo na svakom od klijenata i evaluirali poboljšanja i optimalne parametre za personalizaciju.
2. Zanimljivo nam je i područje NLP (natural language processing) gdje ulaze u priču i ovi transformeri (GPT-2). Tu bi onda ispitali da li ima kakve koristi trenirati ovako velike model u FL-u. GPT-2 modeli su već trenirani na mnogo tekstova, pa bi ih tu samo dotreniravali (preskupo i sporo bi bilo da ih idemo iz nule trenirati, ili je i to opcija?). Training dataset bi makar izgeneriali pomoću GPT-3 modela, da sada ne pišemo ručne tekstove.
3. Ostale ideje također dobrodošle