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

CS231n-2017 Lecture3线性分类器、最优化笔记

图片向量与标签得分向量:

上节讲到,图片可以被展开成一个向量,对于这个向量,假设它有D维,那么它就是D维空间的一个点,又假设我们的标签集合总共有K种,我们可以定义一个K维标签得分向量,每一个维度对应着其相应标签的得分。那么我们就可以想办法建立一个线性映射,将一个图片向量映射成一个标签向量,将其中得分最高的维度所对应的标签作为这张图片的标签,这就是线性分类器的本质

即:

设训练集X 有N个元素,其中x_i\in R^D, 每个x_i 有其对应的标签向量 y_i \in R^K

线性分类器:

对于上述的向量对应关系

则我们可以建立一个线性分类器:

f(x,W) = Wx+b

其中W是一个K \times D的矩阵,被称为权重(权重是提前设定好的,这里我们假设模型已经找到最优权重),b是一个K维向量,被称为偏差向量(这个向量也已经找到了最优)

这个函数会输出对于x映射出来的标签得分预测向量,然后我们可以根据该预测向量的最高得分维度来预测x所对应的图片的标签

偏差与权重的合并技巧:

我们可以将图片向量增加至D+1维,将W也增加至K\times (D+1),将其第D+1列作为原本的b,则可以将函数简化为

f(x,W) = Wx

线性分类器的直观理解:

第一种理解:

对于W的第i行,其每一列的元素分别就是D维图片向量对应像素对第i行对应标签的贡献权重,当权重为正时,就说明该位置(包含了长、宽、颜色三个信息)的像素值对该标签分类是正贡献,且越高越好,权重为负时相反

同时,我们可以将第i行这一行向量映射回图片三维数组,从而得到该标签所对应的图片模版,可以直观地观察到其分类喜好

第二种理解:

对于第i个标签,如果我们将所有令f(x,W) 的第i个分量为0的所有x向量组成一个平面,那么这个平面就是第i个标签的分界面,虽然高维空间不好想象,但我们可以将D维空间当做二维平面来理解,此时分界面必有一边会使得第i个分量的值>0(则这个区域就是第i个标签所属的区域),而另一面会使得第i个分量的值<0(第i个标签所不属于的区域)。那么对于K个标签来说,就会有K个分界面,将D维空间线性划分为K个标签所属的区域,因此我们只需要判断输入图像向量落入哪个区间,即可预测其标签

Loss Function(损失函数):

对于不同的权重矩阵W,我们需要对其给出的预测向量评分,从而评价其预测结果的好坏,这里,我们使用Loss Function作为评分标准,Loss越大时,预测结果越差,Loss越小时,预测结果越好

Multiclass Support Vector Machine Loss(多类支持向量机损失):

这是众多形式Loss中的一种,被称为折叶损失(hinge loss),具体定义式为:

L_i = \sum_{j \ne y_i}{max{(0,s_j-s_{y_i}+\Delta)}}

L=\frac{1}{N}\sum_{i=1}^{N}{L_i}

其中L_i 是对第i个图片向量预测的损失,L 是总损失,y_i 是x_i所对应的标签所对应的维度,j是遍历维度,s_j是预测向量在j维度所对应的预测值,s_{y_i}是预测向量在y_i维度所对应的预测值,\Delta是自定义超参数

max{(0,s_i-s_{y_i}+\Delta)} 的含义就是,我们遍历预测向量的每一维度(除了正确标签所对应的维度),即遍历的都是错误标签所对应的维度,若正确标签得分减去该错误标签得分的差少于\Delta ,则说明预测得分的差距不够大,对Loss作出了一定贡献,否则对Loss的贡献为0

由此可见,\Delta是我们所预期的正确维度与错误维度所需要拉开的差距

正则化(Regularization):

上面的损失函数会有一个问题,使得分类器能够正确分类数据集内每个数据的W并不唯一,我们希望能向W中某些特定的权重添加一些偏好,对其他权重则不添加,从而来更好地区分每个满足分类Loss为0的W,即向损失函数增加一个正则化惩罚R(W) 部分

通常采用L2范式,即:

R(W) = \sum_k\sum_lW_{k,l}^2

即对W中所有元素平方后求和作为正则化惩罚,它不是数据的函数,仅仅是权重的函数

至此,我们可以给出完整的多类SVM损失函数,由数据损失和正则化损失组成,即

L = \frac{1}{N}\sum_i{L_i}+\lambda R(W)

其中\lambda也是超参数,需要具体确定正则化惩罚的的权重

L2正则化最好的性质就是能对大数值权重进行惩罚,进而提升模型的泛化能力,因为平方项对大数值的惩罚更为严厉,导致没有哪个维度能独自于整体有过大的影响,鼓励分类器将所有维度的特征都用上,最后体现出来就是训练出来的模型的权重参数更小更分散

需要注意的是,偏差b没有这样的效果,因为它并不影响输入向量的维度所造成的得分影响,因此通常只对权重W进行正则化,而不正则化b

由于正则化惩罚的存在,导致Loss通常不为0,因为当且仅当W=0时Loss才为0

Softmax分类器

Softmax分类器的损失函数与SVM不同,本质上是逻辑回归分类器在面对多个分类时的拓展,其Loss称为交叉熵损失(cross-entropy loss),公示如下:

L_i = -log(\frac{e^{f_{y_i}}}{\sum_j{e^{f_j}}}) , 又等价于 L_i = -f_{y_i} + log(\sum_j{e^{f_j}})

其中f_j为标签得分向量的第j维分量

softmax函数:

f_j(z) = \frac{e^{z_j}}{\sum_k{e^{z_k}}}

简单理解为函数对第j个维度进行压缩,输出一个在[0,1] 的值,可以把它看作分类到该标签的概率

cross-entropy Loss的合理性解释:

信息论解释:

定义在“真实”分布p与估计分布q之间的交叉熵如下:

H(p,q) = -\sum_xp(x)logq(x)

显然,当估计分布q越接近真实分布p时,H越小

而我们的Loss函数公式恰好对应的就是真实概率分布p(假设是标签j,那么就是第j维为1,其余维度全为0的向量),与估计分类概率分布q,即预测出来的标签得分向量通过指数归一化处理的映射出来的概率分布,又由于p(x)只在x=j时为1,其余为0,因此H的求和只保留了x=j的项,即q(x)所对应的就是\frac{e^{f_{y_i}}}{\sum_je^{f_j}}

所以我们最小化Loss时,就是在使得q分布逐渐逼近p分布

有,交叉熵可以写成KL散度(KL divergence)的形式,即

H(p,q) = H(p) + D_{KL}(p||q)

H(p) = -\sum{p(x)log{p(x)}} = 0

所以本质上就是对分布p与分布q的KL散度做最小化,而KL散度正是用来判断两个分布在信息上的的相似程度的

概率论解释:

给出公式,在给定x_i,W的条件下,我们预测出y_i的概率为

P(y_i|x_i,W) = \frac{e^{f_{y_i}}}{\sum_j{e^{f_j}}}

而我们的Loss可以看作是归一化处理后,正确标签的负对数概率,我们在最小化这个值,就是在最大化正确标签的概率,从而去求出其对应的W参数,即可以看作是在对W参数进行最大似然估计(MLE)

实际计算时的注意事项:

对于sofmax函数来说,存在指数即有可能存在大数值,而对大数值进行除法会导致数值计算的不稳定,因此我们需要对公式进行等价变形:

\frac{e^{f_{y_i}}}{\sum_j{e^{f_j}}} = \frac{Ce^{f_{y_i{}}}}{C\sum_je^{f_j}} = \frac{e^{f_{y_i}+logC}}{\sum_j{e^{f_j+logC}}}

这里,我们选定logC = -max_jf_j,将所有分量的元素平移,使得最大值为0,从而避免了单个大数值的出现

SVM与Softmax的比较:

两种分类器都是接受输入图片向量,然后输出对应的评分向量f

但SVM输出的f中的元素值被看作是分类评分,它的损失函数鼓励正确标签的得分至少要比错误标签的得分高出\Delta

而Softmax输出的f中的元素值被看作是该标签对应的未进行归一化的对数概率,鼓励正确标签的概率变高,而错误标签的概率变低

因此,SVM的计算是没有标定的,无法对各个维度的评分值给出直观地解释,而softmax的输出可以简单地理解为该维度标签所对应的“概率”

在softmax中,输出的概率的分布的集中/离散程度是会由正则化参数\lambda 直接决定的

\lambda越大,权重W被惩罚的越多,数值越小,这样算出来的各个分量的分数也会更小,则导致各个标签的概率更为接近,也就是概率的分布更为分散了。随着\lambda的增大,最后输出的概率会接近于均匀分布

最优化问题

有了上述的前提,我们现在所需要做的就是,在给定超参数的前提下,如何去找到使得Loss最小的W参数

梯度下降法:

在给定数据集输入的前提下,我们可以将W矩阵中的所有参数看作Loss函数的变量,假设有n=K\times (D+1)个变量,那么Loss函数就是一个n维函数,最小化Loss问题其实就是一个函数优化问题,实际这个函数可能非常复杂,因此我们无法通过求驻点的方法求出极小值,则需要使用梯度下降法

我们求出Loss函数在给定x_i这一点关于n个变量的偏导数,这n个导数组成的向量称为梯度,梯度向量所指向的方向就是在该点处函数图像上升最陡峭的地方,如果我们向着这个方向的反方向前进一小步(这里称作步长,又学习率,是一个重要超参数),那么就会以最快的速度下降,然后再重复迭代,直到落入局部极小值

即有公式:

W_t = W_{t-1} - \alpha\nabla_W L(x_i,y_i,W_{t-1})

其中W_t为第t次梯度下降迭代更新的权重矩阵,\alpha为学习率

梯度计算方法:

1.数值计算梯度,采取有限微分计算梯度,精度低,运算量大,不推荐

2.分析计算梯度,直接使用公式计算偏导数,即有公式:

\nabla_WL(W) = \frac{1}{N}\sum_{i=1}^{N}\nabla_WL_i(x_i,y_i,W) + \lambda \nabla_WR(W)

http://www.lryc.cn/news/593760.html

相关文章:

  • 深度解析 rag-vector-agent-semantic-kernel:基于 Semantic Kernel 的 Agentic RAG 实践
  • 关于Vuex
  • web.m3u8流媒体视频处理
  • 巧用Callbre RVE生成DRC HTML report及CTO的使用方法
  • Js中var VS let VS const
  • 关于饥饿加载(Eager Loading)
  • 解锁C++性能密码:TCMalloc深度剖析
  • 4 ASPICE的支持过程
  • Spring AI硬核攻略:235个模块解析 + 6大场景实战
  • opencv圖片標注
  • Redisson RLocalCachedMap 核心参数详解
  • 基于 OpenCV 的 Haar 级联人脸检测模型对比研究 —— 以典型应用场景验证为例 毕业论文——仙盟创梦IDE
  • 智能体上下文选择-记忆工具知识
  • 工程图矢量化 笔记 | potrace ezdxf svgpathtools | png转svg保存dxf用matplotlib画出来
  • Qt笔记整理(1)
  • 高速SAR架构ADC选型设计
  • LVS——nat模式
  • 分立元件线性稳压器12V转5VMultisim仿真
  • 最终分配算法【论文材料】
  • 力扣24:两两交换链表中的节点
  • [FFmpeg] 输入输出访问 | 管道系统 | AVIOContext 与 URLProtocol | 门面模式
  • 外观设计模式
  • 零基础学习性能测试第二章-linux服务器监控:CPU监控
  • Redis字符串操作指南:从入门到实战应用
  • SQLShift:一款异构数据库存储过程迁移工具
  • c++ 基本语法易错与技巧总结
  • 模型的评估与选择
  • 【52】MFC入门到精通——(CComboBox)下拉框选项顺序与初始化不一致,默认显示项也不一致
  • yolov8-pos/yolov11-pos openvino C++部署
  • bash方式启动模型训练