watch: AML 10 | Neural Networks

Video 13 Neural Network 2021-11-10

Outline:

  1. Stochastic gradient descent
  2. Neural network model
  3. Backpropagation algorithm

Gradient Descent

  • 沿着误差函数 $\mathbf e$ 的负梯度方向,一步一步最小化 in-sample error。

  • Ein 是(线性/非线性)模型的权重 $\mathbf w$ 的函数:

    $$ E_{in}(\mathbf w) = \frac{1}{N} \sum_{n=1}^N \mathbf e(h(\mathbf x_n), y_n) $$

    $\mathbf e$ 是误差函数,计算假设值与样本真实值之间的误差。复杂的误差函数越难优化。有时不能向 linear regression 那样 one-shot 求出最佳w。可以用梯度下降,一步一步地使误差下降。移动的方向是负梯度方向$-\nabla$,每次移动的大小与 $-\nabla E_{in}$ (Gradient error) 成比例($\eta$是学习率):

    $$ \Delta \mathbf w = - \eta \nabla E_{in}(\mathbf w) $$

    这里$\nabla$ Ein 是基于所有的样本点($\mathbf x_n, y_n$),叫做"batch GD",也就是使用所有点做了一次梯度下降。

Stochastic gradient descent

  • 一次随机选一个点做梯度下降。

    Pick one ($\mathbf x_n, y_n$) at a time. Apply GD to $\mathbf e(h(\mathbf x_n),y_n)$

  • N 次梯度下降的“平均方向”(Average direction)还是等于$-\nabla E_{in}$:

    $$ \mathbb E_n [-\nabla \mathbf e(h(\mathbf x_n), y_n)] = \frac{1}{N} \sum_{n=1}^N -\nabla \mathbf e(h(\mathbf x_n),y_{n}) = -\nabla E_{in} $$

    随机梯度下降是梯度下降的 randomized version

  • SGD 的好处:

    1. 简化计算 (Cheaper computation): 每次只看一个样本点
    2. 随机化 (Randomization): 避免陷入局部最小或鞍点,无法继续优化。如果使用“batch GD”,那么初始位置最关键,因为只走一步,所以容易陷入附近的局部最优。
    3. 简单 (Simple)
  • Rule of thumb (经验法则): $\eta = 0.1$ works

  • 例子:电影评分

    User $u_i$ 的喜好有K个属性,Movie $v_j$ 的也有对应的K个属性。根据这个用户他之前评价过的电影 $r_{ij}$ (rating),调整用户的各属性权重,最小化误差。

    $$ \mathbf e_{ij} = \left( \underbrace{ r_{ij}}{\text{actual}} - \underbrace{\sum{k=1}^K u_{ik}v_{jk}}_{\text{predict}} \right)^2 $$

    反过来,把用户属性输入模型就可以估计某电影的评分

2D perceptron 的break point=4,也就是感知机无法解决异或问题。

Neural Network model

  • 对于从神经元 $i$ 出发,指向第 $l$ 层的神经元 $j$ 的权重 $w_{ij}^{(l)}$

    $$ \begin{cases} 1 \leq l \leq L & \text{隐藏层/输出层序号, 输入层是0} \ 0 \leq i \leq d^{(l-1)} & \text{w出发的神经元: 0代表从bias出发}\ 1 \leq j \leq d^{(l)} & \text{w指向的神经元: 至少有一个,最多有$d^{l}$}\ \end{cases} $$

    第 $l$ 层的某神经元,接受了来自上一层所有神经元的输入(内积):

    $$ x_j^{(l)} = \theta(s_j^{(l)}) = \theta \left( \sum_{i=0}^{d^{(l-1)}} w_{ij}^{(l)} x_i^{(l-1)} \right) $$

    从bias term 开始加到第 $d^{(l-1)}$ 个,把信号 $s_j^{(i)}$ 传入 $\theta$ 非线性激活函数

    一个样本 $\mathbf x$ 有$d^{(0)}$ 个维度,所以输入层对应有:$x_1^{(0)} \cdots x_{d^{(0)}}^{(0)}$,经过一层一层传递,直到最终输出一个值:$x_1^{(L)} = h(\mathbf x)$

Backpropagation algorithm

  • 应用随机梯度下降,调节神经网络的权重,使误差函数最小

  • 网络全部的权重 $\mathbf w = {w_{ij}^{(l)}}$ 决定了一个假设 $h(\mathbf x)$ (输入到输出的映射)

    对于一个样本 $(\mathbf x_n,\ y_n)$ 上的误差:$\mathbf e(h(\mathbf X_n),\ y_n) = \mathbf e(\mathbf w)$,使用SGD,调整权重,减小误差

  • 误差函数对每个权重求梯度:

    $$ \nabla \mathbf e(\mathbf w): \frac{\partial \mathbf e(\mathbf w)}{\partial w_{ij}^{(l)}}, \quad \text{for all } i,j,l $$

  • 计算误差函数 $\mathbf e$ 对各权重 w 的梯度 $\frac{\partial \mathbf e(\mathbf w)}{\partial w_{ij}^{(l)}}$

    误差 $\mathbf e$ 是实际输出 $\theta(s)$ 减去真实值 $y$,所以误差函数首先是 $s_{j}^{(l)}$ 的函数,第 $l$ 层的第 $j$ 个神经元的输入信号$s_{j}^{(l)}$ 是来自上一层所有神经元的输出贡献之和,所以 $s_{j}^{(l)}$ 是 $w_{ij}^{(l)}$ 的函数,根据链式求导法则:

    $$ \frac{\partial \mathbf e(\mathbf w)}{\partial w_{ij}^{(l)}} = \frac{\partial \mathbf e(\mathbf w)}{\partial s_{j}^{(l)}} \times \frac{\partial s_{j}^{(l)}}{\partial w_{ij}^{(l)}} $$

    其中:$\frac{\partial s_{j}^{(l)}}{\partial w_{ij}^{(l)}} = x_i^{(l-1)}$,也就是前一层的神经元的输出。 把误差对输入信号的导数称为:$\delta_j^{(l)} = \frac{\partial \mathbf e(\mathbf w)}{\partial s_{j}^{(l)}}$。

    所以(某神经元上的)误差对各权重 w 的梯度等于:$\frac{\partial \mathbf e(\mathbf w)}{\partial w_{ij}^{(l)}}= \delta_j^{(l)} x_i^{(l-1)}$。

    计算$\delta$:

    从最后一层(输出层$l=L,\ j=1$)的 $\delta_1^{(L)}$ 开始计算,输出神经元的输入信号是 $s_1^{(L)}$:

    $$ \begin{aligned} \delta_1^{(L)} &= \frac{\partial \mathbf e(\mathbf w)}{\partial s_1^{(L)}}\ \mathbf e(\mathbf w) &= \left ( x_1^{(L)}- y_n \right)^2 & \text{预测值-实际值} \ x_1^{(L)} &= \theta(s_1^{(L)}) & \text{神经元的输出是$\theta$的输出} \ \theta’(s) &= 1 - \theta^2(s) & \text{for the tanh} \end{aligned} $$

    之前层 ($l-1$层) 神经元上的误差对其输入信号的导数:

    因为第 $l-1$ 层的某个神经元会对第 $l$ 层的全部神经元都有贡献,所以它的误差来自第 $l$ 层的全部神经元 $\delta_j^{(l)}$,所以需要求和。根据链式法则,误差$\mathbf e$ 从上一层 ($l$层) 过来,所以首先是 $s^{(l)}$ 的函数,然后$s^{(l)}$ 是第 $(l-1)$ 层神经元 $x^{(l-1)}$ 的函数,最后 $x^{(l-1)}$ 才是它输入信号 $s^{(l-1)}$ 的函数:

    $$ \begin{aligned} \delta_i^{(l-1)} &= \frac{\partial \mathbf e(\mathbf w)}{\partial s_i^{(l-1)}} \ &=\sum_{j=1}^{d^{(l)}} \frac{\partial \mathbf{e}(\mathbf{w})}{\partial s_{j}^{(l)}} \times \frac{\partial s_{j}^{(l)}}{\partial x_{i}^{(l-1)}} \times \frac{\partial x_{i}^{(l-1)}}{\partial s_{i}^{(l-1)}} & \text{第$l$层所有神经元误差求和}\

    &=\sum_{j=1}^{d^{(l)}} \delta_{j}^{(l)} \times w_{i j}^{(l)} \times \theta^{\prime}\left(s_{i}^{(l-1)}\right) \

    \delta_{i}^{(l-1)} &=\left(1-\left(x_{i}^{(l-1)}\right)^{2}\right) \sum_{j=1}^{d^{(l)}} w_{i j}^{(l)} \delta_j^{(l)} & \text{$\theta$与j无关,求导放前面; $x_i^{l-1}$也就是$\theta(s)$} \end{aligned} $$

    所以最后一层之前层的神经元的 $\delta$ 等于 1 减去这个神经元输出的平方,再乘上从它出发的各权重与下一层的$\delta$ 的内积之和。最后一层的$\delta^{(L)}$算出来了,才能算倒数第2层的$\delta^{(L-1)}$,从而可以反向地一层一层求出误差$\mathbf e$ 对各个权重 w 的梯度。

  • Backpropagation algorithm:

    1. Initialize all weights $w_{ij}^{(l)}$ at random
    2. for t=0,1,2, …, do //循环
      1. Pick $n \in { 1,2,\cdots,N }$ //从N个样本中挑一个
      2. Forward: Compute all $x_j^{(l)}$ //计算每个神经元的输出,从而得出预测值
      3. Backward: Compute all $\delta_j^{l}$ //计算每个神经元的误差(贡献)
      4. Update the weights: $w_{ij}^{(i)} \leftarrow w_{ij}^{l} - \eta x_i^{(l-1)} \delta_j^{(l)}$ //迭代直到收敛
      5. Iterate to the next step until it is time to stop
    3. Return the final weights $w_{ij}^{l}$

Final remark: hidden layers

隐藏层是在“模仿”非线性变换:把高维样本(线性不可分)变换到新的维度空间,叫做“learned nonlinear transform”。隐藏层的每个神经元是 “learned feature”。

神经元数量越多,自由度越多(有效参数越多),VC维越高,模型复杂度越高,需要更多的样本,才能保证可以从 $E_{in}$ 泛化到Eout.

Example:

Back Propagation(梯度反向传播)实例讲解

令 $x_1=1, x_2=0.5$ ,然后我们令 $w_1, w_2, w_3, w_4$ 的真实值分别是 1,2,3,4 ,令 $w_5, w_6$ 的真实值是 $0.5, 0.6$ 。这样我们可以算出 $y$ 的真实目标值是 $t=4$ 。

那么为了模拟一个Back Propagation的过程,我们假设我们只知道 $x_1=1, x_2=0.5$ ,以及对应的目标 $t=4$ 。我们不知道 $w_1,w_2,w_3,w_4,w_5,w_6$ 的真实值,现在我们需要随机为他们初始化值,假设我们的随机化结果是 $w_1=0.5, w_2=1.5, w_3=2.3, w_4=3, w_5=1, w_6=1$。

  1. Forward: 计算 $h_1, h_2, y$ 的预测值和误差项 E,其中 $E=\frac{1}{2}(t-y)^2$

    $$ \begin{aligned} h_1 &= w_1 \cdot x_1 + w_2 \cdot x_2 = 0.5 \cdot 1 + 1.5 \cdot 0.5 = 1.25 \ h_2 &= w_3 \cdot x_1 + w_4 \cdot x_2 = 2.3 \cdot 1 + 3 \cdot 0.5 = 3.8 \ y &= w_5 \cdot h_1 + w_6 \cdot h_2 = 1 \cdot 1.25 + 1 \cdot 3.8 = 5.05 \ E &= \frac{1}{2} (y-t)^2 = 0.55125 \end{aligned} $$

  2. Backward

    updata $w_5$:

    $$ \begin{aligned} \frac{\partial E}{\partial w_5} &= \frac{\partial E}{\partial y} \cdot \frac{\partial y}{\partial w_5} = (y-t)\cdot h_1 = 1.05 \cdot 1.25 =1.3125 \

    \frac{\partial E}{\partial y} &= (t-y)\cdot -1 = y-t \ \frac{\partial y}{\partial w_5} &= \frac{\partial (w_5 h_1 + w_6 h_2)}{\partial w_5} = h_1 \ w_5^+ &= w_5 - \eta \cdot \frac{\partial E}{\partial w_5} = 1-0.1\cdot 1.3125 = 0.86875 \end{aligned} $$

    updata $w_6$:

    $$ \begin{aligned} \frac{\partial E}{\partial w_6} &= \frac{\partial E}{\partial y} \cdot \frac{\partial y}{\partial w_6} = (y-t)\cdot h_2 = 1.05 \cdot 3.8 = 3.99 \ w_6^+ &= w_6 -\eta \cdot \frac{\partial E}{\partial w_6} = 1-0.1\cdot 3.99 = 0.601 \end{aligned} $$

    下面我们再来看 $w_1, w_2, w_3, w_4$ ,由于这四个参数在同一层,所以求梯度的方法是相同的

    updata $w_1$:

    $$ \begin{aligned} \frac{\partial E}{\partial w_1} &= \frac{\partial E}{\partial y} \cdot \frac{\partial y}{\partial h_1} \cdot \frac{\partial h_1}{\partial w_1} = (y-t) \cdot w_5 \cdot x_1 = 1.05 \cdot 1 \cdot 1 = 1.05 \

    w_1^+ &= w_1 - \eta \cdot \frac{\partial E}{\partial w_1} = 0.5 - 0.1 \cdot 1.05 = 0 .395 \end{aligned} $$

    updata $w_2$:

    $$ \begin{aligned} \frac{\partial E}{\partial w_2} &= \frac{\partial E}{\partial y} \cdot \frac{\partial y}{\partial h_1} \cdot \frac{\partial h_1}{\partial w_2} = (y-t) \cdot w_5 \cdot x_2 = 1.05 \cdot 1 \cdot 0.5 = 0.525 \

    w_2^+ &= w_2 - \eta \cdot \frac{\partial E}{\partial w_2} = 1.5 - 0.1 \cdot 0.525 = 1.4475 \end{aligned} $$

    updata $w_3$:

    $$ \begin{aligned} \frac{\partial E}{\partial w_3} &= \frac{\partial E}{\partial y} \cdot \frac{\partial y}{\partial h_2} \cdot \frac{\partial h_2}{\partial w_3} = (y-t) \cdot w_6 \cdot x_1 = 1.05 \cdot 1 \cdot 1 = 1.05 \

    w_3^+ &= w_3 - \eta \cdot \frac{\partial E}{\partial w_3} = 2.3 - 0.1 \cdot 1.05 = 2.195 \end{aligned} $$

    updata $w_4$:

    $$ \begin{aligned} \frac{\partial E}{\partial w_4} &= \frac{\partial E}{\partial y} \cdot \frac{\partial y}{\partial h_2} \cdot \frac{\partial h_2}{\partial w_4} = (y-t) \cdot w_6 \cdot x_2 = 1.05 \cdot 1 \cdot 0.5 = 0.525 \

    w_4^+ &= w_4 - \eta \cdot \frac{\partial E}{\partial w_4} = 3 - 0.1 \cdot 0.525 = 2.9475 \end{aligned} $$

  3. Forward:

    $$ \begin{aligned} h_1 &= w_1 \cdot x_1 + w_2 \cdot x_2 = 0.395 \cdot 1 + 1.4475 \cdot 0.5 = 1.11875 \ h_2 &= w_3 \cdot x_1 + w_4 \cdot x_2 = 2.195 \cdot 1 + 2.9475 \cdot 0.5 = 3.66875 \ y &= w_5 \cdot h_1 + w_6 \cdot h_2 = 0.97191 + 2.204918 = 3.17683 \ E &= \frac{1}{2} (y-t)^2 = 0.338802 \end{aligned} $$