文章目录
一、什么是深度学习
二、深度学习的流程
2.0 几个概念
(1)损失函数(loss function)
神经网络以某个指标为线索寻找最优权重参数,这个指标就是损失函数。损失函数越小,神经网络的模型越好。
需要指出的是每个数据集分区都会有独立的损失曲面,而训练集、验证集和测试集的损失曲面完全不同。如果数据已经被很好地分割,那么每一组数据就都是一个有代表性但不相同的样本。
损失函数(loss function),成本函数(cost function)都是表示神经网络性能优劣的指标,即当前的神经网络对监督数据在多大程度上不拟合,在多大程度上不一致。即神经网络以损失函数为线索寻找最优参数。
在此强调这一点,尽管成本函数和损失函数是同义词并且可以互换使用,但它们是不同的。
损失函数用于单个训练样本。它有时也称为误差函数(error function)。另一方面,成本函数是整个训练数据集的平均损失(average function)。优化策略旨在最小化成本函数。
(2)梯度:
一般而言,损失函数很复杂,参数空间庞大,我们不知道它在何处能取得最下值。通过巧妙地使用梯度来寻找最小值(或者尽可能最小的值)的方法就是梯度法。梯度包括梯度下降法(gradient descent method)和梯度上升法(gradient ascent methodd),神经网络中,梯度法主要指梯度下降法。
神经网络中的梯度下降法常用的有随机梯度下降法(SGD,stochastic gradient descent)等。
(3)one-hot encoding
将正确解标签表示为1,其他标签表示为0的表示方法称为one-hot表示。one-hot编码主要用于多分类中,将大量样本转为稀疏矩阵,降低数据量的同时也更加方便计算。
什么是one-hot 编码
为什么要进行one-hot编码
(4)参数
神经网络中的参数有:神经网络的参数(权重和偏置)、神经网络的超参数(1.学习率 η,2. 正则化参数 λ,3. 神经网络的层数 L,4. 每一个隐层中神经元的个数 j,5. 学习的回合数Epoch,6. 小批量数据 minibatch 的大小,7. 输出神经元的编码方式,8. 代价函数的选择,9. 权重初始化的方法,10. 神经元激活函数的种类,11.参加训练模型数据的规模)。
超参数和神经网络的参数(权重和偏置)是性质不同的参数。相对于神经网络的权重参数是通过训练数据和学习算法自助获得的,像学习率这样的超参数是人工设定的。一般来说,超参数需要尝试多个值,以便找到一种可以使学习顺利进行的设定。
需要指出的是,神经网络的超参数调整是一件很重要也是比较麻烦的事情。
神经网络的超参数
2.1 数据预处理
2.1.1训练数据、验证数据、测试数据
数据是机器学习的核心,更是深度学习的命根子。
在深度学习中,数据可划分为:训练数据,测试数据,验证数据
训练集(train set):训练集相当于上课学知识。训练集在我们的模型过程中起的作用就是更新模型的参数(权重和偏置),用以获得更好的性能,其行为表现就是让我们以为模型掌握了相关的知识(规律)
验证集(validation set):验证集相当于课后的的练习题,用来纠正和强化学到的知识。验证集的存在是为了从一堆可能的模型中,帮我们选出表现最好的那个,可用来选超参数。
验证数据(validation data):
查看模型训练的效果是否朝着坏的方向进行。验证集的作用是体现在训练的过程。举个栗子:通过查看训练集和验证集的损失值随着epoch的变化关系可以看出模型是否过拟合,如果是可以及时停止训练,然后根据情况调整模型结构和超参数,大大节省时间。
验证数据的一个重要作用就是用于调整超参数,评估超参数的性能。
测试集(tes set):测试集相当于期末考试,用来最终评估学习效果。测试集用来评估模型最终的性能和最终模型的泛化能力。但不能作为调参、选择特征等算法相关的选择的依据。测试集的作用是体现在测试的过程。(因此请勿对测试数据进行训练)
2.1.2过拟合以及正则化
把过拟合加到预处理部分显然有些不合适,但过拟合问题和训练数据、验证数据以及测试数据息息相关。
(1)过拟合
什么是过拟合:
在机器学习和深度学习中,过拟合是一个很常见的问题。过拟合是指只能拟合训练数据,但不能很好地拟合不包含在训练数据中的其他数据的状态。
对原始数据进行三个数据集的划分,是为了防止模型过拟合。当使用了所有的原始数据去训练模型,得到的结果很可能是该模型最大程度地拟合了原始数据,亦即该模型是为了拟合所有原始数据而存在。当新的样本出现,再使用该模型进行预测,效果可能还不如只使用一部分数据训练的模型。
发生过拟合的原因,主要有以下两个:
模型拥有大量参数,表现力强
训练数据少
(2)正则化
如何抑制过拟合:机器学习和深度学习中抑制过拟合的方法统称为正则化。,正则化方法(regularization)。这一方法的主要目的是给模型进行一些修改使其倾向于减小测试误差,即减小测试误差与训练误差的差距过大防止过拟合。
正则化方法总结
正则化的具体方法有:
1数据数据层面:可以通过数据增强实现。如翻转,旋转,加噪等
2模型过程中:权值衰减、剪枝(Dropout)、Early stopping等
2.1权值衰减:权值衰减是抑制以来经常被使用的一种抑制过拟合的方法。方法通过在学习的过程中对大的权重进行惩罚,来抑制过拟合。因为很多过拟合原本就是因为权重参数取值过大才发生的。权重衰减是为损失函数加上权重平方的范数(L2范数)
2.2Dropout:作为抑制过拟合的方法,权重衰减某种程度上能够抑制过拟合,但是如果网络的模型变得很复杂,只用权值衰减就很难以应付了。这种情况下,我们经常会用Dropout方法。Dropout是一种在学习的过程中随机删除神经元的方法。训练时,随机选出隐藏层的神经元,然后将其删除。
2.3Early stopping:通常对于较大的模型,我们会观察到训练集上的误差不断减小,但验证集上的误差会在某个点之后反而逐渐增大,这意味着为了减小泛化误差,我们可以在训练过程中不断的记录验证集上的误差及对应的模型参数,最终返回验证集上误差最小所对应的模型参数,这个简单直观的方法就是early stopping
2.2 训练模型
神经网络模型的训练过程也称学习的过程。神经网络中有合适的权重和偏置,调整权重和偏置以便拟合训练数据的过程称为学习。
个人认为,神经网络的学习由两部分组成,1超参数的调整,2偏置和权重的学习
2.2.1神经网络的学习(权重和偏置的学习)
神经网络的学习中,只有训练数据在发挥作用。
神经网络的学习中,权重和偏置的更新是由训练数据自动实现现的,不需要人的干预。神经网络的学习分为下面4个步骤:
步骤1:从训练数据中随机选择一部分数据:这部分数据称为mini-batch或batch size。我们的目标就是减小mini-batch的损失函数的值。
步骤2:计算梯度:为了减小batch size的损失函数的值,需要求出各个权重参数的梯度。梯度表示损失函数的值减小最多的方向。
步骤3:更新参数:将权重参数沿梯度方向进行微小的更新(更新的是权重和偏置)
步骤4:重复:重复步骤1,步骤2,步骤3
2.2.2超参数调整
超参数的调整也称超参数的最优化**。在超参数优化中,参与的有训练数据和验证数据。**
超参数的最优化:进行超参数的最优化时,逐渐缩小超参数的“好值”的存在范围非常重要。即一开始先大致设定一个范围,从这个范围中随机选出一个超参数(采样),用这个采样到的值进行识别精度的评估;然后,多次重复该操作,观察识别精度的结果,根据这个结果缩小超参数的“好值”的范围。通过重复这一操作,就可以逐渐确定超参数的合适范围。
在超参数的最优化中,减少学习的epoch,缩短一次评估所需的时间是一个不错的办法。
超参数最优化的内容:
步骤0:设定超参数的范围
步骤1:从设定的超参数的范围中随机采样
步骤2:使用步骤1中采样得到的超参数的值进行学习,通过验证数据评估识别精度(但是要将epoch的设置的很小)
步骤3:重复步骤1和步骤2(100次等),根据他们的识别精度的结果,缩小超参数的范围。
反复进行上述操作,不断缩小超参数的范围,在缩小到一定程度时,从该范围中选出一个超参数的值。这就是进行超参数的最优化的一种方法。
2.3 模型评价
深度学习的评价方式有很多
深度学习的评价方式