From 5459898836097b6540bc1c5214f728911730b239 Mon Sep 17 00:00:00 2001 From: judsonupchurch Date: Sun, 19 Jan 2025 19:04:25 +0000 Subject: [PATCH] Exported most recent notes --- lecture18_21/notes_18.pdf | Bin 0 -> 70443 bytes lecture18_21/notes_18.py | 317 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 317 insertions(+) create mode 100644 lecture18_21/notes_18.pdf create mode 100644 lecture18_21/notes_18.py diff --git a/lecture18_21/notes_18.pdf b/lecture18_21/notes_18.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c5a047b1cdad5809af4b7f89eb92453ebc059110 GIT binary patch literal 70443 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 cU2 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 Png}g^B_(5P6aK#e-DP3J literal 0 HcmV?d00001 diff --git a/lecture18_21/notes_18.py b/lecture18_21/notes_18.py new file mode 100644 index 0000000..38bcd84 --- /dev/null +++ b/lecture18_21/notes_18.py @@ -0,0 +1,317 @@ +# %% [markdown] +# # Previous Class Definitions + +# %% +# imports +import matplotlib.pyplot as plt +import numpy as np +import nnfs +from nnfs.datasets import spiral_data, vertical_data +nnfs.init() + +# %% +class Layer_Dense: + def __init__(self, n_inputs, n_neurons): + # Initialize the weights and biases + self.weights = 0.01 * np.random.randn(n_inputs, n_neurons) # Normal distribution of weights + self.biases = np.zeros((1, n_neurons)) + + def forward(self, inputs): + # Calculate the output values from inputs, weights, and biases + self.output = np.dot(inputs, self.weights) + self.biases # Weights are already transposed + +class Activation_ReLU: + def forward(self, inputs): + self.output = np.maximum(0, inputs) + +class Activation_Softmax: + def forward(self, inputs): + # Get the unnormalized probabilities + # Subtract max from the row to prevent larger numbers + exp_values = np.exp(inputs - np.max(inputs, axis=1, keepdims=True)) + + # Normalize the probabilities with element wise division + probabilities = exp_values / np.sum(exp_values, axis=1,keepdims=True) + self.output = probabilities + +# Base class for Loss functions +class Loss: + '''Calculates the data and regularization losses given + model output and ground truth values''' + def calculate(self, output, y): + sample_losses = self.forward(output, y) + data_loss = np.average(sample_losses) + return data_loss + +class Loss_CategoricalCrossEntropy(Loss): + def forward(self, y_pred, y_true): + '''y_pred is the neural network output + y_true is the ideal output of the neural network''' + samples = len(y_pred) + # Bound the predicted values + y_pred_clipped = np.clip(y_pred, 1e-7, 1-1e-7) + + if len(y_true.shape) == 1: # Categorically labeled + correct_confidences = y_pred_clipped[range(samples), y_true] + elif len(y_true.shape) == 2: # One hot encoded + correct_confidences = np.sum(y_pred_clipped*y_true, axis=1) + + # Calculate the losses + negative_log_likelihoods = -np.log(correct_confidences) + return negative_log_likelihoods + +# %% [markdown] +# # Previous Notes and Notation +# The previous notation is clunky and long. From here forward, we will use the following notation for a layer with $n$ inputs and $i$ neurons. The neruon layer has is followed by an activation layer and then fed into a final value $y$ with a computed loss $l$. There can be $j$ batches of data. +# +# $\vec{X_j} = \begin{bmatrix} x_{1j} & x_{2j} & \cdots & x_{nj} \end{bmatrix}$ -> Row vector for the layer inputs for the $j$ batch of data. +# +# $\overline{\overline{W}} = \begin{bmatrix} \vec{w_{1}} \\ \vec{w_{2}} \\ \vdots \\ \vec{w_{i}} \end{bmatrix} = \begin{bmatrix} w_{11} & w_{12} & \cdots & w_{1n} \\ w_{21} & w_{22} & \cdots & w_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ w_{i1} & w_{i2} & \cdots & w_{in}\end{bmatrix}$ -> Matrix of weight values. Each row is a neuron's weights and each column is the weights for a given input. +# +# $\vec{B} = \begin{bmatrix} b_1 & b_2 & \cdots & b_i \end{bmatrix}$ -> Row vector for the neuron biases +# +# $\vec{Z_j} = \begin{bmatrix} z_{1j} & z_{2j} & \cdots & z_{ij} \end{bmatrix}$ -> Row vector for the neuron outputs for the $j$ batch of data. +# +# $\vec{A_j} = \begin{bmatrix} a_{1j} & a_{2j} & \cdots & a_{ij} \end{bmatrix}$ -> Row vector for the activation later outputs for the $j$ batch of data. +# +# $y_j$ -> Final layer output for the $j$ batch of data if the layer is the final layer (could be summation, probability, etc). +# +# $l_j$ -> Loss for the $j$ batch of data. +# +# The $j$ is often dropped because we typically only need to think with 1 set of input data. +# +# ## Gradient Descent Using New Notation +# We will look at the weight that the $i$ neuron applies for the $n$ input. +# +# $\frac{\delta l}{\delta w_{in}} = \frac{\delta l}{\delta y} \frac{\delta y}{\delta a_i} \frac{\delta a_i}{\delta z_i} \frac{\delta z_i}{\delta w_{in}}$ +# +# Similarly, for the bias of the $i$ neuron, there is +# +# $\frac{\delta l}{\delta b_{i}} = \frac{\delta l}{\delta y} \frac{\delta y}{\delta a_i} \frac{\delta a_i}{\delta z_i} \frac{\delta z_i}{\delta b_{i}}$ +# +# For the system we are using, where $l = (y-0)^2$ and the activation layer is ReLU, we have +# +# $\frac{\delta l}{\delta y} = 2y$ +# +# $\frac{\delta y}{\delta a_i} = 1$ +# +# $\frac{\delta a_i}{\delta z_i} = 1$ if $z_i > 0$ else $0$ +# +# $\frac{\delta z_i}{\delta w_{in}} = x_n$ +# +# $\frac{\delta z_i}{\delta b_{i}} = 1$ +# +# ## Matrix Representation of Gradient Descent +# We can simplify by seeing that $\frac{\delta l}{\delta y} \frac{\delta y}{\delta a_i} \frac{\delta a_i}{\delta z_i} = \frac{\delta l}{\delta z_i}$ is a common term. +# +# We take $\frac{\delta l}{\delta z_i}$ and turn it into a 1 x $i$ vector that such that +# +# $\frac{\delta l}{\delta \vec{Z}} = \begin{bmatrix} \frac{\delta l}{\delta z_1} & \frac{\delta l}{\delta z_2} & \cdots & \frac{\delta l}{\delta z_i} \end{bmatrix}$ +# +# We than can get that the gradient matrix for all weights is a $i$ x $n$ matrix given by +# +# $\frac{\delta l}{\delta \overline{\overline{W}}} = \begin{bmatrix} \frac{\delta l}{\delta w_{11}} & \frac{\delta l}{\delta w_{12}} & \cdots & \frac{\delta l}{\delta w_{1n}} \\ \frac{\delta l}{\delta w_{21}} & w\frac{\delta l}{\delta w_{22}} & \cdots & \frac{\delta l}{\delta w_{2n}} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\delta l}{\delta w_{i1}} & \frac{\delta l}{\delta w_{i2}} & \cdots & \frac{\delta l}{\delta w_{in}} \end{bmatrix} = \begin{bmatrix} \frac{\delta l}{\delta z_1} \\ \frac{\delta l}{\delta z_2} \\ \vdots \\ \frac{\delta l}{\delta z_n} \end{bmatrix} \begin{bmatrix} \frac{\delta z_1}{\delta w_{i1}} & \frac{\delta z_1}{\delta w_{i1}} & \cdots & \frac{\delta z_1}{\delta w_{in}} \end{bmatrix} = \begin{bmatrix} \frac{\delta l}{\delta z_1} \\ \frac{\delta l}{\delta z_2} \\ \vdots \\ \frac{\delta l}{\delta z_n} \end{bmatrix} \begin{bmatrix} x_1 & x_2 & \cdots & x_n \end{bmatrix}$ +# +# Similarly, the gradient vector for the biases is given by +# $\frac{\delta l}{\delta \vec{B}} = \frac{\delta l}{\delta \vec{Z}} \frac{\delta \vec{Z}}{\delta \vec{B}} = \vec{1} \begin{bmatrix} \frac{\delta l}{\delta z_1} & \frac{\delta l}{\delta z_2} & \cdots & \frac{\delta l}{\delta z_i} \end{bmatrix}$ +# +# ## Gradients of the Loss with Respect to Inputs +# When chaining multiple layers together, we will need the partial derivatives of the loss with respect to the next layers input (ie, the output of the current layer). This involves extra summation because the output of 1 layer is fed into every neuron of the next layer, so the total loss must be found. +# +# The gradient of the loss with respect to the $n$ input fed into $i$ neurons is +# +# $\frac{\delta l}{\delta x_n} = \frac{\delta l}{\delta z_1} \frac{\delta z_1}{\delta x_n} + \frac{\delta l}{\delta z_2} \frac{\delta z_2}{\delta x_n} + ... + \frac{\delta l}{\delta z_i} \frac{\delta z_i}{\delta x_n}$ +# +# +# Noting that $\frac{\delta z_i}{\delta x_n} = w_{in}$ allows us to have +# +# $\frac{\delta l}{\delta \vec{X}} = \begin{bmatrix} \frac{\delta l}{\delta x_1} & \frac{\delta l}{\delta x_2} & \cdots & \frac{\delta l}{\delta x_n} \end{bmatrix} = \begin{bmatrix} \frac{\delta l}{\delta z_1} & \frac{\delta l}{\delta z_2} & \cdots & \frac{\delta l}{\delta z_n} \end{bmatrix} \begin{bmatrix} w_{11} & w_{12} & \cdots & w_{1n} \\ w_{21} & w_{22} & \cdots & w_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ w_{i1} & w_{i2} & \cdots & w_{in} \end{bmatrix}$ +# +# ## Note With Layer_Dense class +# The Layer_Dense class has the weights stored in the transposed fashion for forward propagation. Therefore, the weight matrix must be transposed for the backpropagation. + +# %% [markdown] +# # Adding the Backward Propagation Method to Layer_Dense and ReLU Activation Classes + +# %% +class Layer_Dense: + def __init__(self, n_inputs, n_neurons): + # Initialize the weights and biases + self.weights = 0.01 * np.random.randn(n_inputs, n_neurons) # Normal distribution of weights + self.biases = np.zeros((1, n_neurons)) + + def forward(self, inputs): + # Calculate the output values from inputs, weights, and biases + self.inputs = inputs + self.output = np.dot(inputs, self.weights) + self.biases # Weights are already transposed + + def backward(self, dvalues): + '''Calculated the gradient of the loss with respect to the weights and biases of this layer. + dvalues is equiavelent to a transposed dl_dZ. It is the gradient + of the loss with respect to the outputs of this layer.''' + self.dweights = np.dot(self.inputs.T, dvalues) + self.dbiases = np.sum(dvalues, axis=0, keepdims=0) + self.dinputs = np.dot(dvalues, self.weights.T) + +class Activation_ReLU: + def forward(self, inputs): + self.inputs = inputs + self.output = np.maximum(0, inputs) + + def backward(self, dvalues): + '''Calculated the gradient of the loss with respect to this layer's activation function + dvalues is equiavelent to a transposed dl_dZ. It is the gradient + of the loss with respect to the outputs of this layer.''' + self.dinputs = dvalues.copy() + self.dinputs[self.inputs <= 0] = 0 + +# %% [markdown] +# # Adding the Backward Propagation Method to the Loss_CategoricalCrossEntropy Class + +# %% +class Loss_CategoricalCrossEntropy(Loss): + def forward(self, y_pred, y_true): + '''y_pred is the neural network output + y_true is the ideal output of the neural network''' + samples = len(y_pred) + # Bound the predicted values + y_pred_clipped = np.clip(y_pred, 1e-7, 1-1e-7) + + if len(y_true.shape) == 1: # Categorically labeled + correct_confidences = y_pred_clipped[range(samples), y_true] + elif len(y_true.shape) == 2: # One hot encoded + correct_confidences = np.sum(y_pred_clipped*y_true, axis=1) + + # Calculate the losses + negative_log_likelihoods = -np.log(correct_confidences) + return negative_log_likelihoods + + def backward(self, dvalues, y_true): + samples = len(dvalues) + + # Number of lables in each sample + labels = len(dvalues[0]) + + # if the labels are sparse, turn them into a one-hot vector + if len(y_true.shape) == 1: + y_true = np.eye(labels)[y_true] + + # Calculate the gradient then normalize + self.dinputs = -y_true / dvalues + self.dinputs = self.dinputs / samples + +# %% [markdown] +# # Combined Softmax Activation and Cross Entropy Loss + +# %% +class Activation_Softmax_Loss_CategoricalCrossentropy(): + def __init__(self): + self.activation = Activation_Softmax() + self.loss = Loss_CategoricalCrossEntropy() + + def forward(self, inputs, y_true): + self.activation.forward(inputs) + self.output = self.activation.output + return self.loss.calculate(self.output, y_true) + + def backward(self, dvalues, y_true): + samples = len(dvalues) + + # if the samples are one-hot encoded, turn them into discrete values + if len(y_true.shape) == 2: + y_true = np.argmax(y_true, axis=1) + + # Copy so we can safely modify + self.dinputs = dvalues.copy() + + # Calculate and normalize gradient + self.dinputs[range(samples), y_true] -= 1 + self.dinputs = self.dinputs / samples + +# %% +softmax_outputs = np.array([[0.7, 0.1, 0.2], + [0.1, 0.5, 0.4], + [0.02, 0.9, 0.08]]) +class_targets = np.array([0, 1, 1]) +softmax_loss = Activation_Softmax_Loss_CategoricalCrossentropy() +softmax_loss.backward(softmax_outputs, class_targets) +dvalues1 = softmax_loss.dinputs +print('Gradients: combined loss and activation:') +print(dvalues1) + +# %% [markdown] +# # Optimizer_SGD Class + +# %% +class Optimizer_SGD(): + def __init__(self, learning_rate=0.5): + self.learning_rate = learning_rate + + def update_params(self, layer): + layer.weights += -self.learning_rate * layer.dweights + layer.biases += -self.learning_rate * layer.dbiases + +# %% [markdown] +# ## Optimizer_SGD Class on Spiral Dataset + +# %% +# Create dataset +X, y = spiral_data(samples=100, classes=3) + +# Create Dense layer with 2 input features and 64 output values +dense1 = Layer_Dense(2, 64) + +# Create ReLU activation (to be used with Dense layer) +activation1 = Activation_ReLU() + +# Create second Dense layer with 64 input features (as we take output +# of previous layer here) and 3 output values (output values) +dense2 = Layer_Dense(64, 3) + +# Create Softmax classifier's combined loss and activation +loss_activation = Activation_Softmax_Loss_CategoricalCrossentropy() + +# Create optimizer +optimizer = Optimizer_SGD() + +# Train in loop +for epoch in range(10001): + # Perform a forward pass of our training data through this layer + dense1.forward(X) + + # Perform a forward pass through activation function + # takes the output of first dense layer here + activation1.forward(dense1.output) + + # Perform a forward pass through second Dense layer + # takes outputs of activation function of first layer as inputs + dense2.forward(activation1.output) + + # Perform a forward pass through the activation/loss function + # takes the output of second dense layer here and returns loss + loss = loss_activation.forward(dense2.output, y) + + # Calculate accuracy from output of activation2 and targets + # calculate values along first axis + predictions = np.argmax(loss_activation.output, axis=1) + if len(y.shape) == 2: + y = np.argmax(y, axis=1) + accuracy = np.mean(predictions == y) + + if not epoch % 100: + print(f'epoch: {epoch}, ' + + f'acc: {accuracy:.3f}, ' + + f'loss: {loss:.3f}') + + # Backward pass + loss_activation.backward(loss_activation.output, y) + dense2.backward(loss_activation.dinputs) + activation1.backward(dense2.dinputs) + dense1.backward(activation1.dinputs) + + # Update weights and biases + optimizer.update_params(dense1) + optimizer.update_params(dense2) + + +