Introduction: a neuron
I am lazy, so I’m skipping the introduction for this set of notes. Look at Andrew Ng’s Coursera course for this part. Historical notes are (Rosenblatt 1958). One can view a perceptron to be a Log Linear Models with the temperature of the softmax that goes to 0 (so that it is an argmax). Trained with a stochastic gradient descent with a batch of 1 (this is called the perceptron update rule).
Structure
A single layer of a function can be written in the following way:
$$ F(\theta)(x) = \phi(Wx + b) $$Which can be summarized by: linear part + activation function. Where $F(\theta)$ is a partial function that returns another function, $\theta = (W, b)$ a vector, this is just a way to separate the bias with the parameters. The $\phi$ is the non linearity, that is needed for the universal approximation function.
Compositionality
The main idea in going deep is extract features of increasing complexity, it’s like attempting to give it more computation so that it is possible to extract more interesting parts. We can mathematically view deep networks in the following way:
$$ x = F^{(l)} F^{(l - 1)} \dots F^{(0)}(x_{0}) $$And a composition of layers!
Modularity
We can compose parts of the network together! For example residual networks are a clear example, or the inception network.
Training network tricks
Activation functions
Solitamente le funzioni classiche per i network neurali sono sigmoid, tanh, e ReLU. La cosa brutta delle prime due è vanishing gradient, perché se il valore è molto grosso o molto piccolo, la derivata è molto vicino allo 0, quindi è molto difficile aggiornare.
The activation function is presented as $\phi$ before. One thing to note is that this non-linearity doesn’t mix the dimensions together. Let me explain clearly with some maths:
We say that $\phi: \mathbb{R}^{n} \to \mathbb{R}^{n}$ and it’s a composition of some $\bar{\phi}: \mathbb{R} \to \mathbb{R}$ which are just applied independently to every dimension.
Other properties are:
- Increasing
- Continuous There are important to remember from a mathematical point of view.
Level Sets
Level sets are interesting to analyze the behaviour of a single neuron. We define the sets of constant activation to be:
$$ L_{f}(z) = \left\{ x : \phi(w\cdot x + \beta) = z \right\} \perp w $$These are also called generalized linear models, or ridge functions.
ReLU activation
The relu activation is easily described as the following step function:
$$ f(x) = \begin{cases} 0,\, \text{ if } x < 0 \\ x, \, \text{ if } x \geq 0 \end{cases} $$The important thing to notice is that when it backpropagates, it just activates or kills the signal, allowing the gradient to flow naturally, and not vanish.
$x^{k + 1} = \sigma(W^{k}x^{k} + b)$ so the derivative is
$$ \frac{ \partial x^{(k+1)} }{ \partial x^{(k)} } = \sigma'(W^{(k)}x^{(k)} + b) W^{(k)} $$And $\sigma'$ in the case of the ReLU is just 0 or 1, which aids toward the problem of vanishing gradient and similars. The thing to note is that this doesn’t exactly work as an activation function if the input depends on $x$ with more than one parameter
Hyperbolic tangent
This activation is usually preferred to the Sigmoid, better treated in Logistic Regression, because it has sign symmetry.
Input normalization
In un certo senso in questo modo abbiamo un pò di tati che sono Normali gaussiani. Non ho capito ancora perché normale gaussiana sia una tipologia di dati che ci piace così tanto. (il motivo che viene dato in lezione è che Gradient Descent si comporta molto meglio per loss function che sono gaussiane, perché la direzione di discesa è sempre quella, e non deve zigzagare).
Weight initialization
Ci sono moltissimi modi per inizializzare i Weights, in modo che si eviti il problema di vanishing or exploding gradients. L’idea è comunque tenere i valori vicini a 1 per evitare che esplodino, e inversamente proporzionali a n o funzioni di n, perché se n è molto grosso potrebbe esplodere lo stesso.
Alcune inizializzazioni famose sono
- Xavier
- He
- (qualcosa che funziona per Sigmoid, (alcune funzionano a seconda dell’activation function giusta)
C’è ne sono molte, non so se conviene lavorare sulla inizializzazione, non credo sia comunque buona spesa del tempo a capire queste.
Optimization
Momentum, praticamente un gradient descent che tiene conto delle computazioni passate, e calcola la direzione anche secondo quelle (quindi se vado su e giù e a destra sempre nelle iterazioni passate, andrò a destra più spesso diciamo, questa è l’intuizione per questa idea).
Una cosa molto strana è che il training delle NN è molto stabile. Cioè vari un pò l’input e non varia molto l’ouput!
Possibili motivi:
- Weights
- Loss function
- Internal redundancy? cioè ho troppi parametri e questo lo rende bello.(teoria del prof)
Loss functions
There are many many many loss functions. The easiest is
$$ \mathcal{l}(y, \hat{y}) = \frac{1}{2} \lVert y - \hat{y} \rVert ^{2} $$And sometimes we write it in this way so the parameters are clear:
$$ l(\theta)(x, y) = l(y, F(\theta)(x)) $$Sometimes you need to tailor the loss function to the problem you are trying to solve! For example a very famous function is the Softmax Function, for multiclass classification. In the case you just have two classes then it’s the logistic function.
Other functions could be the cross-entropy, which we can find an analysis here: Entropy. We write it sometimes as log-loss:
$$ l(y, \hat{p}) = - \log \hat{p}_{y} $$If we view this from an information theoretical point of view, then it’s the expected length of our codeword.
Risks
After we have the loss we can go on and define the empirical risk, which is just:
$$ \mathcal{R}(\theta; \mathcal{S}) := \mathbb{E}_{\mathcal{S}} [\ell(\theta)] := \frac{1}{s} \sum_{i = 1}^{s} \ell(\theta)(x_{i}, y_{i}) = \frac{1}{s} \sum_{i = 1}^{s} \ell(y_{i}, F(\theta)(x_{i})) $$This is the training risk, and same thing could be defined for the test risk.
Overfitting
-
Slide ways to reduce overfitting, we have 7 it seems
Sometimes overfitting is weird for neural networks, because even if we have it, it seems that training a lot more doesn’t produce overfitting.
Overfitting è il drago del training classico del machine learning, molto simile a dire che la macchina sta allucinando alcuni pattern causati probabilmente dalla varianza dei dati, o anche dal fatto che alcuni casi positivi sono pochi…
È comunque una cosa troppo specifica, perché significa che la macchina stia quasi imparando a memoria i casi, dovrebbe provare a generalizzare, per farlo deve scordare dettagli non interessanti (che con overfitting può imparare) e imparare le cose importanti. Però i computer sono troppo bravi a memorizzare dettagli, a differenza di umani.
Dropout
-
Idea del dropout
L’idea è il fatto che il network deve risolvere il problema, anche se è un pò rotto, questo cerca di renderlo più robusto, e sembra funzionare molto bene.
Kullback-Leibler Divergence
We want to measure the distance between two distributions, usually from a real distribution and the one we are predicting. Vedere Entropy#Relative Entropy or Kullback-Leibler
È una cosa che proviene dalla teoria dell’informazione.
Per capire questo, è molto importante andare a capire cosa sia la cross-entropy e questo è un modo abbastanza naturale per capire quanto vicino è una distribuzione, solitamente predetta, con quella del training data, si può comparare molto con log-likelihood loss function, si potrebbe dire che sia un caso particolare la log likelihood.
References
[1] Rosenblatt “The Perceptron: A Probabilistic Model for Information Storage and Organization in the Brain.” 1958