机器学习6——线性分类函数
线性分类函数
-
分类问题的两种决策方法:
- 概率方法:通过计算后验概率进行分类。优点是在概率分布已知的情况下可以得到最优解,缺点是实际中概率密度通常未知,需要通过大量数据估计。
- 判别方法:假设判别函数的形式已知,通过训练样本估计判别函数的参数。优点是实现简单,缺点是需要假设函数的形式,可能不适合复杂数据。
-
线性判别函数定义为:
g i ( x ) = w i T x + w i 0 g_i(\mathbf{x}) = \mathbf{w}_i^T \mathbf{x} + w_{i0} gi(x)=wiTx+wi0- 易于计算,分析,学习
- 通过最小化损失函数来学习
- 需要数据线性可分
- 训练误差小不能保证测试误差小
-
线性判别函数的决策面推导:
-
决策面定义:$ g(\mathbf{x}) = 0 $,即: w T x + w 0 = 0 \mathbf{w}^T \mathbf{x} + w_0 = 0 wTx+w0=0
推导: g ( x ) = w T x + w T w ∥ w ∥ 2 w 0 = 0 g(\mathbf{x}) = \mathbf{w}^T \mathbf{x} + \frac{\mathbf{w}^T \mathbf{w}}{\|\mathbf{w}\|^2} w_0 = 0 g(x)=wTx+∥w∥2wTww0=0
w T ( x + w 0 ∥ w ∥ 2 w ) = 0 \mathbf{w}^T \left( \mathbf{x} + \frac{w_0}{\|\mathbf{w}\|^2} \mathbf{w} \right) = 0 wT(x+∥w∥2w0w)=0
- w 是超平面的法向量,决定其方向。
- w 0 ∥ w ∥ 2 w \frac{w_0}{\|\mathbf{w}\|^2} \mathbf{w} ∥w∥2w0w表示超平面相对于原点的偏移。
-
-
增广向量
我们希望把这个线性函数写成没有显式偏置项的形式:
g ( x ) = w T x + w 0 ⇒ a T y g(\mathbf{x}) = \mathbf{w}^T \mathbf{x} + w_0 \quad \Rightarrow \quad \mathbf{a}^T \mathbf{y} g(x)=wTx+w0⇒aTy
为此,引入两个新的概念:-
增广样本向量(augmented vector):
y = [ x 1 ] ∈ R d + 1 \mathbf{y} = \begin{bmatrix} \mathbf{x} \\ 1 \end{bmatrix} \in \mathbb{R}^{d+1} y=[x1]∈Rd+1
—— 就是在原向量 x \mathbf{x} x 后面补一个 1。 -
增广权重向量:
a = [ w w 0 ] ∈ R d + 1 \mathbf{a} = \begin{bmatrix} \mathbf{w} \\ w_0 \end{bmatrix} \in \mathbb{R}^{d+1} a=[ww0]∈Rd+1
于是有:
g ( x ) = w T x + w 0 = a T y g(\mathbf{x}) = \mathbf{w}^T \mathbf{x} + w_0 = \mathbf{a}^T \mathbf{y} g(x)=wTx+w0=aTy
这样就把原来有偏置项的表达式转换成了一个 统一的向量内积形式。 -
-
线性可分的形式化定义
-
给定样本集合 y 1 , y 2 , … , y n y_1, y_2, \ldots, y_n y1,y2,…,yn,部分标记为 ω 1 \omega_1 ω1,部分为 ω 2 \omega_2 ω2。
如果存在一个向量 a a a,使得:
- a T y i > 0 a^T y_i > 0 aTyi>0,当 y i y_i yi 属于 ω 1 \omega_1 ω1
- a T y i < 0 a^T y_i < 0 aTyi<0,当 y i y_i yi 属于 ω 2 \omega_2 ω2
-
-
权重空间的解区域
-
若将类别 ω 2 \omega_2 ω2 的样本统一变号,即:
y i ← − y i , 当 y i ∈ ω 2 y_i \leftarrow -y_i, \quad \text{当 } y_i \in \omega_2 yi←−yi,当 yi∈ω2
则线性可分性的问题就变成了:
∀ i , a T y i > 0 \forall i, \quad a^T y_i > 0 ∀i,aTyi>0
即,所有样本点在向量 a a a 的方向上都有正投影。 -
如果所有样本 y i T a > 0 y_i^T a > 0 yiTa>0,那么这些 a a a 向量就构成了解空间。
-
PPT 上给出了缩小解空间的一种方式:引入“边界”(margin),要求 y i T a > b i y_i^T a > b_i yiTa>bi,而不是只是大于0。这里 b i > 0 b_i > 0 bi>0,常用形式是 b i = 1 ∥ a ∥ b_i = \frac{1}{\|a\|} bi=∥a∥1,即边界和法向量成反比。
-
-
准则函数
-
衡量错误或者代价
-
目标是最小化它的值
-
转化为函数优化问题
-
感知机的准则函数举例:
- J ( w , b ) = − ∑ i = 1 n sign [ ω i ⋅ g ( x i ) ] J(\mathbf{w}, b) = - \sum_{i=1}^n \text{sign}[\omega_i \cdot g(\mathbf{x}_i)] J(w,b)=−∑i=1nsign[ωi⋅g(xi)]
- J ( w , b ) = − ∑ i = 1 n ω i ⋅ g ( x i ) J(\mathbf{w}, b) = - \sum_{i=1}^n \omega_i \cdot g(\mathbf{x}_i) J(w,b)=−∑i=1nωi⋅g(xi)
- J ( w , b ) = ∑ i = 1 n ( g ( x i ) − ω i ) 2 J(\mathbf{w}, b) = \sum_{i=1}^n (g(\mathbf{x}_i) - \omega_i)^2 J(w,b)=∑i=1n(g(xi)−ωi)2
ω i ∈ − 1 , + 1 \omega_i \in {-1, +1} ωi∈−1,+1 是样本 x i x_i xi 的真实标签。
-
梯度下降算法
想象需要优化的函数是一座山,沿着下山方向下山
-
根据泰勒公式展开:
f ( x + Δ x ) ≈ f ( x ) + ∇ f ( x ) ⊤ Δ x + o ( ∥ Δ x ∥ ) ⏟ 高阶小量 f(x + \Delta x) \approx f(x) + \nabla f(x)^\top \Delta x + \underbrace{o(\|\Delta x\|)}_{\text{高阶小量}} f(x+Δx)≈f(x)+∇f(x)⊤Δx+高阶小量 o(∥Δx∥)
如果我们取:
Δ x = − η ∇ f ( x ) \Delta x = -\eta \nabla f(x) Δx=−η∇f(x)
代入得:
f ( x + Δ x ) ≈ f ( x ) − η ∇ f ( x ) ⊤ ∇ f ( x ) = f ( x ) − η ∥ ∇ f ( x ) ∥ 2 f(x + \Delta x) \approx f(x) - \eta \nabla f(x)^\top \nabla f(x) = f(x) - \eta \|\nabla f(x)\|^2 f(x+Δx)≈f(x)−η∇f(x)⊤∇f(x)=f(x)−η∥∇f(x)∥2
由于 η > 0 \eta > 0 η>0,且 ∥ ∇ f ( x ) ∥ 2 ≥ 0 \|\nabla f(x)\|^2 \geq 0 ∥∇f(x)∥2≥0,所以有:
f ( x + Δ x ) ≤ f ( x ) f(x + \Delta x) \leq f(x) f(x+Δx)≤f(x) -
梯度下降的迭代流程:
-
初始化 x 0 x_0 x0;
-
设置学习率 η > 0 \eta > 0 η>0 和收敛阈值 ϵ \epsilon ϵ;
-
重复执行:
x k + 1 = x k − η ∇ f ( x k ) x_{k+1} = x_k - \eta \nabla f(x_k) xk+1=xk−η∇f(xk)
直到梯度的模很小(即差不多到最低点)。
学习率太大→跳跃,太小→收敛慢。
-
牛顿法
-
先从一维开始(找方程的根)
目标:解一个方程: f ( x ) = 0 f(x) = 0 f(x)=0。我们想找一个 x x x,使得函数在该点为 0。
-
基本思路
- 从一个初始点 x 0 x_0 x0 出发;
- 用函数的切线来逼近根;
- 一步步更新 x 1 , x 2 , x 3 , … x_1, x_2, x_3, \dots x1,x2,x3,…,越来越接近真解。
-
数学推导(重点)
- 给定当前点 x k x_k xk,在该点做一个切线(用一阶泰勒展开):
f ( x ) ≈ f ( x k ) + f ′ ( x k ) ( x − x k ) f(x) \approx f(x_k) + f'(x_k)(x - x_k) f(x)≈f(xk)+f′(xk)(x−xk)
- 我们希望 f ( x ) = 0 f(x) = 0 f(x)=0,代入这个近似式:
f ( x k ) + f ′ ( x k ) ( x − x k ) = 0 f(x_k) + f'(x_k)(x - x_k) = 0 f(xk)+f′(xk)(x−xk)=0
解得:
x = x k − f ( x k ) f ′ ( x k ) x = x_k - \frac{f(x_k)}{f'(x_k)} x=xk−f′(xk)f(xk)
这就是 牛顿法的一维更新公式:
x k + 1 = x k − f ( x k ) f ′ ( x k ) x_{k+1} = x_k - \frac{f(x_k)}{f'(x_k)} xk+1=xk−f′(xk)f(xk)
-
-
多维扩展(用于优化)
当我们不再是解方程,而是要 最小化一个函数 f ( x ) f(\mathbf{x}) f(x):
目标: min f ( x ) \min f(\mathbf{x}) minf(x)
我们要找一个点 x ∗ \mathbf{x}^* x∗,使得 f ( x ) f(\mathbf{x}) f(x) 最小,也就是 ∇ f ( x ) = 0 \nabla f(\mathbf{x}) = 0 ∇f(x)=0。-
思路
在高维情况下,我们可以使用 泰勒二阶展开式 来近似 f ( x + Δ x ) f(\mathbf{x} + \Delta \mathbf{x}) f(x+Δx):
f ( x + Δ x ) ≈ f ( x ) + ∇ f ( x ) T Δ x + 1 2 Δ x T H ( x ) Δ x f(\mathbf{x} + \Delta \mathbf{x}) \approx f(\mathbf{x}) + \nabla f(\mathbf{x})^T \Delta \mathbf{x} + \frac{1}{2} \Delta \mathbf{x}^T H(\mathbf{x}) \Delta \mathbf{x} f(x+Δx)≈f(x)+∇f(x)TΔx+21ΔxTH(x)Δx
其中:- ∇ f ( x ) \nabla f(\mathbf{x}) ∇f(x):一阶导数(梯度向量)
- H ( x ) H(\mathbf{x}) H(x):二阶导数矩阵(Hessian矩阵)
-
目标:让这个函数值最小!
我们对上面的展开式求导,令导数为 0(为什么?一个函数在某点取得极小值(或极大值),该点的导数为零(如果导数存在)),有:
∇ f ( x ) + H ( x ) Δ x = 0 ⇒ Δ x = − H ( x ) − 1 ∇ f ( x ) \nabla f(\mathbf{x}) + H(\mathbf{x}) \Delta \mathbf{x} = 0 \Rightarrow \Delta \mathbf{x} = - H(\mathbf{x})^{-1} \nabla f(\mathbf{x}) ∇f(x)+H(x)Δx=0⇒Δx=−H(x)−1∇f(x)
于是就得到 牛顿法的多维更新公式:
x k + 1 = x k − H − 1 ( x k ) ∇ f ( x k ) \mathbf{x}_{k+1} = \mathbf{x}_k - H^{-1}(\mathbf{x}_k) \nabla f(\mathbf{x}_k) xk+1=xk−H−1(xk)∇f(xk)
-
-
为什么一维只展开一阶项,多维要展开到二阶项?多维可以只展开一项吗?或者展开更多项?
因为在做什么问题!
-
一维时:
我们只是想找根(即 f ( x ) = 0 f(x) = 0 f(x)=0)
所以我们只需要一阶导数的切线逼近:
f ( x ) ≈ f ( x k ) + f ′ ( x k ) ( x − x k ) f(x) \approx f(x_k) + f'(x_k)(x - x_k) f(x)≈f(xk)+f′(xk)(x−xk)
设这个近似函数等于0即可。 -
多维优化时:
我们要找极小值,不只是找根。
这时一阶导数并不能判断拐点类型(极大?极小?拐点?),必须引入二阶信息(曲率):
f ( x + Δ x ) ≈ f ( x ) + ∇ f ( x ) T Δ x + 1 2 Δ x T H Δ x f(\mathbf{x} + \Delta \mathbf{x}) \approx f(\mathbf{x}) + \nabla f(\mathbf{x})^T \Delta \mathbf{x} + \frac{1}{2} \Delta \mathbf{x}^T H \Delta \mathbf{x} f(x+Δx)≈f(x)+∇f(x)TΔx+21ΔxTHΔx- 第一项:函数值
- 第二项:梯度,方向信息
- 第三项:Hessian,曲率信息
-
为什么需要二阶项?
- 如果你只看一阶项,相当于只看斜率,不知道是山顶还是山谷;
- 二阶项(Hessian)告诉你,函数在这一点的“凹凸”:
- Hessian 正定 → 函数局部向上开口 → 极小值 ✅
- Hessian 负定 → 极大值 ❌
- Hessian 不定 → 鞍点 ❗️
-
多维可以只展开一项:这就是梯度下降法!
- 它忽略了二阶信息,只用了:
f ( x + Δ x ) ≈ f ( x ) + ∇ f ( x ) T Δ x f(\mathbf{x} + \Delta \mathbf{x}) \approx f(\mathbf{x}) + \nabla f(\mathbf{x})^T \Delta \mathbf{x} f(x+Δx)≈f(x)+∇f(x)TΔx
然后让 Δ x = − η ∇ f ( x ) \Delta \mathbf{x} = - \eta \nabla f(\mathbf{x}) Δx=−η∇f(x),即反方向下降。
但这会导致收敛慢、不稳定。
-
也可以展开更多项,但通常没必要。
- 泰勒展开可以无限展开高阶项:
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + 1 2 f ′ ′ ( x 0 ) ( x − x 0 ) 2 + 1 6 f ′ ′ ′ ( x 0 ) ( x − x 0 ) 3 + … f(x) = f(x_0) + f'(x_0)(x - x_0) + \frac{1}{2}f''(x_0)(x - x_0)^2 + \frac{1}{6}f'''(x_0)(x - x_0)^3 + \dots f(x)=f(x0)+f′(x0)(x−x0)+21f′′(x0)(x−x0)2+61f′′′(x0)(x−x0)3+…
- 但高阶导数计算极其复杂;
- 通常二阶展开就能在极小值附近拟合得很好(函数形状如碗口);
- 这就是牛顿法停止在二阶的原因。
-
-
既然目标是找极小值点,为什么不能直接对原函数求导,令导数等于0?(解析法)
如果函数 f ( x ) f(x) f(x) 是光滑可导的,我们当然可以直接求导并令导数为0,找到所谓的极值点(极小值或极大值)。但在实际应用中,“直接求导=0”经常做不到或不现实,原因如下:
-
函数可能没有解析解
很多现实问题的目标函数形式太复杂,根本找不到 ∇ f ( x ) = 0 \nabla f(x) = 0 ∇f(x)=0 的显式解,比如:- 函数包含 非线性嵌套结构,如: f ( x ) = log ( 1 + e − ( A x + b ) 2 ) f(x) = \log(1 + e^{-(Ax + b)^2}) f(x)=log(1+e−(Ax+b)2)
- 参数是 高维张量(如深度学习模型中的几百万维参数)
此时我们只能数值优化,从一个起始点出发逐步更新参数靠近最优点。
-
即使可以求导,也可能解不出来
举个例子:
f ( x ) = x 5 − 3 x + 1 f(x) = x^5 - 3x + 1 f(x)=x5−3x+1
对它求导是简单的:
f ′ ( x ) = 5 x 4 − 3 f'(x) = 5x^4 - 3 f′(x)=5x4−3
你能显式求出解吗?不能。我们只能用牛顿法或者二分法来数值逼近根。 -
优化法能处理约束问题
现实中很多问题还有 约束条件:
min f ( x ) subject to A x ≤ b \min f(x) \quad \text{subject to } \quad Ax \leq b minf(x)subject to Ax≤b
这时候直接对 f ( x ) f(x) f(x) 求导=0 是无效的,你还需要引入拉格朗日乘子等技巧,或者干脆使用优化算法如:- 投影梯度法
- 拉格朗日乘子法
- 对偶法
- 内点法、罚函数法、SLP 等等
-
优化方法适合自动化处理
在现代机器学习和工程中,我们希望:- 用程序自动优化复杂函数
- 不依赖人工推导
- 能处理几十万参数的模型(如深度学习)
这时优化方法(如SGD、Adam、LBFGS)显然比“手动解导数方程”更加实用。
-
-
牛顿下降方向为何更陡?
牛顿法的下降方向更陡,是因为它不仅利用了梯度的方向,还根据 Hessian(即二阶导数信息)自适应地调整了步长和方向,使下降速度沿着最快变小的路径。
- 梯度下降(Gradient Descent):
Δ x = − η ∇ f ( x ) \Delta x = -\eta \nabla f(x) Δx=−η∇f(x)
只用一阶导数,沿着负梯度走,小步慢慢试探。
- 牛顿法(Newton’s Method):
Δ x = − H − 1 ∇ f ( x ) \Delta x = - H^{-1} \nabla f(x) Δx=−H−1∇f(x)
不仅看梯度,还用 Hessian(H)矩阵调整方向和步幅。
数学上,牛顿法是这样构造的:
- 近似 f ( x ) f(x) f(x) 为一个二次函数(抛物面):
f ( x + Δ x ) ≈ f ( x ) + ∇ f ( x ) T Δ x + 1 2 Δ x T H Δ x f(x + \Delta x) \approx f(x) + \nabla f(x)^T \Delta x + \frac{1}{2} \Delta x^T H \Delta x f(x+Δx)≈f(x)+∇f(x)TΔx+21ΔxTHΔx
- 找这个二次函数的极小值点。
- 解出最佳 Δ x \Delta x Δx:
H Δ x = − ∇ f ( x ) ⇒ Δ x = − H − 1 ∇ f ( x ) H \Delta x = - \nabla f(x) \quad \Rightarrow \quad \Delta x = -H^{-1} \nabla f(x) HΔx=−∇f(x)⇒Δx=−H−1∇f(x)
所以牛顿法每次直接跳到局部抛物线的最低点方向,而不是慢慢沿斜坡滑。
-
比较梯度下降与牛顿法:
- 牛顿法每一步通常比简单的梯度下降法带来更大的改进,即使梯度下降使用了最优步长 η k \eta_k ηk。
- 但是,如果 Hessian 矩阵 Q Q Q 是奇异的(singular),那么牛顿法不可用。
- 即使 Hessian Q Q Q 是非奇异的,计算它也是很耗时的,时间复杂度是 O ( d 3 ) O(d^3) O(d3)。
- 实际上,给梯度下降法设一个常数步长(即使比最优步长小一点),通常总开销比每次都精确寻找最优 η k \eta_k ηk 更低。