阅读笔记(2) 单层网络:回归
该笔记是DataWhale组队学习计划(共度AI新圣经:深度学习基础与概念)的Task02
以下内容为个人理解,可能存在不准确或疏漏之处,请以教材为主。
1. 从泛函视角来看线性回归
还记得线性代数里学过的“基”这个概念吗?一组基向量是一组线性无关的向量,它们通过线性组合可以张成一个向量空间。也就是说,这个空间里的任意一个向量,都可以表示成这组基的线性组合。
函数其实也可以看作是某种“向量”,只不过它们所在的“空间”是无限维的。而我们选择的一组基函数,就是在这个函数空间中选出有限个“方向”,然后试图用这些方向的线性组合去逼近真实的目标函数。(如果你接触过一点泛函分析的话可能会更容易理解这一点。)
我们可以把模型看作是在一个函数空间中寻找某个目标函数。这个目标函数我们不知道长什么样,但我们可以假设它可以用一组已知的**基函数(basis functions)**的线性组合来近似表示。比如常见的线性回归模型形式如下:
y ( x , w ) = w 0 + ∑ j = 1 M − 1 w j ϕ j ( x ) y(x, w) = w_0 + \sum_{j=1}^{M-1} w_j \phi_j(x) y(x,w)=w0+j=1∑M−1wjϕj(x)
其中:
- x x x是输入变量;
- ϕ j ( x ) \phi_j(x) ϕj(x)是第 j j j个基函数;
- w j w_j wj是对应的权重参数;
- M M M是基函数的数量。
换句话说,我们不是直接去猜那个“上帝才知道”的真实函数,而是先选好一组我们觉得靠谱的基函数,然后用这些基函数的加权和去逼近真实函数。剩下的问题就变成了:怎么找到这一组权重 w = ( w 0 , w 1 , . . . , w M − 1 ) \mathbf{w} = (w_0, w_1, ..., w_{M-1}) w=(w0,w1,...,wM−1)?
另外附上常用的基函数(具体的形式可以看书):
- 多项式函数
- Sigmoid函数
- tanh函数
- 傅里叶基
2. 三种方式推导线性回归
在正式开始之前,我们先统一一下符号和模型形式(也参考书中的约定):
我们使用如下形式的线性模型来进行预测:
y ( x , w ) = w T ϕ ( x ) y(\mathbf{x}, \mathbf{w}) = \mathbf{w}^T \phi(\mathbf{x}) y(x,w)=wTϕ(x)
其中:
- x \mathbf{x} x是输入特征向量;
- ϕ \phi ϕ: 基函数, 上面提到过的;
- w \mathbf{w} w是我们要学习的参数向量。
我们用 t \mathbf{t} t来表示真实的目标值(也就是训练数据中的标签)。
2.1 均方误差损失函数
目标:让模型输出尽可能接近真实值
最直观的想法是:我们希望模型的输出值和真实值之间的差距越小越好。这个差距可以用一个度量标准来衡量,比如最常见的——均方误差。
对于单个样本 ( ϕ n , t n ) (\phi_n, t_n) (ϕn,tn),误差为:
E n = 1 2 ( t n − w T ϕ n ) 2 E_n = \frac{1}{2} (t_n - \mathbf{w}^T \phi_n)^2 En=21(tn−wTϕn)2
这里加了 1 2 \frac{1}{2} 21是为了后面求导时方便消掉系数 2。
对所有样本来说,总的误差就是它们的累加:
E ( w ) = 1 2 ∑ n = 1 N ( t n − w T ϕ n ) 2 E(\mathbf{w}) = \frac{1}{2} \sum_{n=1}^{N} (t_n - \mathbf{w}^T \phi_n)^2 E(w)=21n=1∑N(tn−wTϕn)2
我们的目标是找到一组参数 w \mathbf{w} w,使得这个误差最小化。
数学推导:求梯度并令其为零
我们可以将这个损失函数写成矩阵形式,这样更容易处理:
令:
- Φ \Phi Φ是设计矩阵(design matrix),每一行是一个样本的基函数输出 ϕ n T \phi_n^T ϕnT
- t \mathbf{t} t是目标值组成的列向量
则损失函数可以写作:
E ( w ) = 1 2 ∥ t − Φ w ∥ 2 E(\mathbf{w}) = \frac{1}{2} \| \mathbf{t} - \Phi \mathbf{w} \|^2 E(w)=21∥t−Φw∥2
展开后:
E ( w ) = 1 2 ( t − Φ w ) T ( t − Φ w ) E(\mathbf{w}) = \frac{1}{2} (\mathbf{t} - \Phi \mathbf{w})^T (\mathbf{t} - \Phi \mathbf{w}) E(w)=21(t−Φw)T(t−Φw)
对 w \mathbf{w} w求导并令导数为零:
∇ w E ( w ) = − Φ T ( t − Φ w ) = 0 \nabla_\mathbf{w} E(\mathbf{w}) = -\Phi^T (\mathbf{t} - \Phi \mathbf{w}) = 0 ∇wE(w)=−ΦT(t−Φw)=0
整理得:
Φ T Φ w = Φ T t \Phi^T \Phi \mathbf{w} = \Phi^T \mathbf{t} ΦTΦw=ΦTt
若 Φ T Φ \Phi^T \Phi ΦTΦ可逆,则最优解为:
w ∗ = ( Φ T Φ ) − 1 Φ T t \mathbf{w}^* = (\Phi^T \Phi)^{-1} \Phi^T \mathbf{t} w∗=(ΦTΦ)−1ΦTt
整个形式是不是很像最小二乘法的解,
2.2 极大似然估计
接下来我们尝试从概率建模的角度出发,重新理解线性回归。这个视角和前面的均方误差不同,它不是直接定义一个损失函数,而是先对数据生成过程做一个合理的假设,然后通过极大似然法来求解参数。(书上的推导其实就是这个方法, 所以这部分不想写太多,可以看书)
基本假设:目标值由确定性函数 + 高斯噪声组成
我们假设观测到的目标值 t n t_n tn是由真实函数输出加上一个高斯噪声构成的:
t n = y ( x n , w ) + ϵ n t_n = y(\mathbf{x}_n, \mathbf{w}) + \epsilon_n tn=y(xn,w)+ϵn
其中:
- y ( x n , w ) = w T ϕ ( x n ) y(\mathbf{x}_n, \mathbf{w}) = \mathbf{w}^T \phi(\mathbf{x}_n) y(xn,w)=wTϕ(xn)是模型预测值;
- ϵ n ∼ N ( 0 , σ 2 ) \epsilon_n \sim \mathcal{N}(0, \sigma^2) ϵn∼N(0,σ2)是独立同分布的高斯噪声。
根据高斯分布的可加性,我们可以得出:
t n ∼ N ( y ( x n , w ) , σ 2 ) t_n \sim \mathcal{N}\left(y(\mathbf{x}_n, \mathbf{w}),\ \sigma^2\right) tn∼N(y(xn,w), σ2)
也就是说,对于每一个输入 x n \mathbf{x}_n xn,对应的标签 t n t_n tn是一个以模型输出为期望、方差为 σ 2 \sigma^2 σ2的正态分布随机变量。
于是,给定输入 x n \mathbf{x}_n xn和参数 w \mathbf{w} w,观察到某个输出 t n t_n tn的概率密度可以表示为:
p ( t n ∣ x n , w , σ 2 ) = N ( t n ∣ y ( x n , w ) , σ 2 ) p(t_n | \mathbf{x}_n, \mathbf{w}, \sigma^2) = \mathcal{N}(t_n \mid y(\mathbf{x}_n, \mathbf{w}), \sigma^2) p(tn∣xn,w,σ2)=N(tn∣y(xn,w),σ2)
极大似然估计的目标:让观测数据出现的概率最大
现在我们有一组训练样本:
D = { ( x 1 , t 1 ) , ( x 2 , t 2 ) , … , ( x N , t N ) } \mathcal{D} = \{ (\mathbf{x}_1, t_1),\ (\mathbf{x}_2, t_2),\ \dots,\ (\mathbf{x}_N, t_N) \} D={(x1,t1), (x2,t2), …, (xN,tN)}
我们要找一组参数 w \mathbf{w} w,使得这些数据出现的概率尽可能大——这就是极大似然估计的核心思想。
由于各个样本是独立的,联合概率可以写成乘积形式:
p ( t ∣ X , w , σ 2 ) = ∏ n = 1 N N ( t n ∣ w T ϕ ( x n ) , σ 2 ) p(\mathbf{t} | \mathbf{X}, \mathbf{w}, \sigma^2) = \prod_{n=1}^{N} \mathcal{N}(t_n \mid \mathbf{w}^T \phi(\mathbf{x}_n), \sigma^2) p(t∣X,w,σ2)=n=1∏NN(tn∣wTϕ(xn),σ2)
为了方便计算,我们通常取对数,得到对数似然函数(log-likelihood):
ln p ( t ∣ X , w , σ 2 ) = − N 2 ln ( 2 π σ 2 ) − 1 2 σ 2 ∑ n = 1 N ( t n − w T ϕ n ) 2 \ln p(\mathbf{t} | \mathbf{X}, \mathbf{w}, \sigma^2) = -\frac{N}{2} \ln(2\pi\sigma^2) - \frac{1}{2\sigma^2} \sum_{n=1}^{N} (t_n - \mathbf{w}^T \phi_n)^2 lnp(t∣X,w,σ2)=−2Nln(2πσ2)−2σ21n=1∑N(tn−wTϕn)2
注意到只有第二项与 w \mathbf{w} w有关,所以最大化对数似然就等价于最小化下面这个量:
∑ n = 1 N ( t n − w T ϕ n ) 2 \sum_{n=1}^{N} (t_n - \mathbf{w}^T \phi_n)^2 n=1∑N(tn−wTϕn)2
这正是我们在 2.1 节中提到的均方误差损失函数, 剩下的内容就和前面差不多了.
2.3 贝叶斯视角
前面我们从损失函数的角度推出了线性回归,又从概率建模的角度用极大似然估计得到了同样的结果。现在我们来看看第三种方法——贝叶斯方法,它会让我们对模型参数有一个“不确定性”的理解,但最终也会导向几乎一样的解。
想法:不只是找一个最好的参数,而是找一个最可能的参数分布
之前的方法都直接去求一个具体的 w \mathbf{w} w值,比如最小二乘法求闭式解。而贝叶斯方法更“保守”一点,它不是说“哪个 w \mathbf{w} w是对的”,而是问:“给定数据之后,哪个 w \mathbf{w} w最有可能解释这些数据?”
换句话说,我们要计算的是:
在看到数据之后, w \mathbf{w} w的后验概率是多少?
根据贝叶斯定理:
p ( w ∣ 数据 ) ∝ p ( 数据 ∣ w ) ⋅ p ( w ) p(\mathbf{w} | \text{数据}) \propto p(\text{数据} | \mathbf{w}) \cdot p(\mathbf{w}) p(w∣数据)∝p(数据∣w)⋅p(w)
也就是:
- 后验概率 ≈ 似然 × 先验
具体设定
我们先像前面一样做一个假设:
目标值是由模型输出加上高斯噪声构成的:
t n = y ( x n , w ) + ϵ n , ϵ n ∼ N ( 0 , σ 2 ) t_n = y(\mathbf{x}_n, \mathbf{w}) + \epsilon_n,\quad \epsilon_n \sim \mathcal{N}(0, \sigma^2) tn=y(xn,w)+ϵn,ϵn∼N(0,σ2)我们还为参数 w \mathbf{w} w加一个先验分布,通常是零均值高斯分布(相当于加了一个正则项):
p ( w ) = N ( 0 , α − 1 I ) p(\mathbf{w}) = \mathcal{N}(\mathbf{0}, \alpha^{-1} I) p(w)=N(0,α−1I)
这里的 α \alpha α可以理解为对参数大小的一种控制,类似于正则化系数。
推导后验分布的最大值(MAP 估计)
虽然贝叶斯方法通常是要算整个分布,但我们这里的目标还是想找出那个“最可能的 w \mathbf{w} w”。所以我们可以做最大后验估计(MAP),即最大化后验概率:
w MAP = arg max w p ( w ∣ X , t ) \mathbf{w}_{\text{MAP}} = \arg\max_{\mathbf{w}} p(\mathbf{w} | \mathbf{X}, \mathbf{t}) wMAP=argwmaxp(w∣X,t)
代入公式:
log p ( w ∣ X , t ) ∝ − 1 2 σ 2 ∑ n = 1 N ( t n − w T ϕ n ) 2 − α 2 ∥ w ∥ 2 \log p(\mathbf{w} | \mathbf{X}, \mathbf{t}) \propto -\frac{1}{2\sigma^2} \sum_{n=1}^{N} (t_n - \mathbf{w}^T \phi_n)^2 - \frac{\alpha}{2} \|\mathbf{w}\|^2 logp(w∣X,t)∝−2σ21n=1∑N(tn−wTϕn)2−2α∥w∥2
这就是我们在第一节讲到的带 L2 正则化的损失函数!
如果我们忽略常数项,这个目标函数就变成了:
E ( w ) = 1 2 ∥ t − Φ w ∥ 2 + λ 2 ∥ w ∥ 2 E(\mathbf{w}) = \frac{1}{2} \| \mathbf{t} - \Phi \mathbf{w} \|^2 + \frac{\lambda}{2} \|\mathbf{w}\|^2 E(w)=21∥t−Φw∥2+2λ∥w∥2
其中 λ = σ 2 α \lambda = \frac{\sigma^2}{\alpha} λ=ασ2
然后我们对这个函数求导,令导数为零:
∇ w E = − Φ T ( t − Φ w ) + λ w = 0 \nabla_\mathbf{w} E = -\Phi^T (\mathbf{t} - \Phi \mathbf{w}) + \lambda \mathbf{w} = 0 ∇wE=−ΦT(t−Φw)+λw=0
整理得到:
( Φ T Φ + λ I ) w = Φ T t (\Phi^T \Phi + \lambda I) \mathbf{w} = \Phi^T \mathbf{t} (ΦTΦ+λI)w=ΦTt
于是最终的解是:
w = ( Φ T Φ + λ I ) − 1 Φ T t \mathbf{w} = (\Phi^T \Phi + \lambda I)^{-1} \Phi^T \mathbf{t} w=(ΦTΦ+λI)−1ΦTt
当没有正则化( λ → 0 \lambda \to 0 λ→0)时,就是我们熟悉的普通最小二乘解:
w = ( Φ T Φ ) − 1 Φ T t \mathbf{w} = (\Phi^T \Phi)^{-1} \Phi^T \mathbf{t} w=(ΦTΦ)−1ΦTt