A. 34-卷积神经网络(Conv)
深度学习网络和普通神经网络的区别
全连接神经网络的缺点
卷积神经网络的错误率
卷积神经网络的发展历程
卷积神经网络的结构
结构特点:
神经网络(neural networks)的基本组成包括输入层、隐藏层、输出层。而卷积神经网络的特点在于隐藏层分为卷积层和池化层(pooling layer,又叫下采样层)。
卷积过程
纠正:卷积层的过滤器,就是一个矩阵,里面的元素是对应扫描时每个像素点的权重
即:每个过滤器会产生一张feature map
0填充的两种方式
卷积核在提取特征映射时的动作称之为padding(零填充),由于移动步长不一定能整出整张图的像素宽度。其中有两种方式,SAME和VALID
彩色图片的卷积过程
由于彩色图片有3个通道,即3张表,所以filter需要分3次去分别观察,每次观察的结果直接相加作为最后的结果
过滤器的个数
有几个过滤器,就会生成几张表。eg:
对于[28, 28, 1]的图片,如果有32个过滤器,就会卷积的结果就为[28, 28, 32],相当于图片被“拉长”了
观察结果大小的计算
面试可能考
注意:如果计算结果出现小数,需要结合情况具体考虑,而不是说直接四舍五入
卷积的api
在卷积神经网络中,主要使用Relu函数作为激活函数
即在这里使用relu函数去掉了像素中小于0的值
神经网络中为什么要使用激活函数
为什么使用relu而不再使用sigmoid函数?
api
卷积就是进行特征的提取,观察更加仔细,然而,观察仔细就意味着数据多,运算量增加,这就需要使用池化层以减少计算量
Pooling层主要的作用是特征提取,通过去掉Feature Map中不重要的样本,进一步减少参数数量。Pooling的方法很多,最常用的是Max Pooling。
池化层也有一个窗口大小(过滤器)
即:池化过程让图片变得更“窄”
即:卷积层使得图片变长,池化层使得图片变窄,所以经过卷积,图片越来越“细长”
api
池化中SAME的计算方式与卷积过程中SAME的计算方式一样。eg:
[None, 28, 28, 32]的数据,经过2x2,步长为2,padding为SAME的池化,变成了[None, 14, 14, 32]
分析:前面的卷积和池化相当于做特征工程,后面的全连接相当于做特征加权。最后的全连接层在整个卷积神经网络中起到“分类器”的作用。
所以神经网络也相当于是一个特征选择的方式
B. 神经网络(Neural Network)
(1)结构:许多树突(dendrite)用于输入,一个轴突 (axon)用于输出。
(2)特性:兴奋性和传导性。兴奋性是指当信号量超过某个阈值时,细胞体就会被激活,产生电脉冲。传导性是指电脉冲沿着轴突并通过突触传递到其它神经元。
(3)有两种状态的机器:激活时为“是”,不激活时为“否”。神经细胞的状态取决于从其他神经细胞接收到的信号量,以及突触的性质(抑制或加强)。
(1)神经元——不重要
① 神经元是包含权重和偏置项的 函数 :接收数据后,执行一些计算,然后使用激活函数将数据限制在一个范围内(多数情况下)。
② 单个神经元:线性可分的情况下,本质是一条直线, ,这条直线将数据划分为两类。而线性分类器本身就是一个单层神经网络。
③ 神经网络:非线性可分的情况下,神经网络通过多个隐层的方法来实现非线性的函数。
(2)权重/参数/连接(Weight)——最重要
每一个连接上都有一个权重。一个神经网络的训练算法就是让权重的值调整到最佳,以使得整个网络的预测效果最好。
(3)偏置项(Bias Units)——必须
① 如果没有偏置项,所有的函数都会经过原点。
② 正则化偏置会导致欠拟合:若对偏置正则化,会导致激活变得更加简单,偏差就会上升,学习的能力就会下降。
③ 偏置的大小度量了神经元产生激励(激活)的难易程度。
(1)定义:也称为转换函数,是一种将输入 (input) 转成输出 (output) 的函数。
(2)作用:一般直线拟合的精确度要比曲线差很多,引入激活函数能给神经网络 增加一些非线性 的特性。
(3)性质:
① 非线性:导数不是常数,否则就退化成直线。对于一些画一条直线仍然无法分开的问题,非线性可以把直线变弯,就能包罗万象;
② 可微性:当优化方法是基于梯度的时候,处处可导为后向传播算法提供了核心条件;
③ 输出范围:一般限定在[0,1],使得神经元对一些比较大的输入会比较稳定;
④ 非饱和性:饱和就是指,当输入比较大的时候输出几乎没变化,会导致梯度消失;
⑤ 单调性:导数符号不变,输出不会上蹿下跳,让神经网络训练容易收敛。
(1)线性函数 (linear function)—— purelin()
(2)符号函数 (sign function)—— hardlim()
① 如果z值高于阈值,则激活设置为1或yes,神经元将被激活。
② 如果z值低于阈值,则激活设置为0或no,神经元不会被激活。
(3)对率函数 (sigmoid function)—— logsig()
① 优点:光滑S型曲线连续可导,函数阈值有上限。
② 缺点:❶ 函数饱和使梯度消失,两端梯度几乎为0,更新困难,做不深;
❷ 输出不是0中心,将影响梯度下降的运作,收敛异常慢;
❸ 幂运算相对来讲比较耗时
(4)双曲正切函数(hyperbolic tangent function)—— tansig()
① 优点:取值范围0中心化,防止了梯度偏差
② 缺点:梯度消失现象依然存在,但相对于sigmoid函数问题较轻
(5)整流线性单元 ReLU 函数(rectified linear unit)
① 优点:❶ 分段线性函数,它的非线性性很弱,因此网络做得很深;
❷ 由于它的线性、非饱和性, 对于随机梯度下降的收敛有巨大的加速作用;
② 缺点:❶ 当x<0,梯度都变成0,参数无法更新,也导致了数据多样化的丢失;
❷ 输出不是0中心
(6)渗漏型整流线性单元激活函数 Leaky ReLU 函数
① 优点:❶ 是为解决“ReLU死亡”问题的尝试,在计算导数时允许较小的梯度;
❷ 非饱和的公式,不包含指数运算,计算速度快。
② 缺点:❶ 无法避免梯度爆炸问题; (没有体现优于ReLU)
❷ 神经网络不学习 α 值。
(7)指数线性单元 ELU (Exponential Linear Units)
① 优点:❶ 能避免“死亡 ReLU” 问题;
❷ 能得到负值输出,这能帮助网络向正确的方向推动权重和偏置变化;
❸ 在计算梯度时能得到激活,而不是让它们等于 0。
② 缺点:❶ 由于包含指数运算,所以计算时间更长;
❷ 无法避免梯度爆炸问题; (没有体现优于ReLU)
❸ 神经网络不学习 α 值。
(8)Maxout(对 ReLU 和 Leaky ReLU的一般化归纳)
① 优点:❶ 拥有ReLU的所有优点(线性和不饱和)
❷ 没有ReLU的缺点(死亡的ReLU单元)
❸ 可以拟合任意凸函数
② 缺点 :参数数量增加了一倍。难训练,容易过拟合
(9)Swish
① 优点:❶ 在负半轴也有一定的不饱和区,参数的利用率更大
❷ 无上界有下界、平滑、非单调
❸ 在深层模型上的效果优于 ReLU
每个层都包含一定数量的单元(units)。增加层可增加神经网络输出的非线性。
(1)输入层:就是接收原始数据,然后往隐层送
(2)输出层:神经网络的决策输出
(3)隐藏层:神经网络的关键。把前一层的向量变成新的向量,让数据变得线性可分。
(1)结构:仅包含输入层和输出层,直接相连。
(2)作用:仅能表示 线性可分 函数或决策,且一定可以在有限的迭代次数中收敛。
(3)局限:可以建立与门、或门、非门等,但无法建立更为复杂的异或门(XOR),即两个输入相同时输出1,否则输出0。 (“AI winter”)
(1)目的:拟合某个函数 (两层神经网络可以逼近任意连续函数)
(2)结构:包含输入层、隐藏层和输出层 ,由于从输入到输出的过程中不存在与模型自身的反馈连接,因此被称为“前馈”。 (层与层之间全连接)
(3)作用: 非线性 分类、聚类、预测等,通过训练,可以学习到数据中隐含的知识。
(4)局限:计算复杂、计算速度慢、容易陷入局部最优解,通常要将它们与其他网络结合形成新的网络。
(5)前向传播算法(Forward Propagation)
① 方法:从左至右逐级依赖的算法模型,即网络如何根据输入X得到输出Y,最终的输出值和样本值作比较, 计算出误差 。
② 目的:完成了一次正反向传播,就完成了一次神经网络的训练迭代。通过输出层的误差,快速求解对每个ω、b的偏导,利用梯度下降法,使Loss越来越小。
② 局限:为使最终的误差达到最小,要不断修改参数值,但神经网络的每条连接线上都有不同权重参数,修改这些参数变得棘手。
(6)误差反向传播(Back Propagation)
① 原理:梯度下降法求局部极值
② 方法:从后往前,从输出层开始计算 L 对当前层的微分,获得各层的误差信号,此误差信号即作为修正单元权值的依据。计算结束以后,所要的两个参数矩阵的 梯度 就都有了。
③ 局限:如果激活函数是饱和的,带来的缺陷就是系统迭代更新变慢,系统收敛就慢,当然这是可以有办法弥补的,一种方法是使用 交叉熵函数 作为损失函数。
(1)原理:随着网络的层数增加,每一层对于前一层次的抽象表示更深入。在神经网络中,每一层神经元学习到的是前一层神经元值的更抽象的表示。通过抽取更抽象的特征来对事物进行区分,从而获得更好的区分与分类能力。
(2)方法:ReLU函数在训练多层神经网络时,更容易收敛,并且预测性能更好。
(3)优点:① 易于构建,表达能力强,基本单元便可扩展为复杂的非线性函数
② 并行性号,有利于在分布是系统上应用
(4)局限:① 优化算法只能获得局部极值,性能与初始值相关
② 调参理论性缺乏
③ 不可解释,与实际任务关联性模糊
(1)原理:由手工设计卷积核变成自动学习卷积核
(2)卷积(Convolutional layer): 输入与卷积核相乘再累加 (内积、加权叠加)
① 公式:
② 目的:提取输入的不同特征,得到维度很大的 特征图(feature map)
③ 卷积核:需要训练的参数。一般为奇数维,有中心像素点,便于定位卷积核
④ 特点:局部感知、参数变少、权重共享、分层提取
(3)池化(Pooling Layer):用更高层的抽象表达来表示主要特征,又称“降采样”
① 分类: 最大 (出现与否)、平均(保留整体)、随机(避免过拟合)
② 目的:降维,不需要训练参数,得到新的、维度较小的特征
(4)步长(stride):若假设输入大小是n∗n,卷积核的大小是f∗f,步长是s,则最后的feature map的大小为o∗o,其中
(5)填充(zero-padding)
① Full模式:即从卷积核(fileter)和输入刚相交开始做卷积,没有元素的部分做补0操作。
② Valid模式:卷积核和输入完全相交开始做卷积,这种模式不需要补0。
③ Same模式:当卷积核的中心C和输入开始相交时做卷积。没有元素的部分做补0操作。
(7)激活函数:加入非线性特征
(8)全连接层(Fully-connected layer)
如果说卷积层、池化层和激活函数层等是将原始数据映射到隐层特征空间(决定计算速度),全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用(决定参数个数)。
参考:
[1] 神经网络(入门最详细)_ruthy的博客-CSDN博客_神经网络算法入门
[2] 神经网络(容易被忽视的基础知识) - Evan的文章 - 知乎
[3] 人工神经网络——王的机器
[4] 如何简单形象又有趣地讲解神经网络是什么? - 舒小曼的回答 - 知乎
[5] 神经网络15分钟入门!足够通俗易懂了吧 - Mr.括号的文章 - 知乎
[6] 神经网络——最易懂最清晰的一篇文章_illikang的博客-CSDN博客_神经网络
[7] 直觉化深度学习教程——什么是前向传播——CSDN
[8] “反向传播算法”过程及公式推导(超直观好懂的Backpropagation)_aift的专栏-CSDN
[9] 卷积、反卷积、池化、反池化——CSDN
[10] 浙大机器学习课程- bilibili.com
C. 神经网络简述
机器学习中谈论的神经网络是指“神经网络学习”,或者说,是机器学习和神经网络这两个学科领域的交叉部分[1]。
在这里,神经网络更多的是指计算机科学家模拟人类大脑结构和智能行为,发明的一类算法的统称。
神经网络是众多优秀仿生算法中的一种,读书时曾接触过蚁群优化算法,曾惊讶于其强大之处,但神经网络的强大,显然蚁群优化还不能望其项背。
A、起源与第一次高潮。有人认为,神经网络的最早讨论,源于现代计算机科学的先驱——阿兰.图灵在1948年的论文中描述的“B型组织机器”[2]。二十世纪50年代出现了以感知机、Adaling为代表的一系列成功,这是神经网络发展的第一个高潮[1]。
B、第一次低谷。1969年,马文.明斯基出版《感知机》一书,书中论断直接将神经网络打入冷宫,导致神经网络十多年的“冰河期”。值得一提的是,在这期间的1974年,哈佛大学Paul Webos发明BP算法,但当时未受到应有的重视[1]。
C、第二次高潮。1983年,加州理工学院的物理学家John Hopfield利用神经网络,在旅行商问题上获得当时最好结果,引起轰动;Rumelhart等人重新发明了BP算法,BP算法迅速走红,掀起神经网络第二次高潮[1]。
D、第二次低谷。二十世纪90年代中期,统计学习理论和支持向量机兴起,较之于这些算法,神经网络的理论基础不清晰等缺点更加凸显,神经网络研究进入第二次低谷[1]。
E、深度学习的崛起。2010年前后,随着计算能力的提升和大数据的涌现,以神经网络为基础的“深度学习”崛起,科技巨头公司谷歌、Facebook、网络投入巨资研发,神经网络迎来第三次高潮[1]。2016年3月9日至15日,Google人工智能程序AlphaGo对阵韩国围棋世界冠军李世乭,以4:1大比分获胜,比众多专家预言早了十年。这次比赛,迅速在全世界经济、科研、计算机产业各领域掀起人工智能和深度学习的热烈讨论。
F、展望。从几个方面讨论一下。
1)、近期在Google AlphaGo掀起的热潮中,民众的热情与期待最大,甚至有少许恐慌情绪;计算机产业和互联网产业热情也非常巨大,对未来充满期待,各大巨头公司对其投入大量资源;学术界的反应倒是比较冷静的。学术界的冷静,是因为神经网络和深度神经网络的理论基础还没有出现长足的进步,其缺点还没有根本改善。这也从另一个角度说明了深度神经网络理论进步的空间很大。
2)、"当代神经网络是基于我们上世纪六十年代掌握的脑知识。"关于人类大脑的科学与知识正在爆炸式增长。[3]世界上很多学术团队正在基于大脑机制新的认知建立新的模型[3]。我个人对此报乐观态度,从以往的仿生算法来看,经过亿万年进化的自然界对科技发展的促进从来没有停止过。
3)、还说AlphaGo,它并不是理论和算法的突破,而是基于已有算法的工程精品。AlhphaGo的工作,为深度学习的应用提供了非常广阔的想象空间。分布式技术提供了巨大而廉价的计算能力,巨量数据的积累提供了丰富的训练样本,深度学习开始腾飞,这才刚刚开始。
一直沿用至今的,是McChlloch和Pitts在1943年依据脑神经信号传输结构抽象出的简单模型,所以也被称作”M-P神经元模型“。
其中,
f函数像一般形如下图的函数,既考虑阶跃性,又考虑光滑可导性。
实际常用如下公式,因形如S,故被称作sigmoid函数。
把很多个这样的神经元按一定层次连接起来,就得到了神经网络。
两层神经元组成,输入层接收外界输入信号,输出层是M-P神经元(只有输出层是)。
感知机的数学模型和单个M-P神经元的数学模型是一样的,如因为输入层只需接收输入信号,不是M-P神经元。
感知机只有输出层神经元是B-P神经元,学习能力非常有限。对于现行可分问题,可以证明学习过程一定会收敛。而对于非线性问题,感知机是无能为力的。
BP神经网络全称叫作误差逆传播(Error Propagation)神经网络,一般是指基于误差逆传播算法的多层前馈神经网络。这里为了不占篇幅,BP神经网络将起篇另述。
BP算法是迄今最为成功的神经网络学习算法,也是最有代表性的神经网络学习算法。BP算法不仅用于多层前馈神经网络,还用于其他类型神经网络的训练。
RBF网络全程径向基函数(Radial Basis Function)网络,是一种单隐层前馈神经网络,其与BP网络最大的不同是采用径向基函数作为隐层神经元激活函数。
卷积神经网络(Convolutional neural networks,简称CNNs)是一种深度学习的前馈神经网络,在大型图片处理中取得巨大成功。卷积神经网络将起篇另述。
循环神经网络(Recurrent Neural Networks,RNNs)与传统的FNNs不同,RNNs引入定向循环,能够处理那些输入之间前后关联的问题。RNNs已经在众多自然语言处理(Natural Language Processing, NLP)中取得了巨大成功以及广泛应用[5]。RNNs将起篇另述。[5]
[1]、《机器学习》,周志华着
[2]、《模式识别(第二版)》,Richard O.Duda等着,李宏东等译
[3]、《揭秘IARPA项目:解码大脑算法或将彻底改变机器学习》,Emily Singerz着,机器之心编译出品
[4]、图片来源于互联网
[5]、 循环神经网络(RNN, Recurrent Neural Networks)介绍