计算资源在机器学习的实际应用中至关重要。我们将这两种资源称为样本复杂性和计算复杂性。之前,我们关注于样本复杂性,在本章中,我们将注意力转向计算复杂性。
回顾一下,给定域 𝑍、假设类 H、损失函数 ℓ 和从 𝑍 中采样的训练集(根据未知分布 D 独立同分布采样)。给定参数𝜖 、𝛿,算法应该输出一个假设 h ,学习算法使得以至少 1−𝛿 的概率满足:
LD(h)≤h′∈HminLD(h′)+ϵ 在数据结构与算法中,我们以渐近方式分析算法的运行时间。例如,归并排序算法对n个项目的排序,其计算复杂性为 O(nlog(n)),不过,在机器学习中算法,没有明确的“输入大小 n”的概念,因此不能直接使用大O来表示计算复杂性
可能有人会将输入大小 n 定义为算法的训练集的大小,但那样做意义不大。如果我们给算法一个更大的样本数量,远远超过学习问题的样本复杂性,算法可以简单地忽略额外样本。因此,较大的训练集并不会使学习问题更难,因此,随着训练集大小的增加,学习算法的运行时间不应增加
定义 8.1 (学习算法的计算复杂性) 给定函数 f:(0,1)2→N,学习任务 (Z,H,ℓ) 和学习算法 A, A 在时间 𝑂(𝑓) 内解决了学习任务的定义是:对于在 𝑍 上的概率分布 D ,输入 𝜖,𝛿∈(0,1) , A 可以访问由 D 独立同分布生成的样本时,
A 在执行最多 cf(ϵ,δ) 次操作后终止,常数 𝑐 指代一个抽象的图灵机完成一次操作的时间
A 的输出,记为 hA ,可以在执行最多 cf(ϵ,δ) 次操作后,用于预测新示例的标签
A 的输出是大概正确的;即,以至少1−𝛿的概率,LD(hA)≤minh′∈HLD(h′)+ϵ
考虑一系列学习问题 (Zn,Hn,ℓn)n=1∞ ,A 可用于解决这类问题,给定函数 g:N×(0,1)2→N,A 相对于前述序列的运行时间为 O(g) 的定义是:对于所有 𝑛 ,A 在时间 O(fn) 内解决问题 (Zn,Hn,ℓn),其中 fn:(0,1)2→N 为 fn(ϵ,δ)=g(n,ϵ,δ)
我们说 A 是一个高效算法,即相对于序列 (Zn,Hn,ℓn) ,其运行时间为 O(p(n,1/ϵ,1/δ)) ,其中𝑝是某个多项式
从此定义中可以看出,一个学习问题是否能被有效解决,取决于如何将其分解为一系列特定的学习问题。
例如,考虑学习有限假设类的问题。如前几章所示,如果训练示例的数量为 mH(ϵ,δ)=log(∣H∣/δ)/ϵ2,则保证ERM规则能(𝜖,𝛿)-学习 H。假设模型对测试样本计算预测输出花费常数时间,可以通过对大小为 mH(ϵ,δ) 的训练集对 H 进行穷举搜索(就是遍历 H 的每一个假设 h,在数据集上评估,看哪个假设的损失最小),在时间 O(∣H∣mH(ϵ,δ)) 内实现ERM规则。
对于任何固定的有限 H ,穷举搜索算法在多项式时间内运行。此外,如果我们定义一个问题序列,其中Hn=n,则穷举搜索仍然被认为是高效的。然而,如果我们定义一个问题序列,其中 Hn=2n,则样本复杂性仍然是𝑛的多项式,但穷举搜索算法的计算复杂性随 𝑛 指数增长,因此效率低下
实现ERM规则