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:
*//Set up network configuration:
*MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
*    .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).iterations(1)
*    .learningRate(0.1)
*    .seed(12345)
*    .regularization(true)
*    .l2(0.001)
*.weightInit(WeightInit.XAVIER)
*.updater(Updater.RMSPROP)
*    .list()
*    .layer(0, new GravesLSTM.Builder().nIn(iter.inputColumns()).nOut(lstmLayerSize)
*                    .activation(Activation.TANH).build())
*    .layer(1, new GravesLSTM.Builder().nIn(lstmLayerSize).nOut(lstmLayerSize)
*                    .activation(Activation.TANH).build())
*    .layer(2, new RnnOutputLayer.Builder(LossFunction.MCXENT).activation(Activation.SOFTMAX)        //MCXENT + softmax for classification
*                    .nIn(lstmLayerSize).nOut(nOut).build())
*.backpropType(BackpropType.TruncatedBPTT).tBPTTForwardLength(tbpttLength).tBPTTBackwardLength(tbpttLength)
*    .pretrain(false).backprop(true)
*    .build();
"

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? 
*Welke graad van begrip is nodig om een functie te implementeren in een machine learning model?
*(Via de "orale cultuur van de conferenties" worden er tips uitgewisseld over.)
'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.

*library
*netwerk type
*functies / blokken / elementen

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.
*Mag je een mes gebruiken hoewel je slechts gedeeltelijk weet hoe deze is gemaakt?
*Of: Mag je een auto gebruiken hoewel je slechts gedeeltelijk weet hoe deze is gemaakt? (Want, met een auto komt een grotere verantwoordelijkheid om een ander geen pijn te doen.)
*
Referentie naar de analogie met het spreken van de franse taal.
*De vraag wanneer iemand de franse taal "mag" spreken, wordt pas relevant als er een gevolg aan gekoppeld is.
*Wanneer Manetta een belangrijke brief naar het Frans vertaalt, met haar beperkte kennis van de Franse taal, hoe gaan we dan om met deze vertaling?
*Wanneer An een belangrijke brief naar het Frans vertaalt, met een hoger dan gemiddelde kennis van de Franse taal voor iemand die Frans als tweede/derde taal spreekt, kiest ze er alsnog voor om haar vertaling door een Franstalige na te laten lezen.
*
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:
*Onzekerheid in het ontwerpen van een machine learning model.
*Keuzes van de programmeur.
*Hoe om te gaan met de state-of-the-art en wetenschappelijke literatuur?
*Of extremer: het gebruik van machine learning API's, waarbij het volledige machine learning model als een black-box wordt ingezet.
*& Onzekerheid in de techniek, de functies/elementen waaruit machine learning modellen bestaan. 
*Hier komen verschillende vormen van onzekerheid boven, die geworteld zijn in de lineaire agebra.

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/
*Argmax https://en.wikipedia.org/wiki/Arg_max - "In mathematics, the arguments of the maxima (abbreviated arg max or argmax) are the points of the domain of some function at which the function values are maximized."
*Softmax https://en.wikipedia.org/wiki/Softmax_function - "In probability theory, the output of the softmax function can be used to represent a categorical distribution – that is, a probability distribution over K different possible outcomes."

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
*softmax van Wikipedia, in python, met Cristina uitgepluist (expanded version with many options that do the same (or approximations to the very same))
*http://pad.constantvzw.org/public_pad/neural_networks_7 - onderaan de pad
*softmax in Torch 
*http://pytorch.org/docs/master/nn.html?highlight=softmax#torch.nn.Softmax
*softmax, softplus, sigmoid, logit







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