IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 深度学习(2) -> 正文阅读

[人工智能]深度学习(2)

1 导数(Derivatives )

我们现在对微积分和导数进行直观的理解。或许你认为自从一个函数𝑔(𝑏) = 3𝑏,它是一条直线。下面我们来简单理解下导数。
在这里插入图片描述
让我们看看函数中几个点,假定𝑏 = 2,那么𝑔(𝑏)是𝑏的 3 倍等于 6,也就是说如果𝑏 = 2,那么函数𝑔(𝑏) = 6。假定稍微改变一点点𝑏的值,只增加一点,变为 2.001,这时𝑏将向右做微小的移动。0.001 的差别实在是太小了,不能在图中显示出来,我们把它右移一点,现在𝑔(𝑏)等于𝑏的 3 倍是 6.003,画在图里,比例不太符合。请看绿色高亮部分的这个小三角形,如果向右移动 0.001,那么𝑔(𝑏)增加 0.003,𝑔(𝑏)的值增加 3 倍于右移的𝑏,因此我们说函数𝑔(𝑏)在𝑏 = 2,.是这个导数的斜率,或者说,当𝑏 = 2时,斜率是 3。导数这个概念意味着斜率,导数听起来是一个很可怕、很令人惊恐的词,但是斜率以一种很友好的方式来描述导数这个概念。所以提到导数,我们把它当作函数的斜率就好了。更正式的斜率定义为在上图这个绿色的小三角形中,高除以宽。即斜率等于 0.003 除以 0.001,等于 3。或者说导数等于 3,这表示当你将𝑏右移 0.001,𝑔(𝑏)的值增加 3 倍水平方向的量。现在让我们从不同的角度理解这个函数。
假设𝑏 = 5 ,此时𝑔(𝑏) = 3𝑏 = 15。把𝑏右移一个很小的幅度,增加到 5.001,𝑔(𝑏) = 15.003。 即在𝑏 = 5 时,斜率是 3,这就是表示,当微小改变变量𝑏的值,一个等价的导数表达式可以这样写
在这里插入图片描述

不管你是否将𝑔(𝑏)放在上面或者放在右边都没有关系。讲解导数讨论的情况是我们将𝑏偏移 0.001,如果你想知道导数的数学定义,导数是你右移很小的𝑏值(不是 0.001,而是一个非常非常小的值)。通常导数的定义是你右移𝑏(可度量的值)一个无限小的值,𝑔(𝑏)增加 3 倍(增加了一个非常非常小的值)。也就是这个三角形右边的高度。那就是导数的正式定义。但是为了直观的认识,我们将探讨右移𝑏 = 0.001 这个值,即使 0.001 并不是无穷小的可测数据。导数的一个特性是:这个函数任何地方的斜率总是等于3,不管𝑏 = 2或 𝑏 = 5,这个函数的斜率总等于 3,也就是说不管𝑏的值如何化,如果你增加 0.001,𝑔(𝑏)的值就增加 3 倍。这个函数在所有地方的斜率都相等。一种证明方式是无论你将小三角形画在哪里,它的高除以宽总是 3。
我希望带给你一种感觉:什么是斜率?什么是导函数?对于一条直线,在例子中函数的斜率,在任何地方都是 3。

2.更多的导数例子(More Derivative Examples )

先来举个例子:
在这里插入图片描述
我在这里画一个函数,𝑔(𝑏) = a 2 ,如果𝑏 = 2 的话,那么𝑔(𝑏) = 4。让我们稍稍往右推进一点点,现在𝑏 = 2.001 ,则𝑔(𝑏) ≈ 4.004 (如果你用计算器算的话,这个准确的值应该为 4.004。0.001 我只是为了简便起见,省略了后面的部分),如果你在这儿画,一个小三角形 你就会发现,如果把𝑏往右移动 0.001,那么𝑔(𝑏)将增大四倍,即增大 0.004。在微积分中我们把这个三角形斜边的斜率,称为𝑔(𝑏)在点𝑏 = 2 处的导数(即为 4),或者写成微积分的形式,当𝑏 = 2 的时候,𝑔(𝑏) = 4 由此可知,函数𝑔(𝑏) = 𝑏 2 ,在𝑏取不同值的时候,它的斜率是不同的,这和上个视频中的例子是不同的。这里有种直观的方法可以解释,为什么一个点的斜率,在不同位置会不同如果你在曲线上,的不同位置画一些小小的三角形你就会发现,三角形高和宽的比值,在曲线上不同的地方,它们是不同的。所以当𝑏 = 2 时,斜率为 4;而当𝑏 = 5时,斜率为 10 。如果你翻看微积分的课本,课本会告诉你,函数𝑔(𝑏) = 𝑏 2 的斜率(即导数)为2𝑏。这意味着任意给定一点𝑏,如果你稍微将𝑏,增大 0.001,那么你会看到𝑔(𝑏)将增大2𝑏,即增大的值为点在𝑏处斜率或导数,乘以你向右移动的距离。现在有个小细节需要注意,导数增大的值,不是刚好等于导数公式算出来的值,而只是根据导数算出来的一个估计值。为了总结这堂课所学的知识,我们再来看看几个例子:
在这里插入图片描述

假设𝑔(𝑏) = 𝑏 3 如果你翻看导数公式表,你会发现这个函数的导数,等于3𝑏 2 。所以这
是什么意思呢,同样地举一个例子:我们再次令𝑏 = 2,所以𝑏 3 = 8 ,如果我们又将𝑏增大一点点,你会发现𝑔(𝑏) ≈ 8.012, 你可以自己检查一遍,如果我们取8.012,你会发现2.001 3 ,和 8.012 很接近,事实上当𝑏 = 2时,导数值为3 × 2 2 ,即3 × 4 = 12。所以导数公式,表明
如果你将𝑏向右移动 0.001 时,𝑔(𝑏) 将会向右移动 12 倍,即 0.012。来看最后一个例子,假设𝑔(𝑏) = log 𝑓 𝑏,有些可能会写作ln𝑏,函数log𝑏 的斜率应该为1,所以我们可以解释如下:如果𝑏取任何值,比如又取𝑏 = 2,然后又把𝑏向右边移动 0.001那么𝑔(𝑏)将增大 1𝑏× 0.001,如果你借助计算器的话,你会发现当𝑏 = 2时𝑔(𝑏) ≈ 0.69315 ;而𝑏 = 2.001时,𝑔(𝑏) ≈ 0.69365。所以𝑔(𝑏)增大了 0.0005,如果你查看导数公式,当𝑏 = 2的时候,导数值 。这表明如果你把 增大 0.001,𝑔(𝑏)将只会增大 0.001 的二分之一,即 0.0005。如果你画个小三角形你就会发现,如果𝑦 轴增加了 0.001,那么𝑧 轴上的函数log𝑏,将增大 0.001 的一半 即 0.0005。所以1𝑏 ,当𝑏 = 2时这里是 ,就是当𝑏 = 2时这条线的斜率。这些就是有关,导数的一些知识。
在这里,你只需要记住两点:
第一点,导数就是斜率,而函数的斜率,在不同的点是不同的。在第一个例子中𝑔(𝑏) =3𝑏 ,这是一条直线,在任何点它的斜率都是相同的,均为 3。但是对于函数𝑔(𝑏) = a 2 ,或者𝑔(𝑏) = log𝑏,它们的斜率是变化的,所以它们的导数或者斜率,在曲线上不同的点处是不同的。
第二点,如果你想知道一个函数的导数,你可参考你的微积分课本或者维基百科,然后
你应该就能找到这些函数的导数公式。
最后我希望,你能通过我生动的讲解,掌握这些有关导数和斜率的知识,下一课我们将
讲解计算图,以及如何用它来求更加复杂的函数的导数。

3计算图

可以说,一个神经网络的计算,都是按照前向或反向传播过程组织的。首先我们计算出一个新的网络的输出(前向过程),紧接着进行一个反向传输操作。后者我们用来计算出对应的梯度或导数。计算图解释了为什么我们用这种方式组织这些计算过程。在这个视频中,我们将举一个例子说明计算图是什么。让我们举一个比逻辑回归更加简单的,或者说不那么正式的神经网络的例子。我们尝试计算函数𝐾,𝐾是由三个变量𝑏,𝑐,𝑑组成的函数,这个函数是3(a + bc) 。计算这个函数实际上有三个不同的步骤,首先是计算 𝑐 乘以 𝑑,我们把它储存在变量𝑣中,因此𝑣 = 𝑐𝑑; 然后计算𝑤 = 𝑏 + 𝑣;最后输出𝐾 = 3𝑤,这就是要计算的函数𝐾。我们可以把这三步画成如下的计算图,我先在这画三个变量𝑏,𝑐,𝑑,第一步就是计算𝑣 = 𝑐𝑑,我在这周围放个
矩形框,它的输入是𝑐,𝑑,接着第二步𝑤 = 𝑏 + 𝑣,最后一步𝐾 = 3𝑤。
举个例子:
在这里插入图片描述
𝑏 = 5,𝑐 = 3,𝑑 = 2 ,𝑣 = 𝑐𝑑就是 6,就是 5+6=11。𝐾是 3 倍的 ,因此。即3 × (5 + 3 × 2)。如果你把它算出来,实际上得到 33 就是𝐾的值。 当有不同的或者一些特殊
的输出变量时,例如本例中的𝐾和逻辑回归中你想优化的代价函数𝐾,因此计算图用来处理这些计算会很方便。从这个小例子中我们可以看出,通过一个从左向右的过程,你可以计算出𝐾的值。为了计算导数,从右到左(红色箭头,和蓝色箭头的过程相反)的过程是用于计算导数最自然的方式。概括一下:计算图组织计算的形式是用蓝色箭头从左到右的计算,让我们看看下一个视频中如何进行反向红色箭头(也就是从右到左)的导数计算,让我们继续下一个视频的学习。

4.使用计算图求导数( (Derivatives with a Computation Graph )

在上一个视频中,我们看了一个例子使用流程计算图来计算函数𝐾。现在我们看看流程
图的描述,看看你如何利用它计算出函数𝐾的导数。
下面用到的公式:
在这里插入图片描述

这是一个流程图:
在这里插入图片描述
假设你要计算 𝑒𝐾𝑒𝑤 ,那要怎么算呢?好,比如说,我们要把这个𝑤值拿过来,改变一下,
那么𝐾的值会怎么变呢?
所以定义上𝐾 = 3𝑤,现在𝑤 = 11,所以如果你让𝑤增加一点点,比如到 11.001,那么𝐾 =
3𝑤 = 33.003,所以我这里𝑤增加了 0.001,然后最终结果是𝐾上升到原来的 3 倍,所以 𝑒𝐾𝑒𝑤= 3,因为对于任何 𝑤 的增量𝐾都会有 3 倍增量,而且这类似于我们在上一个视频中的例子,我们有𝑔(𝑏) = 3𝑏,然后我们推导出 𝑒𝑔(𝑏)
𝑒𝑏= 3,所以这里我们有𝐾 = 3𝑤,所以 𝑒𝐾𝑒𝑤= 3,这里𝐾扮演了𝑔的角色,在之前的视频里的例子。
在反向传播算法中的术语,我们看到,如果你想计算最后输出变量的导数,使用你最关心的变量对𝑤的导数,那么我们就做完了一步反向传播,在这个流程图中是一个反向步。
在这里插入图片描述我们来看另一个例子,
是多少呢?换句话说,如果我们提高𝑏的数值,对𝐾的数值有什么影响?
好,我们看看这个例子。变量𝑏 = 5,我们让它增加到 5.001,那么对𝑤的影响就是𝑏 + 𝑣,之前𝑤 = 11,现在变成 11.001,我们从上面看到现在𝐾就变成 33.003 了,所以我们看到的是,如果你让𝑏增加 0.001,𝐾增加 0.003。那么增加𝑏,我是说如果你把这个 5 换成某个新值,那
么𝑏的改变量就会传播到流程图的最右,所以𝐾最后是 33.003。所以𝐾的增量是 3 乘以𝑏的增量,意味着这个导数是 3。在这里插入图片描述
要解释这个计算过程,其中一种方式是:如果你改变了𝑏,那么也会改变𝑤,通过改变𝑤,也会改变𝐾,所以𝐾值的净变化量,当你提升这个值(0.001),当你把𝑏值提高一点点,这就是𝐾的变化量(0.003)。
在这里插入图片描述
首先𝑏增加了,𝑤也会增加,𝑤增加多少呢?这取决于 𝑒𝑤𝑒𝑏 ,然后𝑤的变化导致𝐾也在增加,所以这在微积分里实际上叫链式法则,如果𝑏影响到𝑤,𝑤影响到𝐾,那么当你让𝑏变大时,𝐾的变化量就是当你改变𝑏时,𝑤的变化量乘以改变𝑤时𝐾的变化量,在微积分里这叫链式法则。在这里插入图片描述
我们从这个计算中看到,如果你让𝑏增加 0.001,𝑤也会变化相同的大小,所以 𝑒𝑤𝑒𝑏= 1事实上,如果你代入进去,我们之前算过 𝑒𝐾𝑒𝑤= 3,𝑒𝑤𝑒𝑏= 1,所以这个乘积 3×1,在这里插入图片描述
实际上就给出了正确答案, 𝑒𝐾𝑒𝑏= 3。这张小图表示了如何计算, 𝑒𝐾𝑒𝑤 就是𝐾对变量𝑤的导数,它可以帮助你计算𝑒𝐾𝑒𝑏 ,所以这是另一步反向传播计算。
现在我想介绍一个新的符号约定,当你编程实现反向传播时,通常会有一个最终输出值是你要关心的,最终的输出变量,你真正想要关心或者说优化的。在这种情况下最终的输出变量是𝐾,就是流程图里最后一个符号,所以有很多计算尝试计算输出变量的导数,所以输出变量对某个变量的导数,我们就用𝑒𝑤𝑏𝑠命名,所以在很多计算中你需要计算最终输出结果的导数,在这个例子里是𝐾,还有各种中间变量,比如𝑏 、 𝑐 、 𝑑 、 𝑣 、 𝑤,当你在软件里实现的时候,变量名叫什么?你可以做的一件事是,在 python 中,你可以写一个很长的变量名,𝑒𝐺𝑗𝑜𝑏𝑚𝑃𝑣𝑢𝑞𝑣𝑢𝑤𝑏𝑠_𝑒𝑤𝑏𝑠,但这个变量名有点长,我们就用𝑒𝐾_𝑒𝑤𝑏𝑠,但因为你一直对𝑒𝐾求导,对这个最终输出变量求导。我这里要介绍一个新符号,在程序里,当你编程的时候,在代码里,我们就使用变量名𝑒𝑤𝑏𝑠,来表示那个量。在这里插入图片描述
好,所以在程序里是𝑒𝑤𝑏𝑠表示导数,你关心的最终变量𝐾的导数,有时最后是𝑀,对代码中各种中间量的导数,所以代码里这个东西,你用𝑒𝑤表示这个值,所以𝑒𝑤 = 3,在这里插入图片描述
你的代码表示就是𝑒𝑏 = 3。好,所以我们通过这个流程图完成部分的后向传播算法。我们在下一张幻灯片看看这个例子剩下的部分。
我们清理出一张新的流程图,我们回顾一下,到目前为止,我们一直在往回传播,并计
算𝑒𝑤 = 3,再次,𝑒𝑤是代码里的变量名,其真正的定义是 𝑒𝐾𝑒𝑤 。我发现𝑒𝑏 = 3,再次,𝑒𝑏是代码里的变量名,其实代表 𝑒𝐾𝑒𝑏 的值。在这里插入图片描述
大概手算了一下,两条直线怎么计算反向传播。好,我们继续计算导数,我们看看这个值𝑣,那么 𝑒𝐾𝑒𝑣 是多少呢?通过和之前类似的计算,现在我们从𝑣 = 6出发,如果你令𝑣增加到 6.001,那么𝑤之前是 11,现在变成 11.001 了,𝐾就从 33 变成 33.003,所以𝐾 增量是 3 倍,所以 dJ𝑒𝑣= 3。对𝑣的分析很类似对 a 的分析,实际
上这计算起来就是 𝑒𝐾𝑒?𝑒𝑤𝑒𝑣 ,有了这个,我们可以算出
𝑒𝐾𝑒𝑤= 3,𝑒𝑤𝑒𝑣= 1,最终算出结果是3 × 1 =3。
所以我们还有一步反向传播,我们最终计算出𝑒𝑣 = 3,这里的𝑒𝑣当然了,就是 𝑒𝐾𝑒𝑣 。现在,我们仔细看看最后一个例子,那么 𝑒𝐾𝑒𝑐 呢?想象一下,如果你改变了𝑐的值,你想要然后变化一点,让𝐾值到达最大或最小,那么导数是什么呢?这个𝐾函数的斜率,当你稍微改变𝑐值之后。事实上,使用微积分链式法则,这可以写成两者的乘积,是 𝑒𝐾𝑒𝑣?𝑒𝑣𝑒𝑐 ,理由是,如果你改变𝑐一点点,所以𝑐变化比如说 3.001,它影响 J 的方式是,首先会影响𝑣,它对𝑣的
影响有多大?好,𝑣的定义是𝑐 ? 𝑑,所以𝑐 = 3时这是 6,现在就变成 6.002 了,对吧,因为在我们的例子中𝑑 = 2,所以这告诉我们 𝑒𝑣𝑒𝑐= 2当你让𝑐增加 0.001 时,𝑣就增加两倍。所以𝑒𝑣𝑒𝑐= 2,现在我想𝑣的增加量已经是𝑐的两倍,那么 𝑒𝐾𝑒𝑣 是多少呢?我们已经弄清楚了,这等于3,所以让这两部分相乘,我们发现 𝑒𝐾
𝑒𝑐= 6。在这里插入图片描述
好,这就是第二部分的推导,其中我们想知道 𝑣 增加 0.002,会对𝐾有什么影响。实际上 𝑒𝐾𝑒𝑣= 3,这告诉我们 u 增加 0.002 之后,𝐾上升了 3 倍,那么𝐾应该上升 0.006,对吧。这可以从 𝑒𝐾𝑒𝑣= 3推导出来。如果你仔细看看这些数学内容,你会发现,如果𝑐变成 3.001,那么𝑣就变成 6.002,𝑤变成 11.002,然后𝐾 = 3𝑤 = 33.006,对吧?这就是如何得到 𝑒𝐾𝑒𝑐= 6。为了填进去,如果我们反向走的话,𝑒𝑐 = 6,而𝑒𝑐其实是 Python 代码中的变量名,示 𝑒𝐾𝑒𝑐 。在这里插入图片描述
我不会很详细地介绍最后一个例子,但事实上,如果你计算这个结果是 9。在这里插入图片描述
我不会详细说明这个例子,在最后一步,我们可以推出𝑒𝑑 = 9。所以这个视频的要点是,对于那个例子,当计算所有这些导数时,最有效率的办法是从右到左计算,跟着这个红色箭头走。特别是当我们第一次计算对𝑤的导数时,之后在计算对𝑏导数就可以用到。然后对𝑣的导数,比如说这个项和这里这个项:
在这里插入图片描述
可以帮助计算对𝑐的导数,然后对𝑑的导数。所以这是一个计算流程图,就是正向或者说从左到右的计算来计算成本函数𝐾,你可能需要优化的函数,然后反向从右到左计算导数。在逻辑回归的背景下过一遍,并给你介绍需要做什么才能编写代码,实现逻辑回归模型中的导数计算。
今天的内容就这么多。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-14 14:01:52  更:2021-08-14 14:04:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 8:28:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码