首页 > 知识百科 > 正文

深度学习精选笔记(2)自动求导与概率原创

学习参考:

动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning

①如有冒犯、请联系侵删。
②已写完的笔记文章不会定期修改(删、改、增),以达到集多方教程的精华于一文的目的。
< strong>③非常推荐上面(学习参考)的前两个教程,在网上是开源免费的,写的很棒,不管是开始学还是复习巩固都不错的。

深度学习回顾,专栏内容来源于多个书籍笔记、在线笔记、以及自己的感想、想法,佛系更新。争取内容全面而不失重点。完成时间到了另外一直更新下去,已写完的笔记文章会不定时不断修改(删、改、增),以达到集多方教程的精华于一文的目的。所有涉及修改教程的文章都会写在开头、一起学习一起进步。

1.导数基本意义

古希腊人把一个多边形面积,并将它们的面积相加,才找到计算面积面积的方法。为了求出多边形面积(比如圆)的,古希腊人以这样的形状上刻内接烘焙。内接烘焙的等长边越多,就越接近圆这个。过程也被称为逼近法(力竭法)。

事实上,逼近法就是积分(integral calculus)的起源。2000多年后,微积分的另一支,微分(微分)被发明出来。在微分学中最重要的应用是优化问题,即考虑如何把事情做到最好。

导数是微积分中的重要概念,它表示函数在某一点处的变化率。具体来说,如果一个函数表示某个物理量随时间、空间或其他自变量的变化率变化,则该函数在某一点的导数就表示该点的物理量换句话来说,导数告诉函数在某一点处是增加还是减少,以及增加或减少的速率有多快。

其中,ℎ是一个无限接近于零的数。这个定义可以理解为,当 ℎ 趋近于零时,函数在点 x 处的导数就是函数在点 x 处的切线的斜率。

导数等价符号:

异构函数 𝑢=𝑓(𝑥) 其在 𝑥=1 处的切线 𝑦=2𝑥−3 ],其中系数 2是切线的斜率:

2.基本导数公式

3.偏导数

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

偏导数是多元函数的导数概念的推广,用于描述一个关于其中的函数对于一个具有多个自变量的函数,其偏导数告诉我们,当其中一个自变量发生变化时,函数值的变化率为多少。< br />
详细一点说明:

4.梯度此时

可以连接一个多元函数所有变量的偏导数,得到该函数的梯度(gradient)运算。梯度是一个运算,表示多元函数在给定点处的最大变化率和变化的方向。

函数 𝑓(𝐱) 相对于 𝐱 ;的梯度是一个包含 𝑛个偏导数的表示:

梯度告诉函数在某一点的变化率最快的方向。在二维空间中,梯度即函数的偏导数构成的表示,指向函数增长最快的方向,其大小表示增长的速率。在三维空间中,最小值也是类似的概念,它是一个三维求解,指向函数增长最快的方向。

梯度在优化问题中非常有用,因为在最小化或最大化一个函数时,梯度的方向函数值变化最快,可以帮助找到函数的极小值

5.链法则公式

在深度学习中,多元函数通常是复合(composite)的,难以应用上述任何规则来微分这些函数。幸运的是,链式法则可以用来微分复合函数。

6.自动微分

深度学习框架通过自动计算导数,即自动微分(自动)实际上,根据设计好的模型,系统会构建一个计算图(计算图),来跟踪计算是通过哪些操作组合起来产生输出的哪些数据。自动微分使系统能够实现反向传播这里,逆向传播(backpropagate)意味着跟踪整个计算图,填充关于参数每个偏导数。

自动计算微分的过程示例如下:

导入 tensorflow as tf# 变量x 属性初始值x = tf.范围(4, dtype=tf.float32)# 瞬时的变量,将x转换为变量张量,方便更新。x = tf.x = tf.x span>变量(x)打印(x)#将所有计算记录胶带放在上面 tfGradientTape()  as t: # 计算y=计算x和x的点积 y = 2 * tf.tensordot(x, x,< /span> 轴=1)# 调用卷的反向传播函数自动计算每个关于x的梯度x_grad = t.梯度(y, x)x_grad,y,x
<tf变量'变量:0' 形状=(4,) dtype=float32, numpy=数组([0.< /span>, 1., 2., 3.] , dtype=float32)>(<tf .张量形状=(4,), dtype=float32, numpy=< /span>array([ 0. 4. 8 ., 12.], dtype=float32)>, <tf.张量: 形状=() dtype=float32 numpy=28.0>, <tf变量 '变量:0 ' 形状=(4,) dtype=float32, numpy=数组([0., 1. 2. 3.], dtype=float32)>)

6.1非标量指标的逆向传播

当y不是标量时,对于支持x的导数最自然的解释是一个矩阵。阶和高维的y和x,求导的结果可以是一个高阶张量。

然而,虽然这些更奇特的对象确实出现在高级机器学习中(包括[深度学习中]) ),但是当调用支持的逆向计算时,我们通常会尝试计算一批训练样本中组成每个部分的损失函数的导数。

 # 变量 x 属性初始值x = tf.< span 类=“内置令牌”>范围(4, dtype< span class="1c50-745d-7222-e7df token 操作符">=tf.float32)# 装载瞬时的变量,将x转换为变量张量,方便更新。x = tf.< /span>变量(x)打印(x) tf .GradientTape() as t< span class="1c50-745d-7222-e7df token punctuation">: y = x * xt.梯度(y, x)< /span> # 等价于y=tf.reduce_sum(x*x)

6.2分离计算

有时,希望将某些计算移动到记录的计算图之外。例如,假设y是x的函数计算的,而z作为y和x的函数计算的。想计算z关于x的函数计算的,但由于某种原因,希望将y视为一个常见的,并且只考虑到x在y被计算后发挥的作用。

这里可以分离y来返回一个新的变量u,该变量与y具有相同的值,但是丢弃计算如何计算y的任何信息。由此,梯度不会刚性流经u到x。因此,下面的反向传播函数计算z=ux关于x的偏导数,同时将u作为常规处理,而不是z=xx*x关于x的偏导数。

# 变量x属性属性值x = tf.范围(4, dtype=tffloat32)# 存放迷你的变量,将x转换为变量张量,方便更新。x = tf.变量(x)打印(x)# 设置persistent=True来运行t.gradient多次with tf.GradientTape(持久=True ) as t: y = x * x u = tf.stop_gradient(y) z =< /span> u * xx_grad = t.梯度< span class="26b5-1c50-745d-7222 token punctuation">(z, x)打印(x_grad)x_grad == u
<tf变量'变量:0'形状=(4,) dtype=float32, numpy=数组< span class="d91a-2e5b-5315-d910 token punctuation">([0., 1., 2. , 3.], dtype=float32)>tf.张量([0. 1. 4. 9 .], 形状=(< /span>4,), dtype=float32)<< /span>tf.张量形状=(4,) , dtype=bool, numpy=数组([   True True])>

由于记录了y的计算结果,可以在y上调用逆向传播,获得y=x*x关于x的导数结果查看或者用于其他用途:

t.梯度(y< span class="26b5-1c50-745d-7222 token punctuation">, x)
 <tf.张量形状=(4,)  dtype=float32 numpy=数组([0.< /span>, 2., 4., 6.] , dtype=float32)>

6.3控制流的轻度计算

即使构建函数的计算图也需要通过Python流控制(例如,条件、循环或任意函数调用),仍然可以计算得到的变量中间:

def f(a) b = a * 2 while tf .norm(b) < 1000 b = b * 2 if tfreduce_sum(b) > 0: c = b < span class="8af5-ea2a-fc2a-1df0 token 关键字">else: c = 100 * b 返回 ca = tf.变量(tf.随机正常(形状=( )))打印(a)与 tf.GradientTape() as t: d = f(a)d_grad = t梯度(d a )打印(d)d_grad< /code>

7.概率

概率是描述实随机事件发生可能性的量度。在数学上,概率通常用一个循环 0 到 1 之间的数来表示,其中0表示不可能事件,1表示必然事件。例如,掷出一枚硬币出现正面的概率为0.5,即50%的可能性。

概率可以通过频率或基于理论模型来确定。频率概率是通过观察事件发生的次数来计算的,当试验次数趋于无穷时,频率概率会趋近于一个固定值。理论概率是基于事件发生的可能性和相关原因素来计算的,常用的方法包括经典概率、几何概率和条件等。
概率可以分为几种不同的类型,主要包括以下几种概率:

经典概率:也称为可能概率,是指在有限个等可能结果的随机试验中,某个事件的概率等于该事件发生的可能性除以总的个可能性数。例如,掷出一个均匀的骰子,出现任意一个整数概率为1/6。几何概率:几何概率是指根据几何形状和大小计算概率的方法,通常用于连续型随机变量。例如,在一个区域内随机抛点,则出现某个子区域内的概率与该子区域的面积成正比。条件概率:条件概率是指在给定某个条件下事件发生的概率。如果事件A和事件B都是随机事件,且事件B的概率大于0,则事件A在事件 B 已经发生的条件下发生的概率称为事件 A 在事件 B 条件下的概率,记作 P(A|B)。 贝叶斯概率:贝叶斯概率是指根据先验概率和新的有证据表明计算更新后的概率,常用于统计推断和机器学习中。 频率概率:频率概率是指根据大量重复实验中事件发生的相对频率来计算概率的方法。例如,掷一枚硬币出现正面的概率可以通过大量重复掷硬币实验来估计。

把从抽样样本中抽取概率的过程称为抽样(sampling)。笼统来说,可以把分布(distribution)作为事件的概率分配。将概率分布给定一些离散选择的分配称为分区分配(多项分布)。

7.1基本概率论

检查分配子的唯一方法是多次投掷并记录结果,对于每个分配子,我们将观察到{1,…,6}中的一个值。对于每个值,用一种自然的方法等于它出现的次数除投掷的总次数,即此事件(事件)的概率的估计值大数法则(law of Large Number)告诉我们:随着投掷次数的增加,这个估计值会越来越接近真实的潜在概率。

%matplotlib内联导入 numpy as np导入tensorflow as tf导入 tensorflow_probability as tfp来自 d2l 导入tensorflow as d2lfair_probs = tf.(6) / 6计数 = tfp.分布.Multinomial(10, fair_probs)样本(500)cum_counts = tf.cumsum(计数,=0 )估计 = cum_counts / tf< span class="2e5b-5315-d910-73a5 token punctuation">.reduce_sum(cum_counts, axis=1, keepdims=True)d2lset_figsize((6< /span>, 4.5))对于 i  范围(6): d2l.plt.plot(< /span>估计[ i].numpy(), 标签=(< span class="ea2a-fc2a-1df0-0481 token string">"P(die=" + str(i + 1)< /span> + ")"))d2lpltaxhline(y=0.167, 颜色='黑色',< /span> linestyle='虚线')d2l< span class="745d-7222-e7df-cf87 token punctuation">.plt.gca()set_xlabel('实验组' )d2l.plt.gca< span class="fc2a-1df0-0481-26b5 token punctuation">()set_ylabel('估计概率')d2lplt图例( );


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

对骰子进行采样,可以模拟1000次投掷。然后,可以统计1000次投掷后,每个数字被投中了多少次。具体来说,计算相对频率,以作为真实概率的估计。

counts = tfp.分布多项式(1000 fair_probs)样本(< /span>)计数 / 1000
 <tf张量形状= (6,) dtype=float32 numpy=数组([0.167, 0.175, 0.143, 0.164 0.182 0.169 ], dtype=float32)>

因为是从一个公平的骰子中生成的数据,每个结果都有真实的概率为 1/6 ,大约是 0.167 ,所以上面输出的估计值看起来不错。这也反映了大数据效应的效应。

概率论公理< br /> 在处理骰子掷出时,我们将集合S={1,2,3,4,5,6}称为样本空间(sample space)或结果空间(outcome space),其中每个元素都是结果(outcome)。事件(event)是一组给定样本空间的随机结果。
概率(probability)可以被认为是集合映射到真实值的函数。在给定样本空间S中,事件 A 的概率,表示为 𝑃(A) ,满足以下属性:

随机变量
在概率论和统计学中,随机变量是一个用于描述随机现象结果的变量,它可以取多个可能的取值,每个取值对应一个可能的结果。随机变量可以是离散的,也可以是连续的。

离散随机变量:离散随机变量的取值是可数的,通常为整数。例如,抛出一次硬币正面出现的次数就是一个离散随机变量,可能的取值为0或1。连续随机变量:连续随机变量的取值是在一个区间内的实数,取值是不可数的。例如,一个人的身高就是一个连续随机变量,可以在某个范围内取任意实数。

请注意,离散(discrete)随机变量(如骰子的每一面) )和连续区别(连续)随机指标(如人的体重和身高)之间存在微妙的。现实生活中,测量两个人是否具有身高的身高没有特殊意义。如果我们进行足够精确的测量,最终会发现这个星球上没有两个人具有极高的身高。在这种情况下,询问某人的身高是否落入给定的区间,是否在1.79米和1.81米之间更有意义。在这些情况下接下来,我们将这个所看到的某个高度的可能性量化为密度(密度)。高度恰好为1.80米的概率为0,但密度不是0。在任意两个不同之间的区间,我们都有非零的概率。

7.2处理多个随机变量

很多时候,会考虑多个随机变量。比如,可能需要对疾病和症状之间的关系进行建模。给出一个疾病和一个症状,比如“流感”和“咳嗽”,以某些概率存在或不存在于某些患者身上。需要估计这些概率以及概率之间的关系,以便可以推断来实现更好的关系

(1)联合概率

联合概率(联合概率) 𝑃(𝐴=𝑎,𝐵=&给定任意值𝑎 #x1d44f;)。和 𝑏 ,联合概率可以回答: 𝐴=𝑎和 𝐵=𝑏同时满足的概率是多少? 请注意,对于任何 𝑎和 𝑏的取值, 𝑃(𝐴=𝑎,𝐵=𝑏)≤𝑃(𝐴=𝑎)。这一点是确定的,因为要同时发生 𝐴=𝑎和 𝐵=𝑏 , 𝐴=𝑎就必须发生, 𝐵=𝑏因此, 𝐴=𝑎和 𝐵=𝑏同时发生的可能性不大于 𝐴=𝑎或者 𝐵=𝑏单独发生的概率。

(2)条件

联合概率的不等式带来一个有趣的概率: 0≤𝑃(𝐴=&# x1d44e;,𝐵=𝑏)𝑃(𝐴=𝑎)≤1 。我们称这部分为条件概率(条件概率),并用 𝑃(& #x1d435;=𝑏∣𝐴=𝑎) 表示它:它是 𝐵=𝑏的概率,前提是 𝐴=𝑎已发生。

(3)贝叶斯定理

使用条件概率的定义,我们可以得出统计学中最有用的方程之一:贝叶斯定理(Bayes' theorem)。 根据乘法法则(乘法)规则)可得 𝑃(𝐴,𝐵)=𝑃(𝐵∣𝐴)𝑃(𝐴) 。可得 𝑃(𝐴,𝐵)=𝑃(𝐴∣𝐵)𝑃(𝐵) 。 假设 𝑃( 𝐵)>0,活动其中一个条件变量,得到:


请注意,这里使用结构的表示法:其中 𝑃(𝐴,&# x1d435;) 是一个联合条件分布(联合分布), 𝑃(𝐴∣𝐵)
是一个联合条件分布(条件分布)。这种分布可以在给定值 &# x1d434;=𝑎,𝐵=𝑏

(4)边际化(边际概率)

为了能进行事件概率求和,需要求和法则(求和法则),即𝐵的概率虚拟计算的所有可能的选择,把所有选择的联合概率聚合在一起,这也称为边际化(marginalization)。边际化结果的概率或边际分布称为边际概率(marginalprobability)或边际分布(marginaldistribution)。

(5)独立性

依赖(dependence)与独立(independence)。如果两个随机变量𝐴和 𝐵是独立的,意味着事件𝐴
的发生跟𝐵在这种情况下,统计学家通常将这一点电极为 𝐴⊥𝐵 事件的发生相关性。 。根据贝叶斯定理,立刻就能同样得到 𝑃(𝐴∣𝐵)=𝑃(𝐴) 。在所有其他情况下,我们称 𝐴 ;和 𝐵比如说,连续两次发出一个骰子的事件是相互独立的。相比之下,灯开关的位置和房间的亮度不是依赖关系(因为可能存在灯泡坏掉、电源故障,或者开关故障) 。

7.3期望与期望

为了实现概率分布的关键特征,需要一些测量方法。一个随机变量𝑋的期望(期望,或手势(平均) )表示为

当函数 𝑓(𝑥) 的输入是从分配 𝑃中抽取的随机指标时,𝑓(𝑥)的期望值为

在许多情况下,希望快速随机指标𝑋使用期望值的偏差。这可以通过偏差来估计

偏差的平方根被称为标准差(标准差)。 随机变量函数的偏差是:当从该随机变量分布中采样时不同值时,函数值超出该函数的期望程度:

深度学习精选笔记(2)自动求导与概率原创由知识百科栏目发布,感谢您对的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“深度学习精选笔记(2)自动求导与概率原创