当前位置:   article > 正文

李宏毅深度学习笔记1:基本概念简介、PyTorch Tutorial

李宏毅深度学习

感谢:

  1. 诸神缄默不语的笔记,本文参考了许多
  2. 视频链接:B站李宏毅机器学习

1.Introduction

Regression 回归:输出标量
Classification 分类 :输出类别,如猫狗分类
Structured Learning 结构化学习,结构化输出,如图像、文档等

Youtuber收益分析

1. 使用三部进行数据的训练
在这里插入图片描述

  1. 建立未知参数函数
    y = w x + b y = wx + b y=wx+b
    先建立模型:y = b + w x 1 y=b+wx_1y=b+wx ,其中x xx是已知的特征feature;w ww是权重weight,b bb是偏置bias,都是未知的参数,需要从数据中学习。

  2. 通过训练数据定义损失L
    对每一个训练样本,计算模型输出值和真实值(label)之间的误差(e),L(b,w),L越小说明参数越好。
    不同的误差计算方式:MAE / MSE / Cross-entropy
    在这里插入图片描述
    L = 1 / N ∗ Σ e n L = 1/N* \Sigma e_n L=1/NΣen
    e = ∣ y − y ^ ∣ e =| y-\hat{y}| e=yy^

  3. 优化Optimization
    优化目标是找到使L最小的参数,即求解 w ∗ , b ∗ w^*,b^* w,b

    优化方法:梯度下降gradient descend
    1. 当只有一个参数w时,随机选取一个初始 w 0 w^0 w0 在这里插入图片描述
       然后计算他的梯度,移动w位置受学习率learning rate和斜率决定,学习率是提前设定的超参数
       计算w对Loss的微分
    w 1 = w 0 − η ∗ ∂ L ∂ ω ∣ w w^1 = w^0 - \eta*\frac{\partial L}{\partial \omega}|_w w1=w0ηωLw
       反复同样操作进行多次迭代更新w(停止条件:迭代次数达到阈值或微分趋近于0即到达局部最优点

    1. 推广到两个参数时:随机选初始参数,计算其偏微分,利用梯度下降方式同时更新两个参数,多次迭代至停止

经过训练可以得到 w ∗ w^* w=0.97, b ∗ b^* b=0.1k,即通过2017-2020的数据得到了函数关系
自此,三步训练任务完成
4. 使用得到的函数进行测试2021年的数据情况

  1. 通过函数对2021年的数据进行隔天测试:得到损失值为0.58k
  2. 通过数据的比对可以看出数据是每隔7天近似一个循环,因此假设用7天的数据进行预测是否效果会更好
    可以看出通过使用前7天,前28天的数据对后一天的数据进行预测可以降低损失值,但是再提高使用的时间对预测值没有有效的提高

在这里插入图片描述
以上这样的模型称为线性模型
2. 从线性模型到神经网络

  1. 线性模型太过简陋,无论如何调参都无法匹配出红色这种折线,因此我们需要使用一个更复杂更有弹性的函数来表示
    在这里插入图片描述

  2. 可以看到,通过使用多个piecewise function可以拟合出红色函数
    在这里插入图片描述

  3. 任何分段线性函数都可以如此通过一个常值加一堆蓝色的折线拟合,不是分段线性函数也可以近似成这样
    在这里插入图片描述

  4. 而这条蓝色的线可以用sigmoid函数来表示
    在这里插入图片描述

  5. 通过更改c,b,w的数值,可以拟合出不同形式的图形
    在这里插入图片描述

  6. 因此,通过更改w,b,c拟合出不同图形,进而相加得到红色函数
    在这里插入图片描述

  7. 模型也因此有了更多的参数
    在这里插入图片描述

  8. 用直观的方法解释这个模型
    在这里插入图片描述

  9. 同时也可以用矩阵表示
    在这里插入图片描述

  10. 整个流程就可以用这个图来表示
    在这里插入图片描述

  11. 返回机器学习框架,得到新的函数关系
    在这里插入图片描述

  12. 使用新的模型进行后续优化,和原先方式相同,只是参数数量增加
    在这里插入图片描述

  13. 在实际运行中不会一次性使用所有数据进行梯度更新,而是将数据分成多个batch,每次拿出一组batch进行更新,将所有数据使用一次称为一个epoch
    在这里插入图片描述

  14. 从sigmoid到relu

    hard sigmoid可以看成是两个relu加起来
    在这里插入图片描述

  15. 因此sigmoid也可以换成relu
    在这里插入图片描述
    相同情况下relu的效果更好!

  16. 深度神经网络:实验证明加层后效果会更好
    在这里插入图片描述

  17. 一个激活函数就是一个神经元neuron,很多的neuron就组成了neural network神经网络,neuron层叫layer,除输入输出以外的层叫hidden layer
    在这里插入图片描述

2. PyTorch Tutorial

2.1 PyTorch Tutorial 1

  1. PyTorch是什么

    1. 开源机器学习框架
    2. 两大优势:支持GPU加速的张量(Tensor)运算,基于tape-based autograd(就像磁带一样,正向传播时autograd记录操作,反向传播时重现操作,可以高效计算微分)
  2. PyTorch深度神经网络训练流程图
    在这里插入图片描述

  3. Tensor:张量,可理解成多维数组

    1. Data Type
      在这里插入图片描述

    2. Tensor的形状shape(维度dim)
      在这里插入图片描述

    3. 创建Tensor
      在这里插入图片描述

    4. 常用操作

      1. squeeze()去掉长度为1的维度
        在这里插入图片描述
      2. unsqueeze()新增长度为1的维度
        在这里插入图片描述
        注意squeezeunsqueeze这两个不是互逆的命令,squeeze 是只有序号是1维时才会删除,而unsqueeze是在序号维度添加维度
      3. transpose()转置
        在这里插入图片描述
      4. cat()串接
        在这里插入图片描述
      5. 加减、幂、求和、求均值
        在这里插入图片描述
      6. PyTorch v.s. Numpy
        在这里插入图片描述
        在这里插入图片描述
      7. Tensor和Module都默认在CPU上运行 在这里插入图片描述
      8. 为什么要用GPU?
        并行运算需要更多的核心进行算术计算,GPU内有很多小核心,每个小核心可以进行小运算,全加到一块可以达到并行处理
    5. 如何计算梯度?
      在这里插入图片描述

    6. 创建数据集,加载数据
      在这里插入图片描述
      在这里插入图片描述
      训练时shuffle=True,测试时shuffle=False

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/1002734
推荐阅读
相关标签
  

闽ICP备14008679号