深度学习

如果以下的表格及图像出现格式问题,请将你的浏览器中文字体的等宽字体设置好

一.预处理

提取特征量

Human created algorithm: 人想到的算法
         +-----------------------+
-------> |Human created algorithm| --------> 答案
         +-----------------------+

Human created Feature quantity: 人想到的特征量
      +------------------------------------------+       +---------------------------+
----> |Human created Feature quantity(SIF,HGD...)| ----> |Machine learning(svm,knn..)| ---> 答案
      +------------------------------------------+       +---------------------------+

Feature quantity find by computer: 计算机自动寻找特征量
         +-----------------------------------+
         |        Neural Networks            |
-------> |      (Machine learning)           | --------> 答案
         | Feature quantity find by computer |
         +-----------------------------------+

Hyper-Parameter

  1. 设定超参数的范围
  2. 从设定的超参数的范围中随机采样
  3. 使用步骤1中采样到的超参数的值进行学习,通过验证数据,评估识别精度(要将epoch设置得很小)
  4. 重复步骤1和步骤2,根据他们的识别精度的结果缩小超参数的范围

超参数优化参考:贝叶斯最优化

权重

权重的初始值:不应该设置为0/1(设置为0或1,可能造成梯度消失),应选择随机生成初始值

其他权重初始值: He初始值

输出层

输出层的神经数量需要根据待解决的问题来决定,如:对于分类问题,输出层的神经元数量一般设定为类别的数量.

二.激活函数

激活函数用来决定如何来激活(处理)输入的信号.
如:
感知器
a=b+w1x1+w2x2 a = b + w_1x_1 + w_2x_2

signal : 输入的信号
Biasing: 偏置
Weight : 权重

+-----+---------+
|x1 x2| Signal  |
+-----+---------+
|  b  | Biasing |
+-----+---------+
|w1 w2| Weight  |
+-----+---------+
    b   +--------------------+
 1----> |                    |
        | +---+  h()  +---+  |
   w1   | | a | ----> | y |  |
x1----> | +---+       +---+  |
        |                    |
   w2   |                    |
x2----> |                    |
        +--------------------+

sigmoid函数

h(x)=11+exp(1) h(x) = \frac{1}{1+exp(-1)}

阶越函数

在数学中,如果实数域上的某个函数可以用半开区间上的指示函数的有限次线性组合来表示,那么这个函数就是阶跃函数,或者叫赫维赛德函数。换一种不太正式的说法就是,阶跃函数是有限段分段常数函数的组合。

ReLV(Rectified Linear Vnit)函数

f(x)={xx > 00x <= 0f(x)= \begin{cases} x& \text{x > 0}\\ 0& \text{x <= 0} \end{cases}
由于hexo渲染器的问题,此处公式本来应该为两行,如下:

        +- x (x>0)
f(x) =  |
        +- 0 (x<=0)

三.损失函数

表示神经网络性能的"恶劣程度"的指标,及当前的升级网络对监督数据在多大程度上不拟合,在多大程度上不一致.

均方误差

E=12k(yktk)2E = \frac{1}{2} \sum_k (y_k - t_k)^2
kk: 数据的维度
yky_k: 神经网络的输出
tkt_k: 监督数据

交叉熵误差

E=ktklogykE = - \sum_k t_k \log y_k
kk: 数据的维度
yky_k: 神经网络的输出
tkt_k: 监督数据

四.网络层

sigmoid层

y=11+exp(1) y = \frac{1}{1+exp(-1)}

Affine层(仿射变换)

仿射变换包括一次线性变换和一次平移变换,分别对应神经网络的加权和运算与加偏置运算

Convolutional Neural Network(卷积神经网络,CNN)

卷积层

                       滤波器(相当于权重)                     偏置
+---+---+---+---+
| 1 | 2 | 3 | 0 |       +---+---+---+
+---+---+---+---+       | 2 | 0 | 1 |         +---+---+                 +---+---+
| 0 | 1 | 2 | 3 |       +---+---+---+         |15 | 16|    +---+        |18 | 19|
+---+---+---+---+   ⨀   | 0 | 1 | 2 |  ---->  +---+---+  + | 3 |   ---> +---+---+
| 3 | 0 | 1 | 2 |       +---+---+---+         | 6 | 15|    +---+        | 9 | 18|
+---+---+---+---+       | 1 | 0 | 2 |         +---+---+                 +---+---+
| 2 | 4 | 0 | 1 |       +---+---+---+
+---+---+---+---+

OH=H+2PFHS+1O_H = \frac{H+2P-F_H}{S} + 1
OW=W+2PFWS+1O_W = \frac{W+2P-F_W}{S} + 1
输出大小:OH,OWO_H,O_W
滤波器大小:FH,FWF_H,F_W
填充大小:PP , 调整输出大小为相同大小的矩阵
步幅:SS , 应用滤波器的间隔

池化层(缩小高长方向上的空间的运算,提高鲁棒性)

如:max池

                  Max池
+---+---+---+---+
| 1 | 2 | 1 | 0 |
+---+---+---+---+             +---+---+
| 0 | 1 | 2 | 3 |     Max     | 2 | 3 |
+---+---+---+---+  ------->   +---+---+
| 3 | 0 | 1 | 2 |             | 4 | 2 |
+---+---+---+---+             +---+---+
| 2 | 4 | 0 | 1 |
+---+---+---+---+

全连接层

全连接层就是一般的激活函数,在tensorflow也是Dense,放在卷积层和池化层之后进行数据的处理

CNN代表网络

LeNet

激活函数: sigmoid
池化方法: 子采样

AlexNet

激活函数: ReLV
局部正规化 LRN(Local Response Normalization)并使用Dropout

五.优化函数

梯度下降法

  • 导数: 使用数值微分近似替代导数
  • 偏导数: 与导数相同
  • 梯度: 由全部变量的偏导数汇总而成的向量称为梯度,方向向量变化最快的地方,方向向量的导数.
    如:(γfγx0,γfγx1) (\frac{\gamma_f}{\gamma_{x_0}},\frac{\gamma_f}{\gamma_{x_1}})
  • 负梯度方向: 是梯度法中变量更新的方向,梯度指示的方向是各点处的函数值减少量最多的方向.
  • 步骤
    1. mini-batch
    2. 计算梯度: 求出各个权重参数的梯度
    3. 更新参数: 将权重沿梯度方向进行微小更新
    4. 重复: 重复步骤1,2,3

BGD(批量梯度下降法)

是梯度下降法的其中一种

SGD(随机梯度下降法)

是梯度下降法的其中一种
随机梯度下降是通过每个样本来迭代更新一次,对比上面的批量梯度下降,迭代一次需要用到所有训练样本

M-BGD(min-batch 小批量梯度下降法)

min-batch: 在所有数据中,随机选取一部分数据

Momentum

vαvηγLγW v \leftarrow \alpha{v} - \eta{\frac{\gamma_L}{\gamma_W}}
WW+v W \leftarrow W + v
WW: 权重
γLγW\frac{\gamma_L}{\gamma_W}: 损失函数关于W的梯度
η\eta: 学习率
vv: 速度

AdaGrad

为参数的每个元素适当的调整学习率
learning rate decay:学习率衰减的方法,一开始"多"学,然后逐渐少学
hh+γLγWγLγWh \leftarrow h + \frac{\gamma_L}{\gamma_W} \bigodot \frac{\gamma_L}{\gamma_W}
WWη1hγLγWW \leftarrow W - \eta{\frac{1}{\sqrt h}}{\frac{\gamma_L}{\gamma_W}}
\bigodot: 表示对立矩阵元素的乘法
WW: 权重参数
γLγW\frac{\gamma_L}{\gamma_W}: 损失函数关于W的梯度
η\eta: 学习率

Adam(融合AdaGrad和Momentum)

具体内容请查看原论文

抑制过拟合

softMax层

softMax层是把输入值正规化后再输出

        +---+
5.3 --> | s | --> 0.008
0.3 --> | o | --> 0.00005
10.1--> | f | --> 0.991
   .    | t |  .
   .    | m |  .
   .    | a |  .
   .    | x |  .
0.01--> |   | --> 0.00004
        +---+

batch normalization(批量正则化)

正则化

μB1mi=1mxi\mu_B \leftarrow {\frac{1}{m}}{\sum_{i=1}^m}{x_i}
σB21mi=1m(xiμB)2\sigma^2_B \leftarrow {\frac{1}{m}}{\sum_{i=1}^m}{(x_i-\mu_B)^2}
x^ixiμBσB2+ε\hat{x}_i \leftarrow \frac{x_i-\mu_B}{\sqrt {\sigma^2_B + \varepsilon}}
μB\mu_B: 均值
σB2\sigma^2_B: 方差
进行缩放和平移:yiγx^i+βy_i \leftarrow \gamma \hat{x}_i + \beta (γ\gammaβ\beta为参数,初值为1和0)

正则化步骤:

  1. 权值衰减(抑制过拟合): 为损失函数加上12λW2{\frac{1}{2}}{\lambda}{W^2} (λ\lambda:控制正则化强度的超参数 W:权重)
  2. Dropout:在学习过程中随机删除神经元的方法

六.整个训练过程

  1. 初始化
    • 网络初始化
    • 优化器初始化
  2. mini-batch
  3. 计算梯度 -> 更新梯度 -> 优化梯度
  4. 获取损失函数