首页 > 编程知识 正文

cnn各种网络模型的参数比较,bert+cnn文本分类

时间:2023-05-04 17:34:52 阅读:12895 作者:3156

上一篇文章介绍了CNN的基础知识及其优点,今天这篇文章主要看看著名的卷积神经网络的结构特征。 这样,就可以对CNN有更直观的认识。

一. LeNet-5

论文: http://yann.le Cun.com/exdb/publis/pdf/le Cun-01a.pdf

这可以说是CNN的开山之作,1998年由杨乐村提出,可以识别对方写数字和字母。 结构如下。

图中的子采样(即,“子采样”)是先前描述的轮询。 因为pooling实际上是对原始图像进行采样的过程。 共计7层,分别有2个CONV层、2个POOL层、3个FC层。 当然,它的输入规模很小,是3232大小的单通道图像。

上面的网络结构可以用以下公式表示。

input(3232 ) conv过滤器) avg pool (conv ) 16过滤器) AVGpool---fc(120 )-fc (84 )-fc ) 1110

我不会说任何细节。 接下来用TensorFlow或Keras再现一下吧。

二. AlexNet

论文: http://vision.Stanford.edu/teaching/cs 231 b _ spring 1415/slides/Alex net _ tug ce _ kyung hee.pdf

AlexNet于2012年由Alex Krizhevsky、Ilya Sutskever、Geoffrey Hinton等人提出, 这是CNN第一次于2012年在ils vrc (imagenetlarge-scalevisual recognition challenge )上取得如此好的成绩,由于领先于第二位,震惊了整个领域,从此开始了CNNs

现在我将简要介绍这个ILSVRC。 这是ImageNet发起的挑战,是计算机视觉领域的奥运会。 世界各地的团队都有他们的模型,对ImageNet上千万共1000种图像进行分类、定位和识别。 这是一项相当困难的工作。 1000种呢。

现在,让我们来看看这个亚历克斯网的结构。

图片来源: https://www.learn opencv.com/understanding-Alex net /

的图像输入256256,随机剪裁得到227227大小,输入网络。 可见,该输入比LeNet大得多,该大小在当时已经是图像的主流大小。

AlexNet共有8个层,其中有5个CONV层和3个FC层。 这里没有POOL层。 因为严格意义上来说不是层。 因为没有可训练的参数。

关于AlexNet,有以下几点。

使用来自imagenet 1500万张2万2千个类别的图像进行训练,在2个GTX 580 GPU上训练5,6天; 使用ReLU激活函数,但包括LeNet在内的早期神经网络使用sigmoid或tanh激活函数。 AlexNet证明了ReLU函数高效,速度提高了好几倍。 使用许多数据放大技术(Dada Augmentation ),如照片翻转、剪切、平移等,扩展训练集以提高训练模型的鲁棒性; 使用第一次使用dropout规范化技术的mini-batch SGD (也会降低随机梯度)加速训练。 总之,AlexNet使人们认识到了CNN的强大和巨大潜力,为后续的研究提供了许多有用的经验和技术。

三. VGG Net

论文: https://arxiv.org/pdf/1409.1556.pdf

该网络于2014年由牛津大学的Karen Simonyan和Andrew Zisserman提出,主要特点是“简洁、深入”。 之所以深,是因为VGG有19层,远远超过了其前辈; 简洁是指在其结构上,统一采用stride为1的33滤波器和stride为2的22最大轮询。 所以很深,但结构大家一眼就能记住。

这张图来自VGG的论文。 每一列都是他们研究的不同结构。 直接查看e的结构,可以看到几个CONV重叠在一起,带有最大轮询、几个CONV、最大轮询和最后三个FC。 另外,在各最大轮询之后,CONV的滤波器的个数分别为64、128、256、512倍,具有规则的结构。

VGG刷新了CNN的深度,其简洁的结构更令人印象深刻。

四. inception net (谷歌网) )。

论文: https://www.cs.unc.edu/~ wliu/papers/Google net.pdf

从前面的网络结构可以看出,他们越来越深,滤波器越来越多,参数越来越多。 提高CNN性能的方法似乎是将更多的CONV、POOL层堆积起来

成一列(我们称之为sequential model,熟悉keras的同学应该知道)就行了。确实那个时候大家都在想方设法增加网络的层数,让我们的CNN更加庞大。

但我们也应该清楚,一味地增加层数、增加通道数(filters越多,输出图像的通道数就越多),会让我们的计算量急剧增加,模型变得过于复杂,从而更容易过拟合,这样反而会让模型的性能下降。

Inception Net不再是使用Sequential model,在结构上有了重大创新。

在sequential model中,所有操作,无论是CONV还是POOL,都是排成一些序列。但是Google他们就想,为什么不可以同时进行各种操作呢?于是论文的作者有一个大胆的想法,假如我们有3个CONV和一个MaxPOOL,何不让它们平行地运算,然后再整合在一起?:

 

这样做有一个问题,就是,整合在一起之后,channels这个维度会过大。

于是作者想出了一个好办法,那就是使用filter为1×1的CONV来进行降维:

 

前面学过了卷积的操作,我们知道,一个1×1的filter去卷积,图像的长和宽都不会变化,同时,输出图像的channels数等于filters的个数,所以对于图中的192个channels的图像,我们用32个filter,就可以把维度降低到32维。

于是,我们可以利用1×1CONV的这个特点,来改造上面的整合过程:

 

可见,通过使用1×1CONV,输出的通道数大大减少,这样,整个模型的参数也会大大减少。

上面这个部分,称为“Inception Module”,而Inception Network,就是由一个个的inception module组成的:

 

图片来源:https://adeshpande3.github.io/The-9-Deep-Learning-Papers-You-Need-To-Know-About.html

通过inception module,GoogleNet成功地把CNN的层数增加到了超过100层!(如果把一个module当做一层的话,则是22层)。

这个GoogleNet就牛逼了,名副其实地“深”,而且参数的数量也比我们前面介绍的AlexNet要少很多倍!所以训练出的模型不仅效果好,而且更快。

五、ResNet (残差网络)

论文:https://arxiv.org/pdf/1512.03385.pdf

最后要介绍的就是ResNet,于2015年由微软亚洲研究院的学者们提出。

前面讲了,CNN面临的一个问题就是,随着层数的增加,CNN的效果会遇到瓶颈,甚至会不增反降。这往往是梯度爆炸或者梯度消失引起的。

ResNet就是为了解决这个问题而提出的,因而帮助我们训练更深的网络。 它引入了一个 residual block(残差块):

 

这个图来自原论文。 可以很直观地看出,这个残差块把某一层的激活值,直接一把抓到了后面的某一层之前 ,这个过程称之为“skip connection(跳跃连接)”。 这个做法,相当于把前面的信息提取出来,加入到当前的计算中,论文作者认为,这样的做法,可以 使神经网络更容易优化。事实上却是是这样。

通过这种residual block,他们成功地搭建了一个拥有 152层的CNN!深不见底! 我从论文中截取网络的一部分如下:

 

关于具体的细节以及为什么residual block有效,可以查阅原论文或者网上的其他教程。

转自:https://www.zhihu.com/people/guo-bi-qjddb-78/posts

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。