From 0e5123054b678ce69b11cb9df7b6f15d48b7fe25 Mon Sep 17 00:00:00 2001 From: NotXia <35894453+NotXia@users.noreply.github.com> Date: Mon, 6 May 2024 18:32:59 +0200 Subject: [PATCH] Add IPCV2 learning --- .../module2/img/01_loss_spam.png | Bin 0 -> 58329 bytes .../module2/sections/_classification.tex | 172 ++++++++++++++++++ 2 files changed, 172 insertions(+) create mode 100644 src/year1/image-processing-and-computer-vision/module2/img/01_loss_spam.png diff --git a/src/year1/image-processing-and-computer-vision/module2/img/01_loss_spam.png b/src/year1/image-processing-and-computer-vision/module2/img/01_loss_spam.png new file mode 100644 index 0000000000000000000000000000000000000000..a49404d4390781f772f3079cf6df739dec571b8d GIT binary patch literal 58329 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

!_woxjI1r{A#Gk4guVT?3XG8Y3(Bt70d! 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 m>-Qnn;1Y~{7s_xpKvHt@~FInLL literal 0 HcmV?d00001 diff --git a/src/year1/image-processing-and-computer-vision/module2/sections/_classification.tex b/src/year1/image-processing-and-computer-vision/module2/sections/_classification.tex index 3c00b35..370915d 100644 --- a/src/year1/image-processing-and-computer-vision/module2/sections/_classification.tex +++ b/src/year1/image-processing-and-computer-vision/module2/sections/_classification.tex @@ -103,3 +103,175 @@ \end{remark} + +\section{Learning} + +\begin{description} + \item[Learning problem] \marginnote{Learning problem} + Find the best model $h^*$ from the hypothesis space $\mathbb{H}$ that minimizes a loss function $\mathcal{L}$: + \[ h^* = \arg\min_{h \in \mathbb{H}} \mathcal{L}(h, \matr{D}^\text{train}) \] + + In machine learning, models are usually parametrized. The problem then becomes to find the best set of parameters $\matr{\theta}^*$ from the parameter space $\Theta$: + \[ \matr{\matr{\theta}}^* = \arg\min_{\matr{\theta} \in \Theta} \mathcal{L}(\matr{\theta}, \matr{D}^\text{train}) \] +\end{description} + + +\subsection{Loss function} + +\begin{description} + \item[Loss function] \marginnote{Loss function} + Easy to optimize function that acts as a proxy to measure the goodness of a model. + + The loss computed on a dataset is usually obtained as the average of the values of the single samples: + \[ \mathcal{L}(\matr{\theta}, \matr{D}^\text{train}) = \frac{1}{N} \sum_{i}^{\vert \matr{D}^\text{train} \vert} \mathcal{L}\big( \matr{\theta}, (\vec{x}^{(i)}, y^{(i)}) \big) \] + + + \item[0-1 loss] \marginnote{0-1 loss} + Loss computed as the number of misclassifications: + \[ \mathcal{L}\big( \matr{\theta}, (\vec{x}^{(i)}, y^{(i)}) \big) = \vert \text{misclassifications} \vert \] + + This loss is not ideal as it is insensitive to small (or even large) changes in the parameters. + Moreover, it does not tell in which direction should the parameters be modified to reduce the loss. + + \begin{remark} + This loss can be minimized using a combinatorial optimization approach but it does not scale well with large datasets. + \end{remark} + + \begin{figure}[H] + \centering + \includegraphics[width=0.3\linewidth]{./img/01_loss_spam.png} + \caption{\parbox[t]{0.7\linewidth}{ + Example of linear classifier for spam detection. + Small changes on the boundary line do not change the 0-1 loss. + The loss itself does not tell which is the best direction to move the line. + }} + \end{figure} + + + \item[Root mean square error] \marginnote{Root mean square error} + Loss computed as the direct comparison between the prediction and target label: + \[ \mathcal{L}\big( \matr{\theta}, (\vec{x}^{(i)}, y^{(i)}) \big) = \Vert f(\vec{x}^{(i)}; \matr{\theta}) - y^{(i)} \Vert_2 \] + Note that $y^{(i)}$ might be encoded (e.g. one-hot). + + + \item[Cross-entropy loss] \marginnote{Cross-entropy loss} + Transform the logits of a model into a probability distribution and estimate the parameters through MLE. + + \begin{descriptionlist} + \item[Softmax] \marginnote{Softmax} + Function that converts its input into a probability distribution. + Given the logits $\vec{s} \in \mathbb{R}^{c}$, the score $\vec{s}_j$ of class $j$ is converted into a probability as follows: + \[ + \mathcal{P}_\text{model}(Y = j | X = \vec{x}^{(i)}; \matr{\theta}) = + \texttt{softmax}_j(\vec{s}) = + \frac{\exp(\vec{s}_j)}{\sum_{k=1}^{c} \exp(\vec{s}_k)} + \] + + For numerical stability, \texttt{softmax} is usually computed as: + \[ + \begin{split} + \texttt{softmax}_j(\vec{s} - \max\{ \vec{s} \}) &= \frac{\exp(\vec{s}_j - \max\{ \vec{s} \})}{\sum_{k=1}^{c} \exp(\vec{s}_k - \max\{ \vec{s} \})} \\ + &= \frac{\cancel{\exp(- \max\{ \vec{s} \})}\exp(\vec{s}_j)}{\cancel{\exp(- \max\{ \vec{s} \})}\sum_{k=1}^{c} \exp(\vec{s}_k)} = \texttt{softmax}_j(\vec{s}) + \end{split} + \] + + \item[Maximum likelihood estimation] \marginnote{Cross-entropy loss} + Use MLE to estimate the parameters on the probability distribution outputted by the \texttt{softmax} function: + \[ + \begin{split} + \matr{\theta}^* &= \arg\max_\matr{\theta} \mathcal{P}_\text{model}(y^{(1)}, \dots, y^{(N)} | \vec{x}^{(1)}, \dots, \vec{x}^{(N)}; \matr{\theta}) \\ + &= \arg\max_\matr{\theta} \prod_{i=1}^{N} \mathcal{P}_\text{model}(Y = y^{(i)} | X=\vec{x}^{(i)}; \matr{\theta}) \\ + &= \arg\max_\matr{\theta} \sum_{i=1}^{N} \log\mathcal{P}_\text{model}(Y = y^{(i)} | X=\vec{x}^{(i)}; \matr{\theta}) \\ + &= \arg\min_\matr{\theta} \sum_{i=1}^{N} -\log\mathcal{P}_\text{model}(Y = y^{(i)} | X=\vec{x}^{(i)}; \matr{\theta}) \\ + &= \arg\min_\matr{\theta} \sum_{i=1}^{N} -\log\left( \frac{\exp(\vec{s}_{y^{(i)}})}{\sum_{k=1}^{c} \exp(\vec{s}_k)} \right) \\ + &= \arg\min_\matr{\theta} \sum_{i=1}^{N} -\log\left( \exp(\vec{s}_{y^{(i)}}) \right) + \log\left( \sum_{k=1}^{c} \exp(\vec{s}_k) \right) \\ + &= \arg\min_\matr{\theta} \sum_{i=1}^{N} -\vec{s}_{y^{(i)}} + \log\left( \sum_{k=1}^{c} \exp(\vec{s}_k) \right) \\ + \end{split} + \] + + The second term ($\log\left( \sum_{k=1}^{c} \exp(\vec{s}_k)\right)$) is called \texttt{logsumexp} and approximates the max function. + Therefore, the loss can be seen as: + \[ + \mathcal{L}\big( \matr{\theta}, (\vec{x}^{(i)}, y^{(i)}) \big) + = -\vec{s}_{y^{(i)}} + \log\left( \sum_{k=1}^{c} \exp(\vec{s}_k) \right) + \approx -\vec{s}_{y^{(i)}} + \max\{ \vec{s} \} + \] + \end{descriptionlist} + +\end{description} + + +\subsection{Gradient descent} + +\begin{description} + \item[Gradient descent] \marginnote{Gradient descent} + An epoch $e$ of gradient descent does the following: + \begin{enumerate} + \item Classify all training data to obtain the predictions $\hat{y}^{(i)} = f(\vec{x}^{(i)}; \matr{\theta}^{(e-1)})$ + and the loss $\mathcal{L}(\matr{\theta}^{(e-1)}, \matr{D}^\text{train})$. + \item Compute the gradient $\nabla \mathcal{L} = \frac{\partial\mathcal{L}}{\partial \matr{\theta}} (\matr{\theta}^{(e-1)}, \matr{D}^\text{train})$. + \item Update the parameters $\matr{\theta}^{(e)} = \matr{\theta}^{(e-1)} - \texttt{lr} \cdot \nabla \mathcal{L}$. + \end{enumerate} + + \item[Stochastic gradient descent] \marginnote{Stochastic gradient descent} + Reduce the computational cost of gradient descent by computing the gradient of a single sample. + An epoch $e$ of SGD does the following: + \begin{enumerate} + \item Shuffle the training data $\matr{D}^\text{train}$. + \item For $i = 0, \dots, N-1$: + \begin{enumerate} + \item Classify $\vec{x}^{(i)}$ to obtain the prediction $\hat{y}^{(i)} = f(\vec{x}^{(i)}; \matr{\theta}^{(e*N+i)})$ + and the loss $\mathcal{L}\big( \matr{\theta}^{(e*N+i)}, (\vec{x}^{(i)}, y^{(i)}) \big)$. + \item Compute the gradient $\nabla \mathcal{L} = \frac{\partial\mathcal{L}}{\partial \matr{\theta}}\big( \matr{\theta}^{(e*N+i)}, (\vec{x}^{(i)}, y^{(i)}) \big)$. + \item Update the parameters $\matr{\theta}^{(e*N+i+1)} = \matr{\theta}^{(e*N+i)} - \texttt{lr} \cdot \nabla \mathcal{L}$. + \end{enumerate} + \end{enumerate} + + \item[SGD with mini-batches] \marginnote{SGD with mini-batches} + Increase the update accuracy of SGD by using a mini-batch. + An epoch $e$ of SGD with mini-batches of size $B$ does the following: + \begin{enumerate} + \item Shuffle the training data $\matr{D}^\text{train}$. + \item For $u = 0, \dots, U$, with $U = \lceil \frac{N}{B} \rceil$: + \begin{enumerate} + \item Classify the examples $\matr{X}^{(u)} = \{ \vec{x}^{(Bu)}, \dots, \vec{x}^{(B(u+1)-1)} \}$ + to obtain the predictions $\hat{Y}^{(u)} = f(\vec{X}^{(u)}; \matr{\theta}^{(e*U+u)})$ + and the loss $\mathcal{L}\big( \matr{\theta}^{(e*U+u)}, (\matr{X}^{(u)}, \hat{Y}^{(u)}) \big)$. + \item Compute the gradient $\nabla \mathcal{L} = \frac{\partial\mathcal{L}}{\partial \matr{\theta}}\big( \matr{\theta}^{(e*U+u)}, (\matr{X}^{(u)}, \hat{Y}^{(u)}) \big)$. + \item Update the parameters $\matr{\theta}^{(e*U+u+1)} = \matr{\theta}^{(e*U+u)} - \texttt{lr} \cdot \nabla \mathcal{L}$. + \end{enumerate} + \end{enumerate} + + The following properties generally hold: + \begin{itemize} + \item Larger batches provide a smoother estimation of the gradient and allow to better exploit parallel hardware (below a certain limit, there is no gain in time). + \item Smaller batches require more iterations to train but might have a regularization effect for better generalization. + \end{itemize} +\end{description} + + + +\section{Linear classifier} +\marginnote{Linear classifier} + +Determine the class by computing a linear combination of the input. + +Given $c$ classes and a flattened image $\vec{x} \in \mathbb{R}^{i}$, a linear classifier $f$ parametrized on $\matr{W} \in \mathbb{R}^{c \times i}$ is defined as: +\[ f(\vec{x}; \matr{W}) = \matr{W}\vec{x} = \texttt{logits} \] +where the $\texttt{logits} \in \mathbb{R}^{c}$ vector contains a score for each class. + +The prediction is obtained as the index of the maximum score. + +\begin{remark} + Predicting directly the integer encoded classes is not ideal as it would give a (probably) inexistent semantic ordering + (e.g. if $2$ encodes bird and $3$ encodes cat, $2.5$ should not mean half bird and half cat). +\end{remark} + +\begin{remark} + Linear classifiers can be seen as a template-matching method. + Each row of $\matr{W} \in \mathbb{R}^{c \times i}$ is a class template that is cross-correlated with the image to obtain a score. +\end{remark} + +\marginnote{Affine classifier} +In practice, a linear classifier is actually an affine classifier parametrized on $\theta = (\matr{W} \in \mathbb{R}^{c \times i}, \vec{b} \in \mathbb{R}^{c})$: +\[ f(\vec{x}; \theta) = \matr{W}\vec{x} + \vec{b} = \texttt{logits} \] \ No newline at end of file