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. 感知机(单层)
感知机是造就神经网络(深度学习)的算法,使用感知机,也能建立计算机。感知机:收到多个输入信号之后,再当做一个信号输出
是输入信号,是输出信号,代表权重,圆圈代表「神经元」或「节点」,输入信号传到神经元时乘上权重,接下来神经元会计算传过来的信号总和,总和超过一定阈值,输出1,否则输出0,而该数值称之为临界值,使用符号表示。
数学表达式如:
权重越重,对应权重信号重要性越高,感知机的逻辑电路:
NAND = Not AND,AND权重全为正,Not AND权重全为负,OR Gate多一个处理偏移,此处的就是偏置项。
0
0
1
1
0
0
1
1
0
0
1
1
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的问题,也可以解决非线性的问题:
图中的数学表格:
y
0
0
1
0
0
1
0
1
1
1
0
1
1
1
1
1
1
0
1
0
多层感知机利用加深层数:输入层、隐藏层、输出层,可以让应用变得更加灵活。
1.4. 感知机到神经网络
引入偏置项:
h(x)函数(将输入信号总和转换成输出信号的函数),一般称为激活函数(Activation Function)。
组合函数:,激活函数:,此处以临界值为分解来转换输出函数,激活函数又称为阶梯函数(阶跃函数)Step Function,感知机中使用的是Step Function:
感知机激活函数:Step Function,最终区域[0,1]、不连续
BP神经网络:Sigmoid Function,,最终区域[0,1]、连续
深度学习网络:ReLU Function——此时Sigmoid会导致梯度消失或梯度爆炸。
神经网络必须使用非线性的激活函数,如果使用线性函数,增加层数会变得毫无意义,无法发挥多层结构的优点。
ReLU(Rectified Linear Unit),线性整流函数。=:
可以解决梯度消失或梯度爆炸问题。
1.5. 输出层设计
用来解决分类和回归问题
解决问题不同,改变输出层的激活函数
回归:输出可使用恒等函数(或Sigmoid函数)
分类:多分类(Softmax函数)或两类(Sigmoid函数)
Softmax函数在组合函数之后会先计算输出层的组合函数的概率,然后最终保证的总和是1.0。
2. BP神经网络
Back Propagation(BP)反向传播神经网络,又称多层感知机(Multi-Layer Perceptrons,MLP),神经元分三类:
输入层
隐藏层(可多层)
输出层(决策层)
隐藏层:层数多好?节点数好?
没有隐藏层,输出层只有一个神经元,处理的是回归或二分类问题
多一个隐藏层,复杂的二分类问题。
多个输出,多分类问题。
神经网络基本只能接受数值型输入,类别型中,神经网络通常会直接拉平针对不同类别构造一个输入神经元,数值通常是[0,1]之间的区域。
2.1.特征
全连接:Fully Connected,跨层不连接
多隐藏层:Layered,有层的概念
数据往前:Feedforward,从左往右
训练往后:Backward,从右往左(训练修正权重值,计算)
2.2.构造BP网络
图像识别中,通常范围0 ~ 255,所以通常会将输入除以255,转换成0 ~ 1之间的范围。
如果计算结果一样,则使用隐藏层少的情况,防止记忆(过拟合)的情况发生,一旦记忆那模型泛化能力就弱了,通常复杂度公式,隐藏层数量根据下边结果往下调整:
H:隐藏层数量,I:输入层数量,O:输出层数量
构造步骤:
构造一个网络架构:1)输入数据格式;2)层数、每层节点数。
使用训练数据训练该网络:得到最佳权重值,和标准数据误差降到最低。
撷取训练结果和预测结果。
2.3. 权重修正
正向传播(Feedforward),输入层的数据是没有神经元构造(参考上图的:组合函数 + 激活函数)的,直接输出到隐藏层。最初的权重值是随机产生[-1,1]之间的值。
逆向权重/偏置项修正(Backward Training),误差后往前传递,误差函数:
误差函数用于修正权重值,针对上述误差函数做偏微分。
学习率Learning Rate概念,深度学习中会动态调整Learning Rate:1)该值大,收敛速度快,最终容易遇到瓶颈;2)该值小,收敛速度慢,训练十分耗时,更容易逼近理想权重值。
调整权重的方式就是梯度下降:区域最佳解。
(略)手算范例
2.4. 数值型数据预处理
2.4.1. 输入层
BP神经网络接收0 ~ 1之间的值。
数值型:使用极值正规化:
类别型:
Distributed(Binary)Coding Scheme:二元编码(很少使用,效果差)
1-of-N Coding Schema:类似独热编码,使用比较多,1个变成N个。
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)。
究竟需要多少层?
每一层需要多少神经元?
是否可以由系统自己来决定上两个问题的答案?
AutoDL,自动深度学习,可以解决上述两个问题。
平方误差:Square Error
交叉熵:Cross Entropy
总误差(目标是将该总误差的计算值最小化):
Gradient Descent:梯度下降法:1)随机设置权重;2)有技巧地设置权重。
使用偏微分,计算斜率,根据斜率判断权重的调整方向,权重调整的大小和斜率大小有关。如果多个参数一起考虑?梯度下降法,可以找到局部最佳解(Local Minima),无法得到全局最佳解。
图片识别
垃圾邮件过滤
文件分类
深度是否更好?参数多,效果更好,毫无疑问。
层数多更好?
每一层节点数多更好?
最终结论,加深层的效果更好:Deep -> Modularization。
3.2. 训练效果不好
3.2.1. 损失函数
选择更好损失函数(Choosing Proper Loss):
均方误差:Square Error:
交叉熵:Cross Entropy:——标准答案概率越高,该值越小,在做梯度下降时它更能知道下降的方向,收敛更快。
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的缺点。同时降低参数量也考虑区域信息?改进点:
不用看整个图像,是否可以直接通过某个神经元侦测某个区域来判断。这个神经元负责侦测,如侦测整张图是否有某个特征。
将一张大的图像进行取样(
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
最后更新于
这有帮助吗?