4.神经网络

1. 神经网络和机器学习

1.1. 大纲

1.1.1. 神经网络

  • 感知机(Perceptron),感知机极限

  • 多层感知机(Multi-Layer Perceptron)

  • BP神经网络

    • 组合函数:Combination Function

    • 激活函数:Activation Function

1.1.2. 深度学习

  • 深度神经网络,Deep Neural Networks, DNN

  • 卷积神经花落,Convolutional Neural Networks, CNN

  • 递归神经网络,Recurrent Neural Networks,RNN

1.2. 感知机(单层)

    感知机是造就神经网络(深度学习)的算法,使用感知机,也能建立计算机。感知机:收到多个输入信号之后,再当做一个信号输出

    x1,x2x_1, x_2是输入信号,yy是输出信号,w1,w2w_1, w_2代表权重,圆圈代表「神经元」或「节点」,输入信号传到神经元时乘上权重(w1x1,w2x2)(w_1x_1, w_2x_2),接下来神经元会计算传过来的信号总和,总和超过一定阈值,输出1,否则输出0,而该数值称之为临界值,使用符号θ\theta表示。

    数学表达式如:

f(x)={0w1x1+w2x2θ1,w1x1+w2x2>θf(x) = \left\{ \begin{aligned} & 0,w_1x_1 + w_2x_2 \le \theta\\ & 1, w_1x_1 + w_2x_2 > \theta \end{aligned} \right.

    权重越重,对应权重信号重要性越高,感知机的逻辑电路:

NAND = Not AND,AND权重全为正,Not AND权重全为负,OR Gate多一个bb处理偏移,此处的bb就是偏置项

AND
NAND
OR

x1x_1

0

0

1

1

0

0

1

1

0

0

1

1

x2x_2

0

1

0

1

0

1

0

1

0

1

0

1

y

0

0

0

1

1

1

1

0

0

1

1

1

    感知机的极限:无法处理XOR的问题(异或),一条支线无法区分0和1。总结:单层感知机只能解决线性问题,无法解决非线性问题。

1.3. 多层感知机

    多层感知机可实现XOR的问题,也可以解决非线性的问题:

    图中的数学表格:

x1x_1

x2x_2

S1S_1

S2S_2

y

0

0

1

0

0

1

0

1

1

1

0

1

1

1

1

1

1

0

1

0

多层感知机利用加深层数:输入层、隐藏层、输出层,可以让应用变得更加灵活。

1.4. 感知机到神经网络

    引入偏置项bb

f(x)={0b+w1x1+w2x201,b+w1x1+w2x2>0f(x) = \left\{ \begin{aligned} & 0,b + w_1x_1 + w_2x_2 \le 0\\ & 1, b + w_1x_1 + w_2x_2 > 0 \end{aligned} \right.

    h(x)函数(将输入信号总和转换成输出信号的函数),一般称为激活函数(Activation Function)。

    组合函数:a=b+w1x1+w2x2a = b + w_1x_1 + w_2x_2,激活函数:y=h(a)y = h(a),此处以临界值为分解来转换输出函数,激活函数又称为阶梯函数(阶跃函数)Step Function,感知机中使用的是Step Function:

  • 感知机激活函数:Step Function,最终区域[0,1]、不连续

  • BP神经网络:Sigmoid Function,h(x)=11+expxh(x) = \frac{1}{1 + exp^{-x}},最终区域[0,1]、连续

  • 深度学习网络:ReLU Function——此时Sigmoid会导致梯度消失或梯度爆炸

    神经网络必须使用非线性的激活函数,如果使用线性函数,增加层数会变得毫无意义,无法发挥多层结构的优点

    ReLU(Rectified Linear Unit),线性整流函数。=:

h(x)={xx>00,x0h(x) = \left\{ \begin{aligned} & x,x > 0\\ & 0, x \le 0 \end{aligned} \right.

    可以解决梯度消失或梯度爆炸问题。

1.5. 输出层设计

  • 用来解决分类和回归问题

  • 解决问题不同,改变输出层的激活函数

  • 回归:输出可使用恒等函数(h(x)=xh(x)=x或Sigmoid函数)

  • 分类:多分类(Softmax函数)或两类(Sigmoid函数)

    Softmax函数在组合函数之后会先计算输出层的组合函数的概率,然后最终保证yy的总和是1.0。

yk=exp(ak)i=1nexp(ai)y_k = \frac{exp(a_k)}{\sum\limits_{i=1}^n exp(a_i)}

2. BP神经网络

    Back Propagation(BP)反向传播神经网络,又称多层感知机(Multi-Layer Perceptrons,MLP),神经元分三类:

  • 输入层

  • 隐藏层(可多层)

  • 输出层(决策层)

    隐藏层:层数多好?节点数好?

  • 没有隐藏层,输出层只有一个神经元,处理的是回归或二分类问题

  • 多一个隐藏层,复杂的二分类问题

  • 多个输出,多分类问题。

    神经网络基本只能接受数值型输入,类别型中,神经网络通常会直接拉平针对不同类别构造一个输入神经元,数值通常是[0,1]之间的区域。

2.1.特征

  • 全连接:Fully Connected,跨层不连接

  • 多隐藏层:Layered,有层的概念

  • 数据往前:Feedforward,从左往右

  • 训练往后:Backward,从右往左(训练修正权重值,计算ww

2.2.构造BP网络

图像识别中,通常范围0 ~ 255,所以通常会将输入除以255,转换成0 ~ 1之间的范围。

    如果计算结果一样,则使用隐藏层少的情况,防止记忆(过拟合)的情况发生,一旦记忆那模型泛化能力就弱了,通常复杂度公式,隐藏层数量根据下边结果往下调整:

H=I×OH = \sqrt{I \times O}

H:隐藏层数量,I:输入层数量,O:输出层数量

    构造步骤:

  1. 构造一个网络架构:1)输入数据格式;2)层数、每层节点数。

  2. 使用训练数据训练该网络:得到最佳权重值,和标准数据误差降到最低。

  3. 撷取训练结果和预测结果。

2.3. 权重修正

    正向传播(Feedforward),输入层的数据是没有神经元构造(参考上图的:组合函数 + 激活函数)的,直接输出到隐藏层。最初的权重值是随机产生[-1,1]之间的值

    逆向权重/偏置项修正(Backward Training),误差后往前传递,误差函数:

j(TjOj)2\sum_j(T_j - O_j)^2

    误差函数用于修正权重值,针对上述误差函数做偏微分

    学习率Learning Rate概念,深度学习中会动态调整Learning Rate:1)该值大,收敛速度快,最终容易遇到瓶颈;2)该值小,收敛速度慢,训练十分耗时,更容易逼近理想权重值。

    调整权重的方式就是梯度下降:区域最佳解。

(略)手算范例

2.4. 数值型数据预处理

2.4.1. 输入层

    BP神经网络接收0 ~ 1之间的值。

    数值型:使用极值正规化:

xi=ximinmaxminx_i = \frac{x_i - min}{max - min}

    类别型

  1. Distributed(Binary)Coding Scheme:二元编码(很少使用,效果差)

  2. 1-of-N Coding Schema:类似独热编码,使用比较多,1个变成N个。

  3. 1-of-N-1 Coding Schema:使用也很多,1个变N-1个。

2.4.2. 输出层

    标准答案也需做标准化,最终结果也需要还原成标准答案。输出层使用一个节点,可直接使用Sigmoid,如果是两个或两个以上节点,只能Softmax了,多分类时输出也需使用1-of-N的方式。

  • 分类:不是0就是1

  • 数值预测(回归):最终结果是0 ~ 1之间

结果需要反算回到原始值。

  • 两层 + 线性函数 + 一个输出 = 线性回归。

  • 两层 + Sigmoid + 一个输出 = 逻辑回归。

  • 两层 + Sigmoid + 多个输出 = 多元逻辑回归。

  • 多层 + Sigmoid + 多个输出 = 非线性回归。

    参考下表(神经网络的等价模型)

输入层
隐藏层
输出层
输出
函数
等价

1

1

1

线性函数

线性回归

1

1

1

逻辑函数(Sigmoid)

逻辑回归

1

1

n

逻辑函数(Sigmoid)

多元逻辑回归

1

n

1

n

逻辑函数(Sigmoid)

非线性回归

3. 深度学习

  • 一种强大的多层神经网络架构

  • 模式识别、信号检测、语言处理多个领域

  • 发展:

    • 单层神经网络:

    • 两层神经网络:Sigmoid,BP为代表

    • 多层神经网络:ReLU,CNN为代表(卷积)

应用案例:人脸识别、图像识别、智能监控、文字识别。

3.1. DNN

    深度神经网络DNN:隐藏层很多的神经网络,标准激活函数使用的Sigmoid——本质是一连串的矩阵运算。如果输出总概率和为1,则输出层的激活函数需使用Softmax(即深度中最后一层使用Softmax)。

  1. 究竟需要多少层?

  2. 每一层需要多少神经元?

  3. 是否可以由系统自己来决定上两个问题的答案?

AutoDL,自动深度学习,可以解决上述两个问题。

  • 平方误差:Square Error

  • 交叉熵:Cross Entropy

    总误差(目标是将该总误差的计算值最小化):

L=r=1RlrL = \sum\limits_{r=1}^R l_r

    Gradient Descent:梯度下降法:1)随机设置权重;2)有技巧地设置权重。

    使用偏微分,计算斜率,根据斜率判断权重的调整方向,权重调整的大小和斜率大小有关。如果多个参数一起考虑?梯度下降法,可以找到局部最佳解(Local Minima),无法得到全局最佳解

  • 图片识别

  • 垃圾邮件过滤

  • 文件分类

    深度是否更好?参数多,效果更好,毫无疑问。

  • 层数多更好?

  • 每一层节点数多更好?

最终结论,加深层的效果更好:Deep -> Modularization。

3.2. 训练效果不好

3.2.1. 损失函数

    选择更好损失函数(Choosing Proper Loss):

  1. 均方误差:Square Error:i=110(yiyi^)2\sum\limits_{i=1}^{10}(y_i - \hat{y_i})^2

  2. 交叉熵:Cross Entropy:i=110yi^lnyi- \sum\limits_{i=1}^{10}\hat{y_i}\ln y_i——标准答案概率越高,该值越小,在做梯度下降时它更能知道下降的方向,收敛更快。

Cross Entropy更优。

3.2.2. 最小批次

    最小批次(Mini-batch),多批同时操作,最后只更新一次参数。

3.2.3. 新激活函数

    新激活函数(Rectified Linear Unit,ReLU):这个函数是一个发散函数,可以解决梯度消失的问题。

3.2.4. 学习率

    动态调整学习率

3.2.5. 动量

    Momentum动量因素(物理方式):在梯度基础之上加上动量构成真实移动距离。

    红色是斜率,绿色是动量,蓝色是实际移动距离。

Adam = Learning Rate + Momentum

3.3. 测试效果不好

防止过拟合

3.3.1. Early Stopping

3.3.2. Dropout

    每次只调整一部分权重,不做全部调整,防止过拟合,这种方式和集成学习的投票选择的方式很像,所以有点像模拟集成学习的过程(模拟图如下):

另外两种:Network Structure、Weight Decay。

3.4. CNN

最早针对图像识别设计的这种特性以及算法。

    卷积神经网络(Convolutional Neural Networks, CNN),DNN最大的缺点是参数量太大,CNN最早是针对图像识别改善DNN的缺点。同时降低参数量也考虑区域信息?改进点:

  1. 不用看整个图像,是否可以直接通过某个神经元侦测某个区域来判断。这个神经元负责侦测,如侦测整张图是否有某个特征。

  2. 将一张大的图像进行取样(subsampling),缩小,1000 x 1000转换成500 x 500,可以用比较少的参数进行识别。

    卷积Convolution + 池化Max Pooling:反复多次,截取图像中的特征,最终输入的不是原始数据。CNN = 截取特征 + DNN

3.4.1. 卷积Convolution

stride = 1,每次移动几位进行过滤,左往右、上往下

    通过过滤器Filter:将原始特征转换成区域特征6 x 6 -> 4 x 4)。如果想要卷积的过后大小和原来的一样,那么需要补零操作:Zero Padding。注意此处的Filter是神经网络执行过程中自动学习的,并不是人为定义。

3.4.2. 池化Pooling

    结果进一步分区,4 x 4分四块,取每个区域的最大值(Max Pooling),最大值证明是Filter 1过滤的结果,如此4 x 4就转换成了2 x 2的区域。Filter在学术上称为Channel(通道),该操作近似于降维(图像数据预处理)。

    最终图如下:

    Filter中的值就作为神经元上的权重值,所以在卷积过程中,同一个Filter对应的权重是共享的(Shared Weights)。

3.4.3. 总结

  • 卷积层(Convolutional Layer):提取输入的不同特征

  • 池化层(Pooling Layer):特征聚合降维

  • 全连接层(Fully-Connected Layer):局部特征结合变成全局特征

3.5. RNN

    递归神经网络(Recurrent Neural Networks, RNN)

    输入通过隐藏层后,会将上一次的输入和本次输出同时作为下一次输入,这种网络架构下数据输入前后是有关系的,所以:前边会影响后边,后边会影响前边,它的输入实际是一连串的数据输入。

Slot Filling

    RNN会有记忆功能,在文本分析时就需要记忆功能——但这种记忆是短期记忆功能,就是上一次隐藏层的输出,最终如下边例子:

    所以RNN必须是序列方式:

    Elman和Jordan

    Bidirectional RNN

最后更新于