21/8/18 读书笔记 直线型代码 计算学习理论
21/8/18 读书笔记
Code Complete 编写直线型代码
直线型代码是最简单的控制流,按先后顺序放置语句和语句块。
对于明确先后顺序逻辑的代码,我们应当尽可能地设法组织代码,让子程序能够他们的依赖关系,包括:
- 上上策:设计合适的子程序名,比如将初始化函数命名有
Initialize前缀以表示其在其他子程序前调用。 - 上策:设计合适的子程序参数与传递关系,比如对需要顺序执行的子程序串,让参数在他们之间传递以暗示顺序性。
- 中策:使用断言或错误处理代码,在子程序内部检查顺序依赖关系,所依赖的变量称为内务管理变量。会引入额外的变量和代码,带来复杂度的提升。
- 下策:迫不得已时采用注释说明。我们应当依赖于技术而不是注释来提升代码质量。
对于顺序无关的代码,我们也应当让他们具有一定的组织性,其依据的原则是就近原则,把相关的语句集中在一起,相关性通常由引用了哪些变量来决定。良好的代码中每个相互独立的相关语句块间应只存在嵌套关系而不会出现交叠。
随机抽了一章来读,结果发现就只有两小节 (=´ω`=) ,麻了
机器学习 计算学习理论
计算学习理论分析学习任务的困难本质,从而为学习算法提供理论保证,并根据分析结果指导算法设计。
计算学习理论中定义:
- 误差参数\(\epsilon\):设定学得的模型泛化误差上限
- 概念(concept):一个从样本空间到标记空间的映射,决定了每个样本\(\bold x\)的真实标记\(y\)。
- 目标概念:一个概念,使得每个样本\(\bold x\)都能映射成其真实标记\(y\)。我们探讨概念通常就是探讨目标概念。
- 概念类:所有的目标概念的集合。
- 假设(hypothesis):一个从样本空间到标记空间的映射,表示一个可能的概念,但是并不确定其是否是目标概念。
- 假设空间:所有假设的集合。
- 可分/不可分:对于学习算法\(\zeta\),其对应的假设空间内如果包含一个假设是目标概念,即能够将所有样本按与真实标记一致的方式完全分开,那么认为该问题对于\(\zeta\)来说可分,否则不可分。
由于我们的训练集并不能完全代替整体的分布,因此我们考虑以较大的概率去学得误差满足误差参数设置的上限的模型,这就是概率近似正确学习理论(Probably Approximately Correct, PAC)。PAC辨识(PCA Identify)定义:对应一个学习算法\(\zeta\),给定误差参数\(\epsilon\)和概率参数\(\delta\),那么如果在\(\zeta\)的假设空间\(H\)中存在一个假设\(h\in H\)满足\(P(E(h)\leq\epsilon)\geq1-\delta\),即至少以\((1-\delta)\)的概率学习到目标概念,且误差不超过\(\epsilon\)。此时认为\(\zeta\)能够在假设空间\(H\)里辨识概念类\(C\)。
当存在一个学习算法\(\zeta\),使用至少m个样例的样本时能够从假设空间内辨识概念类,我们称概念类\(C\)是PAC可学习的。m称为学习算法\(\zeta\)的样本复杂度。如果\(\zeta\)的运行时间是多项式时间,那么称概念类\(C\)是高效PAC可学习的。
对于一个学习算法\(\zeta\),其假设空间\(H\)可能是有限的(比如西瓜的属性),也可能是无限的(比如实数区间),同时其可能是可分的,也可能是不可分的:
- 有限可分:可分说明目标概念就在假设空间中,因此我们只要保留和样本集\(D\)一致的假设,抛弃任何不一致的假设,最终一定能找到一个假设在样本集\(D\)上和目标概念完全一致。理论证明,有限可分假设空间下的所有概念类都是PAC可学习的。
- 有限不可分:不可分说明目标概念不在假设空间中,导致任意一个假设在样本集\(D\)上都会出现一定的错误。此时我们致力于寻找一个泛化误差最小的假设并尽可能找到其近似。当我们把近似目标从目标概念改为泛化误差最小的假设时,PAC可学习不再适用,取而代之的是不可知PAC可学习的概念。
- 无限:现实学习任务通常面临着无限的假设空间。对于一个无限的假设空间,我们的处理方法是考虑如何将无限空间的复杂度度量为一个有限的值,常用的方法是VC维和Rademacher复杂度。当我们得到了假设空间的复杂度后,就能够基于新的复杂度度量来计算泛化误差界\(\epsilon\),从而套到PAC可学习的概念下。
增长函数(growth function):假设空间\(H\)对m个样本示例所能赋予标记的最大可能结果数。比如二分类任务下对3个样本示例的组合最多能赋予8个可能结果,有的学习算法的假设空间可能只能给出其中六种,有的则能全部覆盖。同一个学习场景下,增长函数越高说明学习算法的假设空间的描述能力越强,从而反映出假设空间的复杂度。
对分(dichotomy):对于二分类问题,假设空间\(H\)对m个样本示例所能赋予标记的所有可能结果中,每种能够将m个样本分为两类的可能结果称为一个对分。
打散(shattering):如果假设空间\(H\)覆盖了样本集\(D\)的所有对分,那么称\(D\)被假设空间\(H\)打散了。
VC维:定义假设空间\(H\)的复杂度就是能被\(H\)打散的最大样本集的大小。其与具有的数据分布无关。
Rademacher复杂度:考虑了数据的分布情况,引入了噪声的影响,衡量了假设空间(实际是一个函数空间)与随机噪声在集合上的相关性。由于考虑了数据分布的影响,其通常给出的泛化误差界比VC维更紧凑。
无论是VC维还是Rademacher复杂度,给出的复杂度度量都与具体的学习算法无关。
稳定性是针对具体学习算法而言的,其考察了算法在输入变化时,输出是否会发生较大的变化。给定训练集\(D\),从中取出第i个样本得到\(D^{/i}\),如果利用这两个训练集对学习算法\(\zeta\)进行训练,得到的基于损失函数\(\ell\)给出的误差的差值不高于一个设定的值\(\beta\),那么称该学习算法关于损失函数\(\ell\)具有\(\beta\)-均匀稳定性。注意这里的\(\beta\)是人为给定的,其描述了学习算法振荡的范围。我们必须假设\(\beta\sqrt{m}\to0\),才能认为\(\beta\)-均匀稳定的算法具有一定的泛化能力,此时经验误差收敛于泛化误差,否则其振荡范围过大,就失去了泛化能力。对于损失函数\(\ell\),如果学习算法\(\zeta\)输出的假设满足经验损失最小化,那么算法\(\zeta\)(在\(\ell\)下)满足经验风险最小化原则(Empirical Risk Minimization, ERM)。
当学习算法\(\zeta\)(在损失函数\(\ell\)的前提下)满足ERM原则且\(\beta\)-均匀稳定,那么\(\zeta\)对应的假设空间是PAC可学习的。事实上,损失函数\(\ell\)搭建起了从算法的稳定性到假设空间的PAC可学习性的桥梁。

浙公网安备 33010602011771号