600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > (d2l-ai/d2l-zh)《动手学深度学习》pytorch 笔记(3)前言(介绍各种机器学习问题

(d2l-ai/d2l-zh)《动手学深度学习》pytorch 笔记(3)前言(介绍各种机器学习问题

时间:2020-11-14 23:04:49

相关推荐

(d2l-ai/d2l-zh)《动手学深度学习》pytorch 笔记(3)前言(介绍各种机器学习问题

开源项目地址:d2l-ai/d2l-zh

教材官网:https://zh.d2l.ai/

书介绍:https://zh-v2.d2l.ai/

笔记基于7月26日发布的版本,书及代码下载地址在github网页的最下面

交流者论坛

额外:

https://distill.pub/

pytorch中文文档(哪个函数不明白用法查询非常好用)

(d2l-ai/d2l-zh)《动手学深度学习》pytorch 笔记(1)(序言、pytorch的安装、神经网络涉及符号)

(d2l-ai/d2l-zh)《动手学深度学习》pytorch 笔记(2)前言(介绍各种机器学习问题)

文章目录

2.6 概率(90)2.6.1 基本概率论(91)掷色子测试(91)掷色子测试(91)概率论公理(93)随机变量(94)2.6.2 处理多个随机变量(94)联合概率(联合)(95)条件概率(95)贝叶斯定理 (Bayes 定理)(95)边际化(边缘化)(求和规则)(啥意思,看不懂?看下面关于艾滋病检测的应用!)(95)独立性(95)应⽤(艾滋病二次检测)(96)2.6.3 期望和差异(97)2.6.4 ⼩结(98)2.6.5 练习(98)2.7 查阅⽂档(98)2.7.1 查找模块中的所有函数和类(98)2.7.2 查找特定函数和类的⽤法(99)【help()函数】2.7.3 ⼩结2.7.4 练习(100)

2.6 概率(90)

智能体(agent)(90)

2.6.1 基本概率论(91)掷色子测试(91)

大数定律(law of large numbers)(91)

在统计学中,我们把从概率分布中抽取样本的过程称为抽样(sampling)。

将概率分配给⼀些离散选择的分布称为多项分布(multinomial distribution)。稍后我们将给出分布(distribution)的更正式定义。但笼统来说,可以把它看作是对事件的概率分配。

掷色子测试(91)

import torchfrom torch.distributions import multinomialfrom d2l import torch as d2l# 为了抽取⼀个样本,我们只需传⼊⼀个概率向量。输出是另⼀个相同⻓度的向量:它在索引i处的值是采样结果中i出现的次数。fair_probs = torch.ones([6]) / 6# print(fair_probs) # tensor([0.1667, 0.1667, 0.1667, 0.1667, 0.1667, 0.1667])print(multinomial.Multinomial(1, fair_probs).sample()) # tensor([0., 0., 1., 0., 0., 0.])# 如果你运⾏采样器很多次,你会发现每次你都得到随机的值。在估计⼀个骰⼦的公平性时,我们经常希望从# 同⼀分布中⽣成多个样本。如果⽤Python的for循环来完成这个任务,速度会慢得令⼈难以忍受,因此我们使# ⽤的函数⽀持同时抽取多个样本,返回我们想要的任意形状的独⽴样本数组。print(multinomial.Multinomial(10, fair_probs).sample()) # tensor([1., 2., 1., 2., 2., 2.])# 现在我们知道如何对骰⼦进⾏采样,我们可以模拟1000次投掷。然后,我们可以统计1000次投掷后, 每个数字# 被投中了多少次。具体来说,我们计算相对频率作为真实概率的估计。# 将结果存储为32位浮点数以进⾏除法counts = multinomial.Multinomial(1000, fair_probs).sample()counts = counts / 1000 # 相对频率作为估计值print(counts) # tensor([0.1530, 0.1700, 0.1620, 0.1600, 0.1770, 0.1780])# 因为我们是从⼀个公平的骰⼦中⽣成的数据,我们知道每个结果都有真实的概率1/6,⼤约是0.167,所以上⾯# 输出的估计值看起来不错。# 我们也可以看到这些概率如何随着时间的推移收敛到真实概率。让我们进⾏500组实验,每组抽取10个样本counts = multinomial.Multinomial(10, fair_probs).sample((500,))print(counts.shape) # torch.Size([500, 6])cum_counts = counts.cumsum(dim=0) # 沿指定轴逐级累加estimates = cum_counts / cum_counts.sum(dim=1, keepdims=True) # 获得概率# 绘图d2l.set_figsize((6, 4.5))for i in range(6):# d2l.plt.plot(estimates[:, i].numpy(), label=("P(die=" + str(i + 1) + ")"))d2l.plt.plot(estimates[:, i], label=("P(die=" + str(i + 1) + ")")) # 转不转换成numpy数组都行d2l.plt.axhline(y=0.167, color='black', linestyle='dashed') # 绘制水平参考线d2l.plt.gca().set_xlabel('Groups of experiments')d2l.plt.gca().set_ylabel('Estimated probability')d2l.plt.legend() # 设置图例?不设置标签label就显示不出来?d2l.plt.show()

运行结果:

每条实线对应于骰⼦的6个值中的⼀个,并给出骰⼦在每组实验后出现值的估计概率。当我们通过更多的实验获得更多的数据时,这6条实体曲线向真实概率收敛。

概率论公理(93)

在处理骰⼦掷出时,我们将集合S = {1, 2, 3, 4, 5, 6}称为样本空间(sample space)或结果空间(outcomespace),其中每个元素都是结果(outcome)。事件(event)是来⾃给定样本空间的⼀组结果。例如,“看到

5”({5})和“看到奇数”({1, 3, 5})都是掷出骰⼦的有效事件。注意,如果随机实验的结果在事件A中,则事件A已经发⽣。也就是说,如果投掷出3点,因为3 ∈ {1, 3, 5},我们可以说,“看到奇数”的事件发⽣了。形式上,概率(probability)可以被认为是将集合映射到真实值的函数。在给定的样本空间S中,事件A的概率,表⽰为P(A),满⾜以下属性:

这些也是概率论的公理,由科尔莫⼽罗夫于1933年提出。有了这个公理系统,我们可以避免任何关于随机性

的哲学争论;相反,我们可以⽤数学语⾔严格地推理。例如,让事件A1为整个样本空间,且当所有i > 1时

的Ai = ∅,我们可以证明P(∅) = 0,即不可能发⽣事件的概率是0。

随机变量(94)

在我们掷骰⼦的随机实验中,我们引⼊了随机变量(randomvariable)的概念。随机变量⼏乎可以是任何数量,并且不是确定性的。它可以在随机实验的⼀组可能性中取⼀个值。考虑⼀个随机变量X,其值在掷骰⼦的样本空间S = {1, 2, 3, 4, 5, 6}中。我们可以将事件“看到⼀个5”表⽰为{X = 5}或X = 5,其概率表⽰为P({X = 5})或P(X = 5)。通过P(X = a),我们区分了随机变量X和X可以采取的值(例如a)。然而,这可能会导致繁琐的表⽰。为了简化符号,⼀⽅⾯,我们可以将P(X)表⽰为随机变量X上的分布(distribution):

分布告诉我们X获得任意值的概率。另⼀⽅⾯,我们可以简单⽤P(a)表⽰随机变量取值a的概率。由于概率论中的事件是来⾃样本空间的⼀组结果,因此我们可以为随机变量指定值的可取范围。例如,P(1 ≤ X ≤ 3)表⽰事件{1 ≤ X ≤ 3},即{X = 1, 2, or, 3}的概率。等价地,P(1 ≤ X ≤ 3)表⽰随机变量X从{1, 2, 3}中取值的概率。

数值的可能性量化为密度(density)。(94)

2.6.2 处理多个随机变量(94)

一切不确定的数据都可以理解为随机变量

联合概率(联合)(95)

第⼀个被称为联合概率(joint probability)P(A = a, B = b)。给定任何值a和b,联合概率可以回答,A = a和B =b同时满⾜的概率是多少?请注意,对于任何a和b的取值,P(A = a, B = b) ≤ P(A = a)。这点是确定的,因为要同时发⽣A = a和B = b,A = a就必须发⽣,B = b也必须发⽣(反之亦然)。因此,A = a和B = b同时发⽣的可能性不⼤于A = a或是B = b单独发⽣的可能性。

条件概率(95)
贝叶斯定理 (Bayes 定理)(95)
边际化(边缘化)(求和规则)(啥意思,看不懂?看下面关于艾滋病检测的应用!)(95)
独立性(95)

另⼀个要检查的有⽤属性是依赖与独⽴。两个随机变量A和B是独⽴的,意味着事件A的发⽣不会透露有关B事件的发⽣情况的任何信息。在这种情况下,统计学家通常将这⼀点表述为A ⊥ B。根据⻉叶斯定理,⻢上就能同样得到P(A | B) = P(A)。在所有其他情况下,我们称A和B依赖。⽐如,⼀个骰⼦的两次连续抛出是独⽴的。相⽐之下,灯开关的位置和房间的亮度并不是(尽管它们不是具有确定性的,因为总是可能存在灯泡坏掉,电源故障,或者开关故障)。

应⽤(艾滋病二次检测)(96)

记住俩:

示例:艾滋病的检测,

结论:概率违反直觉

2.6.3 期望和差异(97)

为了概括概率分布的关键特征,我们需要⼀些测量⽅法。随机变量 X 的 期望(或平均值)表⽰为:

当函数 f(x) 的输⼊是从分布 P 中抽取的随机变量时,f(x) 的期望值为:

在许多情况下,我们希望衡量随机变量 X 与其期望值的偏置。这可以通过⽅差来量化:

它的平⽅根被称为 标准差 (standared deviation)。随机变量函数的⽅差衡量的是,当从该随机变量分布中采样不同值 x 时,函数值偏离该函数的期望的程度:

2.6.4 ⼩结(98)

• 我们可以从概率分布中采样。

• 我们可以使⽤联合分布、条件分布、Bayes 定理、边缘化和独立性假设来分析多个随机变量。

• 期望和⽅差为概率分布的关键特征的概括提供了实⽤的度量形式。

2.6.5 练习(98)

我们进⾏了 m = 500 组实验,每组抽取 n = 10 个样本。变化 m 和 n,观察和分析实验结果。给定两个概率为 P(A) 和 P(B) 的事件,计算 P(A ∪ B) 和 P(A ∩ B) 的上限和下限。(提⽰:使⽤ 友元图44 来展⽰这些情况。)假设我们有⼀系列随机变量,例如 A,B 和 C,其中 B 只依赖于 A,而 C 只依赖于 B,你能简化联合

概率 P(A, B, C) 吗?(提⽰:这是⼀个 ⻢尔可夫链45。)在 2.6.2节 中,第⼀个测试更准确。为什么不运⾏第⼀个测试两次,而是同时运⾏第⼀个和第⼆个测试?

https://discuss.d2l.ai/t/topic/1762

2.7 查阅⽂档(98)

2.7.1 查找模块中的所有函数和类(98)

import torchprint(dir(torch.distributions))# ['AbsTransform', 'AffineTransform', 'Bernoulli', 'Beta', 'Binomial', 'CatTransform', 'Categorical', 'Cauchy', 'Chi2', 'ComposeTransform', 'ContinuousBernoulli', 'CorrCholeskyTransform', 'Dirichlet', 'Distribution', 'ExpTransform', 'Exponential', 'ExponentialFamily', 'FisherSnedecor', 'Gamma', 'Geometric', 'Gumbel', 'HalfCauchy', 'HalfNormal', 'Independent', 'IndependentTransform', 'Kumaraswamy', 'LKJCholesky', 'Laplace', 'LogNormal', 'LogisticNormal', 'LowRankMultivariateNormal', 'LowerCholeskyTransform', 'MixtureSameFamily', 'Multinomial', 'MultivariateNormal', 'NegativeBinomial', 'Normal', 'OneHotCategorical', 'OneHotCategoricalStraightThrough', 'Pareto', 'Poisson', 'PowerTransform', 'RelaxedBernoulli', 'RelaxedOneHotCategorical', 'ReshapeTransform', 'SigmoidTransform', 'SoftmaxTransform', 'StackTransform', 'StickBreakingTransform', 'StudentT', 'TanhTransform', 'Transform', 'TransformedDistribution', 'Uniform', 'VonMises', 'Weibull', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'bernoulli', 'beta', 'biject_to', 'binomial', 'categorical', 'cauchy', 'chi2', 'constraint_registry', 'constraints', 'continuous_bernoulli', 'dirichlet', 'distribution', 'exp_family', 'exponential', 'fishersnedecor', 'gamma', 'geometric', 'gumbel', 'half_cauchy', 'half_normal', 'identity_transform', 'independent', 'kl', 'kl_divergence', 'kumaraswamy', 'laplace', 'lkj_cholesky', 'log_normal', 'logistic_normal', 'lowrank_multivariate_normal', 'mixture_same_family', 'multinomial', 'multivariate_normal', 'negative_binomial', 'normal', 'one_hot_categorical', 'pareto', 'poisson', 'register_kl', 'relaxed_bernoulli', 'relaxed_categorical', 'studentT', 'transform_to', 'transformed_distribution', 'transforms', 'uniform', 'utils', 'von_mises', 'weibull']

通常,我们可以忽略以__开始和结束的函数(Python中的特殊对象)或以单个_开始的函数(通常是内部函数)。根据剩余的函数名或属性名,我们可能会猜测这个模块提供了各种⽣成随机数的⽅法,包括从均匀分布(uniform)、正态分布(normal)和多项分布(multinomial)中采样。

2.7.2 查找特定函数和类的⽤法(99)【help()函数】

有关如何使⽤给定函数或类的更具体说明,我们可以调⽤help函数。例如,我们来查看张量ones函数的⽤法。

import torchhelp(torch.ones)

运行结果:

Help on built-in function ones:ones(...)ones(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> TensorReturns a tensor filled with the scalar value `1`, with the shape definedby the variable argument :attr:`size`.Args:size (int...): a sequence of integers defining the shape of the output tensor.Can be a variable number of arguments or a collection like a list or tuple.Keyword arguments:out (Tensor, optional): the output tensor.dtype (:class:`torch.dtype`, optional): the desired data type of returned tensor.Default: if ``None``, uses a global default (see :func:`torch.set_default_tensor_type`).layout (:class:`torch.layout`, optional): the desired layout of returned Tensor.Default: ``torch.strided``.device (:class:`torch.device`, optional): the desired device of returned tensor.Default: if ``None``, uses the current device for the default tensor type(see :func:`torch.set_default_tensor_type`). :attr:`device` will be the CPUfor CPU tensor types and the current CUDA device for CUDA tensor types.requires_grad (bool, optional): If autograd should record operations on thereturned tensor. Default: ``False``.Example::>>> torch.ones(2, 3)tensor([[ 1., 1., 1.],[ 1., 1., 1.]])>>> torch.ones(5)tensor([ 1., 1., 1., 1., 1.])

2.7.3 ⼩结

• 官⽅⽂档提供了本书之外的⼤量描述和⽰例。

• 我们可以通过调⽤dir和help函数或在Jupyter记事本中使⽤?和??查看API的⽤法⽂档

2.7.4 练习(100)

在深度学习框架中查找任何函数或类的⽂档。你能在这个框架的官⽅⽹站上找到⽂档吗?

https://discuss.d2l.ai/t/topic/1765

(d2l-ai/d2l-zh)《动手学深度学习》pytorch 笔记(3)前言(介绍各种机器学习问题)以及数据操作预备知识Ⅲ(概率)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。