[分享] 《动手学深度学习(PyTorch版)》1、预备知识

xinmeng_wit   2024-9-7 18:22 楼主

一、书籍简介

《动手学深度学习(PyTorch版)》这是一本深度学习领域教父级别的书籍,这也是第一版的重磅升级版本,选用了经典的PyTorch深度学习框架。

同时,本书也作为了几十所高校教材用书,可见这本书在学术界的地位,几乎是泰斗级的存在。

以下为不完整截图:

2.png

本书共有15个章节,可以分为3个部分。

第一部分包含预备知识和基础知识。(第1~4章)

第二部分主要讨论现代深度学习技术。(第5~10章)

第三部分讨论可伸缩性、效率和应用程序。(第11~15章)

大纲目录如下:

1.png
 
由目录可以看出来,本书直接以感知机和神经网络作为开篇,并没有介绍传统的机器学习方法,其实,这正是深度学习和机器学习的区别。
深度学习着重复杂的神经网络,而机器学习着重传统的机器学习算法。
 

二、引言部分

本书的第一章为引言部分,主要是简单描述机器学习的相关概念:

1、机器学习的关键组件

  • 数据
  • 模型
  • 目标函数
  • 优化算法

2、机器学习的分类

  • 监督学习
  • 无监督学习
  • 与环境互动
  • 强化学习

3、深度学习的发展

4、深度学习的成功案例

 

由于这一章节以抽象的描述为主,稍微过一遍即可,也就不再做过多的介绍了。

 

三、预备知识

深度学习需要掌握一些基本的技能,所有机器学习方法都涉及从数据中提取信息。因此,这部分主要讲解的是数据处理的一些常用的实用技能,包括存储、操作和数据预处理。

主要分为如下几个部分:

  • 数据操作
  • 数据预处理
  • 线性代数
  • 微积分
  • 自动微分
  • 概率

1、数据操作

数据操作主要介绍PyTorch中对张量的处理,下面直接来看一些例子。

  • 张量

张量定义:

import torch

x = torch.arange(12)

print(x)

输出:

tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

 

查看张量的形状:

print(x.shape)

输出:

torch.Size([12])

 

改变张量的形状:

X = x.reshape(3, 4)
print( X)

输出:

tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]])

 

还有很多其它的方法可以很方便的定义张量和对张量进行变换。

pytorch还支持很多的运算符,比如常用的有加减乘除,乘方等等。

例如:

x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])
x + y, x - y, x * y, x / y, x ** y  # **运算符是求幂运算

输出:

tensor([ 3.,  4.,  6., 10.]) tensor([-1.,  0.,  2.,  6.]) tensor([ 2.,  4.,  8., 16.]) tensor([0.5000, 1.0000, 2.0000, 4.0000]) tensor([ 1.,  4., 16., 64.])

 

2、线性代数

标量由只有一个元素的张量表示。 下面的代码将实例化两个标量,并执行一些熟悉的算术运算,即加法、乘法、除法和指数。

x = torch.tensor(3.0)
y = torch.tensor(2.0)

print(x + y, x * y, x / y, x**y)

输出:

tensor(5.) tensor(6.) tensor(1.5000) tensor(9.)

 

向量可以被视为标量值组成的列表。 这些标量值被称为向量的元素(element)或分量(component)。 当向量表示数据集中的样本时,它们的值具有一定的现实意义。

人们通过一维张量表示向量。一般来说,张量可以具有任意长度,取决于机器的内存限制。

我们可以使用下标来引用向量的任一元素,例如可以通过xi来引用第i个元素。

import torch

x = torch.arange(4)

print(x[3])

输出:

tensor(3)

 

向量的长度:

len(x)

输出:

4

正如向量将标量从零阶推广到一阶,矩阵将向量从一阶推广到二阶。 矩阵,我们通常用粗体、大写字母来表示 (例如,X、Y和Z), 在代码中表示为具有两个轴的张量。

A = torch.arange(20).reshape(5, 4)
A

输出:

tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11],
        [12, 13, 14, 15],
        [16, 17, 18, 19]])

作为方阵的一种特殊类型,对称矩阵(symmetric matrix)A等于其转置:A=A⊤。 这里定义一个对称矩阵B:

B = torch.tensor([[1, 2, 3], [2, 0, 4], [3, 4, 5]])
B

输出:

tensor([[1, 2, 3],
        [2, 0, 4],
        [3, 4, 5]])

就像向量是标量的推广,矩阵是向量的推广一样,我们可以构建具有更多轴的数据结构。 张量(本小节中的“张量”指代数对象)是描述具有任意数量轴的n维数组的通用方法。

 

多维张量:

X = torch.arange(24).reshape(2, 3, 4)
X

输出:

tensor([[[ 0,  1,  2,  3],
         [ 4,  5,  6,  7],
         [ 8,  9, 10, 11]],

        [[12, 13, 14, 15],
         [16, 17, 18, 19],
         [20, 21, 22, 23]]])

我们可以对任意张量进行的一个有用的操作是计算其元素的和。 数学表示法使用∑符号表示求和。

x = torch.arange(4, dtype=torch.float32)
x, x.sum()

输出:

(tensor([0., 1., 2., 3.]), tensor(6.))

点积:

y = torch.ones(4, dtype = torch.float32)
x, y, torch.dot(x, y)

输出:

(tensor([0., 1., 2., 3.]), tensor([1., 1., 1., 1.]), tensor(6.))

现在我们知道如何计算点积,可以开始理解矩阵-向量积(matrix-vector product)。 

A.shape, x.shape, torch.mv(A, x)

输出:

(torch.Size([5, 4]), torch.Size([4]), tensor([ 14.,  38.,  62.,  86., 110.]))

在掌握点积和矩阵-向量积的知识后, 那么矩阵-矩阵乘法(matrix-matrix multiplication)应该很简单。

B = torch.ones(4, 3)
torch.mm(A, B)

输出:

tensor([[ 6.,  6.,  6.],
        [22., 22., 22.],
        [38., 38., 38.],
        [54., 54., 54.],
        [70., 70., 70.]])

 

线性代数中最有用的一些运算符是范数(norm)。 非正式地说,向量的范数是表示一个向量有多大。 这里考虑的大小(size)概念不涉及维度,而是分量的大小。

深度学习中更经常地使用L2范数的平方,也会经常遇到L1范数,它表示为向量元素的绝对值之和

与L2范数相比,L1范数受异常值的影响较小。 为了计算L1范数,我们将绝对值函数和按元素求和组合起来。

 

torch.abs(u).sum()

输出:

tensor(7.)

3、微积分

这一节,主要有几个重点,导数,偏导数,梯度和链式法则。

导数,相信大家都很 熟悉了,导数其实就是变化率。

 在深度学习中,函数通常依赖于许多变量。 因此,我们需要将微分的思想推广到多元函数(multivariate function)上。

在多元函数中,对其中某一个自变量的导数成为偏导数。

我们可以连结一个多元函数对其所有变量的偏导数,以得到该函数的梯度(gradient)向量。

链式法则:

3.png

4、概率

概率部分主要讲解了如下几个部分:

  • 概率论公理
  • 随机变量
  • 处理多个随机变量
  • 联合概率
  • 条件概率
  • 贝叶斯定理
  • 边际化
  • 独立性

以上都是数学中学习过的概率统计的知识,在后边用到的时候再回过头来详细研究

现在研究着实太抽象和枯燥。

 

以上就是第二章预备知识的全部内容,相信有了这些数学基础,对后面的深度学习会有非常大的帮助。

 

 

本帖最后由 xinmeng_wit 于 2024-9-7 18:22 编辑

回复评论 (5)

盯紧Wit,跟着Wit读一读。。。。。。。。。。。。。。。

 

点赞  2024-9-7 19:28
引用: hellokitty_bean 发表于 2024-9-7 19:28 盯紧Wit,跟着Wit读一读。。。。。。。。。。。。。。。  

感谢关注

点赞  2024-9-8 18:35

ha.......................

希望不要有压力。。。。。。。。。。。。。

点赞  2024-9-8 18:56
引用: hellokitty_bean 发表于 2024-9-8 18:56 ha....................... 希望不要有压力。。。。。。。。。。。。。

亚历山大

点赞  2024-9-12 21:22

6楼 nmg 

有压力就有动力

点赞  2024-9-14 16:53
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复