当前位置: 首页 > news >正文

第2章 神经网络的数学基础

 本章我们将梳理一下神经网络所需的数学基础知识,其中大多数内容没有超出高中所学范围,因此读起来不会吃力。

2-1神经网络所需的函数

本节我们来看一下神经网络世界中频繁出现的函数。虽然它们都是基本的函数,但是对于神经网络是不可缺少的。

一次函数

在数学函数中最基本、最重要的就是一次函数。它在神经网络的世界里也同样重要。这个函数可以用下式表示。

y=ax+bab为常数,a≠0)(1)

a称为斜率,b称为截距。

当两个变量x、y满足式(1)的关系时,称变量y和变量x是一次函数关系。

一次函数的图像如下图的直线所示。

例1一次函数y=2x+1的图像如图所示,截距为1,斜率为2。

以上是一个自变量的情形。这个一次函数关系也同样适用于多个自变量的情形。例如,有两个变量x1、x2,当它们满足下式的关系时,称y和x1、x2是一次函数关系。

y=ax1+bx2+cabc为常数,a≠0,b≠0)

我们将会在后面讲到,在神经网络中,神经单元的加权输入可以表示为一次函数关系。例如,神经单元有三个来自下层的输入,其加权输入z的式子如下所示(1-3节)。

如果把作为参数的权重w1、w2、w3与偏置b看作常数,那么加权输入zx1、x2、x3是一次函数关系。另外,在神经单元的输入x1、x2、x3作为数据值确定了的情况下,加权输入z和权重w1、w2、w3以及偏置b是一次函数关系。用误差反向传播法推导计算式时,这些一次函数关系使得计算可以简单地进行。

问题1作出一次函数y=-2x-1的图像。

解如右图所示,截距是-1,斜率是-2。

二次函数

在数学函数中,二次函数与一次函数同样重要。本书中的代价函数使用了二次函数。二次函数由下式表示。

二次函数的图像是把物体抛出去时物体所经过的轨迹,也就是抛物线(下图)。这个图像中重要的一点是,a为正数时图像向下凸,从而存在最小值。这个性质是后面讲到的最小二乘法的基础。

例2二次函数的图像如下图所示。从图像中可以看到,当x=1时,函数取得最小值2。

以上考察了一个自变量的情形。这里考察的性质在推广到多个自变量的情形时也是不变的。例如,有两个自变量x1、x2时,称下面的函数为关于x1、x2的二次函数。

这里,a、b、c、p、q、r为常数,a≠0,c≠0。

对于有两个以上的自变量的情形,就难以在纸面上画出图像了。例如,只能像右图那样画出式(3)的图像。

实际的神经网络需要处理更多变量的二次函数。不过,记住这里考察的二次函数的图像后,在理解多变量的情形时应该不难。

注:式(3)所示的图像并不仅限于上图所示的抛物面。

问题2试作出二次函数的图像。

解图像如下图所示

单位阶跃函数

神经网络的原型模型是用单位阶跃函数作为激活函数的(1-2节),它的图像如下所示。

我们用式子来表示单位阶跃函数。

从这个式子我们可以知道,单位阶跃函数在原点处不连续,也就是在原点不可导。由于这个不可导的性质,单位阶跃函数不能成为主要的激活函数。

问题3在单位阶跃函数u(x)中,求下面的值。

u(-1)   ②u(1)     ③u(0)

解答案依次为0、1、1。

指数函数与Sigmoid函数

具有以下形状的函数称为指数函数。

y=axa为正的常数,a≠1)

常数a称为指数函数的底数。纳皮尔数e是一个特别重要的底数,其近似值如下。

e=2.71828...

这个指数函数包含在以下的Sigmoid函数σ(x)的分母中。Sigmoid函数是神经网络中具有代表性的激活函数(1-3节)。

注:exp是exponential function(指数函数)的简略记法,exp(x)表示指数函数ex。

这个函数的图像如右图所示。可以看出,这个函数是光滑的,也就是处处可导。函数的取值在0和1之间,因此函数值可以用概率来解释。

Sigmoid函数的图像

问题4在Sigmoid函数σ(x)中,求以下函数值的近似值。

σ(-1)            ②σ(0)        ③σ(1)

解取e=2.7作为近似值,答案依次为0.27、0.5、0.73。

正态分布的概率密度函数

用计算机实际确定神经网络时,必须设定权重和偏置的初始值。求初始值时,正态分布(normaldistribution)是一个有用的工具。使用服从这个分布的随机数,容易取得好的结果。

正态分布是服从以下概率密度函数f(x)的概率分布。

其中常数µ称为期望值(平均值),σ称为标准差。它的图像如下图所示,由于形状像教堂的钟,所以称为钟形曲线。

问题5试作出期望值µ为0、标准差σ为1的正态分布的概率密度函数的图像。

解如下图所示,这个正态分布称为标准正态分布。

µ=0,σ=1的正态分布概率密度函数的图像。

按照正态分布产生的随机数称为正态分布随机数。在神经网络的计算中,经常用到正态分布随机数作为初始值。

2-2有助于理解神经网络的数列和递推关系式

熟悉了数列和递推关系式之后,就很容易理解误差反向传播法(第4章、第5章)的内容了。因此,下面我们通过简单的例子来回顾一下。

熟悉递推关系式,对于用计算机进行实际计算有很大的帮助。这是因为计算机不擅长导数计算,但擅长处理递推关系式。

数列的含义

数列是数的序列。以下是被称为偶数列的数列。

例12,4,6,8,10,…

数列中的每一个数称为项。排在第一位的项称为首项,排在第二位的项称为第2项,排在第3位的项称为第3项,以此类推,排在第n位的项称为第n项。在上面的例1中,首项为2,第2项为4。

在神经网络的世界中出现的数列是有限项的数列。这样的数列称为有穷数列。在有穷数列中,数列的最后一项称为末项。

例2考察以下有穷数列的例子:

1,3,5,7,9这个数列的首项为1,末项为9,项数为5。

数列的通项公式

数列中排在第n位的数通常用an表示,这里a是数列的名字(数列名a是随意取的,通常用一个拉丁字母或希腊字母来表示)。当想要表示整个数列时,我们使用集合的符号{an}来表示。

将数列的第n项用一个关于n的式子表示出来,这个式子就称为该数列的通项公式。例如,例1的数列的第n项能够用如下关于n的式子写出来,这就是它的通项公式。

问题1试求以下数列{bn}的通项公式。

1,3,5,7,9,11,…

解通项公式

在神经网络中,神经单元的加权输入及其输出可以看成数列(1-3节),因为可以像“第几层的第几个神经单元的数值是多少”这样按顺序来确定值。因此,我们用类似数列的符号来表示值,如下例所示。

例3表示第l层的第j个神经单元的输出值。

数列与递推关系式

通项公式就是表示数列的项的式子。除此之外数列还存在另一种重要的表示法,就是用相邻项的关系式来表示,这种表示法称为数列的递归定义。

一般地,如果已知首项a1以及相邻两项anan+1的关系式,就可以确定这个数列,这个关系式称为递推关系式。

例4已知首项a1=1以及关系式an+1=an+2,可以确定以下数列,这个关系式就是数列的递推关系式。

a1=1,a2=a1+1=a1+2=1+2=3,a3=a2+1=a2+2=3+2=5,a4=a3+1=a3+2=5+2=7

递推关系式可以形象地表示为多米诺骨牌。数列由首项以及前后项的关系(也就是递推关系式)确定。此外,图中的数列表示问题1的数列。

例5已知首项C1=3以及递推关系式Cn+1=2Cn,求这个数列{Cn}的前4项。

这样,这个数列就确定了。

数列由首项以及递推关系式cn+1=2cn确定

问题2请递归地定义以下数列{an}。

2,4,6,8,10,…(这是例1的数列)

联立递推关系式

我们来看看下面的例子。

例6求由以下两个递推关系式定义的数列的前3项,其中a1=b1=1。

可以像下面这样依次计算数列的值anbn

像这样,将多个数列的递推关系式联合起来组成一组,称为联立递推关系式。在神经网络的世界中,所有神经单元的输入和输出在数学上都可以认为是用联立递推式联系起来的。例如,我们来看看1-4节的例题中考察过的神经网络的一部分,如下图所示。

我们在第1章考察过的神经网络示例的一部分。此外,有关变量名的内容将在3-1节详述。在箭头前端标记的是权重,神经单元的圆圈中标记的是神经单元的输出变量。于是,如果以a(z)为激活函数,b1(3)、b2(3)为第3层各个神经单元的偏置,根据1-3节,以下关系式成立。

根据这些关系式,第3层的输出a1(3)和a2(3)由第2层的输出a1(2)、a2(2)、a3(2)决定。也就是说,第2层的输出与第3层的输出由联立递推关系式联系起来。第4章和第5章将要考察的误差反向传播法就是将这种递推关系式的观点应用在神经网络中。

2-3神经网络中经常用到的∑符号

Σ是一个需要下功夫来熟悉的符号。如果不理解Σ,在阅读神经网络相关的文献时就比较麻烦。这是因为将加权输入用Σ符号来表示会简洁得多。下面我们就来复习一下这个Σ符号。

注:本书不使用∑符号来进行讲解,因为∑符号使人难以看到数学式的本质。因此,本书中的写法会变得冗长,不便之处还请读者见谅。

∑符号的含义

Σ符号可以简洁地表示数列的总和。除了表示总和以外,并没有别的含义,然而这样过于简洁的表示经常使神经网络的初学者感到苦恼。

注:∑为希腊字母,读作Sigma,对应拉丁字母S,即Sum(总和)的首字母。

对于数列{an},Σ符号的定义式如下所示。

以上用Σ符号表示的和之中,字母k并不具有实质的含义。实际上,在上式的右边没有出现字母kk在这里仅用于表明关于它求和。因此,这个字母并非必须是k,在数学上通常用ijklmn

∑符号的性质

Σ符号具有线性性质。这是与微积分共通的性质,可以在式子变形中使用。

注:用语言来表述的话,就是“和的∑为∑的和”“常数倍的∑为∑的常数倍”。这与导数公

式“和的导数为导数的和”“常数倍的导数为导数的常数倍” 是一致的(2-6 节)。

证明根据Σ符号的定义,有

下面我们通过例子来验证式(Ⅱ)。

2-4有助于理解神经网络的向量基础

向量的定义为具有大小和方向的量。这里我们主要关注神经网络中用到的内容,弄清向量的性质。

有向线段与向量

有两个点AB,我们考虑从A指向B的线段,这条具有方向的线段AB叫作有向线段。我们称A为起点,B为终点。

有向线段AB具有以下属性:起点A的位置、指向B的方向,以及AB的长度,也就是大小。在这3个属性中,把方向与大小抽象出来,这样的量叫作向量,通常用箭头表示,总结如下:

向量是具有方向与大小的量,用箭头表示。

有向线段AB所代表的向量用AB表示,也可以用带箭头的单个字母

a或者不带箭头的黑斜体字母a表示。本书主要使用最后一种表示方法。

表示向量的几种方法

向量的坐标表示

把向量的箭头放在坐标平面上,就可以用坐标的形式表示向量。把箭头的起点放在原点,用箭头终点的坐标表示向量,这叫作向量的坐标表示。用坐标表示的向量a如下所示(平面的情况)。

例1a=(3,2)表示的向量。

例2b=(-2,-1)表示的向量。

例3在三维空间的情况下也是同样的例如,a=(1,2,2)表示右图所示的向量。

向量的大小

从直观上来讲,表示向量的箭头的长度称为这个向量的大小。向量a的大小用|a|表示。

注:符号||是由数的绝对值符号一般化而来的。实际上,数可以看成一维向量。

例4根据右图,如下求得a=(3,4)的大小|a|。

例5在三维空间的情况下也是同样的例如,如下求得右图所示的向量a=(1,2,2)的大小|a|。

注:例4、例5都使用了勾股定理。

向量的内积

我们在考虑具有方向的向量的乘积时,包含了“方向与方向的乘积”这样不明确的概念。因此,我们需要一个新的定义——内积。两个向量ab的内积a·b的定义如下所示。

注:当ab有一个为0或两者都为0时,内积定义为0。

例6考虑边长为1的正方形ABCDAB=aAD=bAC=c,于是有

|a|=|b|=1,|c|=2

此外,aa的夹角为0°,ab的夹角为90°,ac的夹角为45°,因此有

问题2在上述例6中,求bc

在三维空间的情况下也是同样的。

例7在边长为3的立方体ABCD-EFGH中,有

柯西-施瓦茨不等式

根据内积的定义式(2),我们可以推导出下式,该式在应用上十分重要。

证明根据余弦函数的性质,对任意的θ,有-1≤cosθ≤1,两边同时乘以|a||b|,有

-|a||b|≤|a||b|cosθ≤|a||b|

利用定义式(2),我们可以得到式(3)。

让我们通过图形来考察式(3)。两个向量ab的大小固定时,有下图(1)、(2)、(3)的3种关系。

根据柯西-施瓦茨不等式(3),可以得出以下事实。

①当两个向量方向相反时,内积取得最小值。

②当两个向量不平行时,内积取平行时的中间值。

③当两个向量方向相同时,内积取得最大值。

性质①就是后述的梯度下降法(2-10节以及第4章、第5章)的基本原理。

另外,可以认为内积表示两个向量在多大程度上指向相同方向。如果将方向相似判定为“相似”,则两个向量相似时内积变大。后面我们考察卷积神经网络时,这个观点就变得十分重要(附录C)。

通过内积可以知道两个向量的相对的相似度。

内积的坐标表示

下面我们使用坐标表示的方式来表示定义式(2)。在平面的情况下,下式成立。

例8当a=(2,3),b=(5,1)时,a.b=2.5+3.1=13,a.a=2.2+3.3=13,b.b=5.5+1.1=26

在三维空间的情况下,内积的坐标表示如下所示,只是在平面情况下的式(4)中添加了z分量。

注:这里我们省略了式(4)、(5)的证明。此外,也有很多文献使用式(4)、(5)作为内积的定义。

例9当a=(2,3,2),b=(5,1,-1)时,a.b=2.5+3.1+2.(-1)=11,a.a=2.2+3.3+2.2=17

向量的一般化

到目前为止,我们考察了平面(也就是二维空间)以及三维空间中的向量。向量的方便之处在于,二维以及三维空间中的性质可以照搬到任意维空间中。神经网络虽然要处理数万维的空间,但是二维以及三维空间的向量性质可以直接利用。出于该原因,向量被充分应用在后述的梯度下降法中(2-10节以及第4章、第5章)。

为了为后面做好准备,我们将目前考察过的二维以及三维空间中的向量公式推广到任意的n维空间。

·向量的坐标表示:a=(a1,a2,…,an)

·内积的坐标表示:对于两个向量a=(a1,a2,…,an),b=(b1,b2,…,bn),其内积ab如下式所示。

a·b=a1b1+a2b2+…+anbn

·柯西-施瓦茨不等式:-|a||b|≤a·b≤|a||b|

例10神经单元有多个输入x1,x2,…,xn时,将它们整理为如下的加权输入。

其中,w1,w2,…,wn为权重,b为偏置。

使用w=(w1,w2,…,wn),x=(x1,x2,…,xn)这两个向量,我们可以将加权输入表示为内积形式,如下所示。

z=w·x+b

从例10可以看出,在神经网络的世界中,向量的观点是十分有益的。

2-5有助于理解神经网络的矩阵基础

神经网络的文献中会用到矩阵(matrix)。矩阵可以使数学式的表示变简洁。下面我们来梳理一下阅读文献时所需要的矩阵知识。

注:本书从第3章以后的讲解不需要矩阵的知识作为前提。

●什么是矩阵

矩阵是数的阵列,如下所示。

横排称为行,竖排称为列。在上例中,矩阵由3行3列构成,称为3行3列的矩阵。

特别地,如上例所示,行数与列数相同的矩阵称为方阵。此外,如下所示的矩阵XY分别称为列向量、行向量,也可以简单地称为向量。

我们将矩阵A推广到更一般的情形,如下所示。

这是mn列的矩阵。位于第i行第j列的值(称为元素)用aij表示。

有一种有名的矩阵称为单位矩阵,它是对角线上的元素aii为1、其他元素为0的方阵,通常用E表示。例如,2行2列、3行3列的单位矩阵E(称为2阶单位矩阵、3阶单位矩阵)分别如下表示。

注:E为德语中表示1的单词Ein的首字母。

●矩阵相等

两个矩阵AB相等的含义是它们对应的元素相等,记为A=B

●矩阵的和、差、常数倍

两个矩阵AB的和A+B、差A-B定义为相同位置的元素的和、差所产生的矩阵。此外,矩阵的常数倍定义为各个元素的常数倍所产生的矩阵。我们通过以下例子来理解。

●矩阵的乘积

矩阵的乘积在神经网络的应用中特别重要。对于两个矩阵AB,将A的第i行看作行向量,B的第j列看作列向量,将它们的内积作为第i行第j列元素,由此而产生的矩阵就是矩阵AB的乘积AB

请通过下面的例子弄清矩阵乘积的含义。

从这个例子中可以看出,矩阵的乘法不满足交换律。也就是说,除了例外情况,以下关系式成立。

ABBA

而单位矩阵E与任意矩阵A的乘积都满足以下交换律。

AE=EA=A

单位矩阵是具有与1相同性质的矩阵。

●Hadamard乘积

对于相同形状的矩阵AB,将相同位置的元素相乘,由此产生的矩阵称为矩阵ABHadamard乘积,用AB表示。

●转置矩阵

将矩阵A的第i行第j列的元素与第j行第i列的元素交换,由此产生的矩阵称为矩阵A的转置矩阵(transposed matrix),用tAAt等表示。下面我们使用tA

注:阅读神经网络的文献时需要注意,转置矩阵有各种各样的表示方法。

2-6神经网络的导数基础

之前我们提到过,神经网络会自己进行学习,这在数学上的含义是指,对权重和偏置进行最优化(2-12节),使得输出符合学习数据。而对于最优化而言,求导是不可缺少的一种方法。

注:本章所考察的函数都是充分光滑的函数。

导数的定义

函数y=f(x)的导函数f'(x)的定义如下所示。

注:希腊字母Δ读作delta,对应拉丁字母D。此外,带有'(prime)符号的函数或变量表示导函数。

“lim(Δx的式子)”是指当Δx无限接近0时“(Δx的式子)”接近的值。

Δx→0

例1当f(x)=3x时,

例2当f(x)=x2时,

已知函数f(x),求导函数f'(x),称为对函数f(x)求导。当式(1)的值存在时,称函数可导。

导函数的含义如下图所示。作出函数f(x)的图像,f'(x)表示图像切线的斜率。因此,具有光滑图像的函数是可导的。

导函数的含义。f'(x)表示图像切线的斜率。实际上,如果Q无限接近P(也就是∆x→0),那么直线PQ无限接近切线l

神经网络中用到的函数的导数公式

我们很少使用定义式(1)来求导函数,而是使用导数公式。下面我们就来看一下在神经网络的计算中使用的函数的导数公式(x为变量、c为常数)。

注:这里省略了证明。e为纳皮尔数(2-1节)。

导数符号

在式(1)中,函数y=f(x)的导函数用f'(x)表示,但也存在不同的表示方法,例如可以用如下的分数形式来表示。

这个表示方法是十分方便的,这是因为复杂的函数可以像分数一样计算导数。关于这一点,我们会在后文中说明。

导数的性质

利用下式,可导函数的世界得到了极大的扩展。

注:组合起来也可以简单地表示为{f(x)–g(x)}′=f′(x)–g′(x)。

式(3)称为导数的线性性。用文字来表述可能更容易记忆,如下所示。

和的导数为导数的和,常数倍的导数为导数的常数倍。

导数的线性性是后述的误差反向传播法背后的主角。

分数函数的导数和Sigmoid函数的导数

当函数是分数形式时,求导时可以使用下面的分数函数的求导公式。

注:这里省略了证明。函数f(x)不取0值。

Sigmoid函数σ(x)是神经网络中最有名的激活函数之一,其定义如下所示(2-1节)。

在后述的梯度下降法中,需要对这个函数求导。求导时使用下式会十分方便。

利用该式,即使不进行求导,也可以由σ(x)的函数值得到Sigmoid函数的导函数的值。

上式可以像下面这样变形。

σ(x)提取出来,就得到了式(5)。

最小值的条件

由于导函数f'(x)表示切线斜率,我们可以得到以下原理,该原理在后述的最优化(2-12节)中会用到。

导函数f'(a)表示切线斜率,所以根据下图可以清楚地看出f'(a)=0。

应用时请记住以下事实。

f'(a) = 0 是函数f(x)在x = a处取得最小值的必要条件。

注:已知命题pq,由p可以推出q,则q称为p的必要条件。

从下面的函数y=f(x)的图像可以清楚地看出这一点。

在通过后述的梯度下降法求最小值时,这个性质有时会成为很大的障碍。

解首先我们求出导函数。

然后,我们可以做出以下表格(称为增减表)。

x

-1

0

2

f'(x)

-

0

+

0

-

0

+

f(x)

27

32

0

(极小)                         (极大 )                        (最小)                 

注:增大、减小用↗、↘表示,区间用…表示。

从表中可以看出,f(x)在点x=2处取得最小值0。

如果已知增减表,就可以画出函数图像的大体形状。这里我们使用例题中的增减表,画出函数

的图像,如右图所示。

2-7神经网络的偏导数基础

神经网络的计算往往会涉及成千上万个变量,这是因为构成神经网络的神经单元的权重和偏置都被作为变量处理。下面我们就来考察一下神经网络的计算中所需的多变量函数的导数。

注:本节所考察的函数是充分光滑的函数。

多变量函数

如前所述(2 - 1 节),在函数 y = f (x) 中,x 称为自变量,y 称为因变量。上一节我们讲解求导方法时考虑了有一个自变量的函数的情形。本节我们来考察有两个以上的自变量的函数。有两个以上的自变量的函数称为多变量函数。

例1

多变量函数难以直观化。例如,即使是像例1那样简单的函数,其图像也是非常复杂的,如下图所示。

描述神经网络的函数的变量有成千上万个,因此难以从直观上理解这些函数。不过,只要理解了单变量的情况,我们就可以将多变量的情况作为其扩展来理解,这样就不会那么困难了。

单变量函数用f(x)表示,仿照单变量函数,多变量函数可以如下表示。

例2f(x,y):有两个自变量xy的函数。

例3f(x1,x2,…,xn):有n个自变量x1,x2,…,xn的函数。

偏导数

求导的方法也同样适用于多变量函数的情况。但是,由于有多个变量,所以必须指明对哪一个变量进行求导。在这个意义上,关于某个特定变量的导数就称为偏导数(partial derivative)。

例如,让我们来考虑有两个变量xy的函数z=f(x,y)。只看变量x,将y看作常数来求导,以此求得的导数称为“关于x的偏导数”,用下面的符号来表示。

关于y的偏导数也是同样的。

下面,我们通过例4和问题1、问题2来看一下神经网络中用到的偏导数的代表性例子。

多变量函数的最小值条件

光滑的单变量函数y=f(x)在点x处取得最小值的必要条件是导函数在该点取值0(2-6节),这个事实对于多变量函数同样适用。例如对于有两个变量的函数,可以如下表示。

上述(1)很容易扩展到一般的具有n个变量的情形。

此外,从下图可以清楚地看出上述(1)是成立的。因为从x方向以及y方向来看,函数z=f(x,y)取得最小值的点就像葡萄酒杯的底部。

就像我们之前所确认的那样(2-6节),上述(1)所示的条件是必要条件。即使满足上述(1),也不能保证函数f(x,y)在该点处取得最小值。

例5求函数z=x2+y2取得最小值时xy的值。首先,我们来求关于xy的偏导数。

根据上述(1),函数取得最小值的必要条件是x=0,y=0。此时函数值z为0。由于z=x2+y2≥0,所以我们知道这个函数值0就是最小值。通过前面的例1的函数图像,我们也可以确认这个事实。

2-8误差反向传播法必需的链式法则

下面我们来考察有助于复杂函数求导的链式法则。这个法则对于理解后述的误差反向传播法很有必要。

注:本节考察的函数是充分光滑的函数。

神经网络和复合函数

已知函数y=f(u),当u表示为u=g(x)时,y作为x的函数可以表示为形如y=f(g(x))的嵌套结构(ux表示多变量)。这时,嵌套结构的函数f(g(x))称为f(u)和g(x)的复合函数。

例1函数z=(2-y)2是函数u=2-y和函数z=u2的复合函数。

例2对于多个输入x1,x2,…,xn,将a(x)作为激活函数,求神经单元的输出y的过程如下所示(1-3节)。

w1,w2,…,wn为各输入对应的权重,b为神经单元的偏置。这个输出函数是如下的x1,x2,…,xn的一次函数f和激活函数a的复合函数。

单变量函数的链式法则

已知单变量函数y=f(u),当u表示为单变量函数u=g(x)时,复合函数f(g(x))的导函数可以如下简单地求出来。

这个公式称为单变量函数的复合函数求导公式,也称为链式法则。本书使用“链式法则”这个名称。

观察式(1)的右边,如果将dx、dy、du都看作一个单独的字母,那么式(1)的左边可以看作将右边进行简单的约分的结果,这个看法总是成立的。通过将导数用dx、dy等表示,我们可以这样记忆链式法则:“复合函数的导数可以像分数一样使用约分。”

注:这个约分的法则不适用于dx、dy的平方等情形。

例3当yu的函数,uv的函数,vx的函数时,

多变量函数的链式法则

在多变量函数的情况下,链式法则的思想也同样适用。只要像处理分数一样对导数的式子进行变形即可。然而事情并没有这么简单,因为必须对相关的全部变量应用链式法则。

我们来考察两个变量的情形。

变量zuv的函数,如果uv分别为xy的函数,则zxy的函数,此时下式(多变量函数的链式法则)成立。

变量zuv的函数,uv分别为xy的函数,z关于x求导时,先对uv求导,然后与z的相应导数相乘,最后将乘积加起来。

例4与上面式(2)一样,下式也成立。

上式在三个以上的变量的情况下也同样成立。

2-9梯度下降法的基础多变量函数的近似公式

梯度下降法是确定神经网络的一种代表性的方法。在应用梯度下降法时,需要用到多变量函数的近似公式。

注:本节所考察的函数是充分光滑的函数。

单变量函数的近似公式

首先我们来考察单变量函数y=f(x)。如果x作微小的变化,那么函数值y将会怎样变化呢?答案就在导函数的定义式中(2-6节)。

在这个定义式中,∆x为“无限小的值”,不过若将它替换为“微小的值”,也不会造成很大的误差。因而,下式近似成立。

将上式变形,可以得到以下单变量函数的近似公式。

这就是例1的解答。

下面的图像是将y=exy=1+x画在一张图上。在x=0附近两个函数的图像重叠在一起,由此可以确认例1的解答是正确的。

多变量函数的近似公式

下面我们将单变量函数的近似公式(1)扩展到两个变量的函数。如果xy作微小的变化,那么函数z=f(x,y)的值将会怎样变化呢?答案是以下的近似公式。ΔxΔy为微小的数。

上式表示当xy依次变化ΔxΔy时函数z=f(x,y)的变化,于是式(2)可以像下面这样简洁地表示。

通过这样的表示方式,就很容易将近似公式(2)进行推广。例如,变量z为三个变量wxy的函数时,近似公式如下所示。

近似公式的向量表示

三个变量的函数的近似公式(4)可以表示为如下两个向量的内积▽zx的形式。

注:▽通常读作nabla(2-10节)。

我们可以很容易地想象,对于一般的n变量函数,近似公式也可以像这样表示为内积的形式。这个事实与下一节要考察的梯度下降法的原理有关。

2-10梯度下降法的含义与公式

应用数学最重要的任务之一就是寻找函数取最小值的点。本节我们来考察一下著名的寻找最小值的点的方法——梯度下降法。在第4章和第5章中我们将会看到,梯度下降法是神经网络的数学武器。

本节主要通过两个变量的函数来展开讨论。在神经网络的计算中,往往需要处理成千上万个变量,但其数学原理和两个变量的情形是相同的。

注:同样,本节考察的函数是充分光滑的函数。

梯度下降法的思路

已知函数z=f(x,y),怎样求使函数取得最小值的xy呢?最有名的方法就是利用“使函数z=f(x,y)取得最小值的xy满足以下关系”这个事实(2-7节)。

这是因为,在函数取最小值的点处,就像葡萄酒杯的底部那样,与函数相切的平面变得水平。

然而,在实际问题中,联立方程式(1)通常不容易求解,那么该如何解决呢?梯度下降法是一种具有代表性的替代方法。该方法不直接求解式(1)的方程,而是通过慢慢地移动图像上的点进行摸索,从而找出函数的最小值。

我们先来看看梯度下降法的思路。这里我们将图像看作斜坡,在斜坡上的点P处放一个乒乓球,然后轻轻地松开手,球会沿着最陡的坡面开始滚动,待球稍微前进一点后,把球止住,然后从止住的位置再次松手,乒乓球会从这个点再次沿着最陡的坡面开始滚动。

这个操作反复进行若干次后,乒乓球沿着最短的路径到达了图像的底部,也就是函数的最小值点。梯度下降法就模拟了这个球的移动过程。

在数值分析领域,梯度下降法也称为最速下降法。这个名称表示沿着图像上的最短路径下降。

近似公式和内积的关系

让我们依照前面考察过的思路来将梯度下降法正式化。

函数z=f(x,y)中,当x改变Δxy改变Δy时,我们来考察函数f(x,y)的值的变化Δz

Δz=f(x+Δxy+Δy)-f(x,y)根据近似公式(2-9节),以下关系式成立。

我们在上一节也提到过,式(2)的右边可以表示为如下两个向量的内积(2-4节)形式。

请大家注意这个内积的关系,这就是梯度下降法的出发点。

式(2)左边的∆z可以用式(3)的两个向量的内积形式来表示。

向量内积的回顾

我们来考察两个固定大小的非零向量ab。当b的方向与a相反时,内积a·b取最小值(2-4节)。

换句话说,当向量b满足以下条件式时,可以使得内积a·b取最小值。

b=-kak为正的常数)(4)

内积的这个性质(4)就是梯度下降法的数学基础。

二变量函数的梯度下降法的基本式

x改变∆xy改变∆y时,函数f(x,y)的变化∆z为式(2),可以表示为式(3)的两个向量的内积。根据式(4),当两个向量方向相反时,内积取最小值。也就是说,当式(3)的两个向量的方向恰好相反时,式(2)的∆z达到最小(即减小得最快)。

(x,y)向点(x+∆x,y+∆y)移动时,当满足以下关系式时,函数z=f(x,y)减小得最快。这个关系式就是二变量函数的梯度下降法的基本式。

注:希腊字母η读作ita,对应拉丁字母i。这里也可以像式(4)那样使用字母k,不过大多数文献中采用η

利用关系式(5),如果

从点(x,y)向点(x+∆x,y+∆y)移动          (6)

就可以从图像上点(x,y)的位置最快速地下坡。

式(5)右边的向量称为函数f(x,y)在点(x,y)处的梯度(gradient)。这个名称来自于它给出了最陡的坡度方向。

梯度下降法及其用法

为了弄清梯度下降法的思路,前面我们考察了乒乓球的移动方式。由于在不同的位置陡坡的方向也各不相同,通过反复进行“一边慢慢地移动位置一边寻找陡坡”的操作,最终可以到达函数图像的底部,也就是函数的最小值点。

下山的情形也是一样的。最陡的下坡方向在每个位置各不相同。因此,要想通过最短路径下山,就必须一边慢慢地下坡一边在每个位置寻找最陡的坡度。

在函数的情况下也完全一样。要寻找函数的最小值,可以利用式(5)找出减小得最快的方向,沿着这个方向依照上述(6)稍微移动。在移动后到达的点处,再次利用式(5)算出方向,再依照上述(6)稍微移动。通过反复进行这样的计算,就可以找到最小值点。这种寻找函数f(x,y)的最小值点的方法称为二变量函数的梯度下降法。

下一节我们将用Excel来体验梯度下降法,以便更具体地理解上面讲解的内容。

将梯度下降法推广到三个变量以上的情况

二变量函数的梯度下降法的基本式(5)可以很容易地推广到三个变量以上的情形。当函数fn个自变量x1,x2,…,xn构成时,梯度下降法的基本式(5)可以像下面这样进行推广。

这里,以下向量称为函数f在点(x1,x2,…,xn)处的梯度。

与二变量函数的情况一样,利用这个关系式(7),如果

从点(x1,x2,…,xn)向点(x1+Δx1,x2+Δx2,…,xn+Δxn)移动             (8)

就能够沿着函数减小得最快的方向移动。因此,反复依照上述(8)来移动,就能够在n维空间中算出坡度最陡的方向,从而找到最小值点。这就是n变量情况下的梯度下降法。

此外,由于式(7)、(8)是n维的,难以在纸上画出其图像。大家可以利用二变量情况下的式(5)、(6)来直观地理解。

哈密顿算子▽

在实际的神经网络中,主要处理由成千上万个变量构成的函数的最小值。在这种情况下,像式(7)那样的表示往往就显得十分冗长。因此我们来考虑更简洁的表示方法。

在数学的世界中,有一个被称为向量分析的领域,其中有一个经常用到的符号▽。▽称为哈密顿算子,其定义如下所示。

利用这个符号,式(7)可以如下表示。

例1对于二变量函数f(x,y),梯度下降法的基本式(5)如下所示。

xy)=-ηf(x,y)

例2对于三变量函数f(x,y,z),梯度下降法的基本式(7)如下所示。

xyz)=-ηf(x,y,z)

其中,左边的向量(Δx1,Δx2,…,Δxn)称为位移向量,记为ΔxΔx=(Δx1,Δx2,…,Δxn)利用这个位移向量,梯度下降法的基本式(7)可以更简洁地表示。

η的含义以及梯度下降法的要点

到目前为止,η只是简单地表示正的微小常数。而在实际使用计算机进行计算时,如何恰当地确定这个η是一个大问题。

从式(5)的推导过程可知,η可以看作人移动时的“步长”,根据η的值,可以确定下一步移动到哪个点。如果步长较大,那么可能会到达最小值点,也可能会直接跨过了最小值点(左图)。而如果步长较小,则可能会滞留在极小值点(右图)。

在神经网络的世界中,η称为学习率。遗憾的是,它的确定方法没有明确的标准,只能通过反复试验来寻找恰当的值。

2-11Excel体验梯度下降法

梯度下降法是神经网络计算的基础,下面我们就通过Excel来弄清它的含义。在观察逻辑过程时,Excel是一个优秀的工具,通过工作表我们可以直观地看出梯度下降法是什么样的。例如,我们用Excel来求解以下问题。

例题对于函数z=x2+y2,请用梯度下降法求出使函数取得最小值的xy值。

注:我们在2-7节的例5中考察过,正确答案为(x,y)=(0,0)。另外,2-节中画了这个函数的图像,大家可以参考一下。

解首先求出梯度。

接下来,我们逐步进行计算。

①初始设定

随便给出初始位置(xi,yi)(i=0)与学习率η

②计算位移向量

对于当前位置(xi,yi),算出梯度式(1),然后根据梯度下降法的基本式(2-10节式(5)),求位移向量Δx=(△xi,Δyi)。根据式(1),可得

③更新位置

根据梯度下降法,由下式求出从当前位置(xi,yi)移动到的点(xi+1,yi+1)。

④反复执行②~③的操作

下图是反复执行②~③的操作30次后得出的坐标(x30,y30)的值。这与2-7节的例5的正解(x,y)=(0,0)一致。

2-12最优化问题和回归分析

在为了分析数据而建立数学模型时,通常模型是由参数确定的。在数学世界中,最优化问题就是如何确定这些参数。

从数学上来说,确定神经网络的参数是一个最优化问题,具体就是对神经网络的参数(即权重和偏置)进行拟合,使得神经网络的输出与实际数据相吻合。

为了理解最优化问题,最浅显的例子就是回归分析。下面我们就利用简单的回归分析问题来考察最优化问题的结构。

什么是回归分析

由多个变量组成的数据中,着眼于其中一个特定的变量,用其余的变量来解释这个特定的变量,这样的方法称为回归分析。回归分析的种类有很多。为了理解它的思想,我们来考察一下最简单的一元线性回归分析。

一元线性回归分析是以两个变量组成的数据为考察对象的。下图给出了两个变量xy的数据以及它们的散点图。

一元线性回归分析是用一条直线近似地表示右图所示的散点图上的点列,通过该直线的方程来考察两个变量之间的关系。这条近似地表示点列的直线称为回归直线。

这条回归直线用一次关系式表示如下:

y=px+qpq为常数)    (1)

这个式子称为回归方程。

xy是为了将构成数据的各个值代入而设定的变量,右边的x称为自变量,左边的y称为因变量。常数pq是这个回归分析模型的参数,由给出的数据来决定。

注:p称为回归系数,q称为截距。

通过具体例子来理解回归分析的逻辑

下面让我们通过具体的例子来看看回归方程(1)是如何确定的。

解设所求的回归方程如下所示。

y=px+qpq为常数)(2)

将第k个学生的身高记为xk,体重记为yk,可以求得第k个学生的回归分析预测的值(称为预测值),如下所示。

pxk+q(3)

我们将这些预测值加以汇总,如下表所示。

编号

身高x

体重y

预测值px+q

1

153.3

45.5

153.3p+q

2

164.9

56.0

164.9p+q

3

168.1

55.0

168.1p+q

4

151.5

52.8

151.5p+q

5

157.8

55.6

157.8p+q

6

156.7

50.8

156.7p+q

7

161.1

56.4

161.1p+q

y的实测值和预测值。在考虑数学上的最优化问题时,理解实测值和预测值的差异是十分重要的

如下算出实际的体重yk与预测值的误差ek

这些ek的值既可以为正也可以为负。接下来我们来考虑下面的值Ck,这个值称为平方误差。

注:系数1/2是为了方便进行之后的处理,这个值对结论没有影响。

遍历全体数据,将它们的平方误差加起来,假设得到的值为CT。CT=C1+C2+…+C7

根据之前的表以及式(5),用pq的式子表示误差总和CT,如下所示。

我们的目标是确定常数pq的值。回归分析认为,pq是使误差总和式(6)最小的解。知道这个解的思路后,后面就简单了。我们利用以下的最小值条件即可(2-7节)

我们来实际计算一下式(6)。根据偏导数的链式法则(2-8节),可得

整理后得到下式。

1113.4p+7q=372.1,177312p+1113.4q=59274

解这个联立方程,可得p=0.41,q=-12.06从而求得目标回归方程(2),如下所示。

y=0.41x–12.06

注:这时CT=27.86。

以上就是一元线性回归分析中使用的回归直线的确定方法。这里的重点是最优化问题的求解思路。这里所考察的最优化方法在后面的神经网络的计算中也可以直接使用。

代价函数

在最优化方面,误差总和CT可以称为“误差函数”“损失函数”“代价函数”等。本书采用代价函数(cost function)这个名称。

注:之所以不使用误差函数(error function)、损失函数(lost function)的叫法,是因为它们的首字母容易与神经网络中用到的熵(entropy)、层(layer)的首字母混淆。

此外,除了这里所考察的平方误差的总和CT之外,根据不同的思路,代价函数还存在其他多种形式。利用平方误差的总和CT进行最优化的方法称为最小二乘法。本书中我们只考虑将平方误差的总和CT作为代价函数。

模型参数的个数

我们再来看看之前的例题。模型有2个参数pq,而已知的条件(数据的规模)有7个。也就是说,模型的参数的个数(2个)小于条件的个数(7个)。反过来说,回归方程是根据大量的条件所得到的折中结果。这里所说的“折中”是指,理想中应该取值0的代价函数式(6)只能取最小值。因此,模型与数据的误差CT不为0也无须担心。不过,只要误差接近0,就可以说这是合乎数据的模型。

此外,模型的参数个数大于数据规模时又如何呢?当然,这时参数就不确定了。因此,要确定模型,就必须准备好规模大于参数个数的数据。

相关文章:

第2章 神经网络的数学基础

本章我们将梳理一下神经网络所需的数学基础知识,其中大多数内容没有超出高中所学范围,因此读起来不会吃力。 2-1神经网络所需的函数 本节我们来看一下神经网络世界中频繁出现的函数。虽然它们都是基本的函数,但是对于神经网络是不可缺少的。…...

linux环境安装docker

linux环境下载安装docker 参考网址查询服务器的操作系统下载docker1、卸载已安装的docker2、安装dnf-plugins-core 包3、配置镜像仓库4、安装版本安装最新版本安装指定版本 5、设置开机自启动6、运行测试7、卸载重装清理 Docker 系统中不再使用的数据(容器、缓存&am…...

windows使用bat脚本激活conda环境

本文不生产技术,只做技术的搬运工!!! 前言 最近需要在windows上使用批处理脚本执行一些python任务,但是被自动激活conda环境给卡住了,研究了一下解决方案 解决方案 call your_conda_path\Scripts\activa…...

第一章:MySQL 索引基础

第一章:MySQL 索引基础 1. 索引是什么? ​​定义​​:索引(Index)是数据库中用于快速查找数据的一种数据结构,类似于书籍的目录。​​核心作用​​:通过减少磁盘I/O次数,加速查询速…...

紫光展锐全新奇迹手游引擎,开启游戏“芯”时代

UNISOC Miracle Gaming奇迹手游引擎亮点: • 高帧稳帧:支持《王者荣耀》等主流手游90帧高画质模式,连续丢帧率最高降低85%; • 丝滑操控:游戏冷启动速度提升50%,《和平精英》开镜开枪操作延迟降低80%; • 极速网络&…...

C++ 的未来趋势与挑战:探索新边界

引言 在软件开发的浩瀚宇宙中,C 一直是一颗耀眼的恒星,凭借其卓越的性能和广泛的适用性,在系统编程、游戏开发、嵌入式系统等诸多领域占据着核心地位。随着科技的飞速发展,C 也面临着新的趋势和挑战。本文将深入探讨 C 在 AI 驱动…...

Oracle 开窗函数

Oracle 开窗函数(Window Functions)允许在不合并行的前提下对数据进行复杂分析,常用于排名、累计计算、前后行对比等场景。 一、核心语法结构 函数名() OVER ([PARTITION BY 分区列] [ORDER BY 排序列 [ASC|DESC]] [窗口帧子句 (ROWS | RAN…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】7.3 动态报表生成(Jupyter Notebook/ReportLab)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 PostgreSQL数据分析实战:动态报表生成(Jupyter Notebook/ReportLab)一、动态报表生成概述(一)动态报表的重要性&a…...

Oracle OCP认证考试考点详解083系列11

题记: 本系列主要讲解Oracle OCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。 51. 第51题: 题目 解析及答案: 关于在 Linux 上安装 Oracle 数据库,以下哪三项是正确的?…...

双11美妆数据分析

1. 导入库使用Python进行分析,需要导入相关库: pythonimport pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as sns 1. 读取数据1. 查看数据基本信息 查看前几行:使用 df.head() 查看数据的前5行&#xff…...

github+ Picgo+typora

github Picgotypora 本文将介绍如何使用Picgo在typora中实现上传服务 创建github仓库以及配置token 创建仓库 注意需要Initialize 添加README 配置为public 配置token github点击头像找到setting 选择Developer setting 配置token generate 选第一个第二个都行(我这里选第…...

战术级微波干扰系统:成都鼎轻量化装备如何实现全频段智能压制?

在5G与卫星通信蓬勃发展的今天,成都鼎讯科技推出新一代微波通信干扰设备,以1000-6000MHz全频段覆盖能力,打造单兵可携的"电磁手术刀"。该设备突破传统微波干扰设备"高能耗、大体积"的桎梏,通过军用级模块化设…...

Oracle 数据布局探秘:段与区块的内部机制

前言 在 Oracle 数据库的庞大架构中,数据存储的效率与性能是决定整个系统健康状况的关键因素。Oracle 采用了一套精妙的逻辑存储管理体系来组织和分配数据,其中,“段(Segment)”和“区(Extent)…...

leetcode 142. Linked List Cycle II

题目描述 哈希表解法 这个方法很容易想到,但需要O(N)的空间。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode *detect…...

探索智能体的记忆:类型、策略和应用

AI Agent 中的记忆:类型、策略和应用 记忆实现是使智能体能够保持上下文、从过去的交互中学习并做出明智决策的关键组成部分。与人类记忆非常相似,智能体记忆允许 AI 系统随时间存储、检索和利用信息,从而为用户创造更连贯和个性化的体验。 …...

mysql集成Qwen大模型MCP计算【附实战代码】

mysql集成Qwen大模型MCP计算 题目分析步骤 1:在 MySQL 中构建核素半衰期数据库1.1 数据库设计1.2 安装和设置 MySQL1.3 创建数据库和表步骤 2:构建放射性活度计算函数2.1 依赖库2.2 Python 函数2.3 函数说明步骤 3:修复 MySQL 访问权限步骤 4:代码实践用户输入指导测试用例…...

006 yum和Linux生态

🦄 个人主页: 小米里的大麦-CSDN博客 🎏 所属专栏: Linux_小米里的大麦的博客-CSDN博客 🎁 GitHub主页: 小米里的大麦的 GitHub ⚙️ 操作环境: Visual Studio 2022 文章目录 Linux 软件包管理器 yum什么是软件包?基于 Linux 系统…...

一种扫描雷达超分辨成像检测一体化方法——论文阅读

一种扫描雷达超分辨成像检测一体化方法 1. 专利的研究目标与产业意义1.1 研究目标与实际问题1.2 产业意义2. 专利的创新方法:低秩稀疏约束与联合优化框架(重点解析)2.1 核心思路与模型构建2.2 迭代优化算法2.3 与传统方法的对比优势3. 实验设计与验证3.1 实验参数3.2 实验结…...

三款实用工具推荐:配音软件+Windows暂停更新+音视频下载!

各位打工人请注意!今天李师傅掏出的三件套,都是经过实战检验的效率放大器。先收藏再划走,说不定哪天就能救命! 一.祈风TTS-配音大师 做短视频的朋友肯定深有体会——配个音比写脚本还费劲!要么付费买声音&#xff0c…...

云平台的文件如何备份

不同的云平台有不同的文件备份方式,以下以常见的阿里云、腾讯云为例进行介绍: 阿里云 对象存储 OSS 可以通过 OSS 控制台,选择需要备份的 Bucket(存储桶)和文件,手动发起备份操作,将数据复制到…...

密码学系列 - SR25519与ED25519

SR25519 SR25519 是一种高级的数字签名算法,它基于 Schnorr 签名方案,使用的是 Curve25519 椭圆曲线。这种签名算法在密码学社区中广受欢迎,特别是在区块链和加密货币领域。以下是关于 SR25519 的详细介绍。 SR25519 简介 SR25519 是一种 …...

XMP-Toolkit-SDK 编译与示例程序

一、前言 最近在调研图片的元数据读写方案,需要了解 XMP 空间以及如何在 XMP 空间中读写元数据,本文做一个相关内容的记录。 XMP-Toolkit-SDK 以及 XMP标准简介 XMP-Toolkit-SDK 是 Adobe 提供的一套开源软件开发工具包(SDK)&a…...

基于nnom的多选择器

核心组件 元件类型目的接口STM32F103CB微控制器主处理单元-MPU60506 轴 IMU移动侦测I2C 接口W25Q64 系列闪存信号和配置存储SPI 系列按钮用户输入模式选择和激活GPIO (通用输出)搭载了LED用户反馈系统状态指示GPIO (通用输出)RT6…...

铁塔基站项目用电能表有哪些?

简婷 安科瑞电气股份有限公司 上海嘉定 201801 引言:随着5G基站的迅猛发展,基站的能耗问题也越来越突出,高效可靠的基站配电系统方案,是提高基站能耗使用效率,实现基站节能降耗的重要保证,通过多回路仪表…...

ROS-仿真实验平台

(1)ROS基本架构 机器人操作系统(Robot Operating System,ROS)是一款基于开源协议的、针对 机器人进行开发的、灵活可扩展的的软件平台,整合多种软件功能包和开发工具,提 供机器人操作系统所需的…...

Loly: 1靶场渗透

Loly: 1 来自 <Loly: 1 ~ VulnHub> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182&#xff0c;靶场IP192.168.23.241 3&#xff0c;对靶机进行端口服务探测 n…...

LeetCode第191题_位1的个数

LeetCode 第191题&#xff1a;位1的个数 题目描述 编写一个函数&#xff0c;输入是一个无符号整数&#xff08;以二进制串的形式&#xff09;&#xff0c;返回其二进制表达式中数字位数为 ‘1’ 的个数&#xff08;也被称为汉明重量&#xff09;。 难度 简单 题目链接 点…...

JVM——Java内存模型

Java内存模型 在Java多线程编程中&#xff0c;Java内存模型&#xff08;Java Memory Model, JMM&#xff09;是理解程序执行行为和实现线程安全的关键。下面我们深入探讨Java内存模型的内容。 Java内存模型概述 Java内存模型定义了Java程序中变量的内存操作规则&#xff0c;…...

JVM局部变量表和操作数栈的内存布局

局部变量表和操作数栈 首先看一段Java源码 public class Add_Sample{public int add(int i, int j){int k 100;int result i j k;return result;}public static void main(String[] args){int result new Add_Sample().add(10,20);System.out.println(result);} }使用ja…...

【MongoDB篇】MongoDB的分片操作!

目录 引言第一节&#xff1a;分片核心概念&#xff1a;为什么要分片&#xff1f;它是什么&#xff1f; &#x1f914;&#x1f4a5;&#x1f680;第二节&#xff1a;分片架构的“三大金刚”&#xff1a;核心组件解析 &#x1f9f1;&#x1f9e0;&#x1f6e3;️第三节&#xff…...

AI一键替换商品融入场景,5分钟打造专业级商品图

在电商行业&#xff0c;传统修图工具操作复杂、耗时费力&#xff0c;尤其是将商品自然融入多样化场景的需求&#xff0c;常让卖家头疼不已。如今&#xff0c;一款专为电商设计的AI工具-图生生&#xff0c;其核心功能“AI商品图-更换背景”&#xff0c;颠覆传统流程。只需上传一…...

《数据结构:二叉搜索树(Binary Search Tree)》

文章目录 :red_circle:一、二叉搜索树的概念:red_circle:二、二叉搜索树的性能分析:red_circle:三、二叉搜索树的操作&#xff08;一&#xff09;插入&#xff08;二&#xff09;查找&#xff08;三&#xff09;删除 :red_circle:四、二叉搜索树的实现代码&#xff08;一&#…...

isNotBlank和isNotEmpty有什么区别?

如下是hutool的StrUtil工具包下的源码 结果&#xff1a;如果字符串仅由空白字符组成&#xff08;比如 " "&#xff09;&#xff0c;那么isNotBlank将返回false&#xff0c;而isNotEmpty返回true。 isNotBlank当中的Blank是空白的意思&#xff0c;也就是是否不等于空…...

Kotlin 中实现单例模式的几种常见模式

1 懒汉式&#xff0c;线程安全&#xff08;伴生对象 by lazy&#xff09; 想“懒汉”一样&#xff0c;拖延到首次使用时才进行初始化。 通过 companion object 和 lazy 实现懒加载&#xff0c;首次访问是才进行初始化&#xff0c;lazy 默认使用 LazyThreadSafetyMode.SYNCHR…...

挑战用豆包教我学Java

现在的AI发展的越来越快&#xff0c;在学习方面更是让人吃惊&#xff0c;所以我决定用豆包来教我学Java语言。本人现在大二&#xff0c;此前已经学习过了c&#xff0c;所以有一定的基础&#xff0c;相信我肯定可以成功的&#xff01; 首先我向豆包说明的我的情况&#xff1a; …...

怎么在非 hadoop 用户下启动 hadoop

今天有同学反馈一个问题&#xff0c;比较有代表性。说下 问题描述 在 root 用户下 无法执行如下代码 1.linux执行计划 &#xff1a;crontab 加入 42 17 7 5 * /root/hadoop_op.sh2.hadoop_op.sh内语句&#xff1a; #!/bin/bash su - hadoop cd /opt/module/hadoop-3.3.0/sb…...

如何激活python的虚拟环境

目录 激活虚拟环境步骤&#xff1a; 注意事项&#xff1a; 为什么写这篇文章&#xff1a; 我在检查依赖版本的时候发现在terminal一直显示找不到该依赖 但是在interpreter里面能看到所有我以及下载的依赖和版本&#xff1b;然后稍微看了下发现是自己忘记激活虚拟环境了&#…...

Spring Boot 中的事务管理是如何工作的?

全文目录&#xff1a; 开篇语前言一、什么是事务管理&#xff1f;1. 事务的四大特性&#xff08;ACID&#xff09; 二、Spring Boot 中的事务管理1. Spring Boot 中的声明式事务管理1.1 Transactional 注解1.2 使用 Transactional 注解示例&#xff1a; 1.3 Transactional 的默…...

【计算机网络-传输层】传输层协议-UDP

&#x1f4da; 博主的专栏 &#x1f427; Linux | &#x1f5a5;️ C | &#x1f4ca; 数据结构 | &#x1f4a1;C 算法 | &#x1f152; C 语言 | &#x1f310; 计算机网络 上篇文章&#xff1a;HTTP服务器实现 下篇文章&#xff1a;传输层协议-TCP 摘要&#xff…...

【论文学习】空间变化系数模型SVCMsp原理及应用

目录 空间变化系数模型SVCMSVCM模型基本思想两种主要的参数估计方法方法一&#xff1a;贝叶斯方法&#xff08;Bayesian Approaches&#xff09;方法二&#xff1a;频率学派方法&#xff08;Frequentist Approaches&#xff09;总结对比 论文1&#xff1a;提出空间变化系数模型…...

时间序列数据集构建方案Pytorch

时间序列数据集构建方案 时间序列数据集TimeSeriesDataset 时间序列数据集增强EnhancedTimeSeriesDataset 时间序列数据集的构建不同于图像、传统面板数据&#xff0c;其需要满足多实体、动态窗口、时间连续等性质&#xff0c;且容易产生数据泄漏。本文介绍了一种时间序列数据…...

UniAppx 跳转Android 系统通讯录

工作中遇到的问题浅浅记录一下 跳转方法 //跳转系统 通讯录function jumpContacts(tag : number) {const context UTSAndroid.getUniActivity()!;const intent new Intent(Intent.ACTION_PICK);intent.setData(Uri.parse("content://com.android.contacts/data/phones…...

DeepSeek架构解析:从神经动力学视角解构万亿参数模型的认知涌现机制

一、大语言模型的认知拓扑训练范式 1.1 多模态预训练中的流形对齐 DeepSeek采用非对称双塔结构实现跨模态参数共享&#xff0c;其视觉编码器通过卷积核的辛几何分解构建特征流形&#xff0c;语言编码器则在希尔伯特空间执行李群变换。在预训练阶段&#xff08;Pre-training&am…...

如何在大型项目中解决 VsCode 语言服务器崩溃的问题

在大型C/C项目中&#xff0c;VS Code的语言服务器&#xff08;如C/C扩展&#xff09;可能因内存不足或配置不当频繁崩溃。本文结合系统资源分析与实战技巧&#xff0c;提供一套完整的解决方案。 一、问题根源诊断 1.1 内存瓶颈分析 通过top命令查看系统资源使用情况&#xff…...

计算机硬件(南桥):主板芯片组FCH和PCH的区别

在计算机主板设计中&#xff0c;FCH&#xff08;Fusion Controller Hub&#xff09;和PCH&#xff08;Platform Controller Hub&#xff09;分别是AMD和Intel对主板芯片组中“南桥”&#xff08;Southbridge&#xff09;部分的命名。尽管两者功能相似&#xff0c;但受不同厂商架…...

数据中心机电建设

电气系统 供配电系统 设计要求&#xff1a;数据中心通常需要双路市电供电&#xff0c;以提高供电的可靠性。同时&#xff0c;配备柴油发电机组作为备用电源&#xff0c;确保在市电停电时能及时为关键设备供电。根据数据中心的规模和设备功耗&#xff0c;精确计算电力负荷&…...

前端代码规范详细配置

以下是现代前端项目的完整代码规范配置方案&#xff0c;涵盖主流技术栈和自动化工具链配置&#xff1a; 一、基础工程配置 1. 项目结构规范 project/ ├── src/ │ ├── assets/ # 静态资源 │ ├── components/ # 通用组件 │ ├── layouts/ …...

GPT与LLaMA:两大语言模型架构的深度解析与对比

引言 自2017年Transformer架构问世以来,自然语言处理(NLP)领域经历了革命性突破。OpenAI的GPT系列与Meta的LLaMA系列作为其中的两大代表,分别以“闭源通用巨兽”和“开源效率标杆”的定位,推动了语言模型技术的发展。本文将从架构设计、核心技术、训练优化、应用场景等维…...

跨平台C++开发解决方案总结

在跨平台C++开发中,不同平台(Windows/Linux/macOS/移动端/嵌入式)的差异性处理是关键挑战。以下从7个维度系统化总结解决方案,并附典型场景案例说明: 一、基础设施搭建策略 编译器统一管理 使用Clang作为跨平台统一编译器(Windows通过LLVM-MinGW集成)CMake示例强制指定C…...

hadoop中的序列化和反序列化(2)

2. 为什么需要序列化 序列化在分布式系统中非常重要&#xff0c;尤其是在Hadoop这样的大数据处理框架中。以下是序列化的主要用途&#xff1a; 数据存储&#xff1a;将对象持久化到磁盘文件中。 网络传输&#xff1a;将对象通过网络发送到其他节点。 跨平台共享&#xff1a;…...