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

电商网站与大数据一个网站 两个域名

电商网站与大数据,一个网站 两个域名,云优化seo,wordpress优秀网站文章目录0 前言1 图像分类简介1.1 什么是图像分类1.2 图像分类任务的难点1.3 分类任务的评价指标1.3.1 Accuracy1.3.2 Precision和Recall1.3.3 F1 Score1.4 分类图像模型总体框架2 线性分类器2.1 图像的表示方法2.2 Cifar10数据集介绍2.3 分类算法输入2.4 线性分类器3 损失函数… 文章目录0 前言1 图像分类简介1.1 什么是图像分类1.2 图像分类任务的难点1.3 分类任务的评价指标1.3.1 Accuracy1.3.2 Precision和Recall1.3.3 F1 Score1.4 分类图像模型总体框架2 线性分类器2.1 图像的表示方法2.2 Cifar10数据集介绍2.3 分类算法输入2.4 线性分类器3 损失函数3.1 损失函数的定义3.2 多类支持向量机损失3.3 正则项4 优化算法4.1 优化算法目标4.2 梯度下降算法4.3 梯度计算4.4 多类支持向量机损失函数梯度4.5 随机梯度下降5 数据处理5.1 数据集的划分5.2 数据的预处理5.3 数据增广6 参考资料0 前言 本文是公司组内分享的课程笔记主要参考了北邮鲁鹏老师的《计算机视觉与深度学习》课程课程视频链接在这里。 这一讲还没有涉及到神经网络相关知识是以图像分类任务为例对除了神经网络之外的深度学习知识点概览。目的是讲清楚深度学习的总体流程同时让读者对深度学习工作者的思考方式有一个了解。 下一讲深度学习基础-2 1 图像分类简介 1.1 什么是图像分类 图像分类任务是计算机视觉中最基础也是最核心的一项任务许多更加复杂的问题都可以转化为图像分类问题如目标检测可以转化为对ROI(Region of interest)的分类问题图像分割可以转化为对每个像素点的分类问题。 图像分类的核心是根据图像信息中所反映的不同特征把不同类别的图像区分开来即从已知的类别标签集合中为给定的输入图片选定一个类别标签。 图1-1 图像分类任务一般图像分类输出的是已知标签集合中各个标签的分数也称为置信度各类别置信度之和为1。一般会设置一个阈值置信度最高且超过阈值的类别被认为是图像分类的结果。 1.2 图像分类任务的难点 计算机做图像分类和人对图像分类有挺大的区别人认为很简单的问题在计算机看来并不是如此目前主要的难点包括以下几点 1语义鸿沟 图1-2 语义鸿沟2类别繁多 图1-3 类别繁多3不同视角 图1-4 不同视角4不同光照 图1-5 不同光照5遮挡问题 图1-6 遮挡问题6不同形变 图1-7 不同形变7尺度问题 图1-8 尺度问题8运动模糊 图1-9 运动模糊1.3 分类任务的评价指标 分类任务的评价指标其实就是在一个叫做混淆矩阵(confusion matrix)的东西上做文章。 针对一个二分类问题即将实例分成正类positive或负类negative在实际分类中会出现以下四种情况 1若一个实例是正类并且被预测为正类即为真正类TP(True Positive ) 2若一个实例是正类但是被预测为负类即为假负类FN(False Negative ) 3若一个实例是负类但是被预测为正类即为假正类FP(False Positive ) 4若一个实例是负类并且被预测为负类即为真负类TN(True Negative ) 混淆矩阵的每一行是样本的预测分类每一列是样本的真实分类反过来也可以其形式如下图1-10所示。 图1-10 二分类混淆矩阵对于多分类的问题混淆矩阵的计算与二分类任务相似只是类别数由之前的两个变成现在的多个多分类混淆矩阵形式如下图1-11所示。 图1-11 多分类混淆矩阵每一个单元格第iii行第jjj列表示的是预测值为jjj真实值为iii的个数。 为了更加直观地说明多分类的混淆矩阵下面给出一个真实的例子如图1-12所示。 图1-12 多分类混淆矩阵实例图1-4中共有6个类别每个类别1000个样本纵轴表示每个样本的真实标签横轴表示每个样本的预测标签。对角线的值越大说明模型的效果越好比如sunflare这个类别模型的预测准确率是100%的不会和其他任何一个类别混淆。又比如folds和part_remove就很容易混淆folds有451个被误认为是part_removepart_remove有277个被误认为是folds。 通过混淆矩阵我们可以人为看出模型总体和细粒度的分类能力不过还是需要有具体的数值指标比如AccuracyPrecision和Recall。 还是以二分类为例我们重新来看一下混淆矩阵如下图1-13所示。多分类的时候可以把其中一个类别当做正例其他的类别当做反例转化为二分类的混淆矩阵。 图1-13 二分类混淆矩阵1.3.1 Accuracy Accuracy即准确率表示预测正确的样本数量占总量的百分比具体的公式如下 AccuracyTPTNTPFNFPTN(1-1)Accuracy \frac{TP TN}{TP FN FP TN} \tag{1-1} AccuracyTPFNFPTNTPTN​(1-1) 更通俗一点说就是所有测试样本里预测对了几个。 讲到这里我们不妨停下来思考一下准确率的局限性。这是一件对于深度学习工作者非常重要的事情这个指标能告诉我什么不能告诉我什么以这个指标来评价模型能否达到我的目的。如果这个指标不行的话就得要用其他的指标。有一个好的指标我们才能评价两个模型之间的好坏才能去不断迭代优化模型。 我们所有的评估都是基于测试样本的不难理解测试样本的分布情况对评估的结果有着很大的影响。 举个例子假设我们有黑白两色两种球白球10个黑球2个模型的预测结果如下图1-14所示。 图1-14 模型预测结果示例此时accuracy110110100.92accuracy \frac{110}{11010}0.92accuracy11010110​0.92从评价指标上看模型能力还行但是这可能是一个大概率输出白小概率输出黑的随机模型。也可能是一个对白球预测能力极强对黑球预测能力极弱的模型。 从这个例子中我们总结出三点 测试样本需要尽可能类别平衡测试样本数据量要大accuracy体现了模型在测试样本上的总体能力没有更细粒度的类别指标 1.3.2 Precision和Recall 为了得到更细粒度的类别指标就有了precision和recall。 Precision即精确率表示在预测为正例的结果中有多少是正确的具体公式如下 PrecisionTPTPFP(1-2)Precision \frac{TP}{TP FP} \tag{1-2} PrecisionTPFPTP​(1-2) Recall即召回率表示在实际的正例中有多少被预测出来了具体公式如下 RecallTPTPFN(1-3)Recall \frac{TP}{TP FN} \tag{1-3} RecallTPFNTP​(1-3) 这里要注意的是正例是我们人为定义的定义白球为正例则有 Precision1011,Recall10101Precision \frac{10}{11}, Recall \frac{10}{10} 1 Precision1110​,Recall1010​1 定义黑球为正例则有 Precision111,Recall120.5Precision \frac{1}{1} 1, Recall \frac{1}{2} 0.5 Precision11​1,Recall21​0.5 每个类别都有自己的precision和recall细粒度的评价指标就有了。 这里我们再停下来思考一下 1Accuracy和这两个指标的有什么联系吗 答每个类别的Recall就是每个类别的Accuracy当测试样本中只有正例时Recall就等于Accuracy。比如我们在说目标检测的Recall的时候是没有负例的我们只有“前景”这样一个正例此时的Recall就是Accuracy。从公式上看只有正例时TNFP0TNFP0TNFP0AccuracyRecall。换句话说Accuracy是Recall的一种特殊情况。 对正例的定义相当重要。 2Precision和Recall之间有什么联系 分类时会设置一个置信度阈值高于该阈值的被认为是正例低于该阈值的被认为是负例TP, FN, FP, TN随着置信度阈值的变化而变化。变化时Precision和Recall是一个此消彼长的变化趋势如下图1-15所示该变化曲线包络的面积越大证明模型的效果越好。面积比较难求通常会看平衡点”Break-Event Point简称BEP处的取值这里不展开讲感兴趣的可以看下参考资料3。 图1-15 Precision和Recall关系图3置信度阈值确定时每个类别两个指标在一好一坏的情况下很难评价两个模型的好坏可以只用一个指标吗 答见下节的F1 Score。 1.3.3 F1 Score 通常使用精准率和召回率这两个指标来评价二分类模型的分析效果。但当这两个指标发生冲突时很难在模型之间进行比较。假如有两个模型模型A精确率为80%召回率为90%模型B的精确率为90%召回率为80%。如何来评价A和B哪一个的综合性能更优呢 为了解决这个问题人们提出了FβF_βFβ​分数意义就是将精准率和召回率这两个分值合并为一个分值在合并过程中召回率是精确率的βββ倍。 Fβ(1β2)×P×Rβ2×PR(1-4)F_\beta \frac{(1\beta_2) \times P \times R}{\beta^2 \times P R} \tag{1-4} Fβ​β2×PR(1β2​)×P×R​(1-4) F1分数认为召回率和精确率同样重要相当于两者的调和平均数 F121P1R2×P×RPR(1-5)F1 \frac{2}{\frac{1}{P} \frac{1}{R}} \frac{2 \times P \times R}{P R} \tag{1-5} F1P1​R1​2​PR2×P×R​(1-5) 除F1之外F2分数和F0.5分数在统计学中也被大量应用。主要还是看对召回率和精确率哪一个指标需求更大一些同时也能兼顾到另一个指标。 下面举两个例子来看看F1 Score和Accuracy的区别 假设好苹果为正例 图1-16 示例1P1P1P1R0.1R0.1R0.1所以有F12×1×0.110.118.2%F1 \frac{2 \times 1 \times 0.1}{1 0.1} 18.2\%F110.12×1×0.1​18.2%Accuracy1101901055%Accuracy \frac{1 10}{1 9 0 10} 55\%Accuracy19010110​55%。 图1-17 示例2P0.5P0.5P0.5R1R1R1所以有F12×0.5×10.5166.7%F1 \frac{2 \times 0.5 \times 1}{0.5 1} 66.7\%F10.512×0.5×1​66.7%Accuracy10010010950%Accuracy \frac{10 0}{10 0 10 9} 50\%Accuracy100109100​50%。 从这两个例子从可以看出Accuracy更关注的正反例整体的预测情况而F1-score更关注正例中的预测情况。 可以看出这些指标都是根据需求不断改进的没有哪个指标更正确完全看场景和需求。指标的设计在现在仍旧不够完善比如图像生成任务的评价指标仍是研究热点。 对于图像分类的任务实际情况下还是以Accuracy为主。 1.4 分类图像模型总体框架 对分类任务有了一个大概了解之后来看下深度学习中处理分类问题的总体框架如下图1-10所示。接下来的章节会对标明序号的部分做详细的说明。 图1-18 图像分类任务的总体框架图2 线性分类器 2.1 图像的表示方法 图像的表示也就是模型店输入。模型的输入可以有不同的形式一个好的输入可以帮助模型屏蔽掉无用的信息突出关键信息是的模型更容易学习到关键特征。图像的表示方法可以总结为下图所示的几种常用的还是像素值表示。 图2-1 图像表示方法2.2 Cifar10数据集介绍 本文中使用到的数据集为Cifar10数据集它出自于规模更大的一个数据集TinyImages它有八千万张小图片Cifar10是它的一个子集。 Cifar10包含 10 个类别的 RGB 彩色图 片飞机 airplane 、汽车 automobile 、鸟类 bird 、猫 cat 、鹿 deer 、狗 dog 、蛙类 frog 、马 horse 、船 ship 和卡车 truck 。图片的尺寸为 32×32 数据集中一共有50000张训练图片和10000张测试图片。 图2-2 Cifar10数据集示例图2.3 分类算法输入 大多数都分类算法都要求输入的是一个向量本文将图片展开成一维的向量这是一种最为简单粗暴的方式。 图2-3 图像转向量一张RGB三通道的32×3232 \times 3232×32的图片展开称为向量后其维度变为1×30721 \times 30721×3072。 2.4 线性分类器 本文不涉及神经网络只是讲深度学习的总体流程所以分类模型选择了线性分类器。 线性分类器是一种线性映射将输入的图像特征映射为类别分数其特点是 形式简单、易于理解通过层级结构神经网络或者高维映射支撑向量机可以 形成功能强大的非线性模型 假设共有ccc个类别每个类别分别有一个线性分类器第i∈[1,2,...,c]i \in [1,2,...,c]i∈[1,2,...,c]个分类器的定义为 fi(x,wi)wiTxbi(2-1)f_i(x, w_i) w_i^Tx b_i \tag{2-1} fi​(x,wi​)wiT​xbi​(2-1) 预测时图片会分别输入每个分类器当中取得分最高的类别为预测类别。 举一个实际的例子假设一张超级简单的单通道图片只有四个像素点如下图2-4所示。 图2-4 输入示例假设权重wiw_iwi​和bib_ibi​已经全都学好固定下来了那么可以计算每个类别的得分如下图2-5所示。 图2-5 类别得分示例整个过程就是这么简单。 这里会有一个疑问这个学出来的权重到底是个什么由于权重wiw_iwi​的维度和输入维度是一致的我们将模型在1×30721 \times 30721×3072输入上训练出来的权重还原回32×32×332 \times 32 \times 332×32×3的图像可以得到下图2-6所示的结果。 图2-6 权重可视化不难看出对应类别的权重有着该类别的物体形状和颜色。我们不妨这样来想不考虑bib_ibi​线性分类器其实做了一个内积的操作内积就是余弦距离当两个向量之间的夹角越小距离就越接近内积就越大分数也就越大。比如训练集只有一张图片那么权重wiw_iwi​等于这样图片就会是我们训练出来的结果。现在的结果可以理解为每个类别所有图片的均值。 权值可以看作是一种模板输入图像与评估模板的匹配程度越高分类器输出的分数就越高。 不过这个分类器也有很多的弊端 1不同光照的影响 内积包括了两个向量的模长如果将图像的每个像素点除以2得分也会减半但图像的类别没有变化。 2不同视角不同尺度的影响 将图像旋转180度或是缩小一倍模板就匹配不上了得分也会骤减但图像的类别没有变化。 3背景的影响 当物体很小时图片大部分区域都是背景如果输入图片的背景和模板很相似而类别换成了其他的物体背景的得分占优类别会被误判。 这些都是图像分类时需要解决的问题很显然简单的线性分类器天然无法解决这些问题。关于分类器的设计本文不讲会在下一章中介绍。 线性分类器也可以认为学了一个决策面如下图2-7所示。 图2-7 决策面示意图3 损失函数 3.1 损失函数的定义 训练模型需要定义损失函数训练的过程就是使得损失值不断减小的过程。 损失函数的通用定义可以表示为 L1N∑iLi(f(xi,W),yi)(3-1)L \frac{1}{N}\sum_{i}L_i(f(x_i, W), y_i) \tag{3-1} LN1​i∑​Li​(f(xi​,W),yi​)(3-1) 其中xix_ixi​表示数据集中的第iii张图片f(xi,W)f(x_i, W)f(xi​,W)分类器对xix_ixi​的预测结果yiy_iyi​为样本iii真实类别标签LiL_iLi​为第iii个样本点的损失LLL为数据集的总损失它是数据集中所有样本损失的平均。 3.2 多类支持向量机损失 回到线性分类器的例子这里用到的损失函数为 Li∑j≠yi{0,ifsiyi≥sij1sij−siyi1otherwise∑j≠yimax⁡(0,sij−siyi1)(3-2)\begin{aligned} L_i \sum_{j \neq y_i}\begin{cases} 0, if s_{iy_i} \geq s_{ij} 1 \\ s_{ij} - s_{iy_i} 1 otherwise \end{cases} \\ \sum_{j \neq y_i} \max (0, s_{ij} - s_{iy_i} 1) \end{aligned} \tag{3-2} Li​​j​yi​∑​{0,sij​−siyi​​1​ifsiyi​​≥sij​1otherwise​j​yi​∑​max(0,sij​−siyi​​1)​(3-2) 其中jjj表示类别标签取值范围[1,2,3,…,c][1,2,3,\dots, c][1,2,3,…,c]sijs_{ij}sij​表示第iii个样本第jjj个类别的预测分数siyis_{iy_i}siyi​​表示第iii个样本第yiy_iyi​个类别的预测分数。 sijfi(xi,wj,bj)wjTxibj(3-3)s_{ij} f_i(x_i, w_j, b_j) w_j^T x_i b_j \tag{3-3} sij​fi​(xi​,wj​,bj​)wjT​xi​bj​(3-3) 其中wjw_jwj​, bjb_jbj​表示第jjj个类别分类器的参数xix_ixi​表示数据集中的第iii个样本。 这种max⁡(0,⋅)\max(0, \cdot)max(0,⋅)形式的损失也被称为折页损失(hinge loss)。 图3-1 折页损失示意图也就是当siyi≥sij1s_{iy_i} \geq s_{ij} 1siyi​​≥sij​1后我们就认为模型已经学习的够了不需要进行步学习了。不过这里为什么是1而不是siyi≥sij2s_{iy_i} \geq s_{ij} 2siyi​​≥sij​2而不是siyi≥sij10.6s_{iy_i} \geq s_{ij} 10.6siyi​​≥sij​10.6。理论上这些取值都是可以的但不同的值会对结果有一定的影响取1是因为在这个任务中设计为了1如果取不同值影响不大也就无所谓了。这些都是深度学习工作者需要思考的问题。 这里同样举一个例子。假设有3个类别的训练样本各一张分类器对三个类别的打分如下所示 图3-2 loss计算示例1根据结果计算多类支持向量机损失比如bird这一类的计算过程为 Li∑j≠yimax⁡(0,sij−siyi1)max⁡(0,−2.3−0.61)max⁡(0,1.9−0.61)2.3(3-4)\begin{aligned} L_i \sum_{j \neq y_i} \max (0, s_{ij} - s_{iy_i} 1) \\ \max(0, -2.3-0.61) \max(0, 1.9-0.61) \\ 2.3 \end{aligned} \tag{3-4} Li​​j​yi​∑​max(0,sij​−siyi​​1)max(0,−2.3−0.61)max(0,1.9−0.61)2.3​(3-4) 所有结果如下图3-3所示。 图3-3 loss计算示例2又到了思考的环节。对模型的改进其实就是在不断质疑设计中的每一个细节的过程中产生的。 1LiL_iLi​的最大值和最小值是多少 答最大值是无穷大最小值为0。Loss的设计必须满足有最小值不然模型会无止尽地训练下去。 2初始化时www和bbb都为0总损失LLL会是多少 答www和bbb都为0时所有输出均为0Lc−1Lc-1Lc−1。这其实可以用来检验代码有没有编写正确如果www和bbb设置为0输出不是Lc−1Lc-1Lc−1那代码就有问题了。 3考虑所有类别包括jyijy_ijyi​损失会有什么变化 答LiL_iLi​会比原来大1仅此而已。也就是∑j≠yi\sum_{j \neq y_i}∑j​yi​​可以改为∑j\sum_{j}∑j​效果上不会有影响只是计算更加方便。 4在计算总损失时用求和代替平均会有什么影响 答总损失会放大N倍效果上不会有影响。 5多标签的情况下该损失是否适用 答不能直接适用需要将Loss稍作修改下式(3−5)(3-5)(3−5)是一种修改方式。预测错误的标签数量越多损失越大。但是标签数量不同的标签之间损失会不平衡。怎样是更好的Loss留给读者思考。 Li∑yi∈Y∑j∉Ymax⁡(0,sij−siyi1)(3-5)L_i \sum_{y_i \in Y}\sum_{j \notin Y} \max (0, s_{ij} - s_{iy_i} 1) \tag{3-5} Li​yi​∈Y∑​j∈/​Y∑​max(0,sij​−siyi​​1)(3-5) 6假设存在一个WWW使损失函数L0L0L0这个WWW是唯一的吗 答不唯一。 举个例子假设两个线性分类器f1(x,W1)W1xf_1(x, W_1)W_1xf1​(x,W1​)W1​xf2(x,W2)W2xf_2(x, W_2)W_2xf2​(x,W2​)W2​x其中W22W1W_22W_1W2​2W1​。对于下面图像分类器1和分类器2的打分结果分别为 图3-4 分类器打分结果可见两个不同的权重下LLL都等于0。那么新的问题来了如何在这两个权重中做选择呢 这个时候就该正则项出场了。 3.3 正则项 正则项的通用表示为R(W)R(W)R(W)有了正则项的损失函数变为了 L(W)1N∑iLi(f(xi,W),yi)λR(W)(3-6)L(W) \frac{1}{N}\sum_{i} L_i (f(x_i, W), y_i) \lambda R(W) \tag{3-6} L(W)N1​i∑​Li​(f(xi​,W),yi​)λR(W)(3-6) 其中R(W)R(W)R(W)为超参数控制着正则损失在总损失当中的比重。 这里顺便说一下超参数的定义。超参数指的是在开始学习过程之前设置的参数不是通过学习得到的。当然现在也有许多学习超参数的方法比如元学习这里不展开讲。超参数对模型的性能有着重要的影响。 这里以式(3−6)(3-6)(3−6)中的λ\lambdaλ为例当λ0\lambda0λ0时优化结果仅与数据损失相关当λ∞\lambda\inftyλ∞时优化结果与数据损失无关仅考虑权重损失此时系统最优解为W0W0W0。 再举一个正则项的具体例子L2正则项。 R(W)∑k∑lwk,l2(3-7)R(W) \sum_{k} \sum_{l} w^{2}_{k, l} \tag{3-7} R(W)k∑​l∑​wk,l2​(3-7) 其中kkk表示类别序号lll表示kkk类别对应的第lll个权重。 L2正则损失对大数值权值进行惩罚喜欢分散权值鼓励分类器将所有维度的特征都用起来而不是强烈的依赖其中少数几维特征。 图3-5 L2损失示例4 优化算法 4.1 优化算法目标 优化算法的作用时更新模型中的参数也就是学习的过程。学习需要有目标而损失函数就是我们的目标函数 L(W)1N∑iLi(f(xi,W),yi)λR(W)(4-1)L(W) \frac{1}{N}\sum_{i} L_i (f(x_i, W), y_i) \lambda R(W) \tag{4-1} L(W)N1​i∑​Li​(f(xi​,W),yi​)λR(W)(4-1) 我们的目标是求解使得L(W)L(W)L(W)最小的那组WWW。 直接求解令∂L∂W0\frac{\partial L}{\partial W} 0∂W∂L​0的做法通常不太现实因为L(W)L(W)L(W)会是一个相当复杂的的复合函数。 通常通过梯度下降的方法步步逼近最小值。 4.2 梯度下降算法 梯度下降涉及到两个问题一个是往哪儿走另一个是走多远 图4-1 梯度下降示意图先来看往哪儿走的问题。我们希望每走一步损失函数的值可以减小一点而且我们希望走同样的步长沿着我们选择的方向走损失值可以减小的更快也就是通常说的下降得更快。 这个问题的答案是负梯度方向我们来看下为什么。 借助于泰勒公式我们有 f(xδ)−f(x)≈f’(x)⋅δ(4-2)f(x δ) − f(x) ≈ f’(x) \cdot δ \tag{4-2}f(xδ)−f(x)≈f’(x)⋅δ(4-2) 由于f’(x)f’(x)f’(x)和δδδ都是向量根据内积的定义有 f’(x)⋅δ∣f’(x)∣⋅∣δ∣cosθ(4-3)f’(x) \cdot δ |f’(x)| \cdot |δ| cos\theta \tag{4-3} f’(x)⋅δ∣f’(x)∣⋅∣δ∣cosθ(4-3) 目的是使得f(xδ)f(x δ)f(xδ)尽可能比f(x)f(x)f(x)小故要使得f’(x)⋅δf’(x) \cdot δf’(x)⋅δ负的最小也就是θπθπθπ的时候。此时f’(x)f’(x)f’(x)和δδδ方向相反也就是负梯度方向。 至于另一个走多远的问题答案就是由步长来决定。 在梯度下降时是利用所有样本计算损失并更新梯度的。学习率可以控制步长。 图4-2 梯度更新示意图4.3 梯度计算 计算梯度的方法主要分为两种数值法和解析法。 1数值法 数值法对应于离散的求法也就是参数发生小的变化根据值发生对应的变化来计算梯度。其特点是计算量大不精确。 举个例子假设损失函数L(w)w2L(w)w^2L(w)w2求w1w1w1点处的梯度。 dL(w)dwlimh→0L(wh)−L(w)h≈L(10.0001)−L(1)0.00012.0001(4-4)\frac{dL(w)}{dw}lim_{h→0}\frac{L(wℎ) − L(w)}{h} ≈ \frac{L(1 0.0001) − L(1)}{0.0001}2.0001 \tag{4-4}dwdL(w)​limh→0​hL(wh)−L(w)​≈0.0001L(10.0001)−L(1)​2.0001(4-4) 2解析法 解析法就是直接求导数的表达式并代进去求解。其特点是精确速度快但导数函数推导易错。 还是以L(w)w2L(w)w^2L(w)w2求w1w1w1点处的梯度为例。 ∇L(w)2w,∇w1L(w)2(4-5)\nabla L(w) 2w, \nabla_{w1} L(w) 2 \tag{4-5} ∇L(w)2w,∇w1​L(w)2(4-5) 实际求梯度时一般使用解析梯度而数值梯度主要用于解析梯度的正确性校验梯度检查。 4.4 多类支持向量机损失函数梯度 回顾一下多类支持向量机损失函数为 Li∑j≠yimax⁡(0,(wjTxibj)−(wyiTbyi)1)(4-6)L_i \sum_{j \neq y_i} \max(0, (w_j^Tx_i b_j) - (w_{y_i}^T b_{y_i}) 1) \tag{4-6} Li​j​yi​∑​max(0,(wjT​xi​bj​)−(wyi​T​byi​​)1)(4-6) 对该式的wjw_jwj​和bjb_jbj​求偏导有 ∂Li∂wj{0,wjTxibj)−(wyiTbyi)1≤0xi,wjTxibj)−(wyiTbyi)10∂Li∂bj{0,wjTxibj)−(wyiTbyi)1≤01,wjTxibj)−(wyiTbyi)10(4-7)\begin{aligned} \frac{\partial L_i}{\partial w_j} \begin{cases} 0, w_j^Tx_i b_j) - (w_{y_i}^T b_{y_i}) 1 \leq 0 \\ x_i, w_j^Tx_i b_j) - (w_{y_i}^T b_{y_i}) 1 \gt 0 \end{cases}\\ \frac{\partial L_i}{\partial b_j} \begin{cases} 0, w_j^Tx_i b_j) - (w_{y_i}^T b_{y_i}) 1 \leq 0 \\ 1, w_j^Tx_i b_j) - (w_{y_i}^T b_{y_i}) 1 \gt 0 \end{cases} \end{aligned} \tag{4-7} ​∂wj​∂Li​​{0,xi​,​wjT​xi​bj​)−(wyi​T​byi​​)1≤0wjT​xi​bj​)−(wyi​T​byi​​)10​∂bj​∂Li​​{0,1,​wjT​xi​bj​)−(wyi​T​byi​​)1≤0wjT​xi​bj​)−(wyi​T​byi​​)10​​(4-7) 4.5 随机梯度下降 在利用梯度下降的时候每次都需要对所有样本求一次损失复杂度是O(n)O(n)O(n)的。这样计算的开销太大。为了减小计算开销我们可以放弃一点对方向的精度于是就有了随机梯度下降法。 随机梯度下降的每次迭代中我们随机平均采样一个样本索引i∈1,…,ni∈{1,…,n}i∈1,…,n并计算梯度∇fi(x)∇f_i(x)∇fi​(x)来迭代xxx x←x−η∇fi(x)(4-8)x←x−η∇f_i(x) \tag{4-8} x←x−η∇fi​(x)(4-8) ηηη为学习率。可以看到每次迭代的计算开销从梯度下降的O(n)O(n)O(n)降到了常数O(1)O(1)O(1)。 讲到这里也许会有疑问。这么算不对啊梯度下降的复杂度是O(n)O(n)O(n)是因为它把所有的样本都看了一遍如果随机梯度下降也把所有样本都看一遍的话复杂度也是O(n)O(n)O(n)。这两者有什么区别吗 有大有区别别忘了梯度下降虽然方向准确但是步长是不知道为了不走过头每次都只往正确的方向上走一小步然后下次迭代时就又要重新计算了。随机梯度下降虽然方向不准确但是每走一步都在修正方向歪歪扭扭地最终也能走到极小值点。同样是看一遍所有的数据梯度下降只能走一步随机梯度下降可以走nnn步。正是因为步长需要试探使得随机梯度下降占了很大的优势。 5 数据处理 5.1 数据集的划分 我们通常将数据集DDD划分为两个互斥的集合其中一个集合作为训练集SSS另一个作为测试集TTT即DS∪TDS∪TDS∪TS∩T∅S∩T∅S∩T∅。在SSS上训练出模型后用TTT来评估其效果。 图5-1 数据划分示意图-1但是这样会有一个问题。训练多个epochs模型会输出多个权重如何挑选权重直接的想法是对比模型在不同权重下的测试集效果。这种做法可行吗不可行因为这样其实测试集已经被利用了这种情况下无法真实评估出模型的泛化能力。 解决方案是使用验证集。 训练集用于分类器参数的学习。验证集用于选择最佳权重。测试集评估泛化能力。 图5-2 数据划分示意图-2问题又来了如果数据很少那么验证集包含的样本就太少从而无法在统计上代表数据怎么办 一种方式叫做K折交叉验证。 K折交叉验证将除测试集外的所有样本DDD划分为kkk个大小相似的互斥子集即DD1∪D2∪⋯∪Di∩Dj∅i≠jDD1∪D2∪⋯∪Di∩Dj∅i≠jDD1∪D2∪⋯∪Di∩Dj∅i​j。每个子集都要尽可能保持数据分布的一致性即从DDD中通过分层采样得到。然后用(k−1)(k−1)(k−1)个子集的并集作为训练集余下的子集作为验证集。这样就可以获得kkk组训练/验证集从而可以进行kkk次训练和验证最终返回的是kkk个验证结果的均值根据该值来选择合适的模型。交叉验证法评估结果的稳定性和保真性在很大程度上取决于kkk的取值。3折交叉验证如下图5-3所示。 图5-3 3折交叉验证示意图选出的模型最后可以通过以下两种方式得到最终模型 1合并训练集和验证集一并训练后在测试集上测试其泛化能力。 2使用K折验证训练时分类器参数的均值然后在测试集上测试器泛化能力。 为了避免随机性带来的影响还有打乱数据的重复kkk折交叉验证。 图5-4 打乱数据的重复k折交叉验证示意图带有打乱数据的重复kkk折交叉验证就是多次使用kkk折验证在每次将数据划分为kkk个分区前先将数据打乱。最终分数是多次kkk折验证分数的平均值。 5.2 数据的预处理 假设x[x1,x2]Tx[x_1, x_2]^Tx[x1​,x2​]Tx1x_1x1​和x2x_2x2​分别是输入的两个特征x1[1,2,3,….]x_1[1,2,3,….]x1​[1,2,3,….]x2[100,200,300,…]x_2[100,200,300,…]x2​[100,200,300,…]对于模型y^∑iwixibi\hat{y}\sum_i w_i x_ib_iy^​∑i​wi​xi​bi​L(w,b)∑i∣yi−y^i∣L(w, b) \sum_i |y_i - \hat{y}_i|L(w,b)∑i​∣yi​−y^​i​∣。显然由于x1x_1x1​的取值小引起yyy的变化小进而对LLL的影响也小因此w1w_1w1​方向的梯度就小。同理w2w_2w2​方向的梯度就大。从而模型会更偏向w2w_2w2​梯度的方向更新参数。 图5-5 不同特征尺度示意图通过这个分析我们发现要使w1w_1w1​和w2w_2w2​方向上的梯度相近就应该使其相应的输入的取值在一个范围内。相应的方法就是特征归一化。 图像预处理中最常用的归一化是最大最小归一化Min-Max Normalization使结果值映射到[0,1][0,1][0,1]之间转换函数如下 x′x−min(x)max(x)−min(x)(5-1)x \frac{x - min(x)}{max(x) - min(x)} \tag{5-1} x′max(x)−min(x)x−min(x)​(5-1) 最大最小归一化之所以适用于图像预处理是因为最大最小值是固定的255和0数值比较集中。 图5-6 归一化结果示意图5.3 数据增广 数据增广是深度学习中常用的技巧之一主要用于增加训练数据集不仅可以让数据集尽可能的多样化而且随机改变训练样本可以降低模型对于某些属性的依赖从而提升模型的泛化能力。例如可以对图像进行随机的平移使感兴趣的物体出现在不同位置以减轻模型对出现位置的依赖项。也可以对图像进行随机裁剪使得模型不依赖于对象的完整特征从而通过局部特征也可以识别出物体。一个比较经典的数据增广库就是albumentations。 目前数据增广主要包括 水平/垂直翻转旋转缩放裁剪平移对比度色彩抖动噪声 图5-7 数据增广示意图6 参考资料 [1] 计算机视觉与深度学习 北京邮电大学 鲁鹏 清晰版合集完整版 [2] 动手学深度学习-pytorch [3] https://zhuanlan.zhihu.com/p/110015537
http://www.zqtcl.cn/news/384371/

相关文章:

  • 公司网站建设服务类别最便宜云主机永久免费
  • 心悦dnf免做卡网站竞价恶意点击犯法吗
  • 企业网站的类型包括无锡专业网站建设
  • 手机版刷赞网站建设软文代写文案
  • 网站内容与目录结构色一把做最好的网站
  • 优化网站方法企业做网站属于广告宣传费吗
  • 站长之家alexa排名网站架构 seo
  • 四川智能网站建设制作建设网站代理
  • 对网站建设好学吗智慧企业解决方案
  • 网站建站平台eazyshoph5制作微信小程序
  • 扬中网站建设 优帮云望野古诗带拼音
  • 网站和discuz同步登录建设产品网站课程
  • 常州做网站多少钱图片链接在线生成器
  • 服务器网站打不开可以做哪些网站
  • 建设银行网站信息补充网站如何备份
  • 网站建设 杭州市萧山区网页此站点不安全
  • 微网站免费开发平台钟表珠宝商城网站建设
  • 帮建网站的人wordpress广告栏
  • 怎么学建网站教做甜品网站
  • 建网站 服务器需要安装 tomcat安徽城乡建设 厅网站
  • 建筑公司企业简介模板关于网站优化的文章
  • 绥化网站建设兼职互联网大厂设计哪家口碑好
  • 成交型网站建设公司六安亿联网络科技有限公司
  • 优秀行业网站广州网站建设怎么样
  • 南宁建设信息网seo推广公司排名
  • 凯发网站国外网站博客网站也可以做引流
  • 网站设计要学什么vestacp wordpress
  • 模板建站代理3免费做网站
  • 酒店官方网站的功能建设百度网盟推广案例
  • 屯昌网站建设wap网站搭建