第二周作业:多层感知机

李沐专题学习

线性回归

回归是指一类为一个或多个自变量与因变量之间关系建模的方法。在自然科学和社会科学领域,回归经常表示输入和输出之间的关系。在机器学习领域中的大多数任务都与预测(prediction)有关。当我们想预测一个数值时,就会涉及到回归问题。常见的例子包括:预测价格、预测住院时间、预测需求等,但是需要注意的是不是所有的预测问题都会回归问题。

跟李沐学AI-动手学深度学习-线性回归+基础优化算法
线性回归可以说是传统机器学习中最简便的一种分类方法,可以看作为单层的神经网络,对数据进行学习训练,能够得到不错的显示解。
基础优化算法主要是使用了梯度下降法,这个是拓展于高等数学中的导数,即寻找下降速度最快的方向去修改参数。其中包括了学习率的设置,随机梯度下降法、小批量随机梯度下降法等。
这个部分主要是基础的内容,没有涉及太难的数学和不需要多强的理解能力。

Softmax回归

需要注意的一点是Softmax回归虽然名字是回归,但是它是一个分类问题。
回归和分类的区别在于:回归是去估计一个连续值,而分类则是预测一个离散类别。
Softmax在我的理解里,是将输出的数值转换成了分别所占的比例,对于数值的比较,概率的大小显得更清晰。
跟李沐学AI-动手学深度学习-Softmax回归+损失函数+图片分类数据集
和Softmax一起出现的就是交叉熵。
通过使用交叉熵来衡量预测和标号的区别。
常用的损失函数主要有:L2 Loss、L1 Loss、Huber’s Robust Loss。
L2的话是均方误差,而L1则是绝对值误差,Huber’s Robust误差则是结合前两种误差实现的。

感知机

对于单层感知机来说,主要是实现简单的二分类问题,通过训练实现模型。但是单层的感知机存在不能解决XOR问题的弊端,主要是因为层数不够的原因,这也带来了深度学习的寒冬。
当感知机出现了多层的时候,之前的瓶颈XOR问题得到了解决。在结构上可以看作是多个单层感知机的连接,即在输入层和输出层之间增加了隐藏层。通过使用激活函数,实现了非线性的分类。
常见的激活函数有sigmoid、tanh、ReLU、Leaky ReLU等,主要是实现了将函数进行非线性化的操作。
跟李沐学AI-动手学深度学习-感知机+多层感知机
在多层感知机中存在两个超参数,分别是 隐藏层的数目,每层隐藏层的大小。
这就涉及了一个问题就是:我们究竟是让感知机更深还是更宽呢?这个问题后续会给出答案。

模型选择+过拟合和欠拟合

在引出模型选择、过拟合和欠拟合之前我们需要思考一个问题,在网络发达的今天,我们难道仅仅依靠目前认知里的分类去处理和实现复杂的问题吗?对于具体问题我们应该选择什么样的模型?并且我们是为什么要选择这个模型?难道仅仅是依据我们的个人喜好?这就引出了误差这个概念。
误差可以分为训练误差和泛化误差。数据集可以分为训练数据集、验证数据集和测试数据集。
跟李沐学AI-动手学深度学习-模型选择+过拟合和欠拟合
在数据不足的时候,我们的模型很难得到充分的训练,有人提出了K-折交叉验证这个方法,通过对数据分块和循环,实现训练和验证。
当模型选择完毕后,对于同样的数据,选择同样的模型,最终的实现效果也会有差距的,这是因为模型还需要正确的训练。如果我们训练的模型过于切合训练数据了,会出现在训练数据上的效果特别棒,但是到了验证数据或者测试数据上的效果不理想,这种情况就是过拟合。还有一种就是模型对于数据的学习并不彻底,只是学会简单的特征,那么到了验证数据和测试数据上时效果也并不好。所以,究竟怎样才能找到适合问题且训练不错的模型是一个重要的问题。
模型容量是拟合各种函数的能力,低容量的模型很难去拟合训练数据,而高容量的数据则可以记住所有的训练数据,这就知道了对于不同问题选择不同容量的模型的原因了。
那么众多的模型应该如何去选择呢?这里有一个VC维的概念,可以将模型进行衡量。
但是VC维很少在机器学习中使用,因为机器学习的模型的VC维的计算很困难。
实际中一般靠观察训练误差和验证误差。

权重衰退+Dropout

权重衰退+Dropout
权重衰退主要是通过L2正则使得模型参数不会过大,从而控制模型复杂程度。
主要是实现避免过拟合的发生。
Drouput则是在层与层之间加入随机噪音。使得模型的鲁棒性增强。
我的理解是Dropout是在多层感知机的隐藏层中随机选择某些节点进行“失活”,在训练过程中随机将节点进行失活,会使得其余的节点的综合能力提升,从而使得模型最终的稳定性提升。

数值稳定性+模型初始化和激活函数

数值稳定性主要是说的梯度消失和梯度爆炸两种问题。我们通过上边了解到了梯度下降是我们最常使用的参数学习方法,但是由于BP回传的过程中,激活函数的选择会出现梯度爆炸和梯度消失的现象。
梯度爆炸是梯度数值超出值域,从而使得模型崩坏。
梯度消失是梯度数值逼近于0,从而丧失修改参数的作用。
跟李沐学AI-动手学深度学习-数值稳定性+模型初始化和激活函数
为了让训练更加的稳定,一种有效的方法叫做:合理的权重初始和激活函数。
权重初始化主要是在合理值区间里随机初始参数。
而激活函数则是提升回传过程中梯度变为0的情况。

Kaggle House Price

由于自己对于pytorch代码实现并不是很了解,放弃了最开始想将沐神提供的线性代码修改为其他预测的模型的想法,对沐神的代码进行了一下超参数修改来提升模型的性能。
经过多次的实验,沐神提供的基础代码的sorce为0.16692,最后可以提升为0.14416。然而这个过程中并没有太多的操作,主要就是参数的调整。
kaggle house price
第二周作业:多层感知机_第1张图片

本周学习的不足

  1. 自己对于所学习的内容仅仅是了解和会用,但是并不了解其内在的数学逻辑,比如Xavier初始等部分还要继续深究学习。
  2. kaggle代码原本是想进行换内核来实现,但是自己的pytorch学习不过关,打算近期好好学习一下pytorch。

你可能感兴趣的:(深度学习,深度学习)