通过mnist数字识别理解卷积神经网络

来源:互联网 发布:网络作家村 编辑:程序博客网 时间:2024/06/05 07:02

背景:基于学习的目的,想要熟悉深度学习的算法,实现DNN和CNN的代码
任务描述:识别mnist数据集中的手写数字,图像大小28*28,灰度
版本区别:
代价函数 激活函数 输出层 参数初始化 正则项 准确率
network2: 交叉熵 sigmoid sigmoid w-(0,1/√n_in) 2范数 30个,95.45 100个,98%
network3: 对数似然 ReLu softMax 同上 2范数 两个卷积-池化层,100个99%
局部感受野:5*5,跨距1个像素,
一个隐藏层 三个隐藏层, 60个迭代周期,minbatch 30个,步长初始0.1
概括的说,神经网络主要要素只有两个:
● 网络层级架构:隐藏层的深度,神经元个数;卷积层的卷积核,池化方法;神经元(激活函数),输出层函数的选择
● weights,bia的求解:代价函数,初始化方式

  • 反向传播在做什么?为什么要反向传播?
    求解梯度下降中需要的w,b的梯度。步骤,先从输入层向前传播,计算输出层的误差,然后反向传播,通过递推式得到每一个隐藏层的误差,w的梯度是该神经元上的激活值×误差,b的梯度就是误差
  • 为什么会出现梯度消失,爆炸等不稳定情况
    基于梯度下降的学习方法,本身存在着内在不稳定性,导致梯度变化,从而使得学习速度变慢。根据反向传播的误差递推关系,在前⾯的层上的梯度是来⾃后⾯的层上项(权重,误差,偏导)的乘积。当存在过多的层次时,就出现了内在本质上的不稳定场景。
  • 如何调整参数,参数设置是多少,参数如何初始化
    这里的参数学习速度η,规则化参数λ,批量数据大小mini-batch。首先明白各个参数调大调小对模型的影响。调整参数是一个比较经验化的东西。我看的书上所写的,调参过程首先要对数据进行简化,以加快调参反馈的速度,比如减少类别,减少样本,然后尝试参数不同数量级,确定参数的数量级,再进行微调。
  • 批量梯度下降中,mini-batch的大小的选择
    如果数据集比较小,可以采用全数据集,能够更好地代表样本总体。但是当数据量太大,内存容量有限,无法一次性将所有的数据载入。
    需要将数据分批量进行梯度下降,Batch 的选择,首先决定的是下降的方向。
    Batch_Size = 1。这就是在线学习,每次修正方向以各自样本的梯度方向修正,横冲直撞各自为政,难以达到收敛
    在合理范围内,增大 Batch_Size 有何好处?
    ● 内存利用率提高了,大矩阵乘法的并行化效率提高。
    ● 跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
    ● 在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。
    盲目增大 Batch_Size 有何坏处?
    ● 内存利用率提高了,但是内存容量可能撑不住了。
    ● 跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。
    ● Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化。
  • 深度学习与神经网络的区别
    “深度学习”是为了让层数较多的多层神经网络可以训练,能够work而演化出来的一系列的 新的结构和新的方法。与几十年前的神经网络的区别,卷积层,新的激活函数ReLu,新的权重初始化方法,新的损失函数,新的防止过拟合方法等等,都是为了解决传统多层神经网络梯度消失、过拟合等问题。
  • 不同代价函数,激活函数的特点和适用条件
    激活函数对比:
    (为什么用S型神经元而不用感知机?)
    0)感知机:不能满足w和b的学习。感知机的输出非0即1,w,b发生改变后可能会使结果完全反转。而S型神经元,(0,1)之间平滑函数,对w和b对微小的调整,输出也产生微小的变化,逐步使得达到预期的输出
    1)sigmoid:将输出实值压缩到0-1之间。 缺点:(输入非常大或非常小的时候)容易梯度消失;sigmoid函数是非0均值的,下一层的神经元将从上一层神经元得到的非0 均值的信号作为输入,再结合w计算梯度,始终都是正的。(可根据batch调节)
    2)tanh:是sigmoid的变形,均值为0,图像中心下移动到原点
    2)Relu(修正线性单元):好处:最重要的防止梯度消失;收敛快,求梯度简单;具有稀疏特性。
    三个特点:①单侧抑制 ②相对宽阔的兴奋边界 ③稀疏激活性
    (相比于sigmoid:sigmoid反向传播求误差梯度时,求导计算量很大,而relu梯度为大于0为1,小于等于0为0。对于深层网络,sigmoid反向传播时,在sigmoid接近饱和区时,变换太缓慢,导数趋0,从而无法完成深层网络的训练;而relu函数在大于0的部分梯度为常数,所以不会产生梯度弥散现象;另外,relu函数在负半区的导数为0 ,所以一旦神经元激活值进入负半区,那么梯度就会为0,也就是说这个神经元不会经历训练,即所谓的稀疏性,减少了参数的相互依存关系,缓解了过拟合问题。)
    缺点:训练的时候很脆弱,一个非常大的梯度流过一个Relu神经元后,不会对其他数据有激活现象了,之后的梯度一直为0,所以需要设置比较小的学习率
  • 卷积的作用是什么?有哪些卷积核?
    低级特征——>高级特征——>语义特征
    参数两万多——>五百多
    局部区域的线性组合,即被圈中节点的数值乘以对应的权重后相加。再加上一个偏移量b
    通过卷积提取特征,检测图像的空间结构。由低层次的特征经过组合,组成高层次的特征,并且得到不同特征之间的空间相关性。CNN通过:局部感知、权值共享、池化操作、多层次结构抓住了这个共性。局部感知使网络可以提取数据的局部特征;权值共享大大减少参数,降低了网络的训练难度;池化操作和多层次结构一起,实现了数据的降维,将低层次的特征组合成高层次的特征。
    优点:共享卷积核、减少了网络自由参数的个数,对高维数据处理无压力;无需手动选取特征,训练好权重,即得特征。降低神经网络的复杂性。这种网络结构在有监督的方式下学习到了一些良好的性能:对平移、比例缩放、倾斜或其他形式的变形具有高度不变性。
    缺点:需要调参,需要大量样本;
    RGB图像如何卷积?
    depth维度大于1,每个维度一个卷积窗口, 不同维度之间权重并不共享。但是绑定在一块,构成一个卷积方块,得到一个卷积值。即,三维矩阵卷积之后变成二维了。
    如何避免多层卷积之后图像越来越小?如:28*28的图像通过5*5的卷积之后,变成24*24的矩阵,小了一圈,继续卷积继续减小
    Zero padding。选择3x3的filter和1的zero padding,或5x5的filter和2的zero padding可以保持图片的原始尺寸。这也是为什么大家多选择3x3和5x5的filter的原因
    卷积后特征映射大小的计算
    Feature Map的尺寸等于(input_size + 2 * padding_size ? filter_size)/stride+1。
    不用去背这个式子。其中(input_size + 2 * padding_size)是经过Zero padding扩充后真正要卷积的尺寸。减去 filter_size后表示可以滑动的范围。
    再除以可以一次滑动(stride)多少后得到滑动了多少次,也就意味着得到了多少个输出节点。
    再加上第一个不需要滑动也存在的输出节点后就是最后的尺寸。
    如何高效计算卷积?
    转化为矩阵乘法。如果按常规以扫描的方式一步步计算局部节点和filter的权重的点乘,则不能高效的利用GPU的并行能力。所以更普遍的方法是用两个大矩阵的乘法来一次性囊括所有计算。因为卷积层的每个输出节点都是由若干个输入节点的线性组合所计算。因为输出的节点个数是W‘ * H’ * K,所以就有W‘ * H’ * K个线性组合。矩阵乘矩阵的意义可以理解为批量的线性组合按顺序排列。W*X左边一个矩阵所表示的信息是多组权重,每一行则是每个filter的权重,有F·F·D个,另一个矩阵所表示的信息是需要进行组合的向量,每一列是所有需要进行组合的节点,也有F·F·D1个
    矩阵乘法之后,转化为原来的三维矩阵的形式
    为什么要池化层?
    通过下采样,去掉与识别物体无关的冗余信息。直觉上,我们为了探测到某个特定形状的存在,用一个filter对整个图片进行逐步扫描。但只有出现了该特定形状的区域所卷积获得的输出才是真正有用的,用该filter卷积其他区域得出的数值就可能对该形状是否存在的判定影响较小。

  • 如何解决过拟合问题?
    过拟合的概念:就是对训练数据拟合比较好,但是对测试数据的预测准确度差。训练误差小,测试误差大。
    过拟合产生的原因:在统计学习中,假设数据满足独立同分布,故可以用训练数据建立模型,来对未知数据进行预测。但是独立同分布假设很多时候并不成立(数据太少,噪声),另外,数据量太少也不足以估计整个数据的分布。
    解决方法:

  • 增加训练数据:采集更多数据,或者人工对数据进行变换加随机噪声拓展数据
  • 提前停止:设置一个验证集,当验证集准确率不再上升就停止训练,但是过拟合转移到验证集上。
  • 正则化:避免模型变太复杂,l1范数权重稀疏化,只保留重要的特征,梯度下降时,对权重先减去一个常数,l2范数倾向于小的权重,对噪声的抵抗能力变强,大的权重会导致特征微小变化而导致模型发生很大的改变,鲁棒性增强。
  • dropout:弃权,通过改变神经网络的结构来防止过拟合。比如每次迭代随机删除一半的神经元,相当于训练了多个神经网络来综合决策

  • 深度越深,准确率越高吗?
    层数越多表达能力越强,也容易过拟合,并且可能梯度消除等问题导致难以训练。
    如果有足够多的数据,且能解决梯度消失等难的训练问题,那么越深越好。

  • Theano框架在项目做、了什么?
    利用Theano反向传播,还有GPU并行计算,加快训练速度

  • 深度学习的适用场景
    有大量的训练样本,且有局部相关性,比如图像,语音,自然语言处理。图像由像素组成物体,语言中音位组成单词,文本中单词组成句子。深度学习的本质就是学习局部低层次的特征,然后组合低层次的特征成高层次的特征,得到不同特征之间的空间相关性。
阅读全文
0 0
原创粉丝点击