在学习CNN之前需要了解的是神经网络,为了使得计算机像我们人类一样拥有自己思考的能力,不仅仅是在计算一些预测值(就像回归问题一样,只是单纯的去得出一个值),就此诞生了像人类的神经元一样的结构,神经元之间相互联系构成神经网络,可以通过输入数据来得出结果,比如判断图片中是什么动物、判断图片中车辆属于哪一种类型等。
1.1 基本结构
上图就是神经元的结构,均为输入数据,为权重,b代表偏置值,g(z)为激活函数,a为输出结果。可以参照之前学习过的逻辑回归的结构。神经元是神经网络最基本的结构,对于CNN来说也只是一栋大房子的一个小砖头。
在卷积神经网络中,基本的结构为:
输入层
卷积层:滤波器加内核组成,对输入数据进行卷积
池化层:所见模型大小,提高计算速度,在减少数据量的同时保留信息
ReLu层:修正线性单元
全连接层:将多次卷积层与池化层得出的高级特征进行全连接
输出层:输出数据,通常会加一层softmax
1.2理解卷积
卷积是什么?为什么需要卷积?
首先理解滤波器(滤波矩阵):就是一组权重组成的矩阵;所谓的卷积操作就是将图像与滤波矩阵做内积,内积过程中有一系列超参数:
filter 过滤器个数,就是滤波矩阵个数
padding 填充列大小,填充是为了在卷积之后不回过度压缩数据
stride 步幅大小
卷积的动态图如下:图片取自CNN笔记
步幅就是每一次移动的大小,其中为0的行和列就是填充的, 上图中过滤器数为3。一般各个参数之间的关系为:n为输入矩阵大小,f为滤波矩阵大小,p为padding值,s为步幅大小
1.3局部感知与权重共享
关于局部感知,就像上面动图中的,左边输入数据一个一个和滤波矩阵做内积,每一次都是一小部分的数据,在通过一步一步移动,最后整个输入数据都内积完成。这样的局部感知就好比一篇很长的论文,我们不能一眼看出所有的知识点,而是需要一行一行的进行研读,在进行图像识别的时候,计算机就跟我们读论文是一样的,需要利用这样的局部感知去获得信息。
关于权重共享,就是滤波器是不变的,他和所有的数据做内积,实现的就是权重共享。可以把滤波矩阵看成一个人,不同的人在研读论文时的所想所感的不一样的,就像不同的滤波器,卷积得出来的结果都是不一样的。多个滤波器的使用,可以从不同角度获得数据信息,就像读论文一样,不同的人集思广益,从而更大范围的获得信息。
局部感知和权重共享都是CNN的特点。
1.4池化层和Relu层
在经过卷积层之后得到的数据还是会有很大的维度,池化层所作的就是降维,在不丢失重要特征的情况下降低维度,使得计算变得更加轻便。常用的池化方法:
max pooling 在每一个“池”中取其最大值,如下图
average pooling 在每个“池”中取平均值:
Relu层所做的就是激励函数做的事情,和sigmoid函数一样,relu函数是一种更为常用的激励函数。
2.1 CNN与文本分类
文本分类主流方法已从普通的机器学习方法变为基于深度学习的文本分类模型, 传统的分类方法都需要人工提取特征,再去进行计算,采用了深度学习模型的方法之后,机器可以自动提取特征。在使用神经网络进行文本分类时需要注意的是,输入数据时文本,需要先进行文本的数值化,将词汇信息映射到词向量中,常用的方式是TF-IDF、BOW、One-Hot、分布式的表示方式。
text-CNN模型结构:
输入层:输入的是定长的序列,短了要填充,长了要截取;
卷积层:步幅为1,常采用不同长度的滤波器,宽度和输入层矩阵一样;
池化层:采用max pooling;
全连接层; 结构图如下图所示:
FastText 模型结构:
多层softmax,N-gram特征