技术标签: cnn 人工智能-TensorFlow 人工智能-PyTorch 人工智能 AlexNet 人工智能-深度学习 神经网络
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_程序员秘密
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/120837261
目录
AlexNet是深度学习的起点,后续各种深度学习的网络或算法,都是源于AlexNet网络。
Yoshua Bengio、Yann LeCun、Geoffrey Hinton共同获得了2018年的图灵奖。
杰弗里·埃弗里斯特·辛顿(Geoffrey Everest Hinton),计算机学家、心理学家,被称为“神经网络之父”、“深度学习鼻祖”。Hinton是机器学习领域的加拿大首席学者,是加拿大高等研究院赞助的“神经计算和自适应感知”项目的领导者,是盖茨比计算神经科学中心的创始人,目前担任多伦多大学计算机科学系教授。2013年3月,谷歌收购 Hinton 的公司 DNNResearch 后,他便随即加入谷歌,直至目前一直在 Google Brain 中担任要职。
Yoshua Bengio是蒙特利尔大学(Université de Montréal)的终身教授,任教超过22年,是蒙特利尔大学机器学习研究所(MILA)的负责人,是CIFAR项目的负责人之一,负责神经计算和自适应感知器等方面,又是加拿大统计学习算法学会的主席,是ApSTAT技术的发起人与研发大牛。Bengio在蒙特利尔大学任教之前,是AT&T贝尔实验室 & MIT的机器学习博士后。
Yann LeCun,担任Facebook首席人工智能科学家和纽约大学教授,1987年至1988年,Yann LeCun是多伦多大学Geoffrey Hinton实验室的博士后研究员。
乌克兰出生、加拿大长大的Alex Krizhevsky,是Hinton在多伦多大学计算机科学博士生,2012 年,在 Hinton 的指导下, Alex Krizhevsky 和 Hinton 的另一个学生 IIya Sutskever 参加了当年的 ImageNet 挑战赛。ImageNet 是一个大型视觉数据集,由李飞飞所主导创造,拥有 1400 多万张标注过的图像。2010 年起,基于 ImageNet 数据集的视觉识别挑战赛每年举办一次。
Alex Krizhevsky和 Sutskever用Alex Krizhevsky设计的卷积神经网络(CNN)参加比赛。两个研究深度学习没几年的学生,却以 10.8% 的巨大优势击败了其他对手,包括一些学术界的顶级团队。而Alex Krizhevsky 设计的那个神经网络,后来被命名为 AlexNet。
AlexNet网络是Hinton率领的谷歌团队(Alex Krizhevsky,Ilya Sutskever,Geoffrey E. Hinton)在2010年的ImageNet大赛获得冠军的一个神经网络。
如果用全连接神经网络处理大尺寸图像具有三个明显的缺点:
(1)首先将图像展开为一维向量会丢失空间信息;
(2)其次参数过多效率低下,训练困难、耗时;
(3)同时大量的参数也很快会导致网络过拟合。
而使用卷积神经网络可以很好地解决上面的三个问题。
AlexNet网络,是2012年ImageNet竞赛冠军获得者Hinton和他的学生Alex Krizhevsky设计的。在那年之后,更多的更深的神经网路被提出,比如优秀的vgg,GoogleLeNet。其官方提供的数据模型,准确率达到57.1%,top 1-5 达到80.2%. 这相对于传统的机器学习分类算法而言,已经相当的出色.
论文:《ImageNet Classification with Deep Convolutional Neural Networks》
与常规神经网络不同,卷积神经网络的各层中的神经元是3维排列的:宽度、高度和深度。其中的宽度和高度是很好理解的,因为本身卷积就是一个二维模板,但是在卷积神经网络中的深度指的是卷积核神经元的第三个维度,而不是整个网络的深度,整个网络的深度指的是网络的层数。
AlexNet中包含了几个比较新的技术点,也首次在CNN中成功应用了ReLU、Dropout和LRN等Trick。同时AlexNet也使用了GPU进行运算加速。
AlexNet将LeNet的思想发扬光大,把CNN的基本原理应用到了很深很宽的网络中。
AlexNet主要使用到的新技术点如下:
(1)ReLU的成功使用与推广
成功使用ReLU作为CNN的激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了Sigmoid在网络较深时的梯度弥散问题。虽然ReLU激活函数在很久之前就被提出了,但是直到AlexNet的出现才将其发扬光大。
线性整流函数(Rectified Linear Unit, ReLU),又称修正线性单元,是一种人工神经网络中常用的激活函数(activation function),通常指代以斜坡函数及其变种为代表的非线性函数。
(2)Dropout的首次实用化
训练时使用Dropout随机忽略一部分神经元,以避免模型过拟合。Dropout虽有单独的论文论述,但是AlexNet将其实用化,通过实践证实了它的效果。在AlexNet中主要是最后几个全连接层使用了Dropout。
深度学习架构现在变得越来越深,dropout作为一个防过拟合的手段,使用也越来越普遍。
2012年,Dropout的想法被首次提出,它的出现彻底改变了深度学习进度,之后深度学习方向(反馈模型)开始展现优势,传统的机器学习慢慢的消声。
dropout改变之前稠密网络中,权重统一学习,参数统一更新的模式,提出在每次训练迭代中,让网络中的部分参数得到学习,即部分参数得到更新,部分参数保持不更新。
这种方法,看起来简单,但是却解决了,困扰了深度学习方向,一直只能用浅层网络,无法使用深度网络的尴尬局面,(因为随着网络的层数加大,过拟合问题一定会出现)
(3)首次使用最大池化
在CNN中使用重叠的最大池化。此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果。并且AlexNet中提出让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。
常用的池化方法有最大池化(max-pooling)和均值池化(mean-pooling)。根据相关理论,特征提取的误差主要来自两个方面:
(1)邻域大小受限造成的估计值方差增大;
(2)卷积层参数误差造成估计均值的偏移。
一般来说,mean-pooling能减小第一种误差,更多的保留图像的背景信息,max-pooling能减小第二种误差,更多的保留纹理信息。与mean-pooling近似,在局部意义上,则服从max-pooling的准则。
max-pooling卷积核的大小一般是2×2。 非常大的输入量可能需要4x4。 但是,选择较大的形状会显着降低信号的尺寸,并可能导致信息过度丢失。 通常,不重叠的池化窗口表现最好。
(4)LRN(局部归一化)竞争机制
提出了LRN层,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。
LRN(Local Response Normalization) 是一种提高深度学习准确度的技术方法。 LRN 一般是在激活、 池化函数后的一种方法。
(5)GPU并行运算
使用CUDA GPU加速深度卷积网络的训练,利用GPU强大的并行计算能力,处理神经网络训练时大量的矩阵运算。
AlexNet使用了两块GTX 580 GPU进行训练,单个GTX 580只有3GB显存,这限制了可训练的网络的最大规模。因此作者将AlexNet分布在两个GPU上,在每个GPU的显存中储存一半的神经元的参数。因为GPU之间通信方便,可以互相访问显存,而不需要通过主机内存,所以同时使用多块GPU也是非常高效的。同时,AlexNet的设计让GPU之间的通信只在网络的某些层进行,控制了通信的性能损耗。
(6)数据增强
随机地从256*256的原始图像中截取224*224大小的区域(以及水平翻转的镜像),相当于增加了2*(256-224)^2=2048倍的数据量。
如果没有数据增强,仅靠原始的数据量,参数众多的CNN会陷入过拟合中,使用了数据增强后可以大大减轻过拟合,提升泛化能力,这类似人眼,人眼可以实时的、以各种角度观看和学习一个物理。进行预测时,则是取图片的四个角加中间共5个位置,并进行左右翻转,一共获得10张图片,对他们进行预测并对10次结果求均值。同时,AlexNet论文中提到了会对图像的RGB数据进行PCA处理,并对主成分做一个标准差为0.1的高斯扰动,增加一些噪声,这个Trick可以让错误率再下降1%。
在上图中,该网络有上下两路,两路是完全相同的并行单元,之所以这样表示,而不是合成一路,是因为当时的单个GPU没有那么大的内存,AlexNet是通过两个物理的GPU同时训练。逻辑上,上下两路是可以合在一起的。
(0)输入层:
(1)卷积层1
(2)卷积层2:
(3)卷积层3:
(4)卷积层4:
(5)卷积层5:
(6)全连接层1:
(7)全连接层2:
(8)输出层
备注:由于激活函数和池化层不是神经元,因此没有在上图中体现。
(1)采用了最大池化(Max Pooling),池化核为3 * 3, 步长为2
(2)Local Response Normal:局部归一化竞争机制,后来被验证,用处不大。
(3)总的参数个数:35K + 307K + 884 + 1.3M + 442K + 37M + 16M + 4M = 59.968M
(4)等效FLOPs(是“每秒所执行的浮点运算次数”):720M
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_程序员秘密
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/120837261
https://github.com/google/glog为什么用glog* 由于Qt没有真正的Log框架,并且log4Qt已很久没更新了,而log4cpp和boost::log又太重, 因此打算在分布式IP音频广播系统中使用glog或spdlog作为日志框架.* glog and spdlog都是轻量级日志框架, spdlog即仅有CPP11头文件,更轻量; 但是由于google是...
C++11标准在2011年8月份获得一致通过,这是自1998年后C++语言第一次大修订,对C++语言进行了改进和扩充。随后各编译器厂商都各自实现或部分实现了C++中的特性。 如需查看各编译器对C++11的支持程度,请参看文章:转自:http://www.ddvip.com/tech/1000185987.html 本文主要介绍在Linux系统
4506 -- 【模拟试题】图形变换Description 给定m行n列的图像各像素点灰度值,对其依次进行一系列操作后,求最终图像。 其中,可能的操作及对应字符有如下四种: A:顺时针旋转90度; B:逆时针旋转90度; C:左右翻转; D:上下翻转。Input 第一行包含两个正整数m和n,表示图像的行数和列数,中间用单个空格隔开。1 接下
代码写法(java代码中):view.setVisibility(View.VISIBLE);view.setVisibility(View.INVISIBLE);view.setVisibility(View.GONE);代码写法(XML布局文件中):android:visibility="visible"android:visibility="invisible"android:visi
1.实现思路行政区划是一个常见的地图功能,我们需要给不同的区域绘制轮廓。如果使用百度或高德的网页在线地图进行开发,那么直接就可以查询到一个区域的边界点(高德比百度更密集点),之后就可以绘制这个区域了。参见百度Demo:http://lbsyun.baidu.com/jsdemo.htm#c1_10)百度的接口是这样获取区域边界的:我们可以把需要的区域输入进去,然后把点打印出...
取(m堆)石子游戏Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4610 Accepted Submission(s): 2775Problem Descriptionm堆石子...
在使用Python2 xlrd打开Excel时会报出Workbook corruption: seen[2] == 4错误。程序代码如下:import xlsxwriterimport xlrd3import xlrdaddress_file=“D:\Pythontest\Excel\数据测试”address_code="\000651_debt_year.xls"address=address_file+address_codeprint(address)name=xlrd.open_
本来svn好好地,突然不能用了,commit时显示如下错误:unable to connect to a repository url···Error running context: 由于目标计算机积极拒绝,无法连接。查看网上解决方法很多是说什么到控制面板里面打开工具管理工具——服务,找到visual SVN Sever启动就行,但是我这边根本没有这个visual SVN Sever,在这记录
目录1. 概念2. 举例2.1 例子12.1.2 计算2.2 例子 B3. 推导4. 应用1. 概念EM算法(期望最大算法)是一种迭代算法,用于含有隐变量的概率参数模型的最大似然估计或极大后验概率估计。具体思想如下:EM算法的核心思想非常简单,分为两步:Expection-Step和Maximization-Step。E-Step主要通过观察数据和现有模型来估计参数,然后用这个估计的参数值来计算似然函数的期望值;而M-Step是寻找似然函数最大化时对应的参数。由于算法会保证在每次迭代之后似然函数都会增
matplotlib双y轴的画法在我们使用matplotlib画图的时候,有时候需要将两个折线图放在同一个图像中,但是由于这两个图形数值大小范围不一样,使用同一y轴,效果会大打折扣的,所以,这里介绍一种双y轴的画法。先上代码:import matplotlib.pyplot as pltimport pandas as pdtips = pd.read_csv('tips.csv'...
WCF是微软官方推出的一个基于服务的整合框架,它整合了以前的Web Service、MSMQ、Remoting等通信技术,通过灵活的配置,让服务编程更加容易、可扩展。这篇文章主要目的就是带领大家从开发到测试到部署到调用WCF服务应用,让大家对其有个整体上的了解。一、建立一个WCF应用程序我们给这个WCF应用程序起名为WeatherWcfService,并添加天气预报的WebService引用。我们
逆波兰表达式求值解题思路:用一个栈来解决。当遇到数字就push,遇到符号就取栈顶的两个元素出来,运算完再push回去。最后return栈顶元素就行了。代码:public int EvalRPN(string[] tokens) { Stack<int> stack=new Stack<int>(); for(int i=0;i&...