持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情
1.线性回归
线性回归的几个特点:
1.线性回归是对n维输入的加权,外加偏差。
2.使用平方损失来衡量预测值和真实值的差异
3.线性回归有显示解
4.线性回归可以看做是单层神经网络
1.1 线性回归的初步实现
import random
import torch
from d2l import torch as d2l
def synthetic_data(w,b,num_examples):
X=torch.normal(0,1,(num_examples,len(w)))
y=torch.matmul(X,w)+b
y+=torch.normal(0,0.01,y.shape)
return X,y.shape((-1,1))
true_w=torch.tensor([2,-3.4])
true_b=4.2
features,labels=synthetic_data(true_w,true_b,1000)
这里我们说明一下features中的每一行都包含一个二维数据样本,labels中的每一行都包含一维标签值(一个标量).可以进行可视化操作:
d2l.plt.scatter(features[:,1].detach().numpy()),labels.detach().numpy(),1);#可视化操作
1.1.1 环境及库包
1.pytorch库,若没有可以输入指令: pip install pytorch进行安装。
2.d2l包,若没有可以输入指令:pip install d2l进行安装。
3.matplatlib包,若没有可以输入指令:pip install matplatlib进行安装。
1.1.2 代码实现
2.基础优化算法
2.1梯度算法
- 挑选一个初始值w(t).
- 重复迭代参数t=1,2,3
- 沿梯度方向将增加损失函数值
- 学习率:步长的超参数
在我们选择学习率的时候不能步长不能太小也不能太大。太小会导致我们需要非常多的步骤,太大会导致振荡,并没有实现下降。
2.2小批量随机梯度下降
- 在整个训练集上算梯度的成本很高。
- 一个深度神经网络模型可能需要数分钟至数小时
- 我们可以随机采样b个样本来近似损失
- b是批量大小,另一个重要的超参数
2.2.1 选择批量的大小
在分析选择批量大小的时候既不能太大也不能太小。
不能太小是因为:每次计算量太小,不适合并行来最大利用计算资源。
不能太大是因为:内存消耗增加浪费计算,例如如果所有样本都是相同的。
梯度算法总结:
1.梯度下降通过不断沿着反梯度方向更新参数求解
2.小批量随机梯度下降是深度学习默认的求解算法,虽然有更好的,但它是更稳定的。
3.两个重要的超参数是批量大小和学习率