ElitesAI·动手学深度学习PyTorch版学习笔记-线性回归;Softmax与分类模型、多层感知机

宅家中看到Datawhale的学习号召,在大牛云集的群上找到了一个很佛系的小组,战战兢兢地开始了小白的深度学习之旅。感谢Datawhale、伯禹教育、和鲸科技,感谢课程制作者、组织者、各位助教以及其他志愿者!

1 线性回归
这个小节的内容是线性回归的概念简介和pytorch实现。
1.1 概念
线性回归假设输出与各个输入之间是线性关系,在课程示例中使用房屋的价格作为标签,选取面积和房龄两个特征,建立线性关系的数学模型,构建了一个线性关系数据集。
1.2 损失和参数优化
线性回归的验证使用简单的平方损失估计。
在深度学习中,广泛采用小批量随机梯度下降来进行参数优化,减小损失。
1.3 计算效率优化和辅助知识
在开始代码演示之前,课程还贴心地介绍了一些辅助知识,帮助我们更好地了解pytorch的性能。本小节简要介绍了向量矢量计算和标量计算的不同,使用代码测试了两种运算的速度,验证了torch中矢量计算效率会更高。
1.4 代码演示
课程中首先使用代码手工构造了基于两个特征的线性回归运算模型,并进行了训练;然后使用pytorch自带的函数完成了模型训练,并给出了多层网络的实现方法。

2 Softmax与分类模型
这个小节的内容是Softmax的概念简介和pytorch实现。
2.1 概念
Softmax是一种常用的多分类学习模型。课程先以4像素的简单图像分类为例,建立权重矢量数学模型,构建了一个4输入、3输出的全连接单层神经网络层。然后,以该模型的输出问题,引出Softmax的应用意义:通过一定的运算(通常为指数运算变为正数再求概率分布),在不改变分布规律的前提下将输出表示为概率分布,便于直观上判断输出的意义,同时便于衡量误差。
2.2 计算效率优化
在上一小节我们已经知道,使用矢量计算可以提高计算效率。在这一小节中,我们将样本的输入权重和偏差参数分别表达为3×4和1×3的向量矩阵,对输出使用Softmax进行变换得到输出的概率分布,同时使用小批量计算的方式进一步提高效率。
pytorch中的加法使用广播机制。
2.3 损失函数选择
在图像分类中,我们只需要关注正确概率,只要正确的概率大于不正确的概率即可,而对不正确的另外多个分类概率多少不关心。此时使用平方损失过于严格,因为存在一些具有正确分类结果,但平方损失相对较大的值。
对于预测概率类问题,一般使用交叉熵来衡量损失。最小化交叉熵损失可以等价为最大化联合预测概率。
2.4 辅助知识
在介绍Softmax回归之前,课程简要介绍了所使用的图像数据集和视觉处理模块torchvision,以及torchvision的一些常用函数(类)。
在用代码手工构造模型时,顺带介绍了对多维张量的操作。可以设置对哪一个维度进行运算,以及是否在结果中保留维度特征。
2.5 代码演示
课程中首先使用代码手工构造了基于Fashion-MNIST数据集(1×28×28输入,9输出)的模型,并进行了训练;然后使用pytorch自带的Softmax函数完成了模型训练,同样使用随机梯度下降进行了参数优化。

3 多层感知机
多层神经网络是深度学习的主要研究对象。这一小节以含一个隐藏层的多层感知机为例,简要介绍了多层神经网络的相关概念以及一个隐藏层(隐藏层和输出层均是全连接)的pytorch实现。
3.1 概念
多层神经网络相当于多个单层神经网络叠加在一起,上一层的输出层即为下一层的输入层,称为隐藏层。
通过对公式的推导,可以得出,对于线性的输入来说,即使添加再多的隐藏层,依然和单层神经网络等价。于是,为了解决这一问题,需要对输入的数据进行非线性的变换,然后再作为下一层的输入,这个函数被称为激活函数。
常用的激活函数有ReLU(只保留正数元素,并将负数元素清零)、Sigmoid(将元素的值变换到0和1之间)、tanh函数(双曲正切函数,将元素的值变换到-1和1之间)。目前ReLU是使用最多的激活函数,但是它只能在隐藏层中使用。在层数较多时,使用ReLU函数比较简单、计算量少。可以优先选择ReLU,效果不理想再尝试其它函数。用于分类器时,sigmoid函数及其组合可能效果更好,但sigmoid和tanh都应该避免用在可能出现梯度消失问题的场景中。
3.2 代码实现
多层感知机的代码实现在第一小节线性回归中略有提及,即在单层模型中添加更多的运算层。但要定义激活函数及网络(连接方式)。在pytorch中有定义好的多层网络函数,可以直接使用。

发布了6 篇原创文章 · 获赞 0 · 访问量 197

猜你喜欢

转载自blog.csdn.net/liuyi6111/article/details/104279631