当前位置: 首页 > news >正文

机器学习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+w2wTww0=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+w2w0w)=0

      • w 是超平面的法向量,决定其方向。
      • w 0 ∥ w ∥ 2 w \frac{w_0}{\|\mathbf{w}\|^2} \mathbf{w} w2w0w表示超平面相对于原点的偏移。
  • 增广向量

    我们希望把这个线性函数写成没有显式偏置项的形式:
    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+w0aTy
    为此,引入两个新的概念:

    1. 增广样本向量(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。

    2. 增广权重向量
      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 yiyi, 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=a1,即边界和法向量成反比。

  • 准则函数

    • 衡量错误或者代价

    • 目标是最小化它的值

    • 转化为函数优化问题

    • 感知机的准则函数举例:

      • 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[ωig(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ωig(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} ωi1,+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)20,所以有:
    f ( x + Δ x ) ≤ f ( x ) f(x + \Delta x) \leq f(x) f(x+Δx)f(x)

  • 梯度下降的迭代流程:

    1. 初始化 x 0 x_0 x0

    2. 设置学习率 η > 0 \eta > 0 η>0 和收敛阈值 ϵ \epsilon ϵ

    3. 重复执行:
      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。

    • 基本思路

      1. 从一个初始点 x 0 x_0 x0 出发;
      2. 用函数的切线来逼近根;
      3. 一步步更新 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)(xxk)

      • 我们希望 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)(xxk)=0

      解得:
      x = x k − f ( x k ) f ′ ( x k ) x = x_k - \frac{f(x_k)}{f'(x_k)} x=xkf(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=xkf(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)1f(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=xkH1(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)(xxk)
      设这个近似函数等于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)(xx0)+21f′′(x0)(xx0)2+61f′′′(x0)(xx0)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)=x53x+1
      对它求导是简单的:
      f ′ ( x ) = 5 x 4 − 3 f'(x) = 5x^4 - 3 f(x)=5x43
      你能显式求出解吗?不能。我们只能用牛顿法或者二分法来数值逼近根。

    • 优化法能处理约束问题
      现实中很多问题还有 约束条件
      min ⁡ f ( x ) subject to  A x ≤ b \min f(x) \quad \text{subject to } \quad Ax \leq b minf(x)subject to Axb
      这时候直接对 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=H1f(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=H1f(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 更低。

相关文章:

  • AI助力基因数据分析:用Python玩转生命密码的秘密
  • 操作系统面试知识点(1):操作系统基础
  • java枚举enum的使用示例
  • mac电脑安装vscode的力扣插件报错解决办法
  • 【Linux】基础开发工具(2)
  • 重定向攻击与防御
  • Docker 入门教程(二):Docker 的基本原理
  • 东芝e-STUDIO 2323AMW双面复印报计数器溢出故障
  • 《规则怪谈》合集
  • Kotlin环境搭建与基础语法入门
  • python pandas数据清洗
  • Python打卡:Day37
  • 黑马JVM解析笔记(四):Javap图解指令流程,深入理解Java字节码执行机制
  • 【办公类-105-01】20250626 托小班报名表-条件格式-判断双胞胎EXCLE
  • MySQL (一):数据类型,完整性约束和表间关系
  • C++智能指针概念及std::unique_ptr使用介绍
  • YOLOv10tensorRT推理代码C++
  • Apipost和Postman对比
  • Git-git worktree的使用
  • [OS_27] 现代应用程序架构 | Full System Emulation | VM | Docker