深度学习之一

深度学习的种种

@(深度学习理论)

我们主要分三个部分来讲解神经网络,第一个部分为神经网络的总论,也就是抛开各个部分的功能及原理,而关注神经网络整体的原理及功能,这部分可能放在本文的最后来讲解,然后第二个部分是神经网络的各个部件:主要有前向传播部分和反向传播部分。最后是神经网络的后处理,也就是神经网络的压缩。

1. 神经网络总论

所谓总论也就是不知道该放在其他什么地方的东西,好像是在说神经网络的一些杂化,但是还是很有用的。
1. 神经网络的分布式学习:每个语义概念由许多分布在不同神经元中被激活的模式表示,而每个神经元又可以参与到许多不同的语义概念的表示中去。
2. 表征神经网络复杂度的两个核心元素:深度和宽度;
3. 为什么随着网络的增加,网络的训练会逐渐变得非常困难:因为基于随机梯度下降的网络训练过程中,误差信号的多层反向传播非常容易引发梯度“弥散”(梯度过小会使得回传的训练误差极其微弱)或者“爆炸”(梯度过大导致模型训练出现“NaN”).
4. 网络正则化:网络正则化(为降低过拟合的有效工具):正则化是机器学习中通过显式的控制模型复杂度来避免过拟合,确保泛化能力的一种有效方式。如果把模型的原始空间比作“天空”,那么天空中自由飞翔的鸟就是模型中可能收敛的一个个最优解。在实施了模型正则化后,就好比将原假想空间缩小到一定的空间范围,这样一来,可能得到的最优解能搜寻到的假设空间也变得相对比较有限。
6. 复杂协同效应:传统神经网络中,由于神经元之间的互联,对于某单个神经元来说,其反向传导来的梯度信息也受到其他神经元的影响,可谓“牵一发而动全身”。
7. 微调神经网络:也就是利用目标数据在原先训练模型的基础之上继续训练模型。需要注意一下方面:
- 因为网络在原来的数据上已经收敛,因此应当设置较小的学习率在目标数据上微调,如10^-4;
- 神经网络的层数不同,所表达的东西也不同,应对不同的神经网络设置不同的学习率,网络深层的学习率可大于浅层学习率;
- 根据目标数据与原始数据相似程度采用不同微调策略,当数据较少且与原始数据非常相似时,可仅微调靠近目标函数的后基层,当数据充足且靠近目标函数时,可微调更多网络层也可全部微调,当目标数据充足且与原始数据相差较大时,必须调节更多网络层,当目标数据较少,且与原始数据有较大差异时,则应当视情况而定。
8. 深度学习两个非常重要的信息为:非线性和多层。非线性依靠隐藏层来实现,而多层的实现则依靠减小参数数量,也就是权重共享来实现。神经网络隐藏层能够很好的处理异或问题,那深层神经网络实际上就有了组合提取特征的功能,这个特征对于解决不易于提取特征向量的问题。什么叫异或问题呢,下面这张图很好的解释了它的意义。

  1. 下图可以帮助人们理解整个神经网络的工作过程。解释:数据集中的 ( x , y ) 是给定的。权重从一个随机数字开始,且是可以优化的。在前向传播的过程中,评分函数计算出类别的分类评分并储存在向量f中。损失函数包括两个部分:数据损失和正则化损失。其中,数据损失计算的是预测值与真实值之间的差异,正则化是一个关于权重的函数。在梯度下降的过程中,我们计算关于权重的梯度,然后用他们来实现参数的更新。![Alt text](./Image [2].png)
  2. 在训练之前,最好进行合理的检查:
    • 寻找特定情况下的正确的损失函数;
    • 对小数据自己过拟合:尝试在小数据集(比如20个数据),确保能在小数据上达到0损失值。在这个过程中,最好让正则化为0;
  3. 在训练当中,我们应当跟踪以下参数,以帮助我们判断网络的训练情况:
    • 第一个需要跟踪的重要参数为损失值;
    • 第二个为验证集的准确度
    • 最后一个需要跟踪的是更新的权重数量与全部权重数量之比,在SDG中,这个值就等于梯度*学习率,这个值得经验值为 10 3 ;

2. 神经网络的前处理

神经网络的前处理,也就是数据的预处理。包括数据增强和数据扩充,其实往往数据扩充的同时也是在对数据进行数据增强。
1. 数据扩充:
- 简单的扩充方式:图像水平翻转,随机扣取(可能扣到不相关的东西),尺度变换(增加卷积神经网络在物体尺寸和方向上的鲁棒性一般变为原图的0.8,0.9.1.1,1.2,1.3等倍数)和旋转(旋转-30,-15,15,30),除此之外,还有色彩抖动,也就是在RGB颜色空间对原有的RGB色彩分布进行轻微的扰动,也可以在hsv颜色空间尝试随机改变图像原有的饱和度和明度,或对色彩进行微调(小幅度改变该通道的值)。
- FSNCY PCA,首先对RGB像素值进行主成分分析,得到相应的特征向量和特征值,然后根据特征值可以计算出一组特征向量和特征值,将其作为扰动加到原有的像素值中即可。
- 监督式数据扩充:上文所说的随机扣取可能会扣到一些无用的东西,可以利用监督式数据扩充。其具体解决方式为:首先利用原有数据训练一个分类的初始模型,每张图得到相应的特征图和热力图。这张特征图可以只是图像区域与场景标记间的相关概率。之后,可根据此概率映射回原图选择较强相关的图像区域作为扣取的图像块。

  1. 数据的预处理:

    • 在网络的训练之前,我们需要对数据进行预处理,在图像处理中,最常做的就是“均值减法”,此法也叫“去中心归一化”。通常是计算训练中集图中像素均值,之后在处理训练集,验证集合测试集中都需要分别减去该均值,故而需要首先划分好测试集,训练集,验证集。该做法的原理是:我们默认自然图像是一类平稳的数据分布(即数据的每一个维度的统计都服从相同分布),此时,在每个样本上减去数据的统计平均值可以移除共同部分,凸显个体差异。
    • 上面是一种归一化的方式,还有一种归一化的方式为:第二种方法是对每个维度都做归一化,使得每个维度的最大和最小值是1和-1。这个预处理操作只有在确信不同的输入特征有不同的数值范围(或计量单位)时才有意义,但要注意预处理操作的重要性几乎等同于学习算法本身。在图像处理中,由于像素的数值范围几乎是一致的(都在0-255之间),所以进行这个额外的预处理步骤并不是很必要;
    • 通过合理的数据预处理和规范化,当网络收敛到稳定状态时,参数在理想状态下应基本保持正负各半(此时期望为0)
  2. 为何要对图像进行归一化呢:

    • 神经网络的本质是学习数据的分布,一旦训练数据预测是数据的分布不同,那么网络的泛化能力会大大降低;
    • 一旦每个batch数据的分布都不相同,那么网络每次迭代都要去学习适应不同的数据分布,这样会大大的训练网络的训练速度,这也正是我们需要对数据进行归一化预处理的原因。

猜你喜欢

转载自blog.csdn.net/qq_24935875/article/details/80951719