Deep Learning

坟墓里寂静无比,埋葬你的是你所有没说出口的话

[toc]

1.深度学习基础

线性模型

示例 y=b+wx1y = b + wx_1,损失是函数 L(b,w)L(b, w) ,计算 yyy^\hat{y} 的差距ee ,计算Loss: L=1NenL = \frac{1}{N} \sum e_n.

ee 有两种:

  • 平均绝对误差(Mean Absolute Error,MAE):e=y^ye = |\hat{y} - y|
  • 均方误差(Mean Squared Error,MSE):e=(y^y)2e = (\hat{y} - y)^2

有一些任务中 yyy^\hat{y} 都是概率分布,这个时候可能会选择交叉熵(cross entropy),

根据不同的 LL 画出的等高图:越大越红,越小越蓝,叫做误差表面(error surface)

image-20240529231730563

接下来是梯度下降(gradient descent)优化LL

w1w0ηLww=w0,b=b0 w^1 \leftarrow w^0 - \eta \left. \frac{\partial L}{\partial w} \right|_{w=w^0, b=b^0} b1b0ηLbw=w0,b=b0 b^1 \leftarrow b^0 - \eta \left. \frac{\partial L}{\partial b} \right|_{w=w^0, b=b^0}

image-20240601062927419

全局最小值(global minima),局部最小值(local minima)。

分段线性曲线

分段线性曲线(piecewise linear curve)可以看作是一个常数,再加上一堆Hard Sigmoid 函数。Hard Sigmoid 函数的特性是当输入的值,当 xx 轴的值小于某一个阈值(某个定值)的时候,大于另外一个定值阈值的时候,中间有一个斜坡。

可以用 Sigmoid 函数来逼近 Hard Sigmoid:

y=c11+e(b+wx1) y = c \cdot \frac{1}{1 + e^{-(b + wx_1)}}

简化表示:

y=cσ(b+wx1) y = c \sigma(b + wx_1)

表达整个函数时:

y=b+iciσ(bi+wix1) y = b + \sum\limits_{i} c_i \sigma(b_i + w_i x_1)

wijw_{ij} 代表在第 ii 个 Sigmoid 里面,乘给第 jj 个特征的权重:

b1+w11x1+w12x2+w13x3 b_1 + w_{11} x_1 + w_{12} x_2 + w_{13} x_3

那么括号中的为:

$$ r_1 = b_1 + w_{11} x_1 + w_{12} x_2 + w_{13} x_3 \\ r_2 = b_2 + w_{21} x_1 + w_{22} x_2 + w_{23} x_3 \\ r_3 = b_3 + w_{31} x_1 + w_{32} x_2 + w_{33} x_3 $$
用矩阵表示:

$$ \begin{bmatrix} r_1 \\ r_2 \\ r_3 \end{bmatrix} = \begin{bmatrix} b_1 \\ b_2 \\ b_3 \end{bmatrix} + \begin{bmatrix} w_{11} & w_{12} & w_{13} \\ w_{21} & w_{22} & w_{23} \\ w_{31} & w_{32} & w_{33} \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix} $$
y=b+cTσ(b+cTa) y = b + \mathbf{c}^T \mathbf{\sigma(b + \mathbf{c}^T \mathbf{a})}

计算θ\theta

首先给定θ\theta的值,即某一组 WW , b b , cT c^T , b b 的值。记最小的θ\thetaθ\theta^*,计算每一个未知的参数对 LL 的微分,得到向量 gg :g=L(θ0)g = \nabla L(\theta_0)L\nabla L代表梯度

$$ g = \begin{bmatrix} \left. \frac{\partial L}{\partial \theta_1} \right|_{\theta=\theta_0} \\ \left. \frac{\partial L}{\partial \theta_2} \right|_{\theta=\theta_0} \\ \vdots \\ \end{bmatrix} $$
$$ \begin{bmatrix} \theta^1_1 \\ \theta^2_1 \\ \vdots \end{bmatrix} \leftarrow \begin{bmatrix} \theta^1_0 \\ \theta^2_0 \\ \vdots \end{bmatrix} - \eta \begin{bmatrix} \left. \frac{\partial L}{\partial \theta_1} \right|_{\theta=\theta_0} \\ \left. \frac{\partial L}{\partial \theta_2} \right|_{\theta=\theta_0} \\ \vdots \\ \end{bmatrix} $$

即:

θ1θ0ηg \theta^1 \leftarrow \theta^0 - \eta g

实际使用梯度下降的时候,会把 NN 笔数据随机分成一个一个的批量(batch),把所有的批量都看过一次,称为一个回合(epoch)。

image-20240601013602158

模型变形

Hard Sigmoid不一定非得是Soft Sigmoid,还可以是两个修正线性单元(Rectified Linear Unit,ReLU)的加总。

cmax(0,b+wx1) c \cdot \max(0, b + wx_1)

Sigmoid 或 ReLU 称为激活函数(activation function)。

y=b+iciσ(bi+jwijxj) y = b + \sum\limits_{i} c_i \sigma(b_i + \sum\limits_jw_{ij} x_j) y=b+2icimax(0,bi+jwijxj) y = b + \sum\limits_{2i} c_i max(0,b_i + \sum\limits_jw_{ij} x_j) 训练数据: {(x^1, y^1), (x^2, y^2), \ldots, (x^N, y^N)} 测试数据: x^{N+1}, x^{N+2}, \ldots, x^{N+M}

2.深度学习基础

局部极小值与鞍点

局部极小值与鞍点:

image-20240601125854520

判断临界值种类的方法

θ \theta' 附近的 L(θ) L(\theta) 可近似为 :

L(θ)L(θ)+(θθ)Tg+12(θθ)TH(θθ) L(\theta) \approx L(\theta') + (\theta - \theta')^T g + \frac{1}{2} (\theta - \theta')^T H (\theta - \theta')

上式是泰勒级数近似,gi g_i 是向量 g g 的第 i i 个元素,就是 L L 关于 θ \theta 的第 i i 个元素的微分,即

gi=L(θ)θi g_i = \frac{\partial L(\theta')}{\partial \theta_i}

光看 gg 还是没有办法完整地描述 L(θ)L(\theta),第三项跟海森矩阵(Hessian matrix)HH 有关,HH 里面是 LL 的二次微分。它第 ii 行,第 jj 列的值 HijH_{ij} 就是把 θ\theta 的第 ii 个元素对 L(θ)L(\theta') 作微分,再把 θ\theta 的第 jj 个元素对 L(θ)θi\frac{\partial L(\theta')}{\partial \theta_i} 作微分后的结果,即

Hij=2θiθjL(θ) H_{ij} = \frac{\partial^2}{\partial \theta_i \partial \theta_j}L(\theta')

可以根据12(θθ)TH(θθ)\frac{1}{2} (\theta - \theta')^T H (\theta - \theta')来判断在 θ \theta' 附近的误差表面(error surface)到底长什么样子。用向量 v \mathbf{v} 来表示 θθ \theta - \theta' (θθ)TH(θθ) (\theta - \theta')^T H (\theta - \theta') 可改写为 vTHv v^T H v

有三种情况:

  1. 1
  2. 12
  3. 3

批量和动量

一般梯度下降:

image-20240601141204194

引入动量:

image-20240601141228017

自适应学习率

在训练时,Loss会来回振荡:

image-20240601141405369

AdaGrad

AdaGrad(Adaptive Gradient)是典型的自适应学习率方法,其能够根据梯度大小自动调整学习率。

梯度下降更新某个参数 θti\theta_{t}^{i} 的过程为

θt+1iθtiηgti \theta_{t+1}^{i} \leftarrow \theta_{t}^{i} - \eta g_{t}^{i}

θti\theta_{t}^{i}在第 tt 个迭代的值减掉在第 tt 个迭代参数 ii 算出来的梯度。

gti=Lθiθ=θt g_{t}^{i} = \frac{\partial L}{\partial \theta^{i}} \bigg|_{\theta=\theta_t}

gitg^t_i 代表在第 tt 个迭代,即 θ=θt\theta = \theta_{t} 时,参数 θi\theta^{i} 对损失 LL 的微分,学习率是固定的。

现在要有一个随着参数定制化的学习率,即把原来学习率 η\eta 变成 ησti\frac \eta {\sigma^i_t}

其中,上标 ii 表示参数 σ\sigma 与参数 ii 相关,不同的参数有不同的 σ\sigma;下标 tt 表示参数 σ\sigma 与迭代 tt 相关,不同的迭代也会有不同的 σ\sigma

参数更新过程:

θ1iθ0iησ0ig0i \theta_{1}^{i} \leftarrow \theta_{0}^{i} - \frac \eta {\sigma^i_0}g^i_0

其中 θ0i\theta^i_0 是初始化参数。而 σ0i\sigma_0^i 的计算过程为

σ0i=(g0i)2=g0i \sigma_0^i = \sqrt{(g^i_0)^2} = |g^i_0|

第二次更新参数过程为:

θ2iθ1iησ1ig1i \theta_{2}^{i} \leftarrow \theta_{1}^{i} - \frac \eta {\sigma^i_1}g^i_1

其中 σ1i\sigma_{1i} 是过去所有计算出来的梯度的平方的平均再开根号,即均方根

σ1i=12[(g0i)2+(g1i)2] \sigma_1^i = \sqrt{\frac{1}{2}\left[\left(g^i_0)^2 + (g_1^i\right)^2\right]}

t+1t + 1 次更新参数的时候:

θt+1iθtiησtigti \theta_{t+1}^{i} \leftarrow \theta_{t}^{i} - \frac \eta {\sigma^i_t}g^i_t

σti=1t+1k=0t(gti)2 \sigma_t^i = \sqrt{\frac{1}{t+1}\sum_{k=0}^{t} (g^i_t)^2}

RMSProp

同一个参数的同个方向,学习率也是需要动态调整的,于是就有了RMSprop(Root Mean Squared propagation)

第一步与Adarad一样:

σ0i=(g0i)2=g0i \sigma_0^i = \sqrt{(g^i_0)^2} = |g^i_0|

第二步更新过程为

θ2iθ1iησ1ig1i \theta_{2}^{i} \leftarrow \theta_{1}^{i} - \frac \eta {\sigma^i_1}g^i_1 σ1i=α(σ0i)2+(1α)(g1i)2 \sigma_1^i = \sqrt{\alpha (\sigma_0^i)^2 + (1 - \alpha) (g^i_1)^2}

之后亦是如此

Adam

最常用的优化的策略或者优化器(optimizer)是Adam(Adaptive moment estimation)

Adam 可以看作 RMSprop 加上动量

学习率优化

观察下图:

image-20240601144731168

通过学习率调度(learning rate scheduling)可以解决这个问题。

θt+1iθtiηtσtigti \theta_{t+1}^{i} \leftarrow \theta_{t}^{i} - \frac {\eta_t} {\sigma^i_t} g^i_t

学习率调度中最常见的策略是学习率衰减(learning rate decay),也称为学习率退火(learning rate annealing)。随着参数的不断更新,让 η\eta 越来越小

除了学习率下降以外,还有另外一个经典的学习率调度的方式———预热。预热的方法是让学习率先变大后变小,至于变到多大、变大的速度、变小的速度是超参数。

如果读者想要学更多有关预热的东西可参考 Adam 的进阶版———RAdam

LIU L, JIANG H, HE P, et al. On the variance of the adaptive learning rate and beyond [J]. arXiv preprint arXiv:1908.03265, 2019.

分类