zoukankan      html  css  js  c++  java
  • 机器学习和深度学习知识路线及知识点总结

    数据预处理

    1、深度学习中的数据预处理有哪些方式?

    1、 数据归一化。包括高斯归一化、最大最小值归一化等。

    2、 白化。许多深度学习算法都依赖于白化来获得更好的特征。所谓的白化,以PCA白化来说,就是对PCA降维后的数据的每一列除以其特征值的根号。

    2、为什么需要对数据进行归一化处理,归一化的方式有哪些?

    1. 为了后面数据处理的方便,归一化的确可以避免一些不必要的数值问题。

    2. 为了程序运行时收敛加快。(如果)

    3. 同一量纲。样本数据的评价标准不一样,需要对其量纲化,统一评价标准。这算是应用层面的需求。

    4. 避免神经元饱和。啥意思?就是当神经元的激活在接近 0 或者 1 时会饱和,在这些区域,梯度几乎为 0,这样,在反向传播过程中,局部梯度就会接近 0,这会有效地“杀死”梯度。

    5. 保证输出数据中数值小的不被吞食。

    详细请参考:

    归一化的方式主要有:线性归一化、标准差归一化、非线性归一化

    线性归一化:

    [公式]

    标准差归一化:

    [公式]

    非线性归一化:

    适用范围为:经常用在数据分化比较大的场景,有些数值很大,有些很小。通过一些数学函数,将原始值进行映射。该方法包括指数,正切等。

    3、数据增强的方式有哪些?

    翻转、旋转、缩放、裁剪、平移、尺度变换、添加噪声、色彩抖动、亮度调整、对比度增强。

    注意:在数据量比较少的情况下,数据增强的方式对模型效果的提升(泛化能力)很有效。

    数据增强可以分为两类,一类是离线增强,一类是在线增强。

    离线增强:直接对数据集进行处理,数据的数目会变成增强因子乘以原数据集的数目,这种方法常常用于数据集很小的时候。

    在线增强:这种增强的方法用于,获得 batch 数据之后,然后对这个 batch 的数据进行增强,如旋转、平移、翻折等相应的变化,由于有些数据集不能接受线性级别的增长,这种方法长用于大的数据集,很多机器学习框架已经支持了这种数据增强方式,并且可以使用 GPU 优化计算。

    物体检测中的数据增强:其实和正常的数据增强一样的,数据本身增强后,对box进行一定的平移旋转即可。

    4、深度学习如何解决数据样本不均衡?你在项目中是怎么解决的?

    1、数据增强

    2、使用Focal loss

    深度学习中的名词解释

    1、奥卡姆剃刀的思想?

    在所有可能选择的模型中,我们应该选择能够很好地解释已知数据并且十分简单的模型。

    换句话说,同等效果下,选择较为简单的模型。

    奥卡姆剃刀思想用在哪里呢?其实就是深度学习中的正则化。

    2、梯度消失和梯度爆炸?

    两种情况下梯度消失经常出现,一是在深层网络中,二是采用了不合适的损失函数,比如sigmoid。

    梯度爆炸一般出现在深层网络和权值初始化值太大的情况下。

    由链式法则可知,当采用sigmoid这类函数时,深层网络参数更新时,往往会出现梯度消失现象。当初始参数大时,也会出现梯度爆炸。

    详细请参考:

    3、鞍点、局部最小值和全局最小值?如何区分它们?如何跳出鞍点和局部最小值?

    鞍点和局部极小值、全局最小值的梯度都相等,均为0,不同在于在鞍点附近Hessian矩阵是不定的(行列式小于0,行列式必须是方阵),而在局部极小值附件的Hessian矩阵是正定的。

    关于正定矩阵,是特征值都不小于0的实对称矩阵,关于负定矩阵是特征值都小于0的实对称矩阵,关于不定矩阵是特征值既有大于0又有小于0的值。

    跳出鞍点或者局部最小点一般有以下几种方式:

    1、 以多组不同参数值初始化多个神经网络,按标准方法训练后,取其中误差最小的解作为最终参数。这相当于从多个不同的初始点开始搜索,这样就可能陷入不同的局部极小,从中进行选择有可能获得更接近全局最小的结果。

    2、 使用“模拟退火”技术。模拟退火在每一步都以一定的概率接受比当前解更差的结果,从而有助于“跳出”局部极小。在每步迭代过程中,接受“次优解”的概率要随着时间的推移而逐渐降低,从而保证算法稳定。

    3、 使用随机梯度下降,与标准梯度下降法精确计算梯度不同,随机梯度下降法在计算梯度时加入了随机因素。于是,即便现如局部极小点,它计算出的梯度仍可能不为零,这样就有机会跳出局部极小继续搜索。

    4、深度学习中的超参数有哪些?

    超参数 : 在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。

    超参数指的是会影响到最终参数的参数,主要包括卷积核大小和数量、是否采用BN和池化操作、迁移学习、参数的初始化方式、学习率、损失函数、激活函数、是否采用自适应学习率、优化器的选择等等。

    5、如何寻找超参数的最优值?

    在使用机器学习算法时,总有一些难调的超参数。例如权重衰减大小,高斯核宽度等等。这些参数需要人为设置,设置的值对结果产生较大影响。常见设置超参数的方法有:

    1. 猜测和检查:根据经验或直觉,选择参数,一直迭代。

    2. 网格搜索:让计算机尝试在一定范围内均匀分布的一组值。

    3. 随机搜索:让计算机随机挑选一组值。

    4. 贝叶斯优化:使用贝叶斯优化超参数,会遇到贝叶斯优化算法本身就需要很多的参数的困难。

    5. MITIE方法,好初始猜测的前提下进行局部优化。它使用BOBYQA算法,并有一个精心选择的起始点。由于BOBYQA只寻找最近的局部最优解,所以这个方法是否成功很大程度上取决于是否有一个好的起点。在MITIE的情况下,我们知道一个好的起点,但这不是一个普遍的解决方案,因为通常你不会知道好的起点在哪里。从好的方面来说,这种方法非常适合寻找局部最优解。稍后我会再讨论这一点。

    6. 最新提出的LIPO的全局优化方法。这个方法没有参数,而且经验证比随机搜索方法好。

    6、训练集、验证集、测试集和交叉验证

    一般来说,训练集、验证集、测试集对中型数据来说,一般划分的比例为6:2:2,但是对于特别大的数据集,比如100w的级别,这个时候,完全没有必要再按照6:2:2的方式,可以加大训练量,使模型得到更充足的训练,此时可以调整为8:1:1的比例,甚至给验证集和测试集更小的比例。

    K折交叉验证:把数据分成K份,每次拿出一份作为验证集,剩下k-1份作为训练集,重复K次。最后平均K次的结果,作为误差评估的结果。与前两种方法对比,只需要计算k次,大大减小算法复杂度,被广泛应用。一般情况将K折交叉验证用于模型调优,找到使得模型泛化性能最优的超参值。找到后,在全部训练集上重新训练模型,并使用独立测试集对模型性能做出最终评价。

    如果训练数据集相对较小,则增大k值。

    增大k值,在每次迭代过程中将会有更多的数据用于模型训练,能够得到最小偏差,同时算法时间延长。且训练块间高度相似,导致评价结果方差较高。

    如果训练集相对较大,则减小k值。

    减小k值,降低模型在不同的数据块上进行重复拟合的性能评估的计算成本,在平均性能的基础上获得模型的准确评估。

    7、线性分类器的三个最佳准则

    感知准则函数、支持向量机、Fisher准则。

    8、KL散度和JS散度

    KL散度又称之为KL距离,相对熵:

    [公式]

    当P(X)和Q(X)的相似度越高,KL散度越小。

    KL散度主要有两个性质:

    (1) 不对称性

    尽管KL散度从直观上是个度量或距离函数,但它并不是一个真正的度量或者距离,因为它不具有对称性,即 [公式]

    (2) 非负性

    相对熵的值是非负值,即 [公式]

    JS散度

    JS散度也称JS距离,是KL散度的一种变形。

    [公式]

     转自:https://www.zhihu.com/people/18301926762/posts?page=14

       https://zhuanlan.zhihu.com/p/97311641

  • 相关阅读:
    JS数据结构第二篇---链表
    原来你是这样的---原型和原型链
    JS数据结构第一篇---算法之复杂度判断
    程序员的数学
    一位码农的转行
    如何看待程序媛们的职场焦虑和未来职业规划?
    如何快速融入团队并成为团队核心(九)
    如何快速融入团队并成为团队核心(八)
    使用ASP.NET Core构建RESTful API的技术指南
    如何快速融入团队并成为团队核心(七)
  • 原文地址:https://www.cnblogs.com/boligongzhu/p/15424089.html
Copyright © 2011-2022 走看看