Start: Torch-RNN
Gijs en An begonnen met het uitproberen van de RNN op character niveau van Karpathy. 
Char rnn (installatie): http://pad.constantvzw.org/p/algorithmic_uncertainty.torch-rnn.install
Char rnn (using torch): http://pad.constantvzw.org/p/algorithmic_uncertainty.torch-rnn (notities)
We zijn daarvan afgestapt omdat de code geschreven is in LUA.

ander framework?
Mike gebruikt pytorch + seqmod, misschien kunnen we dat gebruiken om een eerste oefening mee te doen?
Asibot gebruik: Sequence modelling with pytorch

https://github.com/pytorch/examples/tree/master/word_language_model

Torch vs Theano:
http://fastml.com/torch-vs-theano/
    "Well, you already know our opinion about the “incredibly easy” bit.  Torch is not really a Matlab-like environment. Matlab, with all its  shortcomings, is a very well polished piece of software with examplary  documentation. Torch, on the other hand, is rather rough around the  edges.
Besides the language gap, that’s one of the reasons that you don’t  see that much Torch usage apart from Facebook and DeepMind. At the same  time libraries using Theano have been springing up like mushrooms after a rain (you might want to take a look at Sander Dieleman’s Lasagne and at blocks). It is hard to beat the familiar and rich Python ecosystem."

Pytorch installatie
https://github.com/pytorch/pytorch#installation
$ virtualenv pytorch
$ . pytorch/bin/activate
$ pip install numpy
$ pip install https://s3.amazonaws.com/pytorch/whl/cu75/torch-0.1.6.post22-cp27-none-linux_x86_64.whl
$ pip install torchvision

PyTorch examples: https://github.com/pytorch/examples
Word-level language modeling RNN: https://github.com/pytorch/examples/tree/master/word_language_model ("This example trains a multi-layer RNN (Elman, GRU, or LSTM) on a language modeling task.")
> Komt het dichtste bij het model dat Mike gebruikte voor de Asibot (=LSTM, RNN, character basis)

LSTM network
A Beginner’s Guide to Recurrent Networks and LSTMs https://deeplearning4j.org/lstm.html

"
Here’s what the LSTM configuration looks like:
"

notitie over verschillende niveau's binnen neurale netwerken
Netwerken worden opgebouwd uit standaard functies, ontdekt en omschreven in wetenschappelijke papers. Het is mogelijk netwerken te ontwerpen terwijl je die blokken als black-boxes beschouwd. (Functies zijn bijvoorbeeld: softmax, stochastic gradient descent, backpropagation, LSTM neuron)
Is kennis van de (interne) werking van die functies noodzakelijk? Functies worden gepresenteerd in papers als ontwerp maar worden ook in hun effectiviteit gemeten.
Die 'standaard' functies worden ook als zodanig vaak aangeboden / geïmplementeerd in frameworks (TensorFlow, torch, theano).
Is kennis van machine learning misschien een bewustzijn van de verschillende technieken en op welk soort data ze goed werken? 
'Virtuositeit' in machine learning in het ontwerp van het netwerk en de keuze van hyper-parameters. Misschien meer associatief/intuïtief dan rationeel: 'Het werkt'.
Innovatie in machine learning is niet alleen het ontwerpen / ontdekken van nieuwe functies maar ook het ontwerp van het netwerk zelf.


Voor ons is nu de vraag op welk niveau we werken in het boek. Of misschien, op welk niveau het voor ons haalbaar is om (precieze) visualisaties te maken.
Leggen we de focus op netwerk configuraties? Of op de elementen waarop de netwerken gebaseerd worden (zoals de softmax, stochastic gradient descent, backpropagation)?

> we kunnen aan Mike vragen hoe hij zich verhoudt tot een LSTM netwerk. In hoeverre begrijp je wat er gebeurt? In hoeverre kun je de keuzes van het LSTM netwerk (mbt. haar geheugen) inzien? Kan je een LSTM tweaken?

notitie over momenten van onzekerheid
Wanneer we het over momenten van onzekerheid hebben, komen we al snel uit bij de relatie tussen een programmeur en zijn/haar code. Hoe gaat een programmeur om met machine learning modellen, een vorm van code die bestaat uit verschillende elementen/blokken? In hoeverre vindt de programmeur het belangrijk om de werken van één zo'n element volledig te doorgronden? In hoeverre is daar ook een mate van verantwoordelijkheid aan gekoppeld?

Referentie naar de messen analogie.
Referentie naar de analogie met het spreken van de franse taal.
Referentie naar de analogie met de "eenoog is koning in het rijk der blinden".

Het zou een super relevant journalistiek onderzoek zijn, om met verschillende bedrijven te spreken over deze graad van verantwoordelijkheid. En na te gaan hoe verschillende programmeurs hierover van gedachte verschillen.
Is dit ook het onderzoeksdoel waar we met ons project op uit zijn? Willen we ons richten op de verantwoordelijkheid van programmeurs bij het ontwikkelen van een machine learning model?

Door momenten van onzekerheid te zoeken in machine learning kun je de magie van de techniek betwijfelen. In die zin is dit project meer een aanleiding voor zo'n journalistiek project.

Kunnen we een (fictief) protocol ontwerpen waarmee een programmeur momenten van onzekerheid kan aangeven in het gemaakte model?

Het verschil tussen:

zijnotitie: wat is het verschil tussen de Softmax en Argmax?
"Argmax is not continuous and can't be used with standard gradient descent techniques. If you want to use it in neural networks (e.g. in  "hard" attention models) you typically have to use some kind of Monte  Carlo optimization algorithm, such as REINFORCE. Otherwise you can replace argmax with softmax, which is continuous and differentiable, as  typically done in "soft" attention models."
https://www.reddit.com/r/MachineLearning/comments/4e2get/argmax_differentiable/

notitie relatie tussen lineaire algebra (LA) en statistiek
Argmax is een algoritme dat volledig gebaseerd is op LA.

Principal component analysis wordt gebruikt om een matrix te vereenvoudigen.
"lossy compression"
"may loose some precision"
"you would like to loose as little precision as possible"
"to produce a lower dimensional version of the matrix"

notitie 
via de code blijven we opbotsen op statistiek en algebra.
black-boxen
Is er een andere aanpak?
Gaat die aanpak misschien niet via het precies willen begrijpen van de code?

In een journalistieke aanpak zou een journalist een onderzoek doen, zonder zelf totale kennis te hebben over de werking van de code.

De computer vandalisme aanpak
inzetten in andere contexten
zien hoe het algoritme kijkt, wat het ziet
In ons geval zal dat beteken: wat het algoritme leest.
Maar de resultaten van bijv. een Shakespear generator, geeft vrij onverstaanbare resultaten.

Na een jaar met NN te hebben gewerkt, in een onregelmatig ritme, hoe ver zijn we nu?

Wanneer we ons zouden richten op de discourse van machine learning, zouden we een publicatie kunnen maken die dat "aanklaagt"

Waar willen we naar kijken? 
Discours -> hoe wordt erover gesproken
Python-code / implementatie -> om het toe te passen in context die ander perspectief geeft, eens het netwerk bestaat, hoe leer je het? kan je doen zonder naar code te kijken, je kan parameters aanpassen. Voordeel bij deze optie is dat we het model kunnen toepassen.
Het netwerk -> wiskundige karakter en hoe je het best gebruikt, naar code kijken van model voor implementatie/training (theoretisch)

Focus op een functie (argmax)
voorbeeld
http://www.cqrrelations.constantvzw.org/1x2/projects/Week2/Sphinx/Sphinx.html
http://www.cqrrelations.constantvzw.org/1x2/projects/Week2/Sphinx/rybn_python_OK.py
Focus op een netwerk (LSTM)
Focus op een dataset (???)

- dmv. interviews: Hoe gaan jullie (programmeurs) om met dit element (bijv. de softmax)? Hoe komt dit element in de media?
- dmv. code experimenten
- dmv. theoretische studie, wat doet dit element

Argmax
- een toepassing vinden van een argmax functie + visualiseren hoe het leest/schrijft
- verstaan hoe code is geschreven
- theorie vertalen naar fictie/etc

Softmax







overige
We kunnen een populair elftal samenstellen, van populaire jongetjes uit het neurale netwerk discourse.
Op nummerrrrr 1: Softmax