じゅうきゅう: ANN
文章目录
- 神经元、**函数、前馈神经网络
- 感知器
- 卷积神经网络及其实现
19.1神经网络概述
- ANN是模拟人脑神经网络而生的一种机器学习算法。
- 人脑通过几十亿神经元和千万亿个突触对视觉、听觉等各类刺激做出反应,而学习的过程,就是神经元改变相互连接方式的过程,从而使得人类能对刺激做出合理的反应。
- ANN模拟脑神经学习的过程,神经网络由大量输入/输出单元(神经元)互连而成,每个连接都会有一定的权重。
- 每个神经元接受输入后,最开始只是简单的线性加权,后来给每个神经元加上了非线性的**函数,从而进行非线性变换后得到输出。
- 学习阶段,通过调整权重的大小,神经网络使得对输入的样本的预测结果越来越接近真实的标签,即让总预测误差最小。
19.2神经网络关键概
19.2.1神经元
- 神经元是神经网络的基本组成,称“节点”,作用是从其他的节点或原始数据处获得输入,然后计算并产生输出。
- 两个互相连接的节点之间都有一个对应的“权重”,代表该节点与相连节点的相对重要程度(图19-2-1上的,W2和b)。
- 节点工作方式:
- 接收上一层节点或原始数据的输入(X1,X2和1),加权求和(即求),
- 经过函数f变换,产生一个输出Y
- 偏置项b调节**函数的输出
19.2.2**函数
- f称“**函数”,将加权求和后的数值转化为最终的输出。
- f可以是一个线性函数,但真实数据不会只有线性关系,
- 需更复杂的**函数来引入非线性关系。
- 在生物神经网络中,如果某个神经元的电位超过了某个值,
- 那么该神经元就会被**,
- 向其他相连接的神经元发送化学和电信号。
- **函数即模拟这一过程,将某个节点收到的输入值汇总,
- 经过**函数处理后产生神经元的输出。
- 将很多个这样的神经元按某种层次结构组合在一起,就得到了一个神经网络结构。
- 19-2-3为例,
- 通常数据不会只有那么简单的关系,因此需要更多层的网络结构、
- 更复杂的**函数来学习数据间的关系。
19.2.3常用**函数
(1) Sigmoid函数
- 输入x,转到(0,1)。
- x非常大时,f(x)趋1,非常小的负数时,趋0。
- 压缩至0~1有何用处呢?
- 便可把**函数看作一种“分类的概率”,
- 输出0.9,表示该样本有90%的概率属于此类别。
- Sigmoid是最广的一类**函数,形状接近指数函数,
- 缺陷,
- 两侧的导数趋近于0(软饱和),
- 一且当函数的输人落入饱和区, Sigmoid导数就会接近0,
- 导致传递的梯度也变得很小,
- 神经网络的参数就很难得到有效训练,
- 叫作梯度消失。
(2)Tanh函数
- 与 Sigmoid类似,转化到[-1,1],有零中心,
- 用它神经网络训练的收敛速度比 Sigmoid更快。
(3)ReLU
- 负值都转为0,正值不变。
- 以0为國值的分段函数。
- 最大的优点是缓解了梯度消失
19.2.4前馈神经网络
- feedforward neural network最简单的一种神经网络。
- 1)输入节点:没有进行任何计算,它的作用只是接
收原始数据。 - 2)隐藏节点:接受上一层节点的输入,
- 将计算结果输出到下一层节点。
- 隐藏节点的集合形成一个隐藏层。
- 图19-2-5只有一层隐藏层,但也可有多个或无隐藏层
- 3)输出节点:所有输出节点的集合形成输出层,
- 计算并将最终的结果输出。
- 前馈神经网络里,信息的移动只有一个方向:从输入节点,到隐藏节
点,最后到输出节点。 - RMN等信息的传输会有回路和闭环
19.3单层感知器和多层感知器
- 单层感知器:最简单的前馈神经网络,
- 只有输人层和输出层
- 输人层接受外界的输人信号后传递给输出层。
- 多层感知器:至少一个隐藏层的前馈神经网络,在实际应用中比
单层感知器的效果强大得多。
- 图19-3-1是多层感知器,
- 每一条线都表示一个权重(图中只显示3个权重)。
- 输人层:3节点,1个偏置项,值为1,
- 其他2节点表示原始数据的输入。
- 隐层:3节点,1个偏置项,
- 另外2个节点与输入层的3个节点全连接,也就是说有6个权重
- 这一层3个节点的计算结果输出到下一层
- 输出层:2个节点,接收上一层的计算结果,如图所示再执行这一层的计算。
- Y1和Y2是这一层2个节点计算后的输出。
19.4算法过程
- 输人的数据X和目标Y,
- 多层感知器就能学习它们之间的关系。
- 例子来了解神经网络学习的过程
- 两个输人项代表小时数和分数,
- 目标变量是期末的结果。
- 1表示通过,0表示未通过。
- 希望算法能学习这两者之间的关系,从而形成一个模型,对新样本
预测。
训练多层感知器:反向传播算法
- BP是最成功的神经网络学习算法之一,
- 大部分神经网络都用该方法训练。
- 反向传播
- 每当模型的预测犯了错,它就去纠正错误
- 当输出层的节点未能得到期望输出时,
- 这个误差会用来估计输出层的直接上一层的误差,
- 再利用这个误差估计更前一层的误差,
- 如此一层一层反向传播下去,
- 就获得所有其他各层的误差估计,
- 作为修改各连接权重的依据。
- 学习的过程
- 不断调整权重,使得最终的输出结果与真实结果越来越接近。
- 分类任务,一般Softmax作输出层的**函数
- 将任意实数输入转化为(0,1)(表示概率)
- 各个类别的概率相加等于1。
- 每个学生的输人项进入感知器后,
- 输出两个结果的概率值,即“及格”和“不及格”的概率,和1
- 传入了一个训练样本[35,67]
- 真实结果=1,0
- 第一次输出的结果是[0.4,0.6],差异巨大(1-0.4=0.6和0-0.6=-0.6)。
- 通过反向传播,重新调整各个权重值,试图让这个误差下降。
- 如图19-4-2
- 经过一轮调整,误差已经小了很多(0.2和
0.2),神经网络成功学习。
- 不断重复这个过程直到所有的样本都经过学习。
- 如果测试后模型的准确率足够理想,就可以用来对新样本预测了。
19.5算法的优缺点
19.5.1优点
- (1)实现任何复杂非线性映射,特别适合求解内部机制复杂的问题。
- (2)自学习功能
- 图像识别时,只要先把不同图片样本和对应的标签输入ANN,
- 网络就会通过自学习功能,学会识别类似图像
- (3)对异常值不敏感,有较强的鲁棒性。
19.5.2缺点
- (1)长训练时间。
- (2)网络结构选择没有标准,无一套统一而完整的理论指导,
- 只能根据算法人员经验决定
- (3 可解释性差。隐藏层对输入的变量进行各种复杂的非线性组合,输出结果难以解释
- (4)有过拟合倾向
19.7扩展阅读
-
深度学习2016蹿红
-
其实之前,深度学习悄悄发展十几年。
-
Geoffrey Hinton等06年和07年在《 Sciences》等上发表的文章被提出,
-
起源于神经网络算法,在神经网络模型结构深度上发展,
-
并伴随计算能力的提高而产生一系列新的算法,
-
图像处理与CV,NLP及语音识别。
-
最深欢迎和宠爱的是被用在大规模图像识别任务中的CNN
- 前馈神经网络的一种,只增加“卷积”和“池化”。
- 用在图像识别任务中,
- 受59年生物学家实验启发,
- 为识别二维形状而设计的一个特殊的多层感知器,
- 这种网络结构对图片的平移、比例缩放、倾斜或者其他形式的变形有强鲁棒,
- 可大大降低计算复杂度。
19.7.1卷积
- 图像视为基本输入数据,像素点就对应一个输入项,
- 结果有大量的节点和需计算的权重。
- 100×100图片例,输入层10000个节点
- 第二层是相同节点数的隐藏层,
- 有10000×10000个要计算的权重,
(1)卷积的作用
- 通过卷积,本来两层神经网络之间的节点需要全连接
- 现只需要部分连接(“局部连接”)
- 本来每个权重都需独立计算
- 现在部分权重可共享取值(“权值共享”)。
- 卷积的作用
- 提取图片中重要的特征,
- 减少需要计算的权重数目,
- 从而降低计算量。
(2)卷积核(特征检测器)与卷积计算
- 卷积操作
- 卷积操作的矩阵,
- 将这个矩阵与原始图片点乘
- 矩阵叫滤波器
- 卷积核
- 特征检测器,
- 在图像上滑动滤波器并计算点乘,
- 得到的矩阵叫卷积特征
- 或特征图
- 每个滤波器都相当于一个“检测特定特征”的工具。
- “特征”: 如直边、曲线等简单形状,以及简单的颜色。
- 图像无论多么复杂,都由最简单的特征构成。
- 7x7的特征检测器,作用检测“曲线”这个特
征,如图19-7-1 - 特征检测器对原始图片“卷积”,
- 拿它一格一格地在原图上“滑动”一遍,
- 从左上角的第一格直到右下角的最后一格
- 在每个停留的位置上,计算对应元素的乘积,
- 并把乘积的和作为最后的结果,
- 得到结果矩阵中的每一个元素的值
- 卷积将原始图片上的每个像素点,经过与它相邻像素点的加
权求和,转変成了一个新的像素点,如图19-7-2。
- 原始图片小老鼠,曲线特征检测器滑到方框位置时,会是什么结果呢?
- 如果滑到的区域所具有的形状,恰恰与我们的特征检测器的形状相似,那么两者的乘积(特征检测器矩阵与卷积区域矩阵的乘积)会产生较大值(在图像的这块区域检测到了该特征)(图19-7-4)。
- 继续滑动特征检测器,滑到老鼠的头上,这个区域没有类似的曲线形状,因此卷积计算的结果值很小(图19-7-5)。
- 曲线特征检测器,成功地在小老鼠身上检测到了一处符合该特征的区域(屁股)。
- 如果所有的小老鼠图片都有这个特征,那光凭借这个特征检测器,我们就可以轻易识别老鼠的图片了。
- 有很多种不同的特征检测器,
- 对应不同作用。
- 不同的特征检测器能检测到图像不同的特征,如边缘、曲线
19.7.2池化
- 卷积后获得原始图像有用的特征(特征图),且由于“权值共享”和“局部连接”,使需要计算的权重数量有所降低,但计算量依然很大,且易出现过拟合。
- “池化”就是为了解决这两个问题。
- 计算特征图上某一个区域的聚合统计量(如最大值/平均值),我们得到了一个新的整合后的特征,并将这个新的特征作为下一层网络的输人。
- “最大池化”和“平均池化”。
(1)池化的作用
- 使特征维度更小,减小需要计算的权重数量,并防止过拟合。
- 使网络对于输入图像中细小的变化、冗余和变换具有鲁棒性(输入
的微小冗余将不会改变池化的输出
因为我们在局部邻域中使用了最大化/平均值)。 - 帮助获取图像最大程度上的尺度不变性。
- 换句话说,对于某个特征,即使经过了位置平移,都能检测出来。
(2)最大池化与平均池化
- 先定义池化窗口的大小,再定义两个相邻池化窗口的水平位移/竖
直位移步长,然后将这个池化窗口在原图上滑动。 - 滑动的过程和之前卷积核滑动的过程相似,但池化不会作用在重合的区域上。
- 池化层紧跟在卷积层,且多层“卷积+池化。
- 多层卷积的目的,
- 一层卷积学到的特征往往是局部的,层数越多,
- 学到的特征就越全局化,
- 越能提取更多输入数据的特征,达到更高准确率,
- 代价是训练参数的倍数增加
- 以ImageNet图像识别大赛
- 微亚在2015年的比赛中提出152层的(Resnet),
- 就把准确率提升到超过人类水平
19.8 CNN识别手写数字图片
-
用 Keras搭建一个简单的CNN,
-
识别 Mnist数字图片数据集。
-
导人相关的库。