Latest news about Bitcoin and all cryptocurrencies. Your daily crypto news habit.
Hi reader!
A note to the reader:This article presumes that you are unreasonably fascinated by the mathematical world of deep learning. You want to dive deep into the math of deep learning to know whatâs actually going under the hood.
Some Information about this article:
In this article weâll discuss and implement RNNs from scratch. Weâll then use them to generate text(like poems, c++ code). I am inspired to write this article after reading Andrej Karpathyâs blog on âThe Unreasonable Effectiveness of Recurrent Neural Networksâ. The text generated by this code is not perfect, but it gives an intuition about how text generation actually works.
Letâs dive into the mathematical world of RNNs.
So What is the basic structure of RNN?
Fig 1 :Vanilla RNNFig 2: Unrolled Vanilla RNN
Donât worry about any of the terms. Weâll discuss each of them. They are pretty easy to understand.
In Fig 1:
h(t): hidden state of RNN at time t=t
fw: non-linearity function(mostly tanh)
Whh: randomly initialized weight matrix. It is used when we move from h to h (hidden state to another hidden state).
Wxh: randomly initialized weight matrix. It is used when we move from âxâ to âhâ (inputs to hidden states).
Why: randomly initialized weight matrix when we move from âhâ to âyâ present hidden state to output.
bh(not in the photo): randomly initialized column matrix as bias matrix to be added in calculation of h(t).
by(not in the photo): randomly initialized column matrix as bias matrix to be added in calculation of y(t).
CODE:
We start by importing data:
download data from here.
char_to_ix: it's a dictionary to assign a unique number to each unique characterix_to_char:it's a dictionary to assign a unique character to each number.We deal with assigned number of each character and predict number of next character and then use this predicted number to find the next character.
hidden size: number of hidden neurons
seq_length: this refers to how many previous immediately consecutive states we want our RNN to remember.
lr: stands for learning rate.
Initialize the parameters:
Initialize the parameters we discussed above(Whh âŠâŠÂ by).
Forward Pass:
xs, ys, hs, ps are dictionaries.
xs[t]:At time(character) t=t, we use one-hot encoding to represent characters that is all the element of the one-hot vector are zeros except one element and we find location of that element(character) using char_to_ix dictionary. Example: assume that we have data as âabcdefâ. We represent âaâ by using one-hot encoding as
this is what we are doing in 25th,26th line in the code above.a=[[1], [0], [0], [0], [0], [0]]
ys[t]: At time(character) t=t,we store the final output of that RNNÂ cell.
hs[t]: At time(character)t=t, we store the hidden state of the present RNNÂ cell.
ps[t]: At time(character)t=t, we store the probability of occurrence of each character.
As you see in the above code, we implemented simple calculations as given in Fig1 for xs[t], ys[t], hs[t], ps[t].
And then finally we calculate the softmax loss.
dWxh : derivative w.r.t matrix Wxh. We will use this to correct our Wxh matrix. And similarly dWhh, dWhy, dbh, dby, dhnext.
To backprop into y: we subtract 1 from probability of occurrence of correct next character because:
Now:To calculate:dy: ps[t]-1
dWhy += : dyâąhs[t].Tdh += Why.Tâądy + dhnext
dby += dy (As matrix multiplication term becomes zero in derivative )
#backprop in hs[t] now:dhraw adds derivative w.r.t tanh(derivative of tanh is 1-tanh^2)dhraw= (1-hs[t]^2)*dh
dbh += dhraw (because derivative matrix multiplication terms is zero w.r.t dbh)dWhx += (dhrawâąxs[t].T)dWhh += (dhrawâąhs[t-1])finally:dhnext += (Whh.Tâądhraw)
Everything is setup:
Itâs time to run program: DeepLearning Studio
RNNs are computationally very expensive. To train our program I used Deep Cognitionâs Deep Learning Studio. It provides preinstalled DeepLearning Frameworks such as Tensorflow-gpu/cpu, keras-gpu/cpu, pytorchâŠand many more. Check it out here.
click on Notebooks and youâre ready to code! â
DeepCognition - Become an AI-Powered Organization Today
mbh,mby are memory variables for Adagrad optimiser.
For line number 7â11. Here one-step = seq_length.
Finally loss is calculated from our loss function for different parameters(WhyâŠh(t)) and is subtracted from respective parameters.
line number 5-6 is the way we Adagrad works.Like in normal gradient descent we do:theta= theta-lr*grad1e-8 is used to prevent DivisionByZero exception.
At epoch zero:Generated textloss=106.56699692603289iteration:0
QZBipoe.Mprbâgxc]QXECCYâf);wqEnJAVV-Dn-Fl-tXTFTNI[ ?JpziâBPMâTxJlhNyFamgIj)wvxJDwBgGbF!DâFâbU;[)KXrT km*;xwYZIx-AXdDl_zk(QlW(KolSenbudmX.yqH-(uPUl-B:mj]oâE-ZTjzH)USf:!sCiTkTMcmgUY)rCjZaL*rhWVpS-------------------------------------------------------l was beginning begiginning to Alice walicegininn to geteginninato giteginniito geteginninn to geteginninatg gegeginninasto get beginninnninnigw to gicleaaaa was ginniicg benning to get a wen----loss=11.115271278781561iteration:66200
It begins to learns words like âbeginning, Alice, was, to, getâŠâ. Itâs not perfect at all. But it gives an intuition that we can generate proper text, given some sample data. LSTMs performs much better than RNNs. LSTMs are an extension of RNNs with 3â4 gates. Do check my article on LSTMs
Understanding architecture of LSTM cell from scratch with code.
Access to the complete code with datasets on github repo.
Congrats to the reader, now you know in-depth mathematics of RNNs(simple linear Algebra).
Thanks for giving your precious time for reading my article. If you really liked it, do share and clap đ.
Follow me on medium and LinkedIn.
Happy Deep Learning.
Generate stories using RNNs |pure Mathematics with code|: was originally published in Hacker Noon on Medium, where people are continuing the conversation by highlighting and responding to this story.
Disclaimer
The views and opinions expressed in this article are solely those of the authors and do not reflect the views of Bitcoin Insider. Every investment and trading move involves risk - this is especially true for cryptocurrencies given their volatility. We strongly advise our readers to conduct their own research when making a decision.