注:以下内容只是我再网上学习的记录,缺乏系统性,初学者随便看看即可,不要深究,以免有些概念没有描述准确造成误导。
一. 主要参考了:
传统机器学习和神经网络对比
| 传统机器学习 | 神经网络 |
特征 | 设计好feature的内容和数量,将feature和label送进去训练。 | 不需要设计feature,可以直接将数据送进去训练。 |
预处理 | 归一化、格式转换等 | |
调参 | 例如svm,需要调整核函数、惩罚因子、松弛变量等。 对模型效果都有影响,如果没有很深入的理解,就需要多次调参多次实验才能得到比较好的model。 | 对于一个基本的三层神经网络来说(输入-隐含-输出),只需要在输入时给每个神经元随机赋初值(权重w和偏置b),训练过程中这两个参数会不断自我修正。 当然赋初值更科学一点的话训练时可以收敛更快。 |
- 我们现在所说的神经网络,并不能称之为深度学习,神经网络很早就出现了,只不过现在因为不断的加深了网络层,复杂化了网络结构,才成为深度学习,并在图像识别、图像检测、语音识别等等方面取得了不错的效果。
- 基本网络结构:输入层--隐含层--输出层,每层网络上有多个神经元,上一层的神经元通过激活函数映射到下一层神经元,每个神经元之间有相对应的权值,输出分类类别。
- 图像领域,用最基本的神经网络并不合适,需要用卷积神经网络。
- 卷积计算过程:
5. 卷积核为什么有效,为什么使用卷积核之后会比普通的神经网络分类效果要好?
卷积核:矩阵的内积运算,相同位置的数字相乘再相加求和,滑动窗口,滤波器,特征提取器。
第一个卷积核能够提取出“垂直”方向的特征,第二个卷积核能够提取出“水平”方向的特征。
feature_map尺寸计算公式:[ (原图片尺寸 -卷积核尺寸)/ 步长 ] + 1。
卷积核的个数:由经验确定。通常情况下,靠近输入的卷积层,譬如第一层卷积层,会找出一些共性的特征,如手写数字识别中第一层我们设定卷积核个数为5个,一般是找出诸如"横线"、“竖线”、“斜线”等共性特征,我们称之为basic feature,经过max pooling后,在第二层卷积层,设定卷积核个数为20个,可以找出一些相对复杂的特征,如“横折”、“左半圆”、“右半圆”等特征,越往后,卷积核设定的数目越多,越能体现label的特征就越细致,就越容易分类出来,打个比方,如果你想分类出“0”的数字,你看到
这个特征,能推测是什么数字呢?只有越往后,检测识别的特征越多,试过能识别
这几个特征,那么我就能够确定这个数字是“0”。
6. 池化层:池化层的主要目的是通过降采样的方式,在不影响图像质量的情况下,压缩图片,减少参数。
maxpooling:最简单最常用,就是取滑动窗口中的最大值;
averagepooling:取滑动窗口中所有值的平均。
并不是所有用了maxpooling的效果就好,有时候有些周边信息也会对某个特定的特征产生一定的效果,这时候用maxpooling取最大值,就会舍弃掉其他信息,反而不划算,所以具体情况具体分析,可以加maxpooling和不加maxpooling的结果输出对比一下。
7. zero padding,周围补零操作,可以保证每次经过卷积或者池化输出的图片大小不变。
一般会选择3*3的卷积核和1的 zero padding,或者5*5的卷积核和2的 zero padding。
那么加入zero padding后的feature_map尺寸 =( width + 2 * padding_size - filter_size )/stride + 1,这个数值必须是整数,否则没有物理意义。
8. flatten 和 fully connected layer
到了这一步,其实我们的一个完整的“卷积”部分就算完成了。
如果想要叠加层数,一般也是叠加“conv-maxpooling”,通过不断的设计卷积核的尺寸、数量,提取更多的特征,最后识别不同类别的物体。
做完maxpooling之后,我们就会把这些数据“拍平”,丢到flatten层,然后把flatten层的output放到fully connected layer,采用softmax对其进行分类。