今天学习了深度学习相关的一些基础知识,在这里做一些简单的记录与总结
对于一个机器学习,深度学习的任务,一般有4个分支,分别是:
监督学习。就是给定数据集和标签来进行学习,这也是应用最广泛的一种。比较常见的有生成序列,目标检测,图像分割等等。自监督学习。这种学习方式是没有人为的给定标签,它会自己学习产生相应的输出,相当于一种没有人为干预的监督学习。常见地是自编码器(autoencoder)无监督学习。这种学习是指没有具体的目标下,模型会自己寻找输入数据的变化,比较常用的方法就是降维和聚类。强化学习。如Google的阿尔法狗,就是强化学习的例子,它只要是指这些智能体通过接受环境的各种信息,从而做出一个最优的决定,就如同阿尔法狗通过棋盘信息下棋一样。又针对深度学习模型的评估问题。了解到训练集,验证集和测试集 一般我们是把我们的数据划分为训练集和测试集,然后在训练集种又会分出验证集,主要用于在训练阶段观察模型泛化的能力,是否出现过拟合的现象,好对模型的超参数做出调整。一般验证集的划分也分为3种:
简单的留出训练集的一部分作为验证集。像前面举得imdb电影评论分类的例子,将训练集划分了10000个数据来作为验证集,这种方式是在数据量较多的时候使用。k折交叉验证的方法。这种方法是在我们的数据集较少的时候,比如做医学图像的处理,数据量本身比较小的情况。它是将训练集分为了k个部分,从第k个部分作为验证集,然后剩下的k-1部分作为训练集进行训练,这样会得到k个分数,然后取平均值,得到验证的结果。打乱数据的多次k折验证。这种情况适用于数据量少而且又要很精确的评估模型。它的做法是每次的会打乱数据,然后做一次k折验证,重复多次。接下来学习到了对输入到神经网络的数据进行预处理操作,一般包括:
数据向量化。对输入的数据一般都会做向量化的处理,不管是图像或者音频都会做向量化的处理值标准化处理。比如房价预测问题,影响房价的特征范围不一样,需要进行标注化的处理,然后一般都是处理成,均值为0,标注差为1的情况,这种一般都会很有用。缺失值的处理。一般在神经网络种如果训练集种有缺失值,可以将其设置为0,只要0在其中不包含什么特别的意义,神经网络会自动的忽略掉它,神经网络会自己学习到这是一个缺失的数据,但是如果训练集种没有缺失值,二测试集中出现0这种值,就需要对训练集进行构造,让训练集中也出现0这种值,才不会影响到训练的效果。最后今天学习到的内容关于过拟合和欠拟合 首先我们都知道我们训练出来的模型都是为了具有更好的泛化能力,而在模型的过程中,我们又是在训练集的基础上不断的优化模型。优化和泛化感觉总是对立的。在模型训练的最开始阶段,我们在训练集的基础上不断的优化模型,这时候的现象叫做欠拟合,但是到了后面,模型训练的epoch更多等等,模型在训练集上表现得越来越好,但是在未知的数据上,却出现效果效果下降的情况,这是就是出现了过拟合的现象。 其中,防止神经网络过拟合现象,一般有以下几种:
获取更多的训练数据。这种方法应该是最优的解决方案之一,有了更多的训练数据,模型的泛化能力自然越强,就更不容易出现过拟合的现象减小模型的容量。这种方法是减少深度网络的总层数或者减少各层之中神经元的个数,使得模型学习的能力没有那么强,来达到抑制过拟合现象。正则化。常见的是L1正则和L2正则化。他们实际的效果就是使得在训练时模型的损失会增加,使得训练时的损失比测试时的大一些,来防止过拟合。Dropout。这种方式常常是最有效的正则化之一。它会在训练时,丢弃掉一些输出的特征,具体的做法就是将他们的值设置为0,这种方法常常被证明是很有效的。最后来梳理一下深度学习的工作流程: 首先,我们定义我们需要处理的问题,比如目标检测,图像分割等等。接着要收集训练集,测试集–>> 接着要确定衡量的指标,是准确率吗,还是召回率等等–>> 然后确定评估的方法,一般使用的是上述讲到的三种评估方法–>> 接着就是对数据的预处理,也是上述的处理方法–>> 然后是定义模型,确定损失函数,激活函数,优化器等等–>> 接下来就是从一个简单的模型,慢慢的扩大模型的规模,像过拟合的方向前进–>> 出现过拟合后,我们又可以采用Dropout等正则化方法对其超参数和模型调整,找到一个较为平衡的模型