CNN

卷积神经网络CNN在自然语言处理中的应用

作者: Yelbosh

卷积神经网络(Convolution Neural Network, CNN)在数字图像处理领域取得了巨大的成功,从而掀起了深度学习在自然语言处理领域(Natural Language Processing, NLP)的狂潮。2015年以来,有关深度学习在NLP领域的论文层出不穷。尽管其中必定有很多附庸风雅的水文,但是也存在很多经典的应用型文章。笔者在2016年也发表过一篇关于CNN在文本分类方面的论文,今天写这篇博客的目的,是希望能对CNN的结构做一个比较清晰的阐述,同时就目前的研究现状做一个简单的总结,并对未来的发展方向做一个小小的期望。由于笔者在深度学习方面的资历尚浅,因此如文中出现错误,请不吝赐教。

一. CNN的结构阐述(以LeNet-5为例)

详解卷积神经网络(CNN)

卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。

概揽

卷积神经网络(Convolutional Neural Networks / CNNs / ConvNets)与普通神经网络非常相似,它们都由具有可学习的权重和偏置常量(biases)的神经元组成。每个神经元都接收一些输入,并做一些点积计算,输出是每个分类的分数,普通神经网络里的一些计算技巧到这里依旧适用。

所以哪里不同呢?卷积神经网络默认输入是图像,可以让我们把特定的性质编码入网络结构,使是我们的前馈函数更加有效率,并减少了大量参数。

具有三维体积的神经元(3D volumes of neurons)

卷积神经网络利用输入是图片的特点,把神经元设计成三个维度 : width, height, depth(注意这个depth不是神经网络的深度,而是用来描述神经元的) 。比如输入的图片大小是 32 × 32 × 3 (rgb),那么输入神经元就也具有 32×32×3 的维度。下面是图解:

先说DNN,从结构上来说他和传统意义上的NN(神经网络)没什么区别,但是神经网络发展时遇到了一些瓶颈问题。

一开始的神经元不能表示异或运算,科学家通过增加网络层数,增加隐藏层可以表达。并发现神经网络的层数直接决定了它对现实的表达能力。但是随着层数的增加会出现局部函数越来越容易出现局部最优解的现象,用数据训练深层网络有时候还不如浅层网络,并会出现梯度消失的问题。

我们经常使用sigmoid函数作为神经元的输入输出函数,在BP反向传播梯度时,信号量为1的传到下一层就变成0.25了,到最后面几层基本无法达到调节参数的作用。值得一提的是,最近提出的高速公路网络和深度残差学习避免梯度消失的问题。

DNN与NN主要的区别在于把sigmoid函数替换成了ReLU,maxout,克服了梯度消失的问题。

下图为深度网络DNN结构图
CNN(卷积神经网络)、RNN(递归神经网络)、DNN(深度神经网络)内部网络结构的区别

你所不能不知道的CNN

作者:许铁

说起CNN,最初人们想到的都是某电视台,但等过几年,人们想起的多半是深度学习了。

应该说, CNN是这两年深度学习风暴的罪魁祸首, 自2012年, 正是它让打入冷宫的神经网络重见天日并且建立起自己在人工智能王国的霸主地位。

如过你认为深度学习是只能用来理解图像的,你就大错特错了, 因为它的用途太广了,上至文字,中有图像, 下至音频, 从手写数字识别到大名鼎鼎的GAN对抗学习, 都离不开它。

不过要了解CNN,还是拿图像做例子比较恰当。一句话来说CNN图像处理的本质,就是信息抽取, 巨大的网络可以抽取一步步得到最关键的图像特征, 我们有时也叫自动的特征工程。

CNN的建造灵感来自于人类对视觉信息的识别过程。 人脑对物体的识别的第一个问题是: 对应某一类对象的图像千千万, 比如一个苹果, 就有各种状态的成千上万状态, 我们识别物体的类别,事实上是给这成千上万不同的图片都打上同一个标签。

卷积神经网络的复杂度分析

在梳理CNN经典模型的过程中,我理解到其实经典模型演进中的很多创新点都与改善模型计算复杂度紧密相关,因此今天就让我们对卷积神经网络的复杂度分析简单总结一下下。

1.时间复杂度

卷积神经网络的复杂度分析
1.2 卷积神经网络整体的时间复杂度
卷积神经网络的复杂度分析
示例:用 Numpy 手动简单实现二维卷积

假设 Stride = 1, Padding = 0, img 和 kernel 都是 np.ndarray.

徒手实现CNN:综述论文详解卷积网络的数学本质

近日南洋理工大学研究者发布了一篇描述卷积网络数学原理的论文,该论文从数学的角度阐述整个卷积网络的运算与传播过程。该论文对理解卷积网络的数学本质非常有帮助,有助于读者「徒手」(不使用卷积API)实现卷积网络。

在该论文中,我们将从卷积架构、组成模块和传播过程等方面了解卷积网络的数学本质。读者可能对卷积网络具体的运算过程比较了解,入门读者也可先查看 Capsule 论文解读的第一部分了解详细的卷积过程,但其实我们一般并不会关注于卷积网络到底在数学上是如何实现的。因为各大深度学习框架都提供了简洁的卷积层API,所以我们不需要数学表达式也能构建各种各样的卷积层,我们最多只需要关注卷积运算输入与输出的张量维度是多少就行。这样虽然能完美地实现网络,但我们对卷积网络的数学本质和过程仍然不是太清楚,这也就是本论文的目的。

下面我们将简要介绍该论文的主体内容,并尝试理解卷积网络的数学过程。有基础的读者可以查阅原论文以实现更深的理解,此外我们也许能借助该论文的计算式在不使用层级 API 的情况下实现简单的卷积网络。

看得「深」、看得「清」—— 深度学习在图像超清化的应用

作者:张雨石

日复一日的人像临摹练习使得画家能够仅凭几个关键特征画出完整的人脸。同样地,我们希望机器能够通过低清图像有限的图像信息,推断出图像对应的高清细节,这就需要算法能够像画家一样“理解”图像内容。至此,传统的规则算法不堪重负,新兴的深度学习照耀着图像超清化的星空。

看得「深」、看得「清」—— 深度学习在图像超清化的应用
图1. 最新的Pixel递归网络在图像超清化上的应用。左图为低清图像,右图为其对应的高清图像,中间为算法生成结果。这是4倍超清问题,即将边长扩大为原来的4倍。

得益于硬件的迅猛发展,短短几年间,手机已更新了数代,老手机拍下的照片在大分辨率的屏幕上变得模糊起来。同样地,图像分辨率的提升使得网络带宽的压力骤增。如此,图像超清化算法就有了用武之地。

CNN超参数优化和可视化技巧详解

在深度学习中,有许多不同的深度网络结构,包括卷积神经网络(CNN或convnet)、长短期记忆网络(LSTM)和生成对抗网络(GAN)等。

在计算机视觉领域,对卷积神经网络(简称为CNN)的研究和应用都取得了显著的成果。CNN网络最初的诞生收到了动物视觉神经机制的启发,目前已成功用于机器视觉等领域中。

技术博客Towards Data Science最近发布了一篇文章,作者Suki Lau。文章讨论了在卷积神经网络中,该如何调整超参数以及可视化卷积层。

为什么用卷积神经网络?

首先,我们想要计算机具有什么能力呢?

当我们看到一只猫跳上窗台或在沙发上睡觉时,我们的潜意识会认出它是一只猫。

我们希望计算机也能完成这项任务,即将图像输入后,找出其独有的特征,最终输出该图像的类别信息。

卷积神经网络可以完成这项任务。

何为卷积神经网络?

先谈定义,卷积神经网络是一种特殊的神经网络,其中至少包含一个卷积层。在典型的CNN网络结构中,输入一张图像,经由一系列卷积层、非线性激活层、池化层和全连接层后,可输出相应的类别标签。

卷积神经网络的特别之处在于加入了卷积层。

如何理解空洞卷积(dilated convolution)?

来源:知乎 作者:谭旭

简单讨论下dilated conv,中文可以叫做空洞卷积或者扩张卷积。首先介绍一下dilated conv诞生背景[4],再解释dilated conv操作本身,以及应用。

首先是诞生背景,在图像分割领域,图像输入到CNN(典型的网络比如FCN[3])中,FCN先像传统的CNN那样对图像做卷积再pooling,降低图像尺寸的同时增大感受野,但是由于图像分割预测是pixel-wise的输出,所以要将pooling后较小的图像尺寸upsampling到原始的图像尺寸进行预测(upsampling一般采用deconv反卷积操作,deconv可参见知乎答案如何理解深度学习中的deconvolution networks?),之前的pooling操作使得每个pixel预测都能看到较大感受野信息。因此图像分割FCN中有两个关键,一个是pooling减小图像尺寸增大感受野,另一个是upsampling扩大图像尺寸。在先减小再增大尺寸的过程中,肯定有一些信息损失掉了,那么能不能设计一种新的操作,不通过pooling也能有较大的感受野看到更多的信息呢?答案就是dilated conv。

下面看一下dilated conv原始论文[4]中的示意图:

如何通过OpenFace实现人脸识别框架

本文中,笔者将介绍OpenFace中实现人脸识别的pipeline,这个pipeline可以看做是使用深度卷积网络处理人脸问题的一个基本框架,很有学习价值,它的结构如上图所示:

Input Image -> Detect

输入:原始的可能含有人脸的图像。

输出:人脸位置的bounding box。

这一步一般我们称之为“人脸检测”(Face Detection),在OpenFace中,使用的是dlib、OpenCV现有的人脸检测方法。此方法与深度学习无关,使用的特征是传统计算机视觉中的方法(一般是Hog、Haar等特征)。

对人脸检测这一步感兴趣的可以参考下列资料:

dlib的实现:http://blog.dlib.net/2014/02/dlib-186-released-make-your-own-object.html
openCV的实现:Face Detection using Haar Cascades

Detect -> Transform -> Crop

输入:原始图像 + 人脸位置bounding box

输出:“校准”过的只含有人脸的图像

同步内容
--电子创新网--
粤ICP备12070055号