冒泡~回趟家的感觉真的很舒心啦!要坚持学习鸭!
在开始讲卷积神经网络(CNN)之前,先补充一下神经网络的问题解答:
1.神经网络的基本结构是怎么样的?
一个神经网络最简单的结构包括输入层、隐含层和输出层,每一层网络有多个神经元,上一层的神经元通过激活函数映射到下一层神经元,每个神经元之间有相对应的权值,输出即为我们的分类类别。
2.对于同一个分类任务,我们可以用机器学习的算法来做,为什么要用神经网络呢?
a.神经网络具有特征提取的高效性。
一个分类任务,我们在用机器学习算法来做时,首先要明确feature和label,然后把这个数据"灌"到算法里去训练,最后保存模型,再来预测分类的准确性。问题是,我们需要实现确定好特征,每一个特征即为一个维度,特征数目过少,即欠拟合,如果特征数目过多,即过拟合。神经网络的出现使我们不需要做大量的特征工程,我们可以直接把数据灌进去,让它自己训练,自我“修正”,即可得到一个较好的效果。**
b.数据格式的简易性
在一个传统的机器学习分类问题中,我们“灌”进去的数据是不能直接灌进去的,需要对数据进行一些处理,在神经网络里我们不需要额外的对数据做过多的处理.
c.参数数目的少量性
在面对分类问题时,如果用SVM来做,我们需要调整的参数需要调整核函数,惩罚因子,松弛变量等等,而对于一个基本的三层神经网络来说,我们只需要初始化时给每一个神经元上随机的赋予一个权重w和偏置项b,在训练过程中,这两个参数会不断修正,调整到最优质,使模型的误差最小。
参考来源(https://www.cnblogs.com/charlotte77/p/7759802.html)
卷积神经网络(CNN)
那么什么是卷积神经网络?它和神经网络有什么区别呢?
一个卷积神经网络由很多层组成,它的输入是三维的,输出也是三维的,有的层有参数,有的层没有参数。它与普通神经网络相似,都具有可学习的权重和偏置常量的神经元。每个神经元都接收输入,输出是每个分类的分数,不同在于卷积神经网络默认输入是图像,可以让我们把特定的性质编码入网络结构,使是我们的前馈函数更加有效率,并减少了大量参数。
通俗一点来说,譬如我们看一张狗的图片,可能看到狗的尾巴或者嘴巴就知道这是张狗的照片,而不需要说每个部分都看完了才知道,原来这个是狗。所以如果我们可以用某种方式对一张图片的某个典型特征识别,那么这张图片的类别就知道了。这个时候就产生了卷积的概念。(划重点:局部特征推出分类)
卷积神经网络的三个基本层
卷积层(Convolutional Layer)
卷积神经网路中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法优化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。
先介绍卷积层遇到的几个名词:
• 深度/depth
• 步长/stride
• 填充值/zero-padding
[补充:什么是填充值?比如有这么一个5X5的图片,我们滑动窗口取2X2,步长取2,那么我们发现还剩下1个像素没法滑完,那怎么办呢?那我们在原先的矩阵加了一层填充值,使得变成6X6的矩阵,那么窗口就可以刚好把所有像素遍历完。这就是填充值的作用。]
卷积计算过程直观:
多层计算直观:
池化层(Pooling Layer)
池化层夹在连续的卷积层中间也可以称之为下采样, 用于压缩数据和参数的量,减小过拟合。简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。
池化层用的方法有Max pooling 和 average pooling,而实际用的较多的是Max pooling。
MaxPooling:取滑动窗口里最大的值
AveragePooling:取滑动窗口内所有值的平均值
具体如下:
补充: 为什么采用Max Pooling?如果我们只取最大值,那其他的值被舍弃难道就没有影响吗?不会损失这部分信息吗?如果认为这些信息是可损失的,那么是否意味着我们在进行卷积操作后仍然产生了一些不必要的冗余信息呢?
每一个卷积核可以看做一个特征提取器,不同的卷积核负责提取不同的特征,假设我们设计的第一个卷积核能够提取出“垂直”方向的特征,第二个卷积核能够提取出“水平”方向的特征,那么我们对其进行Max Pooling操作后,提取出的是真正能够识别特征的数值,其余被舍弃的数值,对于我提取特定的特征并没有特别大的帮助。那么在进行后续计算使,减小了feature map的尺寸,从而减少参数,达到减小计算量,缺不损失效果的情况。
全连接层(Fully-connected layer)
两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部,也就是跟传统的神经网络神经元的连接方式是一样的。
到这一步,其实我们的一个完整的“卷积部分”就算完成了,如果想要叠加层数,一般也是叠加“Conv-MaxPooing",通过不断的设计卷积核的尺寸,数量,提取更多的特征,最后识别不同类别的物体。做完Max Pooling后,我们就会把这些数据“拍平”,丢到Flatten层,然后把Flatten层的output放到full connected Layer里,对其进行分类。
参考资料(https://www.cnblogs.com/charlotte77/p/7759802.html)
(https://www.cnblogs.com/skyfsm/p/6790245.html)
Finally~希望十一月剩下的日子都能慢慢调整状态,水逆退散鸭!
网友评论