机器学习概览

1.1 机器学习定义

  • 机器学习:从数据或经验中学习。
  • 学习的方面:
    • 学习参数(例如概率)
    • 学习结构(例如贝叶斯网络)
    • 学习隐藏概念(例如聚类)

1.2 机器学习示例

1.2.1 垃圾邮件过滤器

  • 输入:一封电子邮件
  • 输出:垃圾邮件(spam)或正常邮件(ham)
  • 设置
    • 收集大量已标记的邮件样本(需要人工标记)。
    • 目标是预测新邮件的标签。
  • 特征 (Features):用于决策的属性,例如:
    • 关键词:如 "FREE!"
    • 文本模式:如 "$dd", "CAPS" (大写字母)
    • 非文本信息:如发件人是否在联系人列表 (SenderInContacts)

1.2.2 数字识别

  • 输入:图像/像素网格
  • 输出:一个数字 0-9
  • 设置
    • 收集大量已标记的图像样本(需要人工标记)。
    • 目标是预测新数字图像的标签。
notion image
  • 特征 (Features):用于决策的属性,例如:
    • 像素:如
    • 形状模式:如组件数量 (NumComponents)、宽高比 (AspectRatio)、闭环数量 (NumLoops)

分类方法

2.1 基于模型的分类

  • 思路
    • 建立一个模型(如贝叶斯网络),其中标签和特征都是随机变量
    • 实例化观察到的特征。
    • 查询以特征为条件的标签分布。
  • 挑战
    • 贝叶斯网络应该具有什么结构?
    • 如何学习其参数?
  • 示例:垃圾邮件过滤模型
    • 模型公式:
    • 参数包括:
      • (例如, ham: 0.66, spam: 0.33)
      • (词语在正常邮件中的概率)
      • (词语在垃圾邮件中的概率)
      • notion image
    • 这些概率表通常从已标记数据中统计得到。

2.2 重要概念

  • 数据 (Data):已标记的实例,如标记为 spam/ham 的邮件。
    • 训练集 (Training set)
    • 留出集/验证集 (Held out set/ validation set)
    • 测试集 (Test set)
notion image
  • 特征 (Features):描述每个实例x的属性-值对。
  • 实验周期 (Experimentation cycle)
      1. 在训练集上学习参数(如模型概率)。
      1. (在留出集上调整超参数)。
      1. 计算在测试集上的准确率。
      1. 非常重要:绝不能“偷看”测试集!
  • 评估 (Evaluation)
    • 准确率 (Accuracy):被正确预测的实例的比例。
  • 过拟合 (Overfitting) 和泛化 (Generalization)
    • 目标是得到一个在训练、测试数据上表现良好的分类器。
    • 过拟合:非常紧密地拟合训练数据,但在未见过的数据上泛化能力差
    • 模型复杂度越高,越容易过拟合

2.3 基准 (Baselines)

  • 第一步:获得一个基准。
    • 基准是非常简单的“稻草人”程序。
    • 作用:
      • 帮助确定任务的难度。
      • 帮助了解什么是“好”的准确率。
  • 弱基准 (Weak baseline):最频繁标签分类器,即将所有测试实例赋予训练集中最常见的标签。
    • 例如,如果正常邮件占66%(意味着采用弱基准,认为所有邮件都是正常邮件的准确率为66%),那么一个分类器达到70%的准确率可能并不算好。
  • 对于真正的研究,通常使用先前的工作作为(强)基准

线性分类器

3.1 生物学启发

  • 非常宽松地受到人类神经元的启发。结构包括细胞体、轴突、树突、突触等。
notion image

3.2 基本原理

  • 输入是特征值。
  • 每个特征有一个权重 (weight)
  • 激活值 (activation) 是特征值与对应权重的加权和:
  • 决策规则 (二分类):
    • 如果激活值为正,输出 +1。
    • 如果激活值为负,输出 -1。
notion image

3.3 权重的作用

  • 二分类情况:将特征与权重向量进行比较。
  • 学习:从样本中找出权重向量。
  • 特征向量 权重向量 点积 为正,意味着属于正类。
    • 是一个向量!

3.4 二进制决策规则的几何解释

  • 在特征向量的空间中:
    • 样本是点。
    • 任何权重向量定义了一个超平面 ()。超平面的一侧对应 ,另一侧对应
    • notion image

感知机 (Perceptron)

4.1 二进制感知机学习算法

  • 初始化:权重 初始化为0
  • 对每个训练实例
      1. 用当前权重进行分类
        1. 如果正确 (,其中 是真实标签),则权重不变。
        1. 如果错误,则调整权重向量:

    4.2 多类感知机决策规则

    • 如果有多个类别:
      • 每个类别 对应一个权重向量
      • 类别 得分 (activation) 为:
      • 预测:得分最高的类别胜出,
        • 也就是说,和哪一个矢量点乘的结果最大,就属于哪一类
        • notion image

    4.3 多类感知机学习算法

    • 初始化:所有权重向量 初始化为0
    • 逐个处理训练样本
    • 用当前权重进行预测
      • 如果正确 (),权重不变。
      • 如果错误 (预测为 ,实际为 ):
        • 降低错误类别的权重:
          • 提高正确类别的权重:

          4.4 感知机的性质

          • 可分性 (Separability):如果存在一组参数能够完美分类训练集,则称训练集是可分的。
          • 收敛性 (Convergence):如果训练数据是可分的,二进制感知机最终会收敛。
          • 错误界限 (Mistake Bound):二进制感知机在收敛前所犯错误的最大次数与间隔 (margin) 或可分程度有关。
          • 可分情况:感知机可以找到一个分离超平面。
          • 不可分情况:感知机无法找到完美分离的超平面,权重可能会持续调整。
          notion image
          notion image

          4.5 感知机的问题

          • 线性:决策边界是线性的
          • 噪声 (Noise):如果数据不可分,权重可能会来回摆动 (thrash)。
            • notion image
          • 泛化能力一般 (Mediocre generalization):找到的是一个“勉强”分离的解。
          • 过训练 (Overtraining):测试集/留出集准确率通常先上升后下降,这是一种过拟合。
          notion image

          4.6 改进感知机

          4.6.1 MIRA (Margin Infused Relaxed Algorithm)

          • 思想调整权重更新的幅度以减轻上述振荡的问题。
          • 选择一个更新大小,该更新能够纠正当前的错误,同时最小化对的改变
            • 优化目标:
              • 找到一个新权重向量和旧权重向量的差的二范数最小
            • 约束条件:
              • 改变尽可能小,但是也要向正确的方向前进
              • +1有助于泛化,且让计算机在比大小的时候不会出错
          • 最小修正更新 (Minimum Correcting Update)
            • 更新规则:
              • 左边:降低错误类别的权重
              • 右边:提高正确类别的权重
              接下来,我们求解
            • 为了满足最小修正更新的要求,可以直接取等号:
            • 代入,求解得更新步长:
            • 如果,则
          • 最大步长限制 (Maximum Step Size)
            • 为避免过大的更新(可能由错误标记的样本或特征不足导致),限制的最大值:
              • 其中 C 是常数,是我们设定的最大步长
            • 通常比感知机收敛更快,表现更好,尤其在有噪声的数据上。

          4.6.2 支持向量机 (SVMs)

          • 目标:最大化间隔 (margin),这在直觉、理论和实践上都是好的。
            • 解决普通感知机“勉强分离”的问题
            • notion image
          • 支持向量:只有支持向量(离分离超平面最近的那些点)对决定超平面起作用,其他训练样本可以忽略。
          • SVM 找到具有最大间隔的分离器。
          • SVM 可以看作是 MIRA 在所有样本上同时进行优化。
            • MIRA 目标(针对单个错误点):
              • 约束
            • SVM 目标:
              • 约束

          5. 超越线性模型:神经网络

          5.1 线性模型的局限性

          • 线性模型使用特征值 和权重 的加权线性组合:
            • 看作向量的话,就是简单的特征向量·权重
          可以被看作一个"网络"。
          XOR 问题:线性模型无法对 XOR 函数建模(即无法用一条直线分开XOR的两种类别)。

          5.2 多层网络与非线性

          • 多层结构:增加一个或多个中间(“隐藏”)层进行处理,每条连接线代表一个权重。
          • 非线性激活函数:在计算线性组合后,引入一个非线性函数
          • 常用激活函数
            •  
          notion image
           
           (sigmoid也称 "logistic function")
          (sigmoid也称 "logistic function")
          notion image

          5.3 深度学习 (Deep Learning)

          • 更多层 = 深度学习
          • 每一层都是一个处理步骤,多层处理允许构建复杂的函数。
          • 类比:计算机 = 布尔门序列,神经网络计算机 = 层的序列。
          • 深度神经网络可以实现复杂功能,如基于输入值排序。

          5.4 简单神经网络示例

          notion image
          • 偏置单元 (Bias units):一种创新,没有输入,值恒为1,其权重可学习。
            • 类似于一个外界的可调的输入,用于修正网络的行为
          • 前向传播计算
              1. 隐藏层计算:例如,某隐藏单元的激活值为
            • 例如:
              • 又如:
                  1. 输出层计算:例如,输出单元的激活值为
                      • 例如:
                  2. 该示例网络可以实现 XOR 功能。
                    • 隐藏节点 实现了 OR 功能,隐藏节点 实现了 AND 功能 (根据输入输出表格推断)。
                    notion image
                  3. 深度神经网络的能力:通过处理步骤的链式组合实现复杂计算。

                6. 神经网络的训练

                6.1 核心概念:梯度下降与反向传播

                • 误差 (Error):例如,计算输出 ,而正确输出 。如何调整权重以减小误差?
                • 梯度下降 (Gradient Descent)
                  • 误差是权重的函数。
                  • 目标是减小误差,向误差函数的最小值移动。
                  • 计算梯度以获得指向误差最小值的方向。
                  • 沿降低误差的方向调整权重。
                  • notion image
                    需要求出梯度
                • 反向传播 (Back-propagation)
                  • 首先调整最后一组权重(输出层权重)。
                  • 然后将误差反向传播到前一层。
                  • 调整前一层的权重,依此类推。

                6.2 反向传播的数学细节

                6.2.1 Sigmoid 函数的导数

                • 其导数为:

                  6.2.2 输出层权重更新

                  • 设线性组合为 (其中 是前一层激活或输入, 是权重)。
                  • 激活函数输出
                  • 误差函数(2范数): (其中 是目标输出)

                  接下来,我们计算的目标是:误差对某个权重 的导数(链式法则):
                  又有:
                  综合结果
                  权重调整
                  其中为学习率

                  6.2.3 多输出节点

                  • 如果网络有多个输出节点
                    • 总误差:
                      • 指向输出节点 的权重 的调整:
                      • 也就是计算误差的方式变了(考虑总误差),其它并没有变化
                      • 权重调整虽然看起来是“局部”的(只关心它指向的那个节点的误差),但其根本的数学依据和优化目标,依然是全局的“总误差 E”。每个权重都在为降低总误差 E 尽自己的一份(局部)力。

                      6.2.4 隐藏层权重更新

                      • 隐藏层没有直接的目标输出值
                      • 但可以计算每个节点对下游误差的贡献
                      • 定义节点的误差项
                        • 对于输出层节点
                        • 对于隐藏层节点 (误差从后一层 反向传播)(其中 是节点 激活函数的导数)
                        • notion image
                      • 通用更新公式
                        其中,为学习率,是隐藏层的误差项,是输入;这个公式是通用的,对输出层节点也成立。因此,问题的关键变为了计算误差
                        • 权重的更新以节点为基本单位,更新所有指向该节点的权重
                          • 也就是说,更新A-D,B-D,C-D的权重时,是一样的只是后面的, , 输入不同

                        6.2.5 示例计算 (学习率 )

                        notion image
                        • 输出层 (G) 更新:设 , , (sigmoid(0.76)*(1-sigmoid(0.76)))
                          • (更新 从 4.5 到 4.5+0.391 = 4.891)
                          • (更新 从 -5.2 到 -5.2+0.074 = -5.126)
                          • (更新 从 -2.0 到 -2.0+0.434 = -1.566)
                        • 隐藏层 (D) 更新:设 , , (旧权重)
                        💡
                        注意,隐藏层更新时还是采用的旧权重

                        6.3 向量与矩阵运算

                        • 前向计算 (其中 是前一层激活向量,W是权重矩阵)。
                        • 激活函数
                        • 误差项 (element-wise product)。
                        • 误差项传播
                        • 权重更新 (outer product)。

                        6.4 权重初始化

                        • 权重通常随机初始化,例如,从区间 [-0.01, 0.01] 均匀采样。
                        • Glorot 和 Bengio (2010) 建议
                          • 对于浅层网络:范围 ,其中 是前一层的大小。
                          • 对于深层网络:范围 ,其中 是前一层大小, 是下一层大小。

                        6.5 用于分类的神经网络

                        • 预测类别:每个类别对应一个输出节点。
                        • 训练数据输出
                        • "One-hot 向量":只允许输出0、1,表示分类结果
                          • 例如,对于3个类别,类别2表示为 (取决于索引)。
                        • 预测:允许输出分数
                          • 具有最高值的输出节点 即为预测类别。
                          • 通过 softmax 函数获得后验概率分布:

                        6.6 梯度下降训练中的问题

                        • 学习率过高:可能导致在最小值附近震荡或发散,无法收敛。
                        notion image
                        • 初始化不良:可能导致陷入较差的局部最优或训练缓慢。
                        notion image
                        • 局部最优 (Local optimum):梯度下降可能收敛到局部最小值,而非全局最小值。
                        notion image
                        • 过拟合(Overfitting

                        6.7 训练优化与技巧

                        6.7.1 动量项 (Momentum Term)

                        • 目的:加速在一致方向上的更新,并抑制震荡。
                        • 保留先前更新的记忆,并将其(以衰减因子 )加到当前更新中。
                        • 更新规则
                        其中, 表示先前更新的记忆。类比物理学中的动量

                        6.7.2 Adagrad(自适应梯度算法)

                        • 思想:为每个参数自适应地调整学习率,随着时间推移通常会降低学习率。实现学习率的自动调整。
                        • 更新规则:基于参数 在时间 的误差梯度

                          6.7.3 Dropout

                          • 问题:机器学习中的一个普遍问题是对训练数据的过拟合。
                          • 解决方案:正则化,例如防止权重值过大
                          • Dropout:在训练期间随机移除(“丢弃”)一些隐藏单元。
                            • Mask:定义哪些隐藏单元被丢弃。
                            • 随机生成多个mask (例如10-20个),在训练中交替使用。
                          • 原理:类似于集成学习 (bagging, ensemble) 的效果。

                          6.7.4 Mini Batches

                          • 每个训练样本都会产生一组权重更新
                          • 将若干训练样本批处理 (batch up)
                            • 汇总它们的更新量。
                            • 将汇总后的更新量应用于模型。
                          • 主要是兼顾效率和硬件性能

                          6.8 GPU 加速

                          • 神经网络层可能包含大量节点 (例如200个)。
                          • 这样的计算需要大量乘法运算 (例如 )。
                          • 图形处理单元 (GPU) 专为此类计算设计。
                            • 图像渲染需要此类向量和矩阵运算。
                            • 大规模多核但精简的处理单元。
                            • 例如:NVIDIA Tesla K20c GPU 提供 2496 个线程处理器。
                          • CUDA 等扩展C语言的工具支持GPU编程。

                          常用工具包 (Toolkits)

                          • Theano
                          • Tensorflow (Google)
                          • PyTorch (Facebook)
                          • MXNet (Amazon)
                          • DyNet
                          Loading...
                          Z_cosy
                          Z_cosy
                          浙江大学电气工程学院本科生
                          公告
                          🎉Welcome to Z-cosy🎉
                          -- 食用指南 ---
                          目前只有课程笔记以及电控学习笔记
                          陆续会整理更多内容!