Skip to content

Deep Learning - Notes

本笔记参考以下资源:

§1 Regression & Classification

1.1 Linear Regression

见:机器学习:面向深度学习的传统ML基础 - @Ezra_Yang - 线性回归

1.2 Logistic Regression

见:机器学习:面向深度学习的传统ML基础 - @Ezra_Yang - 逻辑回归

§2 Neural Networks

2.1 Neural Networks

2.1.1 What is Neural Networks?

神经网络作为一种机器学习模型,通过将简易的”神经元”分层堆叠,从数据中学习模式识别的权重与偏置,从而建立输入到输出的映射关系。

层次划分:整体上神经网络会被分为输入层,隐藏层,和输出层。输入层就是原始特征,输出层就神经网络最终的输出。除了输入层和输出层,剩下的层都是隐藏层

neural-network

神经元:如图,除了输入层,其他层的每一个圆点,都代表一个神经元。

现阶段可以认为:一个神经元代表一个逻辑回归。

深度神经网络:只要隐藏层大于1层的神经网络都可以叫做深度神经网络。

神经网络的计算:以上图为例

对于一个输入 $x$ ,当该输入通过一个神经元时,若该神经元的权重为 $\omega$ ,偏差为 $b$ ,则输入神经元的数据为 ${\omega}x+b$ ,通过神经元时代入激活函数(如逻辑回归的Sigmoid函数),输出函数值。

整体而言,神经网络通过矩阵进行计算,这种方式十分利好GPU加速计算。

理论上,神经网络可以拟合任何函数。

2.1.2 Activation Functions

激活函数:每层神经元设置的函数,模拟大脑内的神经抑制、激活。没有激活函数,不论几层的神经网络都是一个线性回归。激活函数的作用是引入非线性。

常见的激活函数:

Sigmoid 函数

$$sigmoid(x)=\frac{1}{1+e^{-x}}$$

sigmoid

作用:将任意实数映射到0到1之间。适用于二分类问题神经网络的最后一层唯一神经元的激活函数。

Tanh 函数

$$tanh(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}$$

tanh

ReLU 函数

$$ReLU(x)=max(x,0)$$

relu

ReLU函数是目前深度学习里最常用的激活函数。

Leaky ReLU 函数

$$LeakyReLU(x)=x, x>=0$$

$$LeakyReLU(x)={\alpha}x, 0<{\alpha}<1, x<0$$

leaky-relu

2.1.3 Classification with Softmax Regression

神经网络的多分类方法:Softmax 函数

  • 设置输出层神经元个数为需分类的总个数,每个神经元输出属于该类的概率;对于神经网络,输出层经过线性回归,还没有经过激活函数的值,叫做 logits

  • 对于第i个logits值输出的概率值,通过softmax计算公式如下:

    $$o_i=\frac{e^{z_i}}{e^{z_1}+e^{z_2}+…+e^{z_n}}$$

  • softmax可以放大logtis之间的差异,加快训练速度。

  • loss函数:交叉熵。如果是对于批量样本计算loss,batch size 是N,则总的交叉熵损失就为:
    $$
    loss = -\frac{1}{N}\sum_{n=1}^{N}\sum_{i=1}^{C} y_i^n \log(p_i^n)
    $$

2.1.4 Backpropagation

神经网络里每层的权重和偏置都可以看成是一个由多个参数构成的矩阵。反向传播时需要计算每个权重和偏置的梯度,实际上就是用最终的loss值对每一个参数求导,这些对单个参数的求导计算可以通过矩阵运算进行加速。

梯度消失、梯度爆炸

2.2 Deep Neural Networks

2.2.1 Regularization

正则化(Regularization):限制模型的复杂度,从而改进模型泛化能力。

L1正则化:在损失函数中额外加入模型所有参数的绝对值之和作为惩罚项

模型训练时,尽可能让某些参数为0,降低模型复杂度:
$$
Loss_{L1}=Loss(\theta)+\lambda\sum_{i}|{\theta_i}|
$$
其中 $\theta$ 为模型参数,$ \lambda$ 是控制正则化强度的参数,一般初始设置为1e-3或者1e-4。

设置过大会导致模型欠拟合。

在训练过程中可以进根据实际情况进行调整,调整原则为如果数据量越少,模型越复杂,输入特征越多,那么 $λ$ 就越大。

L2正则化:在损失函数中额外加入模型所有参数的平方之和作为惩罚项
$$
Loss_{L1}=Loss(\theta)+\lambda\sum_{i}{\theta_i^{2}}
$$
L2正则化会让模型参数变小,但是不会等于0。

一般情况下都默认使用L2正则化,很少使用L1正则化。

2.2.2 Exponentially Weighted Average

指数加权平均是指利用加权平均的思想,并且老的数据的权重按照指数衰减的算法。

对于一个真实数据数列 ${A_i}$ 和其预测数据数列 ${a_i}$ ,$a_0=0$ ,设定一个在 $[0, 1]$ 之间的超参数 $\beta$ ,它越小,越老的数据,权重衰减的越厉害,在最终预测结果里占的比重越小。

则:预测数列的递推公式为
$$
a_{i+1}={\beta}a_i+(1-{\beta})A_i
$$
这样我们就可以用前 i 个数据的指数加权平均值来作为对 i+1 个数据的预测。

问题:前几天的预测数列值很小,和真实值偏差大。

改进:计算完公式之后,除以 $1-{\beta}^{i}$ 。即:
$$
a_i=\frac{\beta a_{i-1}+(1-\beta)A_{i-1}}{1-\beta^i}
$$

2.2.3 Momentum

梯度下降算法的两个问题:接近最优点时发生梯度震荡;loss函数极小导致梯度消失

动量梯度下降:使用指数加权平均来更新参数。作用就是抑制震荡,惯性加速

以对 $w$ 参数的更新为例,首先计算 $w$ 的梯度:

$$
g_w = \frac{\partial loss}{\partial w}
$$

我们定义变量 $V_w$,表示 $g_w$ 的指数加权平均值,每个 batch 按照下边的公式更新自身值:

$$
V_w = \beta V_w + (1 - \beta)g_w
$$

更新 $w$ 参数,$lr$ 是学习率:

$$
w = w - lrV_w
$$

可以看到在训练过程中,对于参数 $w$,一直需要保存一个指数加权平均值 $V_w$。另外 $\beta$ 的取值一般为 $0.9$。

About this Post

This post is written by Ezra Yang, licensed under CC BY-NC 4.0.

#Deep Learning #AI #notes

Comments