动手学深度学习打卡笔记1

Datawhale和伯禹学院联合和鲸平台组织的”动手学深度学习“公益学习活动打卡笔记。使用的DIve into DL是pytorch版本,中文网页版链接:https://tangshusen.me/Dive-into-DL-PyTorch/#/

数据基础: 张量和梯度

1.张量

Tensor(张量)可以看成是一个多维数组。标量是0维张量,向量是1维张量,矩阵则是2维张量。在深度学习中涉及到大量的矩阵和向量的相互计算(矢量计算的速度更快),在PyTorch中,torch.Tensor是存储和变换数据的主要工具。
除了基本的矩阵向量(同形)的计算之外,对于不同形状的Tensor,会有一个broadcasting机制。即以最大维度的Tensor为基础复制元素,使两个Tensor形状相同。例如:

input:
x = torch.arange(1, 3).view(1, 2)
print(x)
y = torch.arange(1, 4).view(3, 1)
print(y)
print(x + y)

output:
tensor([[1, 2]])
tensor([[1],
        [2],
        [3]])
tensor([[2, 3],
        [3, 4],
		[4, 5]])

2.梯度

gradient(梯度)在深度学习的过程中经常被使用,其中很重要的就是对函数求梯度,并通过反向传播算法对损失函数进行优化。
需要注意的是,在使用pytorch提供的autograd包执行反向传播的时候,需要将属性.requires_grad设置为True,才能进行计算,否则,这些参数将无法利用链式法则进行梯度计算,也就无法调用.backward()。

基本模型

1.线性回归

线性回归解决连续值的回归问题,属于有监督模型。

线性模型作为深度学习模型中最基础的模型,可以通过对它的学习而触类旁通其他一些回归模型的知识。
它的基本形式为y = ωX + b。
线性回归整个模型流程大致分为读取数据、定义模型、初始化模型参数、定义损失函数(MSE)、定义优化算法和训练模型。

2.softmax回归

与输出连续值的线性回归模型相对,softmax回归输出的是类别这样的离散值。

softmax与线性回归一样,将输入特征与权重做线性叠加,但是它的输出值个数等于标签里的类别数。为了使输出的离散值具有直观意义且可以衡量,在这里使用softmax运算符。它用指数归一化的形式使输出值转化为值为正且和为1的概率分布。
与逻辑回归采用相同的损失函数——交叉熵损失函数。

3.多层感知机

多层感知机相较于线性模型添加了隐藏层,隐藏层和输出层都是全连接层。同时,隐藏层也设置了权重和偏差,将它的表达式带入输出后可以轻易发现联立后的式子依然是一个单层神经网络(仿射变换)。
由此,这里可以引入非线性函数进行变换之后,再作为下一个全连接层的输入。这个非线性函数被称为激活函数(activation function)。
下面是几种常用的激活函数:

ReLU
Sigmoid函数
tanh函数(一般用在生成对抗网络和循环神经网络)

ReLu函数是一个通用的激活函数,体现在
1)在神经网络层数较多的时候,最好使用ReLu函数,ReLu函数较简单计算量少,而sigmoid和tanh函数计算量则大很多。例如卷积神经网络和全连接神经网络大都使用ReLU。
2)由于梯度消失导致训练收敛速度较慢时,要避免使用sigmoid和tanh函数。
所以,在选择激活函数的时候可以先选用ReLu函数,如果效果不理想再尝试其他激活函数。
但是,需要注意的是ReLU函数只能在隐藏层中使用。用于分类器时,sigmoid函数及其组合通常效果更好。

过拟合

过拟合指训练误差较低但是泛化误差较大,且二者相差较大的现象。

除了增大数据样本以外,处理多层感知机神经网络的过拟合问题有两种方式:L2范数和丢弃法。

L2范数
L2范数正则化也叫权重衰减,它通过惩罚绝对值较大的模型参数为需要学习的模型增加了限制。
丢弃法Dropout
对隐藏层使用丢弃法,即丢弃一定概率该层的隐藏单元,丢弃概率为超参数。

梯度消失、梯度爆炸

当神经网络的层数较多时,模型的数值稳定性容易变差,梯度的计算也容易出现消失或爆炸。

你可能感兴趣的:(动手学深度学习打卡笔记1)