深度学习期末复习

news/2025/1/15 12:27:17/

学期内容回顾

一、人工智能的概念,发展历程及每个历程的特点和代表性理论或算法,或主要驱动力

二、人工神经网络ANN的前向传播计算和误差反向回传原理

三、卷积神经网络CNN的前向传播计算和误差反向回传原理

注意对比分析ANN与CNN的相同之处和不同之处,深入理解卷积运算的概念和本质
掌握卷积后的特征图尺寸的计算方法

四、神经网络优化
掌握常见激活函数
了解权值初始化的技术
理解训练神经网络的优化技术:SGD,Momentum,Adagrad, RMSProp,Adam等

五、深入理解各种类型的卷积操作
NiN,1x1卷积
Inception块
Residual 块
空洞卷积
转置卷积/逆卷积
池化,上采样
分组卷积
深度可分离卷积

六、理解掌握常见的面向目标识别(分类)的卷积神经网络
LeNet
AlexNet
VGG
Inception v3
ResNet
学会设计和实现卷积神经网络结构

七、掌握常见的深度学习损失函数
Softmax Loss/Softmax Cross Entropy Loss
BCE
L1 Loss
Smooth L1 Loss/Huber Loss
Focal Loss
Dice Loss

八、深度学习目标检测
深入理解YOLO V3和Faster R-CNN系列的目标检测算法及其技术细节
归纳其相同之处和不同之处,及各自的优缺点

了解SSD和Mask R-CNN目标检测算法

九、深度学习图像分割
深入理解FCN和U-Net语义分割网络的原理,及其相同之处和不同之处
了解DeepLabs,Mask R-CNN等前沿的语义分割算法。

1.人工智能的概念,发展历程及每个历程的特点和代表性理论或算法,或主要驱动力

人工智能,就是用机器模拟人的意识和思维。

机器学习,则是实现人工智能的一种方法,是人工智能的子集。

深度学习就是深层次神经网络,是机器学习的一种实现方法,是机器学习的子集
人工智能(ArtificialIntelligence),英文缩写为AI。是计算机科学的一个分支。人工智能是对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。数学常被认为是多种学科的基础科学,数学也进入语言、思维领域,人工智能学科也必须借用数学工具。

人工智能实际应用:机器视觉,指纹识别,人脸识别,视网膜识别,虹膜识别,掌纹识别,专家系统,自动规划,智能搜索,定理证明,博弈,自动程序设计,智能控制,机器人学,语言和图像理解,遗传编程等。人工智能目前也分为:强人工智能(BOTTOM-UPAI)和弱人工智能(TOP-DOWNAI),

强人工智能观点认为有可能制造出真正能推理(Reasoning)和解决问题(Problem_solving)的智能机器,并且,这样的机器将被认为是有知觉的,有自我意识的。可以独立思考问题并制定解决问题的最优方案,有自己的价值观和世界观体系。有和生物一样的各种本能,比如生存和安全需求。在某种意义上可以看作一种新的文明。
弱人工智能是指不能制造出真正地推理(Reasoning)和解决问题(Problem_solving)的智能机器,这些机器只不过看起来像是智能的,但是并不真正拥有智能,也不会有自主意识。

在这里插入图片描述
人工智能发展简史

1、 人工智能的诞生(20世纪40~50年代)

1950年:图灵测试

1950年,著名的图灵测试诞生,按照“人工智能之父”艾伦·图灵的定义:如果一台机器能够与人类展开对话(通过电传设备)而不能被辨别出其机器身份,那么称这台机器具有智能。同一年,图灵还预言会创造出具有真正智能的机器的可能性。

1954年:第一台可编程机器人诞生

1954年美国人乔治·戴沃尔设计了世界上第一台可编程机器人。

1956年:人工智能诞生

1956年夏天,美国达特茅斯学院举行了历史上第一次人工智能研讨会,被认为是人工智能诞生的标志。会上,麦卡锡首次提出了“人工智能”这个概念,纽厄尔和西蒙则展示了编写的逻辑理论机器。

2、 人工智能的黄金时代(20世纪50~70年代)

1966年~1972年:首台人工智能机器人Shakey诞生

1966年~1972年期间,美国斯坦福国际研究所研制出机器人Shakey,这是首台采用人工智能的移动机器人。

1966年:世界上第一个聊天机器人ELIZA发布

美国麻省理工学院(MIT)的魏泽鲍姆发布了世界上第一个聊天机器人ELIZA。ELIZA的智能之处在于她能通过脚本理解简单的自然语言,并能产生类似人类的互动。

1968年:计算机鼠标发明

1968年12月9日,美国加州斯坦福研究所的道格·恩格勒巴特发明计算机鼠标,构想出了超文本链接概念,它在几十年后成了现代互联网的根基。

3、 人工智能的低谷(20世纪70~80年代)

20世纪70年代初,人工智能遭遇了瓶颈。当时的计算机有限的内存和处理速度不足以解决任何实际的人工智能问题。要求程序对这个世界具有儿童水平的认识,研究者们很快发现这个要求太高了:1970年没人能够做出如此巨大的数据库,也没人知道一个程序怎样才能学到如此丰富的信息。由于缺乏进展,对人工智能提供资助的机构(如英国政府、美国国防部高级研究计划局和美国国家科学委员会)对无方向的人工智能研究逐渐停止了资助。美国国家科学委员会(NRC)在拨款二千万美元后停止资助。

4、 人工智能的繁荣期(1980年~1987年)

1981年:日本研发人工智能计算机

1981年,日本经济产业省拨款8.5亿美元用以研发第五代计算机项目,在当时被叫做人工智能计算机。随后,英国、美国纷纷响应,开始向信息技术领域的研究提供大量资金。

1984年:启动Cyc(大百科全书)项目

在美国人道格拉斯·莱纳特的带领下,启动了Cyc项目,其目标是使人工智能的应用能够以类似人类推理的方式工作。

1986年:3D打印机问世

美国发明家查尔斯·赫尔制造出人类历史上首个3D打印机。

5、 人工智能的冬天(1987年~1993年)

“AI(人工智能)之冬”一词由经历过1974年经费削减的研究者们创造出来。他们注意到了对专家系统的狂热追捧,预计不久后人们将转向失望。事实被他们不幸言中,专家系统的实用性仅仅局限于某些特定情景。到了上世纪80年代晚期,美国国防部高级研究计划局(DARPA)的新任领导认为人工智能并非“下一个浪潮”,拨款将倾向于那些看起来更容易出成果的项目。

6、 人工智能真正的春天(1993年至今)

1997年:电脑深蓝战胜国际象棋世界冠军

1997年5月11日,IBM公司的电脑“深蓝”战胜国际象棋世界冠军卡斯帕罗夫,成为首个在标准比赛时限内击败国际象棋世界冠军的电脑系统。

2011年:开发出使用自然语言回答问题的人工智能程序

2011年,Watson(沃森)作为IBM公司开发的使用自然语言回答问题的人工智能程序参加美国智力问答节目,打败两位人类冠军,赢得了100万美元的奖金。

2012年:Spaun诞生

加拿大神经学家团队创造了一个具备简单认知能力、有250万个模拟“神经元”的虚拟大脑,命名为“Spaun”,并通过了最基本的智商测试。

2013年:深度学习算法被广泛运用在产品开发中

Facebook人工智能实验室成立,探索深度学习领域,借此为Facebook用户提供更智能化的产品体验;Google收购了语音和图像识别公司DNNResearch,推广深度学习平台;百度创立了深度学习研究院等。

2015年:人工智能突破之年

Google开源了利用大量数据直接就能训练计算机来完成任务的第二代机器学习平台Tensor Flow;剑桥大学建立人工智能研究所等。

2016年:AlphaGo战胜围棋世界冠军李世石

2016年3月15日,Google人工智能AlphaGo与围棋世界冠军李世石的人机大战最后一场落下了帷幕。人机大战第五场经过长达5个小时的搏杀,最终李世石与AlphaGo总比分定格在1比4,以李世石认输结束。这一次的人机对弈让人工智能正式被世人所熟知,整个人工智能市场也像是被引燃了导火线,开始了新一轮爆发。
2016年3月9日,韩国,李世石人机围棋大战引广泛关注,韩国民众纷纷观战电视直播。

① 1942年:“机器人三定律”提出

美国科幻巨匠阿西莫夫提出“机器人三定律”,后来成为学术界默认的研发原则。

② 1956年:人工智能的诞生

达特茅斯会议上,科学家们探讨用机器模拟人类智能等问题,并首次提出了人工智能(AI)的术语,AI的名称和任务得以确定,同时出现了最初的成就和最早的一批研究者。

③ 1959年:第一代机器人出现

德沃尔与美国发明家约瑟夫·英格伯格联手制造出第一台工业机器人。随后,成立了世界上第一家机器人制造工厂——Unimation公司。

④ 1965年:兴起研究“有感觉”的机器人

约翰·霍普金斯大学应用物理实验室研制出Beast机器人。Beast已经能通过声纳系统、光电管等装置,根据环境校正自己的位置。

⑤ 1968年:世界第一台智能机器人诞生

美国斯坦福研究所公布他们研发成功的机器人Shakey。它带有视觉传感器,能根据人的指令发现并抓取积木,不过控制它的计算机有一个房间那么大,可以算是世界第一台智能机器人。

⑥ 2002年:家用机器人诞生

美国iRobot公司推出了吸尘器机器人Roomba,它能避开障碍,自动设计行进路线,还能在电量不足时,自动驶向充电座。Roomba是目前世界上销量较大的家用机器人。

⑦ 2014年:机器人首次通过图灵测试

在英国皇家学会举行的“2014图灵测试”大会上,聊天程序“尤金·古斯特曼”(Eugene Goostman)首次通过了图灵测试,预示着人工智能进入全新时代。

⑧ 2016年:AlphaGo打败人类

2016年3月,AlphaGo对战世界围棋冠军、职业九段选手李世石,并以4:1的总比分获胜 。这并不是机器人首次打败人类事件。

一、1950-1970年代,人工智能的“推理时代”。
赫本于1949年基于神经心理学的学习机制开启机器学习的第一步。此后被称为Hebb学习规则。Hebb学习规则是一个无监督学习规则,这种学习的结果是使网络能够提取训练集的统计特性,从而把输入信息按照它们的相似性程度划分为若干类。这一点与人类观察和认识世界的过程非常吻合,人类观察和认识世界在相当程度上就是在根据事物的统计特征进行分类。
从上面的公式可以看出,权值调整量与输入输出的乘积成正比,显然经常出现的模式将对权向量有较大的影响。在这种情况下,Hebb学习规则需预先定置权饱和值,以防止输入和输出正负始终一致时出现权值无约束增长。
Hebb学习规则与“条件反射”机理一致,并且已经得到了神经细胞学说的证实。比如巴甫洛夫的条件反射实验:每次给狗喂食前都先响铃,时间一长,狗就会将铃声和食物联系起来。以后如果响铃但是不给食物,狗也会流口水(当然这个实验也被认为是广告学、神经学的开始)。
1950年,阿兰·图灵创造了图灵测试来判定计算机是否智能。图灵测试认为,如果一台机器能够与人类展开对话(通过电传设备)而不能被辨别出其机器身份,那么称这台机器具有智能。这一简化使得图灵能够令人信服地说明“思考的机器”是可能的。
2014年6月8日,一个叫做尤金·古斯特曼的聊天机器人成功让人类相信它是一个13岁的男孩,成为有史以来首台通过图灵测试的计算机。这被认为是人工智能发展的一个里程碑事件。但是这比图灵自己预测的时间晚了整整14年。
1956年夏季,以麦卡赛、明斯基、罗切斯特和申农等为首的一批有远见卓识的年轻科学家在一起聚会,共同研究和探讨用机器模拟智能的一系列有关问题,并首次提出了“人工智能”这一术语,它标志着“人工智能”这门新兴学科的正式诞生。
1957年,罗森·布拉特基于神经感知科学背景提出了第二模型,非常的类似于今天的机器学习模型。这在当时是一个非常令人兴奋的发现,它比赫布的想法更适用。基于这个模型罗森·布拉特设计出了第一个计算机神经网络——感知机(the perceptron),它模拟了人脑的运作方式。罗森·布拉特对感知机的定义如下:
感知机旨在说明一般智能系统的一些基本属性,它不会因为个别特例或通常不知道的东西所束缚住,也不会因为那些个别生物有机体的情况而陷入混乱。
3年后,维德罗首次使用Delta学习规则(即最小二乘法)用于感知器的训练步骤,创造了一个良好的线性分类器。

1967年,最近邻算法(The nearest neighbor algorithm)出现,使计算机可以进行简单的模式识别。kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。这就是所谓的“少数听从多数”原则。
1969年马文·明斯基提出了著名的XOR问题,指出感知机在线性不可分的数据分布上是失效的。此后神经网络的研究者进入了寒冬,直到 1980 年才再一次复苏。
从60年代中到70年代末,机器学习的发展步伐几乎处于停滞状态。无论是理论研究还是计算机硬件限制,使得整个人工智能领域的发展都遇到了很大的瓶颈。虽然这个时期温斯顿(Winston)的结构学习系统和海斯·罗思(Hayes Roth)等的基于逻辑的归纳学习系统取得较大的进展,但只能学习单一概念,而且未能投入实际应用。
这一时期,一般认为只要机器被赋予逻辑推理能力就可以实现人工智能。不过此后人们发现,只是具备了逻辑推理能力,机器还远远达不到智能化的水平。 60年代末,70年代初神经网络学习机因理论缺陷未能达到预期效果而转入低潮。这个时期的研究目标是模拟人类的概念学习过程,并采用逻辑结构或图结构作为机器内部描述。机器能够采用符号来描述概念(符号概念获取),并提出关于学习概念的各种假设。事实上,这个时期整个AI领域都遭遇了瓶颈。当时的计算机有限的内存和处理速度不足以解决任何实际的AI问题。要求程序对这个世界具有儿童水平的认识,研究者们很快发现这个要求太高了:1970年没人能够做出如此巨大的数据库,也没人知道一个程序怎样才能学到如此丰富的信息。可以说是计算能力的滞后导致了AI技术的停滞,这个阶段尽管学术思想已经达到很高的水平,但是工业界的发展严重滞后,科学与技术是相辅相成的,任何一方发展滞后都会拖累另一方的发展。
二、1970-1990年代,人工智能的”知识工程“时代。
这一时期,人们认为要让机器变得有智能,就应该设法让机器学习知识,于是计算机系统得到了大量的开发。后来人们发现,把知识总结出来再灌输给计算机相当困难。举个例子来说,想要开发一个疾病诊断的人工智能系统,首先要找好多有经验的医生总结出疾病的规律和知识,随后让机器进行学习,但是在知识总结的阶段已经花费了大量的人工成本,机器只不过是一台执行知识库的自动化工具而已,无法达到真正意义上的智能水平进而取代人力工作。
伟博斯在1981年的神经网络反向传播(BP)算法中具体提出多层感知机模型(即著名的“人工神经网络”,ANN)。虽然BP算法早在1970年就已经以“自动微分的反向模型(reverse mode of automatic differentiation)”为名提出来了,但直到此时才真正发挥效用,并且直到今天BP算法仍然是神经网络架构的关键因素。有了这些新思想,神经网络的研究又加快了。
在1985-1986年,神经网络研究人员(鲁梅尔哈特,辛顿,威廉姆斯-赫,尼尔森)相继提出了使用BP算法训练的多参数线性规划(MLP)的理念,成为后来深度学习的基石。
在另一个谱系中,昆兰于1986年提出了一种非常出名的机器学习算法,我们称之为“决策树”,更具体的说是ID3算法。这是另一个主流机器学习算法的突破点。此外ID3算法也被发布成为了一款软件,它能以简单的规划和明确的推论找到更多的现实案例,而这一点正好和神经网络黑箱模型相反。
决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。决策树仅有单一输出,若欲有复数输出,可以建立独立的决策树以处理不同输出。数据挖掘中决策树是一种经常要用到的技术,可以用于分析数据,同样也可以用来作预测。
在ID3算法提出来以后,研究社区已经探索了许多不同的选择或改进(如ID4、回归树、CART算法等),这些算法仍然活跃在机器学习领域中。
1990年, Schapire最先构造出一种多项式级的算法,这就是最初的Boosting算法。一年后 ,Freund提出了一种效率更高的Boosting算法。但是,这两种算法存在共同的实践上的缺陷,那就是都要求事先知道弱学习算法学习正确的下限。
1992年,支持向量机(SVM)的出现是机器学习领域的另一大重要突破,该算法具有非常强大的理论地位和实证结果。在90年代曾风靡整个数据挖掘、机器学习、模式识别领域,至今依然很火热。那一段时间机器学习研究也分为NN和SVM两派。然而,在2000年左右提出了带核函数的支持向量机后。SVM在许多以前由NN占据的任务中获得了更好的效果。此外,SVM相对于NN还能利用所有关于凸优化、泛化边际理论和核函数的深厚知识。因此SVM可以从不同的学科中大力推动理论和实践的改进(当然现在SVM依然具有强大的生命力,深度学习算法无法解决问题时,SVM依然是很好的工具)。
神经网络与支持向量机一直处于“竞争”关系。SVM应用核函数的展开定理,无需知道非线性映射的显式表达式;由于是在高维特征空间中建立线性学习机,所以与线性模型相比,不但几乎不增加计算的复杂性,而且在某种程度上避免了“维数灾难”(大概意思就是在高维空间质量会无限逼近他的表面,这是多么恐怖的事情,你的皮肤破了一个口,会发现自己是空的)。
而神经网络遭受到又一个质疑,通过Hochreiter等人1991年和Hochreiter等人在2001年的研究表明在应用BP算法学习时,NN神经元饱和后会出现梯度损失(gradient loss)的情况。简单地说,早先的神经网络算法比较容易过训练,大量的经验参数需要设置;训练速度比较慢,在层次比较少(小于等于3)的情况下效果并不比其它方法更优,因此这一时期NN与SVM相比处于劣势。
三、2000年至今,人工智能的”数据挖掘“时代。
随着各种机器学习算法的提出和应用,特别是深度学习技术的发展,人们希望机器能够通过大量数据分析,从而自动学习出知识并实现智能化水平。这一时期,随着计算机硬件水平的提升,大数据分析技术的发展,机器采集、存储、处理数据的水平有了大幅提高。特别是深度学习技术对知识的理解比之前浅层学习有了很大的进步,Alpha Go和中韩围棋高手过招大幅领先就是目前人工智能的高水平代表之一。
2001年,决策树模型由布雷曼博士提出,它是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支——集成学习(Ensemble Learning)方法。随机森林的名称中有两个关键词,一个是“随机”,一个就是“森林”。“森林”我们很好理解,一棵叫做树,那么成百上千棵就可以叫做森林了,这样的比喻还是很贴切的,其实这也是随机森林的主要思想—集成思想的体现。
其实从直观角度来解释,每棵决策树都是一个分类器(假设现在针对的是分类问题),那么对于一个输入样本,N棵树会有N个分类结果。而随机森林集成了所有的分类投票结果,将投票次数最多的类别指定为最终的输出,这就是一种最简单的 Bagging 思想。
在机器学习发展分为两个部分,浅层学习(Shallow Learning)和深度学习(Deep Learning)。浅层学习起源上世纪20年代人工神经网络的反向传播算法的发明,使得基于统计的机器学习算法大行其道,虽然这时候的人工神经网络算法也被称为多层感知机,但由于多层网络训练困难,通常都是只有一层隐含层的浅层模型。

神经网络研究领域领军者Hinton在2006年提出了神经网络Deep Learning算法(即深度学习),使神经网络的能力大大提高,向支持向量机(SVM)发出挑战。 2006年,机器学习领域的泰斗Hinton和他的学生Salakhutdinov在顶尖学术刊物《Scince》上发表了一篇文章,开启了深度学习在学术界和工业界的浪潮。(随后,随着工业界GPU在大型计算机上的应用,深度学习迎来了爆发)
这篇文章有两个主要的讯息:1)很多隐层的人工神经网络具有优异的特征学习能力,学习得到的特征对数据有更本质的刻划,从而有利于可视化或分类;2)深度神经网络在训练上的难度,可以通过“逐层初始化”( layer-wise pre-training)来有效克服,在这篇文章中,逐层初始化是通过无监督学习实现的。

第一条补充

神经网络发展史
神经网络的发展大致经过五个阶段。
第一阶段:模型提出
在1943年,心理学家Warren McCulloch和数学家Walter Pitts和最早描述了一种理想化的人工神经网络,并构建了一种基于简单逻辑运算的计算机制。他们提出的神经网络模型称为MP模型。
阿兰·图灵在1948年的论文中描述了一种“B型图灵机”。(赫布型学习)
1951年,McCulloch和Pitts的学生Marvin Minsky建造了第一台神经网络机,称为SNARC。
Rosenblatt [1958]最早提出可以模拟人类感知能力的神经网络模型,并称之为感知器(Perceptron),并提出了一种接近于人类学习过程(迭代、试错)的学习算法。
第二阶段:冰河期
1969年,Marvin Minsky出版《感知器》一书,书中论断直接将神经网络打入冷宫,导致神经网络十多年的“冰河期”。他们发现了神经网络的两个关键问题:
1)基本感知器无法处理异或回路。
2)电脑没有足够的能力来处理大型神经网络所需要的很长的计算时间。
1974年,哈佛大学的Paul Webos发明反向传播算法,但当时未受到应有的重视。
1980年,Kunihiko Fukushima(福岛邦彦)提出了一种带卷积和子采样操作的多层神经网络:新知机(Neocognitron)
第三阶段:反向传播算法引起的复兴
1983年,物理学家John Hopfield对神经网络引入能量函数的概念,并提出了用于联想记忆和优化计算的网络(称为Hopfield网络),在旅行商问题上获得当时最好结果,引起轰动。
1984年,Geoffrey Hinton提出一种随机化版本的Hopfield网络,即玻尔兹曼机。
1986年, David Rumelhart和James McClelland对于联结主义在计算机模拟神经活动中的应用提供了全面的论述,并重新发明了反向传播算法。
1986年,Geoffrey Hinton等人将引入反向传播算法到多层感知器
1989 年,LeCun等人将反向传播算法引入了卷积神经网络,并在手写体数字识别上取得了很大的成功。
第四阶段:流行度降低
在20世纪90年代中期,统计学习理论和以支持向量机为代表的机器学习模型开始兴起。
相比之下,神经网络的理论基础不清晰、优化困难、可解释性差等缺点更加凸显,神经网络的研究又一次陷入低潮。
第五阶段:深度学习的崛起
2006年,Hinton等人发现多层前馈神经网络可以先通过逐层预训练,再用反向传播算法进行精调的方式进行有效学习。
深度神经网络在语音识别和图像分类等任务上的巨大成功。
2013年,AlexNet:第一个现代深度卷积网络模型,是深度学习技术在图像分类上取得真正突破的开端。
AlexNet不用预训练和逐层训练,首次使用了很多现代深度网络的技术

随着大规模并行计算以及GPU设备的普及,计算机的计算能力得以大幅提高。此外,可供机器学习的数据规模也越来越大。在计算能力和数据规模的支持下,计算机已经可以训练大规模的人工神经网络。

人工神经网络ANN的前向传播计算和误差反向回传原理

人工神经网络(ANN)
人工神经网络的灵感来自其生物学对应物。生物神经网络使大脑能够以复杂的方式处理大量信息。大脑的生物神经网络由大约1000亿个神经元组成,这是大脑的基本处理单元。神经元通过彼此之间巨大的连接(称为突触)来执行其功能。人脑大约有100万亿个突触,每个神经元约有1,000个!

接收区(receptive zone):树突接收到输入信息。
触发区(trigger zone):位于轴突和细胞体交接的地方,决定是否产生神经冲动。
传导区(conducting zone):由轴突进行神经冲动的传递。
输出区(output zone):神经冲动的目的就是要让神经末梢,突触的神经递质或电力释出,才能影响下一个接受的细胞(神经元、肌肉细胞或是腺体细胞),此称为突触传递。
那么,什么是人工神经网络呢?有关人工神经网络的定义有很多。这里,芬兰计算机科学家托伊沃·科霍宁(Teuvo Kohonen)给出的定义:人工神经网络是一种由具有自适应性的简单单元构成的广泛并行互联的网络,它的组织结构能够模拟生物神经系统对真实世界所做出的交互反应。
人工神经网络的结构

输入层:输入层接收特征向量 x 。
输出层:输出层产出最终的预测 h 。
隐含层:隐含层介于输入层与输出层之间,之所以称之为隐含层,是因为当中产生的值并不像输入层使用的样本矩阵 X 或者输出层用到的标签矩阵 y 那样直接可见。
人工神经网络由一个输入层和一个输出层组成,其中输入层从外部源(数据文件,图像,硬件传感器,麦克风等)接收数据,一个或多个隐藏层处理数据,输出层提供一个或多个数据点基于网络的功能。例如,检测人,汽车和动物的神经网络将具有一个包含三个节点的输出层。对银行在安全和欺诈之间进行交易进行分类的网络将只有一个输出。

2、人工神经网络(ANN)的运行原理
人工神经网络的强大之处在于,它拥有很强的学习能力。在得到一个训练集之后,它能通过学习提取所观察事物的各个部分的特征,将特征之间用不同网络节点连接,通过训练连接的网络权重,改变每一个连接的强度,直到顶层的输出得到正确的答案。

人工神经网络的核心成分是人工神经元。每个神经元接收来自其他几个神经元的输入,将它们乘以分配的权重,将它们相加,然后将总和传递给一个或多个神经元。一些人工神经元可能在将输出传递给下一个变量之前将激活函数应用于输出。
神经网络每层都包含有若干神经元,层间的神经元通过权值矩阵 Θl 连接。一次信息传递过程可以如下描述:
第 j 层神经元接收上层传入的刺激(神经冲动);
该刺激经激励函数(activation function)g 作用后,会产生一个激活向量 aj 。 aji 表示的就是 j 层第 i 个神经元获得的激活值(activation):

2.1、前向传播
刺激由前一层传向下一层,故而称之为前向传递
对于非线性分类问题,逻辑回归会使用多项式扩展特征,导致维度巨大的特征向量出现,而在神经网络中,并不会增加特征的维度,即不会扩展神经网络输入层的规模,而是通过增加隐含层,矫正隐含层中的权值,来不断优化特征,前向传播过程每次在神经元上产出的激励值都可看做是优化后的特征。

· 代价函数

矩阵表示

其中, .∗ 代表点乘操作,A∈R(K×m) 为所有样本对应的输出矩阵,其每一列对应一个样本的输出, Y∈R(m×K) 为标签矩阵,其每行对应一个样本的类型。
2.2、反向传播
由于神经网络允许多个隐含层,即,各层的神经元都会产出预测,因此,就不能直接利用传统回归问题的梯度下降法来最小化 J(Θ) ,而需要逐层考虑预测误差,并且逐层优化。用反向传播法优化预测。首先定义各层的预测误差为向量 δ(l) :

反向传播中的反向二字也正是从该公式中得来,本层的误差 δ(l) 需要由下一层的误差 δ(l+1) 反向推导。

· 训练过程

3、神经网络结构的设计
3.1感知器
最简单的神经网络结构,不包含隐含层

从形式上看,回归问题算是感知器的非网络表达形式。
感知器可以解决逻辑运算问题(01分类问题)-sigmoid函数
多分类问题,添加多个隐层

3.2、结构设计
在神经网络的结构设计方面,往往遵循如下要点:
  - 输入层的单元数等于样本特征数。
  - 输出层的单元数等于分类的类型数。
  - 每个隐层的单元数通常是越多分类精度越高,但是也会带来计算性能的下降,因此,要平衡质量和性能间的关系。
  - 默认不含有隐藏层(感知器),如果含有多个隐层,则每个隐层上的单元数最好保持一致。

· 过程
  - 设计激活函数

- 设计初始化权值矩阵的函数
  - 定义参数展开和参数还原函数
Args: hiddenNum 隐层数目
unitNum 每个隐层的神经元数目
         inputSize 输入层规模
         classNum 分类数目
         epsilon epsilon
Returns:
         Thetas 权值矩阵序列

  • 定义梯度校验过程
          Args:
            Thetas 权值矩阵
            X 样本
            y 标签
            theLambda 正规化参数
          Returns:
            checked 是否检测通过
  • 计算代价函数

Args:
        Thetas 权值矩阵序列
        X 样本
        y 标签集
        a 各层激活值
      Returns:
        J 预测代价 “”"

  • 设计前向传播过程

“”“前向反馈过程
      Args:
        Thetas 权值矩阵
        X 输入样本
      Returns:
        a 各层激活向量 “””

  • 设计反向传播过程

1)计算梯度
  Args:
    a 激活值
    y 标签
  Returns:
    D 权值梯度
2)获得梯度后,更新权值
“”“更新权值
  Args:
    m 样本数
    Thetas 各层权值矩阵
    D 梯度
    alpha 学习率
    theLambda 正规化参数
  Returns:
    Thetas 更新后的权值矩阵 “””
综上,我们能得到梯度下降过程:
前向传播计算各层激活值;
反向计算权值的更新梯度;
更新权值;

训练结果将包含如下信息:(1)网络的预测误差 error;(2)各层权值矩阵 Thetas;(3)迭代次数 iters;(4)是否训练成功 success。

最后通过预测函数
“”“预测函数
   Args:
    X: 样本
    Thetas: 训练后得到的参数
    Return: a “””
4、神经网络训练过程
人工神经网络首先为神经元之间的连接权重分配随机值。ANN正确而准确地执行其任务的关键是将这些权重调整为正确的数字。但是找到合适的权重并不是一件容易的事,特别是当您处理多层和成千上万的神经元时。
通过对带有注释示例的网络进行“培训”来完成此校准。例如,训练上述图像分类器,则提供多张照片进行不断训练,神经网络会逐渐调整其权重,以将每个输入映射到正确的输出类别

基本上,训练期间发生的事情是网络进行自我调整以从数据中收集特定模式。同样,对于图像分类器网络,当您使用质量示例训练AI模型时,每一层都会检测到特定的特征类别。例如,第一层可能检测到水平和垂直边缘,第二层可能检测到拐角和圆形。在网络的更深处,更深的层次将开始挑选出更高级的功能,例如面部和物体。

神经网络的每一层都将从输入图像中提取特定特征
当您通过训练有素的神经网络运行新图像时,调整后的神经元权重将能够提取正确的特征并准确确定图像属于哪个输出类别。

训练神经网络的挑战之一是找到正确数量和质量的训练示例。而且,训练大型AI模型需要大量的计算资源。为了克服这一挑战,许多工程师使用“ 转移学习”(一种培训技术),您可以采用预先训练的模型,并使用针对特定领域的新示例对其进行微调。当已经有一个与您的用例接近的AI模型时,转移学习特别有效。

5、神经网络的好处和局限性
人工神经网络的特点和优越性:
具有自学习功能
具有联想存储功能
具有高速寻找优化解的能力
局限性:
神经网络需要大量数据
神经网络在概括方面很不好
神经网络是不透明的

本节标题内容转载
https://www.pythonheidong.com/blog/article/819466/f8e5693139813a1bad8a/

卷积神经网络CNN的前向传播计算和误差反向回传原理

在卷积神经网络中,所谓的卷积运算,其实并不是严格的数学意义上的卷积。深度学习中的卷积实际上是信号处理和图像处理中的互相关运算,它们二者之间有细微的差别。深度学习中的卷积(严格来说是互相关)是卷积核在原始图像上遍历,对应元素相乘再求和,得到的新图像在尺寸上会有减小。
在这里插入图片描述

在全连接神经网络,图像数据以及特征是以列向量的形式进行存储。而在卷积神经网络中,数据的格式主要是以张量(可以理解为多维数组)的形式存储。图片的格式为一个三维张量,行×列×通道数。卷积核的格式为一个四维张量,卷积核数×行×列×通道数。

卷积操作是每次取出卷积核中的一个,一个卷积核的格式为三维,为行×列×通道数。对应通道序号的图片与卷积核经过二维卷积操作后(即上图所示操作),得到该通道对应的卷积结果,将所有通道的结果相加,得到输出图像的一个通道。每个卷积核对应输出图像的一个通道,即输出图像的通道数等于卷积核的个数。

这里概念有一点绕,但是卷积神经网络中所谓张量的卷积,本质上是进行了一共卷积核数×通道数次二维卷积操作。每一个卷积核对应卷积结果的一个通道,每一个卷积核的通道对应原始图片的一个通道。这个操作和一个列向量乘上一个矩阵得到一个新的列向量有相似的地方。

在这里插入图片描述
所谓的池化,就是对图片进行降采样,最大池化就是在图片中用每个区域的最大值代表这个区域,平均池化就是用每个区域平均值代表这个区域。
在这里插入图片描述

池化层的反向传播
  池化层没有激活函数可以直接看成用线性激活函数,即σ(z)=zσ(z)=z,所以σ′(z)=1σ′(z)=1。接下来看看池化层如何递推δlδl。
  在前向传播时,我们一般使用max或average对输入进行池化,而且池化区域大小已知。反向传播就是要从缩小后的误差δl+1δl+1,还原池化前较大区域对应的误差δlδl。根据(BP2),δl=((wl+1)Tδl+1)⊙σ′(zl)δl=((wl+1)Tδl+1)⊙σ′(zl),在DNN中wl+1wl+1是已知的,所以我们可以直接通过矩阵乘法将l+1l+1层的误差映射回ll层的误差,但对于池化层,要求(wl+1)Tδl+1(wl+1)Tδl+1就需要一些特殊的操作了。
  用一个例子可以很清楚的解释这一过程:假设现在我们是步长为1的2×22×2池化,4×44×4大小的区域经过池化后变为2×22×2。如果δlδl的第k个子矩阵为:
在这里插入图片描述

首先我们要确定 δl+1kδkl+1中4个误差值分别和原来 4×44×4大小的哪个子区域所对应,根据前向传播中池化窗口的移动过程,我们可以很轻松的确定2对应左上角 2×22×2的区域,8对应右上角 2×22×2的区域,以此类推。这一步完成之后,我们就要对不同类型的池化进行不同的操作。
  如果是max pooling,我们只需要记录前向传播中最大值的位置,然后将误差放回去即可。如果最大值位置分别为 2×22×2的左上,右下,右上,左下,还原后的矩阵为:

在这里插入图片描述

如果是average pooing,我们只需要将池化单元的误差平均值放回原来的子矩阵即可:
在这里插入图片描述

可以发现这其实就是将上一层的误差进行一次池化的逆操作,还是比较容易理解的。
  得到了 (wl+1)Tδl+1(wl+1)Tδl+1之后就可以利用 δl=((wl+1)Tδl+1)⊙σ′(zl)δl=((wl+1)Tδl+1)⊙σ′(zl)求得 δlkδkl了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这里CNN的反向传播转载博客,感谢大佬之前的总结。
liujianping-ok@163.com

注意对比分析ANN与CNN的相同之处和不同之处,深入理解卷积运算的概念和本质,掌握卷积后的特征图尺寸的计算方法

神经网络优化

掌握常见激活函数

在这里插入图片描述
如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。
如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。

激活函数的主要作用是提供网络的非线性建模能力。如果没有激活函数,那么该网络仅能够表达线性映射,此时即便有再多的隐藏层,其整个网络跟单层神经网络也是等价的。因此也可以认为,只有加入了激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。

可微性: 当优化方法是基于梯度的时候,这个性质是必须的。
单调性: 当激活函数是单调的时候,单层网络能够保证是凸函数。
输出值的范围: 当激活函数输出值是 有限 的时候,基于梯度的优化方法会更加 稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是 无限 的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的learning rate。

在sigmod函数中我们可以看到,其输出是在[0,1]这个开区间内,我们可以联想到概率,可以被表示做为概率,或用于输入的归一化,代表性的如Sigmoid交叉熵损失函数,但是严格意义上讲,不要当成概率。sigmod函数曾经是比较流行的,它可以想象成一个神经元的放电率,在中间斜率比较大的地方是神经元的敏感区,在两边斜率很平缓的地方是神经元的抑制区。

当然,流行也是曾经流行,这说明函数本身是有一定的缺陷的。

当输入稍微远离了坐标原点,函数的梯度就变得很小了,几乎为零。在神经网络反向传播的过程中,我们都是通过微分的链式法则来计算各个权重w的微分的。当反向传播经过了sigmod函数,这个链条上的微分就很小很小了,况且还可能经过很多个sigmod函数,最后会导致权重w对损失函数几乎没影响,这样不利于权重的优化,这个问题叫做梯度饱和,也可以叫梯度弥散(梯度消失)。
函数输出不是以0为中心的,这样会使权重更新效率降低。因为这会导致后层的神经元的输入是非0均值的信号,这会对梯度产生影响:假设后层神经元的输入都为正(e.g. x>0 elementwise in ),那么对w求局部梯度则都为正,这样在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果,使得收敛缓慢。 当然了,如果你是按batch去训练,那么每个batch可能得到不同的符号(正或负),那么相加一下这个问题还是可以缓解。因此,非0均值这个问题虽然会产生一些不好的影响,不过跟上面提到的 kill gradients 问题相比还是要好很多的。(不过有一种常用的解决方案是,将最终函数值减去0.5)
sigmod函数要进行指数运算,这个对于计算机来说训练效率是比较慢的。
具体来说,由于在后向传递过程中,sigmoid向下传导的梯度包含了一个 f′(x)f′(x) 因子(sigmoid关于输入的导数),因此一旦输入落入饱和区,f′(x)f′(x) 就会变得接近于0,导致了向底层传递的梯度也变得非常小。此时,网络参数很难得到有效训练。这种现象被称为梯度消失。一般来说, sigmoid 网络在 5 层之内就会产生梯度消失现象。

此外,sigmoid函数的输出均大于0,使得输出不是0均值,这称为偏移现象,这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。

tanh是双曲正切函数,tanh函数和sigmod函数的曲线是比较相近的,咱们来比较一下看看。首先相同的是,这两个函数在输入很大或是很小的时候,输出都几乎平滑,梯度很小,不利于权重更新;不同的是输出区间,tanh的输出区间是在(-1,1)之间,而且整个函数是以0为中心的,这个特点比sigmod的好。

一般二分类问题中,隐藏层用tanh函数,输出层用sigmod函数。不过这些也都不是一成不变的,具体使用什么激活函数,还是要根据具体的问题来具体分析,还是要靠调试的。

ReLU(Rectified Linear Unit)函数是目前比较火的一个激活函数,相比于sigmod函数和tanh函数,它有以下几个优点:

Krizhevsky发现使用 ReLU 得到的SGD的收敛速度会比sigmoid/tanh 快很多。有人说这是因为它是linear,而且梯度不会饱和
计算速度要快很多。ReLU函数只有线性关系,不管是前向传播还是反向传播,都比sigmod和tanh要快很多。(sigmod和tanh要计算指数,计算速度会比较慢)
当然,缺点也是有的:

ReLU在训练的时候很”脆弱”,一不小心有可能导致神经元”坏死”。举个例子:由于ReLU在x<0时梯度为0,这样就导致负的梯度在这个ReLU被置零,而且这个神经元有可能再也不会被任何数据激活。如果这个情况发生了,那么这个神经元之后的梯度就永远是0了,也就是ReLU神经元坏死了,不再对任何数据有所响应。实际操作中,如果你的learning rate 很大,那么很有可能你网络中的40%的神经元都坏死了。 当然,如果你设置了一个合适的较小的learning rate,这个问题发生的情况其实也不会太频繁。
我们发现ReLU函数的输出要么是0,要么是正数,这也就是说,ReLU函数也不是以0为中心的函数。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

权值初始化

对于权重w的初始化,一般常用高斯初始化,有时也可以用随机初始化,一定不能全用某一常值初始化。b的初始化可用全常值初始化即可(很多论文都是)。

神经网络的训练过程中的参数学习时基于梯度下降算法进行优化的。梯度下降法需要在开始训练时给每个参数赋予一个初始值。这个初始值的选取十分重要。在神经网络的训练中如果将权重全部初始化为0,则第一遍前向传播过程中,所有隐藏层神经元的激活函数值都相同,导致深层神经元可有可无,这一现象称为对称权重现象。
为了打破这个平衡,比较好的方法是对每层的权重都进行随机初始化,这样使得不同层的神经元之间有很好的区分性。但是,随机初始化参数的一个问题是如何选择随机初始化的区间。如果权重初始化太小,会导致神经元的输入过小,随着层数的不断增加,会出现信号消失的问题;也会导致sigmoid激活函数丢失非线性的能力,因为在0附件sigmoid函数近似是线性的。如果参数初始化太大,会导致输入状态太大。对sigmoid激活函数来说,激活函数的值会变得饱和,从而出现梯度消失的问题。

常用的参数初始化方法
高斯分布初始化:参数从一个固定均值(比如0)和固定方差(比如0.01)的高斯分布进行随机初始化。
均匀分布初始化:在一个给定的区间[-r,r]内采用均匀分布来初始化参数。超参数r的设置可以按照神经元的连接数量进行自适应的调整。
初始化一个深层神经网络时,一个比较好的初始化策略是保持每个神经元输入和输出的方差一致。

参考博客:

https://my.oschina.net/u/4870686/blog/4802035

https://www.jianshu.com/p/cb065e4cce3f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

SGD

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
动量的引入就是为了加快学习过程,特别是对于高曲率、小但一致的梯度,或者噪声比较大的梯度能够很好的加快学习过程。动量的主要思想是积累了之前梯度指数级衰减的移动平均(前面的指数加权平均)
在这里插入图片描述
SGD每次都会在当前位置上沿着负梯度方向更新(下降,沿着正梯度则为上升),并不考虑之前的方向梯度大小等等。而动量(moment)通过引入一个新的变量 v vv 去积累之前的梯度(通过指数衰减平均得到),得到加速学习过程的目的。最直观的理解就是,若当前的梯度方向与累积的历史梯度方向一致,则当前的梯度会被加强,从而这一步下降的幅度更大。若当前的梯度方向与累积的梯度方向不一致,则会减弱当前下降的梯度幅度。
在这里插入图片描述
RMSprop(root mean square prop)

RMSprop是hinton老爷子在Coursera的《Neural Networks for Machine Learning》lecture6中提出的,这个方法并没有写成论文发表,同样的,RMSprop也是对Adagrad的扩展,以在非凸的情况下效果更好。和Adadelta一样,RMSprop使用指数加权平均(指数衰减平均)只保留过去给定窗口大小的梯度,使其能够在找到凸碗状结构后快速收敛。直接来看下RMSprop的算法(来自lan goodfellow 《deep learning》):
在这里插入图片描述
在实际使用过程中,RMSprop已被证明是一种有效且实用的深度神经网络优化算法。目前它是深度学习人员经常采用的优化算法之一。keras文档中关于RMSprop写到:This optimizer is usually a good choice for recurrent neural networks.
在这里插入图片描述
Adam实际上是把momentum和RMSprop结合起来的一种算法
在这里插入图片描述
在这里插入图片描述

NIN

在这里插入图片描述

GoogLeNet的Inception模型提出之时,其实idea是来自NIN,NIN就是Network in Network,NIN有两个特性

MLP代替GLM
Global Average Pooling
MLP代替GLM

GLM就是广义线性模型。那么MLP是指,在做卷积操作的时候,把线性操作变为多层感知机。
左图为普通的卷积,右图为mlpconv,Mlpconv相当于在正常的卷积层后面,再添加一个1×1的卷积层。
在这里插入图片描述
Global Average Pooling
Global Average Pooling主要为了解决全连接层参数过多的问题,早期对于分类问题,最后一个卷积层的 Feature Map 通常与全连接层连接,最后通过 softmax 逻辑回归分类。全连接层带来的问题就是参数空间过大,容易过拟合。早期 Alex 采用了Dropout 的方法,来减轻过拟合,提高网络的泛化能力,但依旧无法解决参数过多问题。
全连接层的存在有以下缺点:

全连接层是传统的神经网络形式,使用了全连接层以为着卷积层只是作为特征提取器来提取图像的特征,而全连接层是不可解释的,从而CNN也不可解释了全连接层中的参数往往占据CNN整个网络参数的一大部分,从而使用全连接层容易导致过拟合。

而Global Average Pooling的做法是将全连接层去掉,在最后一层,将卷积层设为与类别数目一致,然后全局pooling,从而直接输出各个类别结果。

使用全局平均 pooling 代替全连接层,使得最后一个多层感知卷积层获得的每一个特征图能够对应于一个输出类别,优点如下:

全局平均池化更原生的支持于卷积结构,通过加强特征映射与相应分(种)类的对应关系,特征映射可以很容易地解释为分类映射;
全局平均池化一层没有需要优化的参数,减少大量的训练参数有效避免过拟合;
全局平均池化汇总(求和)空间信息,因此其对空间变换是健壮的。

总结
NIN网络是inception的前身,总结来说就是在卷积层后面增加1∗1卷积核,然后将全连接层换成平均全局池化层(Global Average Pooling),可以减少大量的训练参数有效避免过拟合

1×1的卷积大概有两个方面的作用吧:

  1. 实现跨通道的交互和信息整合
  2. 进行卷积核通道数的降维和升维

由于 1×1 并不会改变 height 和 width,改变通道的第一个最直观的结果,就是可以将原本的数据量进行增加或者减少。这里看其他文章或者博客中都称之为升维、降维。

1*1卷积核,可以在保持feature map尺度不变的(即不损失分辨率)的前提下大幅增加非线性特性(利用后接的非线性激活函数),把网络做的很deep

备注:一个filter对应卷积后得到一个feature map,不同的filter(不同的weight和bias),卷积以后得到不同的feature map,提取不同的特征,得到对应的specialized neuron

跨通道信息交互(channal 的变换)

例子:使用1x1卷积核,实现降维和升维的操作其实就是channel间信息的线性组合变化,3x3,64channels的卷积核后面添加一个1x1,28channels的卷积核,就变成了3x3,28channels的卷积核,原来的64个channels就可以理解为跨通道线性组合变成了28channels,这就是通道间的信息交互[7]。

注意:只是在channel维度上做线性组合,W和H上是共享权值的sliding window

Inception 模块作用
增加网络深度和宽度的同时减少参数。
在这里插入图片描述
Inception网络或Inception层的作用是代替人工来确定卷积层中的卷积核类型,或者是否需要创建卷积层和池化层,可以代替你来做决定,虽然网络架构比较复杂,但网络表现却非常好。下图是Inception网络的核心:网络自行决定这些参数和卷积核及池化,你可以给网络添加这些参数的所有可能的值,然后把这些输出连接起来,让网络自己学习它需要什么样的参数,采用哪些卷积核组合
在这里插入图片描述
Inception模块会将之前层的激活或者输出作为它的输入
在这里插入图片描述
卷积神经网络的最后几层通常称为全连接层,在它之后是一个softmax层用来做预测,Inception网络的一个细节就是即便是中间层,也参与了特征的计算,它们也能预测图片的分类,并且可以防止网络过拟合,

常非常深的神经网络是很难训练的,因为存在梯度消失和梯度爆炸问题。跳跃连接(Skip connection)可以从某一层网络层获取激活,然后迅速反馈给另外一层,甚至是神经网络的更深层。利用跳跃连接构建能够训练深度网络的ResNets,有时深度能够超过100层。ResNets是由残差块(Residual block)构建的

在这里插入图片描述
在这里插入图片描述
我们直接将a向后,到神经网络的深层,在ReLU非线性激活函数前加上a,将激活值a的信息直接传达到神经网络的深层,不再沿着主路进行

加上a1后产生了一个残差块(residual block)。插入的时机是在线性激活之后,ReLU激活之前。除了捷径(shortcut),你还会听到另一个术语“跳跃连接”(skip connection),就是指a3跳过一层或者好几层,从而将信息传递到神经网络的更深层。

假设使用标准优化算法(梯度下降法等)训练一个普通网络,如果没有残差,没有这些捷径或者跳跃连接,凭经验你会发现随着网络深度的加深,训练错误会先减少,然后增多。而理论上,随着网络深度的加深,应该训练得越来越好才对,网络深度越深模型效果越好。但实际上,如果没有残差网络,对于一个普通网络来说,深度越深意味着用优化算法越难训练,随着网络深度的加深,训练错误会越来越多。
但有了ResNets就不一样了,即使网络再深,训练的表现却不错,比如说训练误差减少,就算是训练深达100层的网络也不例外。对x的激活,或者这些中间的激活能够到达网络的更深层。这种方式有助于解决梯度消失和梯度爆炸问题,在训练更深网络的同时,又能保证良好的性能。
在这里插入图片描述
在这里插入图片描述

空洞卷积(Dilated/Atrous Convolution),广泛应用于语义分割与目标检测等任务中,语义分割中经典的deeplab系列与DUC对空洞卷积进行了深入的思考。目标检测中SSD与RFBNet,同样使用了空洞卷积。
在这里插入图片描述

空洞卷积有什么作用呢?

扩大感受野:在deep net中为了增加感受野且降低计算量,总要进行降采样(pooling或s2/conv),这样虽然可以增加感受野,但空间分辨率降低了。为了能不丢失分辨率,且仍然扩大感受野,可以使用空洞卷积。这在检测,分割任务中十分有用。一方面感受野大了可以检测分割大目标,另一方面分辨率高了可以精确定位目标。
捕获多尺度上下文信息:空洞卷积有一个参数可以设置dilation rate,具体含义就是在卷积核中填充dilation rate-1个0,因此,当设置不同dilation rate时,感受野就会不一样,也即获取了多尺度信息。多尺度信息在视觉任务中相当重要啊。

说了这么多有关感受野的话,感受野究竟怎么计算呢?其实和标准卷积是一致的。

空洞卷积实际卷积核大小:

K=k+(k-1)(r-1),k为原始卷积核大小,r为空洞卷积参数空洞率;

以三个r=2的3*3/s1空洞卷积为例计算感受野:

K=k+(k-1)(r-1)=3+2*1=5
R=1+4+4+4=13

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

转置卷积和普通卷积有相同的本质: 建立了一些值之间的关系. 只不过,转置卷积所建立的这个关系与普通卷积所建立的关系,方向相反.

我们可以使用转置卷积来进行上采样. 并且,转置卷积中的权重是可以被学习的. 因此,我们没有必要搞什么插值方法来做上采样.

尽管它被称作转置卷积, 但是这并不意味着我们是拿一个已有的卷积矩阵的转置来作为权重矩阵的来进行转置卷积操作的. 和普通卷积相比,intput和output的关系被反向处理(转置卷积是1对多,而不是普通的多对1),才是转置卷积的本质.

正因如此,严格来说转置卷积其实并不算卷积.但是我们可以把input矩阵中的某些位置填上0并进行普通卷积来获得和转置卷积相同的output矩阵. 你可以发现有一大把文章说明如何使用这种方法实现转置卷积. 然而, 因为需要在卷积操作之前,往input中填上许多的0,这种方法其实有点效率问题.

从信息论的角度看,卷积是不可逆的.所以这里说的并不是从output矩阵和kernel矩阵计算出原始的input矩阵.而是计算出一个保持了位置性关系的矩阵

在FCN、U-net等网络结构中,涉及到了上采样。上采样概念:上采样指的是任何可以让图像变成更高分辨率的技术。最简单的方式是重采样和插值:将输入图片进行rescale到一个想要的尺寸,而且计算每个点的像素点,使用如双线性插值等插值方法对其余点进行插值来完成上采样过程。

在这里插入图片描述

在这里插入图片描述
比如上方左侧矩阵A是2020的矩阵要进行大小为1010的池化,那么左侧图中的红色就是10*10的大小,对应到右侧的矩阵,右侧每个元素的值,是左侧红色矩阵每个元素的值得和再处于红色矩阵的元素个数,也就是平均值形式的池化。

简单来说:上采样指的是任何可以让你的图像变成更高分辨率的技术。

最简单的方式是重采样和插值:将输入图片进行rescale到一个想要的尺寸,而且计算每个点的像素点,使用如***双线性插值***等插值方法对其余点进行插值来完成上采样过程。
在这里插入图片描述
在这里插入图片描述

分组卷积
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
深度可分离卷积(Depthwise separable convolution)
在这里插入图片描述
在这里插入图片描述
分组卷积和深度可分离卷积降低参数量

常见的面向目标识别(分类)的卷积神经网络

LeNet

手写字体识别模型LeNet5诞生于1994年,是最早的卷积神经网络之一。LeNet5通过巧妙的设计,利用卷积、参数共享、池化等操作提取特征,避免了大量的计算成本,最后再使用全连接神经网络进行分类识别,这个网络也是最近大量神经网络架构的起点。
在这里插入图片描述
输入层

读入需要被网络处理的图片,这里图片的大小为32*32的黑白图片

Conv1层

图片大小:32x32,通道数为1

filter(卷积核):5x5x6(大小5x5,个数6)

步长:1

输出:28x28x6

采用的卷积方式:vaild

S2层

图片大小:28x28

池化窗口:2x2

个数:6

输出:14x14x6

Conv3层

图片大小:14x14,通道数为6

filter(卷积核):5x5x16(大小5x5,个数16)

步长:1

输出:10x10x16

采用的卷积方式:vaild

S4层

图片大小:10x10

池化窗口:2x2

个数:16

输出:5x5x6

Conv5层

图片大小: 5x5,通道数为16

filter(卷积核):5x5x120(大小5x5,个数120)

步长:1

输出:1x1x120

采用的卷积方式:vaild

F6层

输入向量维度:[1,120]

权重参数的维度:[120,84]

计算方式:输入的向量与权重参数之间用矩阵点积的方式进行运算,得到一个输出维度为[1,86]的向量

OUTPUT层

输入向量维度:[1,84]

权重参数的维度:[84,10]

计算方式:输入的向量与权重参数之间用矩阵点积的方式进行运算,得到一个输出维度为[1,10]的向量
经过卷积后输出维度大小的公式:
在这里插入图片描述

AlexNet
在这里插入图片描述

VGG

VGG原理

VGG16相比AlexNet的一个改进是采用连续的几个3x3的卷积核代替AlexNet中的较大卷积核(11x11,7x7,5x5)。对于给定的感受野(与输出有关的输入图片的局部大小),采用堆积的小卷积核是优于采用大的卷积核,因为多层非线性层可以增加网络深度来保证学习更复杂的模式,而且代价还比较小(参数更少)。

简单来说,在VGG中,使用了3个3x3卷积核来代替7x7卷积核,使用了2个3x3卷积核来代替5*5卷积核,这样做的主要目的是在保证具有相同感知野的条件下,提升了网络的深度,在一定程度上提升了神经网络的效果。

比如,3个步长为1的3x3卷积核的一层层叠加作用可看成一个大小为7的感受野(其实就表示3个3x3连续卷积相当于一个7x7卷积),其参数总量为 3x(9xC^2) ,如果直接使用7x7卷积核,其参数总量为 49xC^2 ,这里 C 指的是输入和输出的通道数。很明显,27xC2小于49xC2,即减少了参数;而且3x3卷积核有利于更好地保持图像性质。

在这里插入图片描述

  • VGG16包含了16个隐藏层(13个卷积层和3个全连接层),如上图中的D列所示

  • VGG19包含了19个隐藏层(16个卷积层和3个全连接层),如上图中的E列所示

VGG网络的结构非常一致,从头到尾全部使用的是3x3的卷积和2x2的max pooling。

VGG优点

VGGNet的结构非常简洁,整个网络都使用了同样大小的卷积核尺寸(3x3)和最大池化尺寸(2x2)。
几个小滤波器(3x3)卷积层的组合比一个大滤波器(5x5或7x7)卷积层好:
验证了通过不断加深网络结构可以提升性能。

VGG缺点

VGG耗费更多计算资源,并且使用了更多的参数(这里不是3x3卷积的锅),导致更多的内存占用(140M)。其中绝大多数的参数都是来自于第一个全连接层。VGG可是有3个全连接层啊!
PS:有的文章称:发现这些全连接层即使被去除,对于性能也没有什么影响,这样就显著降低了参数数量。

注:很多pretrained的方法就是使用VGG的model(主要是16和19),VGG相对其他的方法,参数空间很大,最终的model有500多m,AlexNet只有200m,GoogLeNet更少,所以train一个vgg模型通常要花费更长的时间,所幸有公开的pretrained model让我们很方便的使用。

inception v3

大卷积核完全可以由一系列的3x3卷积核来替代,那能不能分解的更小一点呢。

文章考虑了 nx1 卷积核,如下图所示的取代3x3卷积:

于是,任意nxn的卷积都可以通过1xn卷积后接nx1卷积来替代。实际上,作者发现在网络的前期使用这种分解效果

并不好,还有在中度大小的feature map上使用效果才会更好,对于mxm大小的feature map,建议m在12到20之间。

用nx1卷积来代替大卷积核,这里设定n=7来应对17x17大小的feature map。该结构被正式用在GoogLeNet V2中。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

resnet

在这里插入图片描述
对每层的输入做一个reference, 学习形成残差函数, 而不是学习一些没有reference的函数。这种残差函数更容易优化,能使网络层数大大加深。
我们知道,在计算机视觉里,特征的“等级”随增网络深度的加深而变高,研究表明,网络的深度是实现好的效果的重要因素。然而梯度弥散/爆炸成为训练深层次的网络的障碍,导致无法收敛。
有一些方法可以弥补,如归一初始化,各层输入归一化,使得可以收敛的网络的深度提升为原来的十倍。然而,虽然收敛了,但网络却开始退化了,即增加网络层数却导致更大的误差
的确,通过在一个浅层网络基础上叠加y=x的层(称identity mappings,恒等映射),可以让网络随深度增加而不退化。这反映了多层非线性网络无法逼近恒等映射网络。

但是,不退化不是我们的目的,我们希望有更好性能的网络。 resnet学习的是残差函数F(x) = H(x) - x, 这里如果F(x) = 0, 那么就是上面提到的恒等映射。事实上,resnet是“shortcut connections”的在connections是在恒等映射下的特殊情况,它没有引入额外的参数和计算复杂度。 假如优化目标函数是逼近一个恒等映射, 而不是0映射, 那么学习找到对恒等映射的扰动会比重新学习一个映射函数要容易
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中σ代表非线性函数ReLU

理论上,对于“随着网络加深,准确率下降”的问题,Resnet提供了两种选择方式,也就是identity mapping和residual mapping,如果网络已经到达最优,继续加深网络,residual mapping将被push为0,只剩下identity mapping,这样理论上网络一直处于最优状态了,网络的性能也就不会随着深度增加而降低了。

常见的深度学习损失函数

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

。。。。。。。

目标检测

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

~持续更新


http://www.ppmy.cn/news/580612.html

相关文章

罗晨:梦想照进现实,一个独立开发者的田园诗

非商业转载请注明作译者、出处&#xff0c;并保留本文的原始链接&#xff1a;http://www.ituring.com.cn/article/47972 他种有机蔬菜、他搞全景摄影、他自己设计制作硬件产品&#xff0c;他还是个程序员&#xff0c;并以此为生。罗晨&#xff0c;他是Markdown编辑器Mou的作者&…

数字图像处理(冈萨雷斯 第三版)

1.1 图像与图像处理的概念 图像(Image)&#xff1a; 使用各种观测系统以不同形式和手段观测客观世界而获得的&#xff0c;可以直接或间接作用于人眼并进而产生视觉的实体。包括&#xff1a; 各类图片&#xff0c;如普通照片、X光片、遥感图片&#xff1b; 各类光学图像&…

文章收录1

3.Hive Metastore 代码简析 4.受限的玻尔兹曼机 5.以公司实际应用讲解OpenStack到底是什么 6.Ubuntu12.04安装hadoop 7.vpsmate安装完再重启服务器&#xff0c;vpsmate不无再次打开的解决方法 8.如何使用JDBC快速处理大数据 9.关于集群技术的几个新工具的介绍 10.CHD4 impala安…

c++11 标准模板(STL)(std::basic_streambuf)(六)

定义于头文件 <streambuf> template< class CharT, class Traits std::char_traits<CharT> > class basic_streambuf; 类 basic_streambuf 控制字符序列的输入与输出。它包含下列内容并提供到它们的访问&#xff1a; 1) 受控制字符序列&#xff0…

ModaHub AI模型开源社区——Milvus向量数据库存储相关概念

目录 存储相关概念 分区和数据段 数据段&#xff08;segment&#xff09; 分区&#xff08;partition&#xff09; 集合、分区和数据段的关系 元数据 常见问题 存储相关概念 分区和数据段 建立集合时&#xff0c;Milvus 根据参数 index_file_size 控制数据段的大小。另…

OSG三维渲染引擎编程学习之八十六:“第八章:OSG文字” 之 “8.5 HUD平视显示实例”

目录 第八章 OSG文字 8.5 HUD平视显示实例 第八章 OSG文字 适当的文字信息对于显示场景信息是非常重要的。在OSG中,osgText提供了向场景中添加文字的强大功能,由于有第三方插件FreeType的支撑,可完全支持TrueType字体。 TrueType是由AppleComputer公司和Microsoft公司联合…

【Java】Java核心要点总结 71:ThreadPoolExecutor

文章目录 1)为什么需要线程池&#xff1f;2)线程池内部怎么保证线程安全?3)创建线程的方式 newSingleThreadExecutor底层4) ThreadPoolExecutor参数使用5) 线程池的工作机制6)拒绝策略分四种7)队列有哪些&#xff1f; 参考&#xff1a; 1)为什么需要线程池&#xff1f; 重复利…

大数据从0到1的完美落地之Flume案例_3

案例演示 案例演示&#xff1a;SyslogtcpMemLogger Syslogtcp: syslog广泛应用于系统日志。syslog日志消息既可以记录在本地文件中&#xff0c;也可以通过网络发送到接收syslog的服务器。接收syslog的服务器可以对多个设备的syslog消息进行统一的存储&#xff0c;或者解析其中…