08线性回归和基础优化算法

一、线性回归

  1. 线性回归是对n维输入的加权,外加偏差
  2. 使用平方损失来衡量预测值与真实值的差异,y与y~,y表示真实值,y~表示预测值
  3. 线性回归有显示解,其他的大多数没有显示解
  4. 线性回归可以看作是单层神经网络

二、基础优化方法

最常用的是梯度下降,深度学习默认的求解算法是小批量随机梯度下降,它最稳定最简单。

关于梯度

梯度是使得这个函数值增加最快的方向,梯度下降就是通过不断沿着反梯度方向更新参数求解。

学习率(步长的超参数):沿着这个方向每次走多远
超参数:在学习之前,人为指定的值

为什么采用小批量随机梯度下降

因为计算梯度是很贵的,它需要对每个损失函数求导,这个损失函数是对所有样本的平均损失,所以求梯度需要对所有样本算一次。小批量随机梯度下降是随机采样b个样本来近似损失,这里的b是批量大小,一个重要的超参数。b太小,则计算量太小,不适合并行来最大利用计算资源,b太大,内存消耗增加,浪费计算。

 三、代码实现

导包

%matplotlib inline #因为要随机梯度下降和初始化权重,默认嵌入notebook里面
import random
import torch
from d2l import torch as d2l

根据带有噪音的线性模型构造一个人造数据集

def synthetic_data(w, b, num_examples): #给定w和b,生成num个样本
    """生成 y = Xw + b + 噪声。"""
    X = torch.normal(0, 1, (num_examples, len(w))) #生成x,其均值为0,方差为1的随机数,假设有n个样本,则其列数为w的长度
    y = torch.matmul(X, w) + b #y就是wx+b 
    #两个张量矩阵相乘,在PyTorch中可以通过torch.matmul函数实现;
    y += torch.normal(0, 0.01, y.shape)#加入一个均值为0,方差为0.01,形状跟y一样的遭噪音
    return X, y.reshape((-1, 1))#最后将x和y作为一个列向量返回
#y.reshape((-1, 1))的意思是将y转变为列为1,行自动调整,即一个列向量
true_w = torch.tensor([2, -3.4])
true_b = 4.2
features, labels = synthetic_data(true_w, true_b, 1000)
#在进行预测时使用的输入变量。
#features的每一行都包含一个二维数据样本,labels中的每一行都包含一维标签值(一个标量)
#labels 在监督式学习中,标签指样本的“答案”或“结果”部分。



print('features:', features[0], '\nlabel:', labels[0])

结果

features: tensor([-0.9267, -0.2346])
label: tensor([3.1315])
d2l.set_figsize()
d2l.plt.scatter(features[:, 1].detach().numpy(),
                labels.detach().numpy(), 1);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值