利用计算机进行复杂问题的数值计算,深度学习之数学基础(数值计算)

本文深入探讨信息论的基础概念,包括熵、联合熵、条件熵和相对熵,阐述它们在量化系统不确定性中的作用。接着介绍了最大熵模型,指出在满足约束条件下熵最大的模型是最优的。数值计算中,下溢和上溢问题以及计算复杂性与NP问题被提及。最优化方法是机器学习的核心,梯度下降法、随机梯度下降法、牛顿法和拟牛顿法等优化算法被详细阐述,展示了如何寻找目标函数的最小值。
摘要由CSDN通过智能技术生成

信息论是应用数学的一个分支,主要研究的是对一个信号能够提供信息的多少进行量化。如果说概率使我们能够做出不确定性的陈述以及在不确定性存在的情况下进行推理,那信息论就是使我们能够量化概率分布中不确定性的总量。

1948年,香农引入信息熵,将其定义为离散随机事件的出现概率。一个系统越是有序,信息熵就越低;反之,一个系统越是混乱,信息熵就越高。所以说,信息熵可以被认为是系统有序化程度的一个度量。

164759009_1_20190629034507457.jpg4-1、熵

如果一个随机变量X的可能取值为

164759009_2_20190629034507800,其概率分布为

164759009_3_20190629034508316,则随机变量X的熵定义为H(X):

164759009_4_20190629034508504

164759009_1_20190629034507457.jpg4-2、联合熵

两个随机变量X和Y的联合分布可以形成联合熵,定义为联合自信息的数学期望,它是二维随机变量XY的不确定性的度量,用H(X,Y)表示:

164759009_5_20190629034508894

164759009_1_20190629034507457.jpg

4-3、条件熵

在随机变量X发生的前提下,随机变量Y发生新带来的熵,定义为Y的条件熵,用H(Y|X)表示:

164759009_6_20190629034509160

条件熵用来衡量在已知随机变量X的条件下,随机变量Y的不确定性。

实际上,熵、联合熵和条件熵之间存在以下关系:

164759009_7_20190629034509379

推导过程如下:

164759009_8_20190629034509613.jpg其中:第二行推到第三行的依据是边缘分布P(x)等于联合分布P(x,y)的和;

第三行推到第四行的依据是把公因子logP(x)乘进去,然后把x,y写在一起;

第四行推到第五行的依据是:因为两个sigma都有P(x,y),故提取公因子P(x,y)放到外边,然后把里边的-(log P(x,y) - log P(x))写成- log (P(x,y) / P(x) ) ;

第五行推到第六行的依据是:P(x,y) = P(x) * P(y|x),故P(x,y) / P(x) = P(y|x)。

164759009_1_20190629034507457.jpg4-4、相对熵

相对熵又称互熵、交叉熵、KL散度、信息增益,是描述两个概率分布P和Q差异的一种方法,记为D(P||Q)。在信息论中,D(P||Q)表示当用概率分布Q来拟合真实分布P时,产生的信息损耗,其中P表示真实分布,Q表示P的拟合分布。

对于一个离散随机变量的两个概率分布P和Q来说,它们的相对熵定义为:

164759009_9_20190629034509988

注意:D(P||Q) ≠ D(Q||P)

164759009_1_20190629034507457.jpg4-5、互信息

两个随机变量X,Y的互信息定义为X,Y的联合分布和各自独立分布乘积的相对熵称为互信息,用I(X,Y)表示。互信息是信息论里一种有用的信息度量方式,它可以看成是一个随机变量中包含的关于另一个随机变量的信息量,或者说是一个随机变量由于已知另一个随机变量而减少的不肯定性。

164759009_10_20190629034510175

互信息、熵和条件熵之间存在以下关系:

164759009_11_20190629034510363

推导过程如下:

164759009_12_20190629034510566.jpg通过上面的计算过程发现有:H(Y|X)

= H(Y) - I(X,Y),又由前面条件熵的定义有:H(Y|X) = H(X,Y) - H(X),于是有I(X,Y)= H(X) + H(Y) - H(X,Y),此结论被多数文献作为互信息的定义。

164759009_1_20190629034507457.jpg4-6、最大熵模型

最大熵原理是概率模型学习的一个准则,它认为:学习概率模型时,在所有可能的概率分布中,熵最大的模型是最好的模型。通常用约束条件来确定模型的集合,所以,最大熵模型原理也可以表述为:在满足约束条件的模型集合中选取熵最大的模型。

前面我们知道,若随机变量X的概率分布是

164759009_13_20190629034510832,则其熵定义如下:

164759009_4_20190629034508504

熵满足下列不等式:

164759009_14_2019062903451166

式中,|X|是X的取值个数,当且仅当X的分布是均匀分布时右边的等号成立。也就是说,当X服从均匀分布时,熵最大。

直观地看,最大熵原理认为:要选择概率模型,首先必须满足已有的事实,即约束条件;在没有更多信息的情况下,那些不确定的部分都是“等可能的”。最大熵原理通过熵的最大化来表示等可能性;“等可能”不易操作,而熵则是一个可优化的指标。

164759009_15_20190629034511222.jpg

五、 数值计算

5-1、上溢和下溢

在数字计算机上实现连续数学的基本困难是:我们需要通过有限数量的位模式来表示无限多的实数,这意味着我们在计算机中表示实数时几乎都会引入一些近似误差。在许多情况下,这仅仅是舍入误差。如果在理论上可行的算法没有被设计为最小化舍入误差的累积,可能会在实践中失效,因此舍入误差是有问题的,特别是在某些操作复合时。

一种特别毁灭性的舍入误差是下溢。当接近零的数被四舍五入为零时发生下溢。许多函数会在其参数为零而不是一个很小的正数时才会表现出质的不同。例如,我们通常要避免被零除。

另一个极具破坏力的数值错误形式是上溢(overflow)。当大量级的数被近似为

164759009_16_20190629034511363

164759009_17_20190629034511566时发生上溢。进一步的运算通常将这些无限值变为非数字。

必须对上溢和下溢进行数值稳定的一个例子是softmax 函数。softmax 函数经常用于预测与multinoulli分布相关联的概率,定义为:

当式中的

164759009_18_20190629034511754都是很小的负数时,

164759009_19_20190629034511925就会发生下溢,这意味着上面函数的分母会变成0,导致结果是未定的;同理,当式中的

164759009_18_20190629034511754是很大的正数时,

164759009_19_20190629034511925就会发生上溢导致结果是未定的。

164759009_1_20190629034507457.jpg5-2、计算复杂性与NP问题1、算法复杂性

现实中大多数问题都是离散的数据集,为了反映统计规律,有时数据量很大,而且多数目标函数都不能简单地求得解析解。这就带来一个问题:算法的复杂性。

算法理论被认为是解决各类现实问题的方法论。衡量算法有两个重要的指标:时间复杂度和空间复杂度,这是对算法执行所需要的两类资源——时间和空间的估算。

一般,衡量问题是否可解的重要指标是:该问题能否在多项式时间内求解,还是只能在指数时间内求解?在各类算法理论中,通常使用多项式时间算法即可解决的问题看作是易解问题,需要指数时间算法解决的问题看作是难解问题。

指数时间算法的计算时间随着问题规模的增长而呈指数化上升,这类问题虽然有解,但并不适用于大规模问题。所以当前算法研究的一个重要任务就是将指数时间算法变换为多项式时间算法。

2、确定性和非确定性

除了问题规模与运算时间的比较,衡量一个算法还需要考虑确定性和非确定性的概念。

这里先介绍一下“自动机”的概念。自动机实际上是指一种基于状态变化进行迭代的算法。在算法领域常把这类算法看作一个机器,比较知名的有图灵机、玻尔兹曼机、支持向量机等。

所谓确定性,是指针对各种自动机模型,根据当时的状态和输入,若自动机的状态转移是唯一确定的,则称确定性;若在某一时刻自动机有多个状态可供选择,并尝试执行每个可选择的状态,则称为非确定性。

换个说法就是:确定性是程序每次运行时产生下一步的结果是唯一的,因此返回的结果也是唯一的;非确定性是程序在每个运行时执行的路径是并行且随机的,所有路径都可能返回结果,也可能只有部分返回结果,也可能不返回结果,但是只要有一个路径返回结果,那么算法就结束。

在求解优化问题时,非确定性算法可能会陷入局部最优。

3、NP问题

有了时间上的衡量标准和状态转移的确定性与非确定性的概念,我们来定义一下问题的计算复杂度。

P类问题就是能够以多项式时间的确定性算法来对问题进行判定或求解,实现它的算法在每个运行状态都是唯一的,最终一定能够确定一个唯一的结果——最优的结果。

NP问题是指可以用多项式时间的非确定性算法来判定或求解,即这类问题求解的算法大多是非确定性的,但时间复杂度有可能是多项式级别的。

但是,NP问题还要一个子类称为NP完全问题,它是NP问题中最难的问题,其中任何一个问题至今都没有找到多项式时间的算法。

机器学习中多数算法都是针对NP问题(包括NP完全问题)的。

164759009_1_20190629034507457.jpg5-3、数值计算

上面已经分析了,大部分实际情况中,计算机其实都只能做一些近似的数值计算,而不可能找到一个完全精确的值,这其实有一门专门的学科来研究这个问题,这门学科就是——数值分析(有时也叫作“计算方法”);运用数值分析解决问题的过程为:实际问题→数学模型→数值计算方法→程序设计→上机计算求出结果。

计算机在做这些数值计算的过程中,经常会涉及到的一个东西就是“迭代运算”,即通过不停的迭代计算,逐渐逼近真实值(当然是要在误差收敛的情况下)。

164759009_15_20190629034511222.jpg六、最优化

本节介绍机器学习中的一种重要理论——最优化方法。

164759009_1_20190629034507457.jpg6-1、最优化理论

无论做什么事,人们总希望以最小的代价取得最大的收益。在解决一些工程问题时,人们常会遇到多种因素交织在一起与决策目标相互影响的情况;这就促使人们创造一种新的数学理论来应对这一挑战,也因此,最早的优化方法——线性规划诞生了。

164759009_1_20190629034507457.jpg

6-2、最优化问题的数学描述

最优化的基本数学模型如下:

164759009_20_20190629034512175.png它有三个基本要素,即:设计变量:x是一个实数域范围内的n维向量,被称为决策变量或问题的解;

目标函数:f(x)为目标函数;

约束条件:

164759009_21_20190629034512894称为等式约束,

164759009_22_20190629034513222为不等式约束,

164759009_23_20190629034513394

164759009_1_20190629034507457.jpg

6-3、凸集与凸集分离定理

1、凸集

实数域R上(或复数C上)的向量空间中,如果集合S中任两点的连线上的点都在S内,则称集合S为凸集,如下图所示:

164759009_24_20190629034513644.jpg

数学定义为:

设集合

164759009_25_2019062903451435,若对于任意两点

164759009_26_20190629034514207,及实数

164759009_27_20190629034514519都有:

164759009_28_20190629034514738

则称集合D为凸集。

2、超平面和半空间

实际上,二维空间的超平面就是一条线(可以使曲线),三维空间的超平面就是一个面(可以是曲面)。其数学表达式如下:

超平面:

164759009_29_2019062903451566

半空间:

164759009_30_20190629034515379

3、凸集分离定理

所谓两个凸集分离,直观地看是指两个凸集合没有交叉和重合的部分,因此可以用一张超平面将两者隔在两边,如下图所示:

164759009_31_20190629034515644.png4、凸函数

凸函数就是一个定义域在某个向量空间的凸子集C上的实值函数。

164759009_32_2019062903451635.jpg

数学定义为:

对于函数f(x),如果其定义域C是凸的,且对于∀x,y∈C,

164759009_33_20190629034516551, 有:

164759009_34_20190629034517175

则f(x)是凸函数。

注:如果一个函数是凸函数,则其局部最优点就是它的全局最优点。这个性质在机器学习算法优化中有很重要的应用,因为机器学习模型最后就是在求某个函数的全局最优点,一旦证明该函数(机器学习里面叫“损失函数”)是凸函数,那相当于我们只用求它的局部最优点了。

164759009_1_20190629034507457.jpg6-4、梯度下降算法

1、引入

前面讲数值计算的时候提到过,计算机在运用迭代法做数值计算(比如求解某个方程组的解)时,只要误差能够收敛,计算机最后经过一定次数的迭代后是可以给出一个跟真实解很接近的结果的。

这里进一步提出一个问题,如果我们得到的目标函数是非线性的情况下,按照哪个方向迭代求解误差的收敛速度会最快呢?

答案就是沿梯度方向。这就引入了我们的梯度下降法。

2、梯度下降法

在多元微分学中,梯度就是函数的导数方向。

梯度法是求解无约束多元函数极值最早的数值方法,很多机器学习的常用算法都是以它作为算法框架,进行改进而导出更为复杂的优化方法。

在求解目标函数

164759009_35_20190629034517582的最小值时,为求得目标函数的一个凸函数,在最优化方法中被表示为:

164759009_36_20190629034518550

根据导数的定义,函数

164759009_35_20190629034517582的导函数就是目标函数在

164759009_37_20190629034518800上的变化率。在多元的情况下,目标函数

164759009_38_20190629034518988在某点的梯度

164759009_39_20190629034519207是一个由各个分量的偏导数构成的向量,负梯度方向是

164759009_38_20190629034518988减小最快的方向。

164759009_40_20190629034519363.png如上图所示,当需要求

164759009_35_20190629034517582的最小值时(机器学习中的

164759009_35_20190629034517582一般就是损失函数,而我们的目标就是希望损失函数最小化),我们就可以先任意选取一个函数的初始点

164759009_41_20190629034519863(三维情况就是

164759009_42_2019062903452051),让其沿着途中红色箭头(负梯度方向)走,依次到

164759009_43_20190629034520269

164759009_44_20190629034520425,...,

164759009_45_20190629034520597(迭代n次)这样可最快达到极小值点。

梯度下降法过程如下:

输入:目标函数

164759009_35_20190629034517582,梯度函数

164759009_46_20190629034520738,计算精度

164759009_47_20190629034520910

输出:

164759009_35_20190629034517582的极小值点

164759009_48_201906290345211131、任取取初始值

164759009_41_20190629034519863,置

164759009_49_20190629034521285

2、计算

164759009_50_20190629034521441

3、计算梯度

164759009_51_20190629034521644,当

164759009_52_20190629034521832时停止迭代,令

164759009_53_2019062903452235

4、否则令

164759009_54_20190629034522254,求

164759009_55_20190629034522410使

164759009_56_20190629034522582

5、置

164759009_57_20190629034522816,计算

164759009_58_2019062903452350,当

164759009_59_20190629034523269

164759009_60_20190629034523457时,停止迭代,令

164759009_61_20190629034523754 ;

6、否则,置

164759009_62_20190629034523941,转3。

164759009_1_20190629034507457.jpg

6-5、随机梯度下降算法

上面可以看到,在梯度下降法的迭代中,除了梯度值本身的影响外,还有每一次取的步长

164759009_55_20190629034522410也很关键:步长值取得越大,收敛速度就会越快,但是带来的可能后果就是容易越过函数的最优点,导致发散;步长取太小,算法的收敛速度又会明显降低。因此我们希望找到一种比较好的方法能够平衡步长。

随机梯度下降法并没有新的算法理论,仅仅是引进了随机样本抽取方式,并提供了一种动态步长取值策略。目的就是又要优化精度,又要满足收敛速度。

也就是说,上面的批量梯度下降法每次迭代时都会计算训练集中所有的数据,而随机梯度下降法每次迭代只是随机取了训练集中的一部分样本数据进行梯度计算,这样做最大的好处是可以避免有时候陷入局部极小值的情况(因为批量梯度下降法每次都使用全部数据,一旦到了某个局部极小值点可能就停止更新了;而随机梯度法由于每次都是随机取部分数据,所以就算局部极小值点,在下一步也还是可以跳出)两者的关系可以这样理解:随机梯度下降方法以损失很小的一部分精确度和增加一定数量的迭代次数为代价,换取了总体的优化效率的提升。增加的迭代次数远远小于样本的数量。

164759009_1_20190629034507457.jpg6-6、牛顿法

1、牛顿法介绍

牛顿法也是求解无约束最优化问题常用的方法,最大的优点是收敛速度快。从本质上去看,牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法就更快。通俗地说,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法

每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以, 可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。

164759009_63_20190629034524129.png或者从几何上说,牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。

2、牛顿法的推导

将目标函数

164759009_35_20190629034517582 在

164759009_64_20190629034524441处进行二阶泰勒展开,可得:

164759009_65_20190629034524629

因为目标函数

164759009_35_20190629034517582有极值的必要条件是在极值点处一阶导数为0,即:

164759009_66_20190629034524988

所以对上面的展开式两边同时求导(注意

164759009_37_20190629034518800才是变量,

164759009_64_20190629034524441是常量

164759009_67_20190629034525222都是常量),并令

164759009_66_20190629034524988可得:

164759009_68_20190629034525691

即:

164759009_69_20190629034526175

于是可以构造如下的迭代公式:

164759009_70_20190629034526472

这样,我们就可以利用该迭代式依次产生的序列

164759009_71_20190629034526660才逐渐逼近

164759009_35_20190629034517582的极小值点了。

牛顿法的迭代示意图如下:

164759009_72_20190629034526894.jpg

上面讨论的是2维情况,高维情况的牛顿迭代公式是:

164759009_73_20190629034527926.png

式中, ▽

164759009_74_20190629034528222

164759009_35_20190629034517582的梯度,即:

164759009_75_20190629034528472.pngH是Hessen矩阵,即:

164759009_76_20190629034528800.png3、牛顿法的过程1、给定初值

164759009_41_20190629034519863和精度阈值

164759009_47_20190629034520910,并令

164759009_49_20190629034521285

2、计算

164759009_64_20190629034524441

164759009_77_20190629034528957

3、若

164759009_78_20190629034529144则停止迭代;否则确定搜索方向:

164759009_79_20190629034529363

4、计算新的迭代点:

164759009_80_20190629034529613

5、令

164759009_62_20190629034523941,转至2。

164759009_1_20190629034507457.jpg6-7、阻尼牛顿法

1、引入

注意到,牛顿法的迭代公式中没有步长因子,是定步长迭代。对于非二次型目标函数,有时候会出现

164759009_81_20190629034529769的情况,这表明,原始牛顿法不能保证函数值稳定的下降。在严重的情况下甚至会造成序列发散而导致计算失败。

为消除这一弊病,人们又提出阻尼牛顿法。阻尼牛顿法每次迭代的方向仍然是

164759009_64_20190629034524441,但每次迭代会沿此方向做一维搜索,寻求最优的步长因子

164759009_55_20190629034522410,即:

164759009_82_201906290345304

2、算法过程1、给定初值

164759009_41_20190629034519863和精度阈值

164759009_47_20190629034520910,并令

164759009_49_20190629034521285

2、计算

164759009_83_20190629034530191(

164759009_35_20190629034517582

164759009_64_20190629034524441处的梯度值)和

164759009_77_20190629034528957

3、若

164759009_78_20190629034529144则停止迭代;否则确定搜索方向:

164759009_79_20190629034529363

4、利用

164759009_79_20190629034529363得到步长

164759009_55_20190629034522410,并令

164759009_84_20190629034530582

5、令

164759009_62_20190629034523941,转至2。

164759009_1_20190629034507457.jpg6-8、拟牛顿法

1、概述

由于牛顿法每一步都要求解目标函数的Hessen矩阵的逆矩阵,计算量比较大(求矩阵的逆运算量比较大),因此提出一种改进方法,即通过正定矩阵近似代替Hessen矩阵的逆矩阵,简化这一计算过程,改进后的方法称为拟牛顿法。

2、拟牛顿法的推导

先将目标函数在

164759009_85_20190629034530863处展开,得到:

164759009_86_2019062903453166

两边同时取梯度,得:

164759009_87_20190629034531285

取上式中的

164759009_88_20190629034531488,得:

164759009_89_20190629034531879

即:

164759009_90_20190629034532175

可得:

164759009_91_20190629034532519

上面这个式子称为“拟牛顿条件”,由它来对Hessen矩阵做约束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值