第十六章,终有神器让PS现原形
分类:互联网

澳门新葡8455最新网站 1

在图像信息技术被广泛应用的情况下,对图像质量的评估变成一个广泛而基本的问题。由于图像信息相对于其它信息有着无可比拟的优点,因此对图像信息进行合理处理成为各领域中不可或缺的手段。在图像的获取、处理、传输和记录的过程中,由于成像系统、处理方法、传输介质和记录设备等不完善,加之物体运动、噪声污染等原因,不可避免地带来某些图像失真和降质,这给人们认识客观世界、研究解决问题带来很大的困难。 

20180722:pyimageresearch的DeepLearning for ComputerVision电子书阅读笔记。

灰天鹅是可以模型化的极端事件,而黑天鹅是未知的未知。

这是Olay的广告图对比。该广告因为误导消费者被封杀。

比如,在图像识别中,所采集到的图像质量直接影响识别结果的准确性和可靠性;又如,远程会议和视频点播等系统受传输差错、网络延迟等不利因素影响,都需要在线实时的图像质量监控,以便于服务提供商动态地调整信源定位策略,进而满足服务质量的要求;在军事应用方面,战场监视和打击评估的效果也取决于无人机等航拍设备所采集到的图像或视频的质量。因此,图像质量的合理评估具有非常重要的应用价值。

澳门新葡8455最新网站 2封面

1、分形和幂律

经典的几何学是完美的三角形、圆形和其它几何形状,但是这些形状在人造的物体里比较容易找到,但是在大自然里却很难找到完美的对应物。长期以来,人们习惯于这是数学对自然的抽象,并没有觉得有什么不妥。

但是1973年,曼德尔布罗特首次提出了分形理论,却用同样精炼的数学语言完美的拟合了自然界真实存在的几何图形。这一可以被理解为“找到了上帝造物的公式”的发现,竟然迟到了几千年。曼德尔布罗特发现,很多物体,比如山脉、海岸线、雪花,树枝都有个共同的特点,不断的缩小观测尺度时,会发现其形状是一样的,有自相似性。而在计算机上模拟的话,只需要一个把结果作为输出的循环公式,就可以通过一个很简单的数学模型,模拟出复杂的结构,而这个复杂的结构是由很多有自相似性的更小的结构组成。

巧合的是,这个数学公式和幂律分布是一样的。财富分部等幂律分布也符合分形特点,100万美元以下的收入分部曲线,和1000万美元以下,10个亿以下的具有自相似性。更富的人和一般富有的人是相似的。

可以做一个简单的对应,经典几何对应正态分布,解释的是确定性;分形对应幂律,解释的是随机性

对于日益滥用的图像美化和修改,你是否早已心生厌倦?在杂志上网络上,满眼俊男靓女。然而环顾四周,只觉众人面容惨不忍睹。长此以往,对镜贴花黄时,只恨苍天不公,痛不欲生。这一切,都是图像美化工具惹的祸。整顿过度美化,事不宜迟。

从有没有人参与的角度区分,图像质量评价方法有主观评价和客观评价两个分支。主观评价以人作为观测者,对图像进行主观评价,力求能够真实地反映人的视觉感知;客观评价方法借助于某种数学模型,反映人眼的主观感知,给出基于数字计算的结果。

上一章作者讨论了k-NN分类器,一个机器学习的简单模型,但是k-NN只是简单的对数据进行分类,它本身没有“学习”数据集中的任何东西。

2、灰天鹅

分形和幂律都有个特点,随着不断的自我循环和反馈,存在一个临界值,突破这个临界值后,不均衡会加剧。我们知道存在这个临界值,也知道存在一个分数维度或者假设指数,但是我们无法准确的得到这个指数和临界值。

不管我们假设世界符合怎样的模型,我们都难以知道模型的参数。而且,对于极端情况,归纳问题也会再次出现,总会有归纳法失效的时候。

所以就算分形和幂律可以解释很多现象,用他们来进行预测时,仍然要对精确的结果小心。它们不可能把黑天鹅变白,最多变灰。

而且,分形的自相似,准确的讲应该是自仿,并非精确的相似。

使用分形和幂律,比使用经典几何和正态分布,能更好的找到 一部分黑天鹅,把他们变成灰天鹅,但仍然不是全部。黑天鹅是未知的未知。

近日,针对该目的的科学研究有了新进展。美国达特茅斯学院推出一款测定程序,通过它,可以定量地测算出图像的美化程度。

图像质量的主观评价
主观评价只涉及人作出的定性评价,它以人为观察者,对图像的优劣作出主观的定性评价。对于观察者的选择一般考虑未受训练的“外行”或者训练有素的“内行”。该方法是建立在统计意义上的,为保证图像主观评价在统计上有意义,参加评价的观察者应该足够多。主观评价方法主要可分为两种:绝对评价和相对评价。
绝对评价
所谓绝对评价,是由观察者根据自己的知识和理解,按照某些特定评价性能对图像的绝对好坏进行评价。通常,图像质量的绝对评价都是观察者参照原始图像对待定图像采用双刺激连续质量分级法(Double Stimulus Continuous Scale,DSCQS),给出一个直接的质量评价值。具体做法是将待评价图像和原始图像按一定规则交替播放持续一定时间给观察者,然后在播放后留出一定的时间间隔供观察者打分,最后将所有给出的分数取平均作为该序列的评价值,即该待评图像的评价值。国际上也对评价尺度做出了规定,对图像质量进行等级划分并用数字表示,也称为图像评价的5分制“全优度尺度”。(见表1.1)

经过讨论了k-NN的优缺点,我们发现k-NN算法对于数据集的依赖程度很高。模型训练相对简单,测试过程比较慢,瓶颈出现在了计算向量之间的距离。当数据集比较大的时候,计算待分类图像和数据集模型之间的距离变得很不方便,计算量会非常大。虽然我们可以使用ANN(Approximate Nearest Neighbor)算法,FLANN或者Annoy算法加速计算过程。

3、启发

人类是善于寻找规律的动物,我们甚至都对随机现象找到了规律来解释,比如幂律、分形、混沌、蝴蝶效应、非线性等等。

但是同时,我们也要知道,这个世界上是存在未知的未知的。牛顿力学时代,人们是无法理解时间也是相对的、空间可以弯曲这些概念。有些人知道这世界上存在房价崩盘,对于这些人来说崩盘是灰天鹅,但是还有些人,就没想过房价还会大跌,对于这些人来说房价大跌就是黑天鹅。

911恐怖分子劫持民航客机撞向世贸大楼,对于很多人来说,是十足的未知的未知。

我们如何能够变的更智慧,就是在知道存在未知的未知的基础上,尽可能的把未知的未知变成已知的未知 ,把黑天鹅变成灰天鹅。

澳门新葡8455最新网站 3

澳门新葡8455最新网站 4

但是对于实例化数据中的副本信息(a replica of data inside the instantiation这里不明白是在说什么,直接翻译为数据实例的副本信息,不好理解。。。)还是无能为力。

色码图式表示图像不同区域的修改程度。红色最高,蓝色最弱。

相对评价
相对评价中没有原始图像作为参考,是由观察者对一批待评价图像进行相互比较,从而判断出每个图像的优劣顺序,并给出相应的评价值。通常,相对评价采用单刺激连续质量评价方法(Single Stimulus Continuous Quality Evaluation,SSCQE)。具体做法是,将一批待评价图像按照一定的序列播放,此时观察者在观看图像的同时给出待评图像相应的评价分值。相对于主观绝对评价,主观相对评价也规定了相应的评分制度,称为“群优度尺度”(见表1.2)。

对于不能存储实例化的副本信息的理解。如果想要把一个基于上百万张图片的k-NN模型部署到客户那里,那么数据集的大小会达到Gb级别,数据容量过大导致部署困难。这里相对容易理解,假如要把训练好的模型部署到手机上,一个容量需要上Gb的模型,肯定是不现实的。那么这时候可以理解为,我们需要一个模型,模型中承载了一个分类的“算法”,而不需要模型把训练的数据集都承载进去。

该项目负责人,图像辨别学家哈尼·法里德教授说:“宣传商们总以为他们拥有充分的理由去修改图片,以让其卖相更佳,但往往却美化得过了火。当大量这样的图片滥斥之后,在图文并茂的版面上,就难免会出现文过饰非的情况。”

澳门新葡8455最新网站 5

那么参数化学习(parameterized learning)就是为了解决这个问题而提出的,它的作用是:定义少量的参数来表示训练好的模型,那么只需要部署这个参数集就可以给分类器赋能,而不必部署训练模型时使用到的原始数据集。

据11月28日发表在《美国国家科学院院刊》(Proceedings of the National Academy of Sciences)上的 学术文章 介绍,法里德和他的博士生艾瑞克通过分析468组原始图像和美化后的图像,得到一个正式的数学模型,来描述图像中基于形状和特征的美化程度。该模型的输出数据为从1到5的分数权衡,其中5分代表后期润色程度最高。

图像质量客观评价

参数化模型的定义如下:

为了证实模型的有效程度,法里德和艾瑞克还利用亚马逊旂下的服务型网站“土耳其机器人(MechanicalTurk)”随机寻找到50名志愿者,来为这些图像的美化程度进行人工打分。最后得到的数据显示,人工评分与该模型得到的分数相差无几。法里德教授说:“该数学模型来量化图片的美化程度,至少可以被认定为众多观察者的平均感受。”

图像质量客观评价的基本目标是设计能精确和自动感知图像质量的计算模型。其终极目标是希望用计算机来代替人类视觉系统去观看和认知图像。在国际上,图像质量客观评价通常是通过测试多个影响影像质量的因素的表现,并通过计算模型获得图像质量量化值与人类主观观测值一致性的好坏来评估的。美国的Imatest和法国的DxO analyzer就是其中比较出名的图像质量客观评价系统。

澳门新葡8455最新网站 6参数化模型定义

澳门新葡8455最新网站 7澳门新葡8455最新网站 8

澳门新葡8455最新网站 9

本章将会讨论参数化学习的理念和如何实现一个线性分类器。参数化学习是现代机器学习的基础。

研究中,模型输出的分数(右)和人工打分(左)的对比。

Imatest和DxO analyzer有异曲同工之处,都是将影像质量评测拆分成多个测试项目,分别对每个项目进行测试、打分。两者相比,DxO analyzer的测试项目会稍微全面一些。

这一章节的前半部分会介绍线性分类的理论基础和数学基础。通常来说,参数化分类算法是从数据集中学习模板数据,之后作者会用python来实现一个线性分类。

这项研究工作,是在英国政府计划对媒体业界图像的美化进行统一整顿的情况下展开的。该国心理学家长期口头讨伐这种情况:“通过过度使用图片修改技术,使得在各路媒体中,人物图像普遍有着曼妙的身材和水灵的皮肤,而这在正常人身上是很难得以实现的,从而扭曲了大众的审美观,甚至会令多数普通民众对自己的容貌自惭形秽。”

无论是Imatest还是DxO analyzer,两个测试系统都是通过“测试卡 光源环境 测试软件=测试结果”的模式。通过各种各样的测试卡和光源,在实验室中模拟各种环境,再把成像结果输入软件系统,由系统自动分析,最后得出结果。

8.1.1 Four Components of Parameterized Learning 参数学习的四个组成部分

参数化是定义一些模型必备参数的过程。那么在机器学习过程中,参数化包括:

  • 数据data
  • 打分函数scoring function
  • 损失函数loss function
  • 权重和偏差weights and biases

数据:包括图像的像素数据和图像对应的标签数据。打分函数:接受输入的图像,然后输出输入图像的预测标签和可能性分数。损失函数:用于评价预测标签和真实标签之间的差异。权重和偏差:权重一般使用W来表示,偏差使用b来表示

也许随着模型复杂度的提升,参数还会增加,但是一般来说是这四种类型的参数,我们通过调整W和b来让损失函数最小。

六月,美国医疗协会也呼吁广告业界制定统一标准,限制图像修改的上限。不过这一行动的开展,任重而道远。

我们都知道,我们之所以能看到东西,那是因为物品发出光或者是反射光线,所以,影像质量评测实验室往往会有两种光源:透射性和反射型。京立LLV-9300就是最为被广泛运用的光源之一,它能模仿非常多的环境亮度。

8.1.2 Linear Classification: From Images to Labels 线性分类:从图像到标签

这部分从数学角度分析参数化如何应用到机器学习。用我们之前提到的dogs, cats and pandas数据集作为例子,假设我们的训练数据集被表示为x_i和y_i,其中x_i表示图像数据,y_i表示图像对应的标签数据。并且假设x_i中的iin{1, ..., N},y_i中的iin{1, ..., K},然后我们就得到了N个的数据矩阵D并且分布在K维的标签空间中。

具体化到第七章的数据集中,我们的N = 3000,每个RGB图像矩阵维度为32 X 32 X 3,也就是每张图像3072个数据。标签K = 3,分别为dogscatspandas

下面定义我们的评价函数f,评价函数映射图像数据到标签分数。这是我们使用最简单的线性映射函数:f(x_i, W, b) = W{x_i} b这时候我们把图像数据看作[D * 1]的向量,也就是把图像像素数据32 X 32 X 3横向排列为3072 X 1。然后权重矩阵W具有[K * D]维度。最后是参数b,偏差向量应该具有[K * 1]的维度。

回过头来看我们的dogscatspandas数据集,每个x_i被表示为一个3072像素值的向量3072 X 1,权重参数W具有3 X 3072的维度,偏差向量b拥有3 X 1的维度。

那么第七章中的数据集可以表示为下图:

澳门新葡8455最新网站 10dogs, cats and pandas数据集的参数化示意图

我们的权重矩阵W含有三行,分别代表图像的标签(这里不好理解,虽然使用了K D,但是这个矩阵本身的每行为什么会表示数据的标签,只能说表示了数据集标签的数量,具体每行代表了一个标签是几个意思。。。),含有3072列,分别代表了图像的每个像素(同样只是数量对应,为什么会代表了具体的像素数据,不太理解)。偏差向量b包含了三个值,这三个只分别表示了待检测图像分别对应数据集中dogscatspandas的相似程度的数量化结果(具体如何量化成为三个数字,现在还不清楚)*。

公式f(x_i, W, b) = W{x_i} b中的W{x_i}之间是点积运算,一个3 X 3072的绝阵点乘3072 X 1的矩阵,得到的结果是一个3 X 1的矩阵。从而满足和b向量3 X 1相加的条件。这样看来,每张图片得到的结果是一个带有标签和对应标签分数的3 X 1矩阵。这个函数定义的算暴力,单纯看公式,图像矩阵x_i是变量,也就是写代码时候要输入的参数。接下来要做的事情应该就是通过所谓的“训练”或者“学习”过程找到最优的W矩阵和b向量了。接下来需要关注如何求取这两个参数的运算过程。

作者在接下来也陈述了下一步的关键是求取W和b这两个参数,我们的目标是使用打分函数损失函数来优化这两个参数。

具体来说,如何优化权重矩阵依赖于我们的损失函数,比如梯度下降法梯度下降将会在第九章来讨论。这里只需要简单理解我们有个打分函数,我们也会定义一个损失函数来评价我们的预测是不是足够

“其实对于这种行为的规范,立法限制的作用并不大。出于职业道德,摄影师应该对图像有所标注,明确其是否有所修改。”法里德教授说,“其实这是一个很有意思的科学问题,怎样才是有过之而无不及?具体的上限在哪里?这些都是我们在研究过程中深入思考的问题。”

澳门新葡8455最新网站 11

8.1.3 Advantages of Parameterized Learning and Linear Classification 参数化学习的有点和线性分类

参数化学习的好处主要有以下两点:

    1. 只要我们完成一次训练, 我们可以抛开训练数据集,只保留权重矩阵W和偏差向量b
    1. 分类新的测试数据速度非常快

澳门新葡8455最新网站 12

除了光源,测试卡也是非常重要的测试用具。针对不同的测试项目,测试卡也是各有不同,有的可以测试分辨率,有的可以测试MTF,有的可以测试色差……ISO 12233测试卡是测试镜头分辨率最权威测定方法,也是国际MTF成像曲线图和镜头评估的主要依据。

8.1.4 A Simple Linear Classifier With Python 用Python实现的一个简单线性分类器

到这里我们回顾了参数学习和线性分类器的概念,接下来我们用Python来实现一个简单的线性分类器。

这个例子的目的不是展示我们如何从头到尾训练一个模型,我们在后面的章节会覆盖如何训练模型,现在还需要一些基础内容来做铺垫,这里只是简单的展示如何初始化权重矩阵W和偏移向量b,并且展示我们如何用简单的点积运算和这两个参数来进行参数分类。

那开始我们的表演(PS: 借用作者的口吻。。。),我们的目标是用Python脚本来正确分类下面这张示例图片。

澳门新葡8455最新网站 13待分类图片

首先贴上源程序linear_example.py

# USAGE# python linear_example.py# import the necessary packagesimport numpy as npimport cv2# initialize the class labels and set the seed of the pseudorandom# number generator so we can reproduce our resultslabels = ["dog", "cat", "panda"]np.random.seed# randomly initialize our weight matrix and bias vector -- in a# *real* training and classification task, these parameters would# be *learned* by our model, but for the sake of this example,# let's use random valuesW = np.random.randnb = np.random.randn# load our example image, resize it, and then flatten it into our# "feature vector" representationorig = cv2.imread("beagle.png")image = cv2.resize(orig, .flatten()# compute the output scores by taking the dot product between the# weight matrix and image pixels, followed by adding in the biasscores = W.dot   b# loop over the scores   labels and display themfor (label, score) in zip(labels, scores): print("[INFO] {}: {:.2f}".format(label, score))# draw the label with the highest score on the image as our# predictioncv2.putText(orig, "Label: {}".format(labels[np.argmax, , cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)# display our input imagecv2.imshow("Image", orig)cv2.waitKey

下面开始逐行读代码

首先我们创建一个名为linear_example.py的python脚本文件,并作如下初始化:

# USAGE# python linear_example.py# import the necessary packagesimport numpy as npimport cv2# initialize the class labels and set the seed of the pseudorandom# number generator so we can reproduce our resultslabels = ["dog", "cat", "panda"]np.random.seed

程序5~6行:导入我们需要的python包,我们使用了NumPy作为矩阵运算库,使用了OpenCV来读取图片。程序程序第10行:初始化数据集的标签为一个string类型的列表程序第11行:使用NumPy初始化一个随机数,保证了我们可以复现这里的实验结果。(这里不太理解,为什么生成随机数和复现实验结果有关系???)

假设法去理解复现实验结果:由于生成随机数的时候给了一个固定的种子1,那么随机出来的np是固定的?而且尝试把np.random.seed赋值给var test,并不能赋值成功。

网上查找关于np.random.seed()函数的用法,这里的说法和猜测的差不多,意思是只要使用同样的seed来生成,那么生成的随机数就是一样的。从而达到了复现实验结果的目的。而且如果像保证随机数不同,可以使用系统时间为种子,和.Net套路差不多,不知道会不会出现时间距离很近随机范围不够大的问题,留作之后使用时候查找了。

继续回到Python代码

# randomly initialize our weight matrix and bias vector -- in a# *real* training and classification task, these parameters would# be *learned* by our model, but for the sake of this example,# let's use random valuesW = np.random.randnb = np.random.randn

程序17~18行:使用随机值初始化W矩阵和b向量,值的范围是[0, 1],

这样初始化W和b的值只是为了展示流程,如果真的要从数据集中训练这两个参数,我们需要明白如何实现优化过程,但是这里还没涉及到优化,只是简单的做流程介绍。并且初始阶段,我们可以把W和b的值作为黑盒来看待,这样的思路不影响后面我们优化的过程。而且这个参数是作者实验出来的,并且可以得到一个正确分类的标签。这里也再度解释了为什么会有复现实验结果的说法,为什么取种子为1

继续回到Python代码

# load our example image, resize it, and then flatten it into our# "feature vector" representationorig = cv2.imread("beagle.png")image = cv2.resize(orig, .flatten()

程序22行:使用OpenCV读取图片数据程序23行:修改图像的尺寸为32 X 32,并“平铺”为3072 X 1的矩阵

# compute the output scores by taking the dot product between the# weight matrix and image pixels, followed by adding in the biasscores = W.dot   b

程序27行:使用简单的点乘给输入的图像数据打分

# loop over the scores   labels and display themfor (label, score) in zip(labels, scores): print("[INFO] {}: {:.2f}".format(label, score))# draw the label with the highest score on the image as our# predictioncv2.putText(orig, "Label: {}".format(labels[np.argmax, , cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)# display our input imagecv2.imshow("Image", orig)cv2.waitKey

程序30~31行:循环输出评分函数的结果,为什么要循环?因为score是一个3 X 1的矩阵。程序35行:在原始图片上绘制标签文本。程序39~40行:使用OpenCV在窗口中显示绘制完标签的图像。

运行结果如下图:

澳门新葡8455最新网站 14运行结果

控制台输出如下:

澳门新葡8455最新网站 15控制台输出结果

这里需要注意的是,这只是一个工作流程的示例,因为参数权重矩阵W和偏移向量b是作者给出的,虽然用了随机生成,但是种子是固定的1,所以可以看作是作者直接提供了权重矩阵W和偏移向量b的值。

手动设置的权重矩阵W和偏移向量b是没有分类能力的,这里只是演示流程,并且给出的值刚好可以“碰巧”得到正确的分类结果。实际上来说,我们需要通过训练数据集和优化算法来得到正确的权重矩阵W和偏移向量b,比如梯度下降法。

下一章我们将会使用梯度下降法来通过训练数据集得到权重矩阵W和偏移向量b。本章只需要了解运算过程就可以。

上一部分我们讨论了参数化学习的概念。这种学习模型允许我们提取输入数据和标签,并且通过学习得到一个带有参数的函数完成未知数据到标签的映射。

为了真正的通过数据集,标签和打分函数完成这个“学习”的过程,我们需要引入两个重要的概念:

  • 损失函数
  • 优化方法

本章的剩余部分将会介绍通常应用于神经网络和机器学习网络中的损失函数类型。并且Starter Bundle的第九章着重介绍基本的优化方法。Practitioner Bundle(另一本电子书。。。)将会着重介绍优化方法。

回过头来,这里简要介绍损失函数和它在参数化学习中的任务。这里作者推荐了Andrew Ng的Coursear课程作为补充学习损失函数的材料。

从心理学角度,对于不同的图像,观察者有着不同的可接受的修饰尺度,这个模型并不能对于该尺度给出精确的临界值。法里德说:“这个临界值的确定牵涉到社会学、心理学等多学科的范畴。目前的研究进展,至少为衡量图片的修改程度提供了一个客观标准。”

澳门新葡8455最新网站 16

8.2.1 What Are Loss Functions? 什么是损失函数?

澳门新葡8455最新网站 17CIFAR-10训练损失函数图像

这是CIFAR-10数据集的两个模型的训练损失函数图像,X轴是时间,Y轴是损失。通过图像可以看出Model #1的效果要好于Model #2。

最基本的来看,一个损失函数可以反映分类器对于输入数据分类的“好”与“坏”。通过上面的图片来看,随着时间的推进,损失越小,证明分类器越“好”。

为了提升分类的准确度,我们需要调整权重矩阵W和偏移向量b的值。如何去调整这两个参数就是我们的优化问题。现阶段,只需要简单理解损失函数可以作为评价我们打分函数分类性能的依据。

理想情况下,我们的损失函数应该随着时间不断下降,进而调整权重矩阵W和偏移向量b的值。就像上面这张图片显示的这样。Model #1的损失函数初始值大院Model #2,但是随着训练过程的进行,下降的也更快。Model #2在训练过程中出现了停滞,简单来看Model #1的效果要好于Model #2,但是Model #1有可能出现了过拟合

 

有人非常好奇,为什么影像质量评测需要准备这么多的测试用具,准备少一些测试卡、光源不行吗?

8.2.2 Mult-class SVM Loss 多类SVM损失

多类SVM损失方法的灵感来自于线性支持向量机Support Vector Machines),也叫做SVMs。它的打分函数可以输出我们图像的的标签和对应的分数。f(x_i, W, b) = Wx_i b现在我们有了打分函数,我们需要决定,或者告诉我们的打分函数什么是“好的”结果,什么是”不好的”结果。这个“好”或者“不好”表现在参数就是权重矩阵W和偏移向量b的取值。为了做这个判断,我们需要引入损失函数

回顾一下前面的记录,我们创建了一个集合X用来承载输入的图像数据。每个图像表示为x_i。

相同的道理来看,我们使用一个集合y包含集合X中所有的标签。这些y的值是真实标签值,并且我们希望其中包含的标签被正确的预测,我们可以通过y_i来访问x_i所对应的标签。

我们用s来表示打分函数:s = f并且可以通过x_i的值来得到s_i的值:s_j= f_j

那么我们可以把上面的公式的前面的预测公式合并起来,得到hinge loss function(铰链损失函数,可能翻译的不准。。。),关于铰链损失函数的理解参考了知乎和CSDN这两篇文章。L_i = sum_{jne y_i}max(0, s_j - s_{y_i} 1)

函数的右侧表示,当预测的标签结果y_i和j不一致的时候,取0和s_j - s_{y_i} 1的最大值,也就是保证了每次返回的最小值是0,从而保证了累加过程的进行。s_j

  • s_{y_i}

    1表示:打分函数对于当前输入数据x_i的打分结果,s_{y_i}表示输入数据的真实分数值(从计算的角度这里有点解释不同,打分函数会返回输入数据对应的标签和对应的分数值,那么s_{y_i}对应的真实的标签的分数值从何而来???)。假设法来尝试理解这个计算过程,s_j是打分函数给出的预测结果的分数值,那么从程序的角度,这是个3 X 1的向量,分别对应了每个标签的预测得分情况,因为只有预测标签和数据本身的标签不一致的时候才会执行这个计算,那么只看一个标签,假设还是dogs, cats and pandas数据集,打分函数预测的标签是dogs这个标签,s_j代表了图像是狗的得分,而且这个得分还是三个标签得分最高的,假如是123分,那么假设s_{y_i}的值是固定的,并且取值为1000,这时候计算结果是123 - 1000 1

    -876,那么取最大值,L_i结果是0???如果s_{y_i}取值太大,打分函数每次输出都比较小的话,岂不是L_i一直为0???节奏不太对。。。那么反过来看,后面有说到如果预测正确的时候L_i

    0,如果程序不使用if对标签是否正确做判断,只使用这个损失函数来计算,确实可以达到目的。并且S_{y_i}的值不需要手动设定。打分函数会输出所有标签对应的分数,如果预测错误,说明真实标签的S_{y_i}的值小于预测标签s_j的值。那么s_j
  • s_{y_i} 1才是正值,所以L_i才会得到积累,如果预测是正确的,那么s_j - s_{y_i} 1的值为负,输出的L_i为0。这样也就不涉及如何手动指定s_{y_i}的问题,bingo

那么铰链损失函数是对所有 预测标签真实标签 不一致的情况,对打分函数输出的不正确标签的分数打分函数输出的真实标签的分数做相减后值的累加。

图片和信息来源: wired

我们要知道,我们准备各种测试卡和光源是为了模拟各种光照环境,以及测试产品在这些光照环境下的表现。我们永远也无法猜到用户会在什么环境下使用我们的产品,就如之前特斯拉没有考虑到用户会在阳光灿烂的时候遇到一辆白色卡车,摄像头在这种情况下失灵而发生了第一起无人驾驶车祸。所以,我们能做到的是尽可能测试产品在各种环境下的表现,争取让产品在各种环境下都表现正常。

那么当输入图像x_i被分类正确的时候s_j - s_{y_i} 1 < 0,得到L_i

0,为了求得对于整个数据集训练过程的损失值,我们求取整个训练过程L的平均值。L = frac{1}{N}sum_{i = 1}^{N}L_i

另一种求取L_i的方法叫做squared hinge loss平方铰链损失函数:L_i = sum_{jne y_i}max(0, s_j - s_{y_i} 1)^2平方铰链损失函数对于损失的表示更加明显,由于对错误情况增加了平方来进行计算。

最终使用哪种损失函数来进行运算,完全决定于你的数据集。一般来说标准铰链损失函数使用更广泛一些,但是对于一些数据集来说,平方铰链函数可以的到更准确的结果。当然了,这些是属于调整超参数范畴的内容。

A Multi-class SVM Loss Example 多类SVM损失函数的例子现在我们来从数学的角度看一下铰链损失,首先来看一个已经实现好的例子。还是使用dogs, cats, pandas数据集,并且假设我们配置好了W和b得到了下图中的数据来展示这个过程:

澳门新葡8455最新网站 18展示流程使用的数据

那么我们开始计算Image #1预测的L_i,如下图:

澳门新葡8455最新网站 19Image #1的损失值由于4.26是打分函数输出数据的最大值,那么我们的预测结果是dogs,而且铰链函数输出的L_i为0,所以预测是正确的。

这里需要重新对前面理解做纠正,我们通过打分函数得到最大值的分数,从而做出了预测,但是在计算的时候不计算最大值的损失值,只计算除了最大值之外的两个打分函数输出的值。如果把打分函数输出的结果也纳入计算,L_i的值最小就是1,在整个数据集的累加过程中会对最终结果有影响,但是反过来看,最终的L值是要取平均的,即使把正确的标签也加上了1,其实取平均之后只是整体加了1。算法不同对于数值结果的线性改变,也可以接受。但是不计算会减少程序的计算量,每个数据的损失值少了一次线性运算。所以不计算,差不多是这样。

注意到我们只计算了剩余两项的损失值,得到了L_i = 0。

那么接下来看Image #2的损失值,如下图:

澳门新葡8455最新网站 20Image #2的损失值

这种情况下,我们的L_i = 5.96,大于0,说明我们的预测结果是不正确的。反过来看数据图片,我们的预测标签是dogs,但是图片实际标签是cats。第九章将会学习如何来调整我们的W和b来达到正确分类。

接下来是Image #3的损失值,如下图:

澳门新葡8455最新网站 21Image #3的损失值

最后,我们通过评分函数计算得到了三张图片的评分结果,然后用铰链损失函数计算除了三张图片对应的损失值,那么我们这次训练过程的损失L就是三个损失值的平均值,如下图:

澳门新葡8455最新网站 22三张图片训练的整体损失值

那么得到的这次训练的损失值就是3.72,这个损失值是我们优化W和b的重要依据,下一张将会介绍如何使用训练的损失值来优化W和b。

 

8.2.3 Cross-entropy Loss and Softmax Classifier 交叉熵损失函数和Softmax分类器

虽然铰链损失很流行,但是在深度学习的卷积神经网络中,交叉熵Softmax分类器却更加常用。为什么呢?原因很简单:Softmax分类器给出了我们每种预测标签的可能性,铰链损失函数只能提供边缘距离

啥是边缘距离(margin scores)?这里不清楚,需要之后补充。。。

而且更重要的是,如果我们使用类似于ImageNet的数据集,我们会查看使用卷积神经网络之后得到的精确度最高的五个数标签。这个过程的目的是查看我们的真实标签是否存在于精确度最高的五个标签之中。所以精确度是一个非常好的属性。

对于作者这段话的理解,边缘距离(margin scores)不能通过数值来直接判断可能性,所以通过边缘距离的大小来建立标签的排名去判断预测结果。

Understanding Cross-entropy Loss 交叉熵的理解

Softmax分类器Logistic Regression的二值情况的实例。就像铰链损失或者平方铰链损失,我们的映射函数f接收一个图像输入数据x_i,然后通过点积运算输入数据x_i和W,从而得到输出分类标签的映射过程,公式如下:f = Wx_i

然而,回过头来看交叉熵,它和铰链损失不同,我们可以把它解释为每组标签的unnormalized log probabilities(非归一化对数概率,翻译的可能不准),具体运算是把铰链损失函数的值转换为交叉熵,公式如下:L_i = -log(frac{e^{s_{y_i}}}{ sum_{j}e^{s_j}})

这个公式是如何得到的呢,下面分析运算过程。如果想要让我们的损失函数在预测结果正确的时候输出最小的概率值的负的对数,公式如下:L_i = -logP(Y = y_i | X = x_i)

这里不太好理解,当打分函数输出的结果预测得到了正确的标签,我们的损失函数需要输出一个概率值,这个概率值应该是最小的概率值?而且这个概率值还是某个值的负的对数值?如果从抽象出y = - logX,要想让y最小,那么-logX最小,根据对数图像的性质,-logX的取值最小对应X取值无限趋近于`0`。感觉不太对,继续往下看先。。。上面的理解没有顾及数据含义,重新解释如下:由于我们已经得到了归一化的概率值,也就是说P(Y = y_i | X =

x_i)的取值范围是。那么我们通过对数函数来计算损失值的时候,需要把对数函数取负,保证结果为正。因为函数y

lnX在区间上的值是负的,所以加个负号,变成正的。真。。。机智。至于交叉熵损失为什么先要对打分函数取自然对数的打分值的指数幂,然后输出归一化概率之后求负倒数值作为损失。还需要看看paper理解其中的原理。现阶段的理解到这里。

那么概率函数可以表示为:P(Y = k|X = x_i) = frac{e^{s_{y_i}}}{sum_{j}e^{s_j}}

并且我们打分函数形式如下:s = f

那么,对于某个输入数据的损失函数可以表示如下:L_i = -log(frac{e^{s_{y_i}}}{sum_{y}e^{s_j}})

值得注意的是,这里的对数运算都是基于自然对数e进行的,经过幂运算并且归一化之后的结果就是我们的Softmax functionSoftmax函数。取负对数之后就是我们的交叉熵

那么回过头来对于我们的铰链损失或者平方铰链损失,我们可以通过对所有数据集得到的值取平均值来得到我们的交叉熵,公式如下:L = frac{1}{N}sum_{i = 1}^{N}L_i

作者提到,这里介绍的这些公式也许有些不好理解,这里只是做铺垫,之后在第九章中会详细解释用法和实现,从而帮助更好的理解为什么交叉熵是神经网络和深度学习的关键。

下面的图示展示了交叉熵大概的运行情况:

澳门新葡8455最新网站 23Softmax运行实例

对于上图中:

  • 第一个表格计算了打分函数的输出值
  • 第二个表格计算了打分函数取幂运算之后的未归一化的概率值
  • 第三个表格计算了表格二中归一化之后的概率值
  • 第四个表示计算了概率值的负对数,得到了数据集的最终损失值

为了在实际运行中展示交叉熵损失澳门新葡8455最新网站,是如何运作的,我们来分析上图中的步骤。我们的目标是分辨输入图像中是否含有dog, cat, panda。很明显的,我们可以知道输入图象是熊猫,但是我们的Softmax classifier是如何判断的?为了理解它的运行原理,我们作如下分析:

第一个表格中包含了打分函数f对于输入图像的每个标签的分数。这些值是我们未归一化对数概率分类的输入值。我们对打分结果做幂运算(也就是e^s,其中的s是我们的打分函数输出的值),经过计算我们得到了表格二

下一步实对所有的计算得到的对数值做相加,得到了分母分子是每个标签的对数计算值。从而得到了每个标签对应的归一化概率(也就是所有概率值相加等于一)。最后我们对归一化的概率结果取负对数,从而得到了交叉熵损失

那么回过头来看上面的图像,我们可以看出,Softmax classifier直观的给出了panda标签的概率是93.93%。这个方法可以让我们计算得到数据集中所有的交叉熵损失,从而利用这些值来调整或是评价我们的参数。

小结这一章,我们复习了参数学习的四大组件:

  • 数据 Data
  • 打分函数 Scoring function
  • 损失函数 Loss function
  • 权重矩阵和变差向量 Weights and biases

在本章的图像分类问题中,数据是图像数据集。打分函数可以产生对于每个输入图像的预测损失函数可以评价我们的预测结果。最终,权重矩阵和偏差向量给了我们去从数据集中“学习”的能力,并且我们可以通过优化这两个参数来实现一个高精确度的分类器。

我们还复习了两个很流行的损失函数,铰链损失交叉熵损失铰链损失被应用于很多机器学习的应用中,例如SVMs。交叉熵损失的应用则更为广泛,因为Softmax分类器可以输出概率,而不仅仅是距离margins)。

下一章将会学习一些优化方法,去调整我们的权重矩阵和偏差向量。优化方法真正的让我们的模型算法实际的去从数据集中“学习”到信息。优化方法是现代神经网络和深度学习的基石。

相关阅读: 向过度PS开炮

本文由澳门新葡8455最新网站发布于互联网,转载请注明出处:第十六章,终有神器让PS现原形

上一篇:自拍的男人也自恋,自恋是主因 下一篇:没有了
猜你喜欢
热门排行
精彩图文