提纲
感知器
- 使用反向传播训练感知器
- 多层感知器
回归
- 多项式回归
- 过拟合与欠拟合
- 数据集分割用于超参数调优
分类
- 逻辑回归
- 二元交叉熵
- 多项式回归(Softmax回归)
感知器
基础概念
在原始感知器中使用的激活函数。
神经网络
神经网络其实就是连接一堆感知器。
神经网络术语
也称为多层感知器(MLP)
层与层之间的所有神经元都是相互连接的
- 有多少神经元(感知器)?4+2=6
- 有多少权重(边)? (3*4)+(4*2)=20
- 有多少可学习的参数总和?20+(4+2)=26 ** 6个偏置项, 每个感知器1个
偏置项是用来调整模型输出的一个参数,它可以帮助模型更好地适应数据。在多层感知器(MLP)或深度学习模型中,每个神经元通常都会有自己的偏置项。在训练过程中,偏置项会和权重一起被调整,以最小化损失函数,从而找到最佳的模型参数。
训练感知器
世界上最小的感知器
学习感知器
- 给定一组样本和一个感知器
估计感知器的参数 w
增量学习策略(梯度下降)
损失函数
- 定义了什么是接近真实解的含义
- 你可以选择损失函数!(有些损失函数比其他的更好,这取决于你想要做什么)
训练感知器代码
-
感知器模型: 感知器是一种简单的线性二分类模型,它的输出 基于输入 和权重 的线性组合,通常还有一个激活函数(如阶跃函数)来确定最终的分类。
-
循环(): 这个循环表示算法会遍历训练集中的每一个样本 次。对于每一个样本 ,算法都会执行权重更新的步骤。
-
权重更新(): 这是感知器学习规则的核心。这里, 是权重向量, 是第 个样本的真实标签, 是感知器当前的预测输出, 是第 个样本的特征向量。
- 误差(): 这个部分计算了预测值和真实值之间的差异。如果感知器正确地预测了样本,那么这个差值将会是零,不会有权重更新。
- 权重调整(): 这里,误差乘以当前样本的特征向量,然后加到当前权重上。这个步骤是基于这样的假设:如果输出太低(预测值比真实值小),那么算法会增加权重,反之则减少权重。这应该是损失函数的梯度
-
目的: 通过这种方式,感知器逐渐学习将特征向量映射到正确的标签上,不断调整其权重,直到模型在训练集上的表现达到一定的准确度或者直到完成一定数量的迭代。
(偏)导数
1. 函数的斜率
2. 机器上的旋钮
梯度下降: 在函数上给定一个固定点,朝着梯度的反方向移动。
训练世界最小的感知机
理解导数
请注意,在这种方法中,我们是基于每个训练样本得到的梯度来进行参数更新的;稍后我们将探讨如何基于一批数据样本的平均梯度来进行更新。
世界第二小感知器
多层感知机
反向传播一词来源于源于链式法则,其中梯度或部分梯度或部分导数 上游。
回归
● 是一个多项式函数
- 其中,表示多项式的阶数,是未知的。
● 我们有一个从以下公式生成的训练数据集:
- , 随机噪音项
- 如曲线所示,并且通过圆圈表示的数据点。
● 目标是在训练数据上训练一个多项式回归模型:
- 并找出的最佳值:0, 1, 2, 等等。
- 同时,需要调整系数 ,
- 使得 ,其中
欠拟合
算法倾向于因为没有考虑到数据中的充足信息,而持续地错误学习。这通常是由于模型容量
复杂度过低,导致模型太简单,无法适应训练数据。
过拟合
- 高偏差/过拟合:模型因太简单而无法捕捉训练数据中的真实规律,导致过高的偏差。
- 高容量/复杂度:模型能很好地适应已见的数据,即训练数据,但可能导致过拟合。
- 高方差:模型在不同数据集上的表现差异大,说明模型对训练数据过于敏感。
- 泛化能力差:模型在未见数据上的表现差,说明模型无法很好地泛化到新数据,即在测试数据上表现不佳。
- 方差(误差):如果我们有不同的训练数据集(但仍然来自同一来源),模型估计(在我们案例中是参数w)将会改变的量。
一个好的模型
- 使用合适的容量/复杂度来建模数据,并能泛化到未见数据。
- 在欠拟合和过拟合之间,以及偏差和方差之间找到平衡。
问题:我们能否同时拥有低偏差和低方差?答案是不可以。低偏差和低方差是由相同因素——模型容量导致的相对立现象。
- 首先,训练一个更大的模型以减少偏差(避免欠拟合)。
- 其次,对模型进行正则化以减少方差(避免过拟合)。
超参数/模型调优
- 使用哪个度数/模型来避免欠拟合或过拟合?
- 度数是模型的一个超参数或配置项。
- 调整度数被称为超参数调优或模型选择。
- 对于复杂模型,可能有多个超参数需要调整,例如梯度下降算法的学习率、神经网络的层数。
训练与测试:
- 绝不在测试数据上训练或调优模型。
- 测试数据仅用于报告最终的(无偏的)性能。
训练数据的分割
为了有效地调优超参数并评估模型性能,训练数据被分割为两个或三个部分:
- 训练集(Training Set):用于模型训练的数据集。
- 验证集(Validation Set):用于模型选择和超参数调优的数据集。模型在验证集上的表现用于指导超参数的选择。
- 测试集(Test Set):(如果可用)用于评估调优后模型的最终性能的数据集。测试集应该在整个训练和验证过程中保持未使用,直到最后一步才使用。
如何分割?
分割方法取决于可用训练数据的数量和特性:
-
K折交叉验证(K-fold Cross-validation):如果训练数据较少,可以使用K折交叉验证来最大化训练和验证过程中的数据使用。在K折交叉验证中,数据被分成K个部分,模型训练K次,每次使用不同的部分作为验证集,其余作为训练集。然后取K次验证结果的平均值作为性能指标。
-
固定比例分割(Fixed Ratio Partitioning):对于数据量较大的情况,常见的做法是按照固定的比例分割数据,比如80:20、90:10或95:5,其中较大的一部分用于训练,较小的一部分用于验证。
K折交叉验证方法
- 将样本数据分成k部分。
- 使用k-1部分进行训练,1部分进行测试。
- 重复k次这个过程,每次更换测试集。
- 根据迭代过程中的结果确定一个预期的性能指标(均方误差、误分类错误率、置信区间或其他适当的指标)。
数据划分
- 实际应用情况
- 将所有数据分成训练集和验证集。
- 挑战赛,例如Kaggle竞赛
- 将训练数据分成训练集和验证集。
- 测试性能由组织者在私有测试数据上确定。
- 测试提交的模型或评估提交的测试结果(标签保密)。
- 研究
- 将所有数据分成训练集和测试集(例如,5%,10%或20%)。
- 将训练数据分成训练集和验证集(参见上一张幻灯片)。
希望这个验证数据能代表部署应用时遇到的测试数据。
分类
回归与分类
- 回归:明天的温度是多少?
- 分类(二分类):明天是晴天吗?
- 分类(多分类):明天是晴天、多云还是下雨?
问题:二者有什么不同?
- 数量与标签:回归映射到一个连续域,而分类映射到一个有限集。
问题:多少毫米的雨量算作“下雨天”?多少小时的阳光算作“晴天”?
- 通常,分类标签必须从连续值(测量或回归得到)中得出。
从回归到分类
- 阈值设置(感知器)
- 如何设置阈值c?
- 将其作为学习权重的一部分来学习。
- 将c作为偏移量/b参数的一部分合并
- 转换为
通过将阈值c作为偏移量或偏差参数的一部分,我们可以将感知器模型从执行线性回归任务调整为执行二分类任务。这种方法允许模型根据输入特征的加权和与阈值的比较,输出类别标签。这种从连续值到离散类别标签的转换是机器学习中从回归到分类的关键步骤之一。
逻辑回归
常数的梯度始终为 0,因此无法学习任何知识!
逻辑函数:
- 范围在[0, 1]内。
- 可以解释为标签为1的概率。
- 逻辑函数有时也称为sigmoid函数。
梯度消失
- 当逻辑函数的输出非常接近0或1时,梯度会变得非常小,这会导致训练过程中参数更新缓慢。
这是参数更新的唯一有效范围参数更新 或学习的唯一有效范围。
曲线越平坦,梯度越小。
交叉熵损失
- 交叉熵损失:
- 这种损失函数可以更有效地让模型学习正确的权重,尤其是在分类问题中。
多分类问题
- 多分类问题可以是单标签也可以是多标签。在多标签分类中,每个实例可以同时属于多个类别。
- 应用示例包括图像分类(MNIST数据集、Cifar10数据集)和文档分类(20 Newsgroups数据集)。
多类多标签分类
在二分类问题中,对于每个标签,我们使用逻辑回归模型 和交叉熵损失 来进行分类。对于多类问题,我们假设各个类别在输入条件下是独立的,并对每个类别使用相应的逻辑回归模型和交叉熵损失进行分类。在多类多标签问题中,我们采用向量化形式来同时处理所有标签,使用一组逻辑回归模型对每个标签进行分类,并应用交叉熵损失进行优化。
总结
- 单元感知器是加权和后跟一个激活函数
- 神经网络由多个堆叠在彼此之上的感知器单元构建(多层感知器或MLPs)
- 过拟合/欠拟合可能因为模型容量太少/太多而产生
- 将数据分为训练/(验证)/测试集;不要在测试集上学习模型!
- 回归与分类作为基本的机器学习任务
- 使用逻辑回归来近似分类决策
- 由于梯度消失问题,逻辑函数应该用交叉熵而不是L2损失来学习
- 交叉熵损失试图最小化输出分布和(真实)标签分布之间的差异