Backpropagation is the accounting system that tells each weight how much it contributed to a model's error. Start with a single training example, a prediction $\hat{y}$, and a loss $L(\hat{y}, y)$. The goal is to compute how changing a weight $w$ changes the loss: $$\frac{\partial L}{\partial w}$$ If this derivative is positive, increasing $w$ raises the loss; if it is negative, increasing $w$ lowers the loss.
For a tiny neuron, suppose the pre-activation is $z = wx + b$ and the activation is $a = \sigma(z)$. The loss depends on $a$, while $a$ depends on $z$, and $z$ depends on $w$. The chain rule connects these steps: $$\frac{\partial L}{\partial w} = \frac{\partial L}{\partial a} \cdot \frac{\partial a}{\partial z} \cdot \frac{\partial z}{\partial w}$$ This product is the core idea of backpropagation.
The last term is usually simple. Since $z = wx + b$, the derivative of $z$ with respect to $w$ is just the input: $$\frac{\partial z}{\partial w} = x$$ That means the weight update is scaled by the feature that flowed through that connection. A larger input creates a larger possible responsibility for that weight.
The middle term depends on the activation function. If $a = \sigma(z)$ is the sigmoid function, then $$\frac{\partial a}{\partial z} = a(1-a)$$ This term measures how responsive the neuron is at the current point. When the sigmoid is saturated near zero or one, $a(1-a)$ is small, so the gradient becomes small too.
In a deeper network, each layer passes a local derivative backward. For layer $\ell$, a compact form is: $$\delta^{(\ell)} = ((W^{(\ell+1)})^T \delta^{(\ell+1)}) \odot \sigma'(z^{(\ell)})$$ The error signal from the next layer is pulled backward through the transpose of the weight matrix, then multiplied element by element by the local activation derivative.
Once the gradient is known, gradient descent updates the weight in the opposite direction: $$w \leftarrow w - \eta \frac{\partial L}{\partial w}$$ The learning rate $\eta$ controls the step size. Backpropagation supplies the direction; the optimizer decides how far to move.