机器学习大白话杂谈(1)——常见的卷积神经网络架构简介

    这篇文章需要一点点机器学习的基础,尽量讲成大白话。

    卷积神经网络在当年也算是异军突起,一出现便将各个天梯榜屠的面目全非,今天我们就来聊一下有哪些常见的卷积神经网络结构。至于什么是卷积神经网络,你可以参考知乎大神的回答,能否对卷积神经网络工作原理做一个直观的解释。若是这个可以看的懂的话,我再推荐一个更底层一些的,原理上的。  如何通俗易懂地解释卷积?如果这两个都看懂了,那就继续下去看咯,要是没看懂,出门左转,再见了您嘞!

    虽然现在的caffe、tensorflow、还有刚出不久的pytorch等都有着比较完善的框架,且有很多的开源软件,但是弄懂底层的一些算法,不管是对于模型自身的提升,还是自身素质的提升都有着很大的帮助的。

  开始说正事。

      LeNet——1998年,Yann LeCun这个人发表了一篇论文Gradient-based learning applied to document recognition。在文章中,他提出了一个模型LeNet。当时的他为的是解决数字识别的问题,虽然是刚起步的深度学习,但是当今主流框架的东西,比如:卷积层、池化层等它可是都有哦。换句话说,现在的框架都是受他们的影响,前辈还是厉害的。先上图

LeNet一共有7层。

  • 输入的是一张32*32的图画。
  • C1 是一个Conv(卷积层),卷积核的大小为5*5,深度为6,没有padding,且Stride(步长)为1,所以C1输出的尺寸是32-5+1=28,深度是6.
  • S2 是一个pooling(池化层),pooling主要有两个方法:一个是Avy Pooling(平均池化),另一个是Max poolling。池化的主要目的是压缩数据处理量、防止过拟合两个作用,当然啦,也要保证数据的信息量。不过由于pooling太暴力,信息丢失量太大,且使用繁琐,因此一些机构开始使用Global Pooling。 
  • C3 也是一个卷积层,卷积核大小为5*5,深度为16,no padding,stride=1,因此输出的是一张10*10的feature maps,深度为16.
  • S4 是一个池化层,过滤器大小为2*2,stride=2,因此输出的是一张5*5的feature maps,深度为16.
  • C5 是一个卷积层(全连接层),卷积核大小为5*5,得到的是一个长度为5*5*16的向量,是一维的。有全卷积层的话,INPUT的画面必须是定尺寸的,为啥?这个你可以参考卷积层与全连接层的区别
  • F6也是一个全连接层输出84个节点
  • 输出层也是全连接层,输出10个节点。

——————————————————————分割线———————————————————————————

   AlexNet——好景不长,LeNet大放异彩不久,AlexNet便横空出事。AlexNet的主要成就在于它的ReLU激活函数是非线性的,也就是它不是一个直男,而是一个很感性的人,对数据拟合更加的委婉。它的优秀因为以下几点:

  • 使用了Relu激活函数,比基于tanhsigmoid的网络训练快数倍
  • 标准化。因为Relu激活函数的原因,输出的范围不会有上限,因此你需要做一个normalization(标准化)
  • Dropout。字面意思,随机的丢掉一些神经元,这样可以有效防止过拟合,当然了,再性能上一定会有一定的影响,但是比起过拟合带来的麻烦,这样drop drop drop还是很值得的。
  • data augmentation(数据增强)。有公开训练集的时候还好说,数据量稳稳的够。但是如果你要实现的效果很奇葩,且没钱,那在有效的范围内测得的数据肯定是不够的。这个时候你就要对数据进行data augmentation,宏观理解就是一幅画,我旋转一下,嘿!他就是新的数据了。也可以是加一点噪声上去,不仅数据量上去了,连模型的泛化能力也蹭蹭蹭上去了呢。手动[doge].先上个图吧(图片我就懒得做了,从左往右数层数)。

AlexNet总共包含8层,其中有5个卷积层和3个全连接层,有60M个参数,神经元个数为650k,分类数目为1000,LRN层出现在第一个和第二个卷积层后面,最大池化层出现在两个LRN层及最后一个卷积层后。 这个数字量,希望你的矿机还好。

需要注意的是,该模型采用了2-GPU并行结构

  • 第一层,和你们讲这个图第一层是错的(网上的图就是不靠谱,我也懒的改了),输入的应该是227*227的一个图(而不是224*224),深度为3.卷积核大小为11*11,深度为96。得到一个55*55*96.
  • 第二层,将上面的96层分成两部分计算,每一部分深度为48.每一部分进行Max—pooling,过滤器核大小为5*5,padding=2,stride=2,深度为128,池化后两组的输出都是27*27的一张图,深度为128。
  • 第三层,再来个max—polling,过滤核大小为3*3,填充为1,步长为2,深度为192,则池化后的结果为13*13*192.
  • 第四层,是一个卷积层,在前面的基础上做了一个合并,padding=1,kernel13*13,深度为192,stride=1,输出结果为13*13*192。
  • 第五层,卷积操作,没啥好讲的。
  • 第六层,卷积操作,也没啥好讲的。
  • 第七层,先池化处理,过滤器大小为3*3,步长为2,则池化后的每组输出为6*6*128 ,这里没画出来然后来一个全连接层。这一层的输入为6*6*256,因此需要采用6*6*256尺寸的过滤器对输入数据进行卷积运算,一个过滤器对输入数据进行卷积运算生成一个结果,我们设置了4096个,因此输出长度为4096的一位向量。
  • 第八层,稳稳的全连接。
  • 第九层,输入4096个,输出为1000个。

——————————————————————分割线——————————————————————————

   ZF Net——首先呢,名字是两个人名字首字母拼起来的,没啥意义,纯属表达基情。这是论文,想研究的取瞅几眼可以。此篇文章研究的主要是将训练时候中的数据可视化一下,让你看下,哪里可能出了问题,让人体大脑代替一部分优化工作。比如需要的地方因该是一张大饼脸的图像,结果却是一双手,那肯定后面都得错了,那就应该向前找到出错的地方。里面比较重要的一个废话观点就是:网络深度对模型非常重要。下面是各个层输出的效果图,也算是对深度学习这种黑盒实验做了一些透明度吧。

————————————————————————分割线————————————————————————

   VGG Net(Visual Geometry Group)——VGGNet是牛津大学计算机视觉组和DeepMind公司共同研发一种深度卷积网络,并且在2014年在ILSVRC比赛上获得了分类项目的第二名和定位项目的第一名,VggNet一共有六种不同的网络结构,但是每种结构都有含有5组卷积,每组卷积都使用3x3的卷积核,每组卷积后进行一个2x2最大池化,接下来是三个全连接层.在训练高级别的网络时,可以先训练低级别的网络,用前者获得的权重初始化高级别的网络,可以加速网络的收敛(这段是我copy的)。

   这个方法主要是为了减少参数量,具体的做法是这样的:如果一个卷积层是7*7,那么这一层就会有49个参数。但是使用3个3*3的卷积核的效果一样,但是参数却只有27个。并且三个卷积,非线性更加的nice啊,对于feature的学习就更加完美了。

至于怎么实现。自己打开google or 百度 一搜一大把。 

————————————————————————分割线——————————————————————————

   Inception——这么提高神经网络的性能呢?那最方便的手段就是增加深度和网络的宽度,但是哦,一旦增加了这些参数,神经网络很容易过拟合,而且很消耗资源。用专业化的话就是:到将稀疏矩阵聚类成相对稠密子空间来倾向于对稀疏矩阵的优化,因而提出inception结构。说人话就是:怎么用较少的卷积层来起到覆盖整个卷积网络。

他的做法就是:在多个不同尺寸的卷积核上同时进行卷积运算后再进行聚合,并使用1*1的卷积进行降维减少计算成本。在这插一嘴,就是这个1*1的conv在不同的地方使用会有奇效,在实际开发过程中如果遇到测试集OK,但是实际场景却糟糕的情况,可以考虑一下在某些地方加入这个小东西。Inception有许多不同的网络结构从V1到V4,每个结构都有着自己的特色,就不细细再去讲了

———————————————————————分割线——————————————————————————

   ResNet——深度残差网络,这个东西有点厉害了,何博士在facebook实习的时候做出来的,直接走上人生巅峰有木有。它所解决的问题是因为当时模型的辨别力竟然会随着深度的加深而发生退化,这怎么可能,就算加一层没有用的,那顶多是效果不变,再怎么也不可能退化。何博士就做了一个重大的决定,就是将上一层计算的结果直接加入下一层,没听错,就是这个加法计算,在代码中甚至只需要一行代码便可以实现,但是它解决了退化问题。

上图是ResNet的设计思路,在实际实现上主要有两种:

一种是identity mapping,另外一个叫residual mapping,要是你的网络浅就去用左边那个,要是够深够长你就去用右边那个。因为右边那个有一个1*1的conv层,它在这是用来减少计算量的。同时这个加法计算时候,万一几个conv出来的东西大小不一样咋整,别想了,人家何博士也帮你想好了,有三种方案

  • 输入输出一致的情况下,使用恒等映射,不一致的情况下,则用0填充(zero-padding shortcuts) 
  • 输入输出一致时使用恒等映射,不一致时使用 projection shortcuts 
  • 在两种情况下均使用 projection shortcuts 

我的建议是你就去用第二种方案,也别多想了。

总结

  • 深度越深,越宽效果理论上是一定会更好的。
  • 使用多个小卷积核代替大卷积核可以有效降低计算量。
  • 加法运算有效解决退化问题。
  • 未完待续········
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: XGBoost(eXtreme Gradient Boosting)是一种机器学习算法,通过集成多个弱学习器的预测结果来构建强学习器。它基于梯度提升框架,使用变种的决策树作为弱学习器,并在训练过程中优化损失函数。 XGBoost的核心思想是迭代地增加决策树的规模,每次新建一个决策树并进行训练,在训练过程中,根据之前决策树的预测结果与真实标签之间的差异,调整模型参数,使得模型能够更好地拟合训练数据。同时,为了防止过拟合,XGBoost采用了正则化方法。 在训练过程中,XGBoost使用了梯度提升技术优化损失函数。梯度提升是通过最小化损失函数的负梯度来逐步优化模型的方法。XGBoost在每次迭代中,计算损失函数的一阶导数和二阶导数,以此来训练新建的决策树,并通过梯度提升的方式将新决策树集成到模型中。 XGBoost还引入了一些创新的技术来提高模型性能,例如,使用特定的数据结构(稠密压缩列存储)存储训练数据以优化内存使用;通过按特征值排序的方式加速特征分裂的搜索;使用分布式计算框架进行大规模训练等。 总的来说,XGBoost是一种强大且高效的机器学习算法,能够处理各种类型的数据,并在许多机器学习竞赛中取得了优异的成绩。它的优点包括可解释性强、鲁棒性好、可扩展性强等,在工业界和学术界都得到了广泛应用。 ### 回答2: XGBoost(eXtreme Gradient Boosting)是一种广泛应用于机器学习领域的集成学习算法。它的基本原理是通过多个弱学习器的集成来构建一个更强大的模型。 XGBoost的主要特点包括: 1. 高度灵活:XGBoost可以应用在各种数据和任务上,包括分类、回归和排序等。 2. 高效性能:XGBoost采用了并行计算技术,使得模型训练和预测速度都非常快。 3. 可解释性:XGBoost提供了特征重要性排序功能,可以帮助我们理解模型的决策过程。 4. 鲁棒性:XGBoost通过正则化项和剪枝方法,可以有效地减少过拟合的风险。 XGBoost的工作原理如下: 1. 初始化:首先,将一个简单的模型作为初始模型,一般是选择一个常数值作为初始预测。 2. 偏差修正:计算初始预测值与实际目标值之间的差异,得到残差。然后,使用回归树来拟合这些残差。 3. 加法模型:将拟合的回归树与初始模型进行加权相加,得到新的预测值。即将之前的预测值与回归树的预测值相加,得到新的预测值。 4. 更新残差:计算新的预测值与实际目标值之间的差异,得到新的残差。 5. 迭代:重复上述过程,不断迭代生成新的回归树,并更新预测值和残差,直到模型收敛或达到预设的迭代次数。 在每一轮迭代中,XGBoost通过梯度和近似的海森矩阵对目标函数进行优化,选择最佳的分割点和叶子权重来构建回归树。同时,通过正则化项对树的复杂度进行控制,避免过拟合现象。 总之,XGBoost通过迭代的方式不断优化模型的预测能力,同时考虑了数据结构、特征重要性和模型复杂度等因素,使得其在各种机器学习任务中表现出色。 ### 回答3: XGBoost(eXtreme Gradient Boosting)是一种机器学习算法,是基于决策树的集成学习方法。它通过多个弱分类器的集成来构建一个强分类器。 XGBoost的核心思想是通过不断迭代训练,通过添加弱分类器并纠正先前的错误来提高整体模型的准确率。在每轮迭代中,XGBoost会计算每个样本的梯度信息,并使用这些信息来训练下一个弱分类器。新的弱分类器将根据梯度信息来修正上一轮分类器的错误。 与传统的Gradient Boosting算法相比,XGBoost通过引入一些改进来提高模型的性能。其中一个改进是使用了正则化项,以避免模型过拟合。另一个改进是引入了二阶梯度信息,以更准确地估计每个样本的预测误差。 XGBoost还使用了一种特殊的数据结构,称为"分布式虚拟内存",以在大规模数据集上高效地进行训练。此外,XGBoost还具有并行计算能力,可以利用多核处理器和分布式计算资源来加速训练过程。 XGBoost在多个机器学习竞赛中取得了显著的成绩,并被广泛应用于实际问题中。它可以用于分类问题和回归问题,还可以处理缺失值和异常值。XGBoost具有较高的预测准确性和鲁棒性,同时也具备良好的解释性,可以帮助我们理解特征的重要性和模型的逻辑。 总之,XGBoost是一种强大的机器学习算法,它通过集成多个弱分类器来构建一个准确性较高的分类器。它的优点包括高性能、良好的鲁棒性和解释性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值