Write function to randomly initialize ANN weights
Write cost function for SGD

SGD stands for stochastic gradient descent. This takes as input a single
training example.
Write script to load vocab and word vectors
Write functions to numerically compute gradient

Typically to compute gradient we solve the derivative by hand and write the
formula in code, but here we numerically compute gradient which is essentially:
dy/dx = (y(x+0.1) - y(x)) / 0.1 where y(x) is a function y expressed in x.
Change data structure of word matrix to hashtable

Previously it was a matrix. Hashtable allows quicker access to the feature
vectors.
Constrain ANN cost to network of 1 output unit

Previously the network could be have multiple units in the output layer. This
simplifies the code, and is still applicable to the NER assignment which only
has one output unit.
Calculate error derivative w.r.t. input vector

Previously we only calculated error derivatives w.r.t all weights (non-bias and
bias). Now we include that of the input vector since we want to update those
word vectors.
Hidden layer of ANN NER is now activated by tanh

Previously the activation function is a sigmoid. This change follows the
specifications in the NER tutorial.
Numerally verify NER ANN error derivative is right
Fix: commit sigmoid and tanh gradient functions

Forgot to commit these files previously. These are necessary to make error and
error derivative computations for the neural network.
Script to load training data (annotated sentences).
Implement stoachastic gradient descent for NER ANN

Tricky parts of implementation
* Need to convert training data to lower case, to match words in word matrix
* Replace words that aren't in word matrix with a special keyword
* Pad words in window when there's fullstops (a.k.a periods) in the window
* Update only parts of the word matrix that were involved in that update step
Diagnose training step by plotting error over time
Merge branch 'master' of https://github.com/boonjiashen/speculative-language-recognizer into NER
Replacing words with 
 
 has its own function

Previously this replacing was done in the training script. We pull it into a
function to make testing easier.
Training script uses replacing function

This function is the one from the previous commit
Fix: gradient test works for varying window size

Previously when testing the cost function we hardcoded the choice of words, so
it doesn't vary with window size. Now we randomly pick words based on the
window size.
Loading annotated sentences gets its own function

Previously this functionality was in a script.
Move loading of training/test data to main script

Previously this was in an auxiliary script. We move it to clean the structure
of the code - the script that loads the word matrix only does that one thing.
Move comment that should belong somewhere else