《A General and Adaptive Robust Loss Function》学习

《A General and Adaptive Robust Loss Function》学习

  • 一、学习概述
    翻翻CVPR2019发现有好多论文不知道看啥,个人感觉图像检测和图像分类的都只是改进一小点,重大突破的好少 ,那么多花里胡哨的方法,又没开源代码,在实际应用中,不如非常成熟的SSD和yolo系列,既又开源代码,又可以轻松部署。所以就只看看标题看看摘要统计一下是怎么搞的,等以后有机会写一下今年目标检测算法的创新。
    鉴于没啥心思看目标检测和图像分类文章,于是我选择了一篇有关于loss函数的文章——《A General and Adaptive Robust Loss Function》。选择该文章的既可以学习到一种新的loss函数,也能顺带复习卷积神经网络的三个函数激活函数、损失函数和优化函数。下面就不多废话了,介绍一下本篇文章的内容分布:
    第一部分:学习概述,介绍有关文章的一些废话。
    第二部分:相关知识回顾,准备介绍激活函数、损失函数和优化函数以及三个函数间的关系。
    第三部分:介绍论文。
    第四部分:总结。

  • 二、相关知识回顾
    总所周知,卷积神经网络有三个函数,激活函数、损失函数和优化函数。下面介绍三个函数以及三者间的关系。

  • 2.1 激活函数
    卷积神经网络的输入一般是图像,图像在计算机中的表现形式是矩阵,矩阵上的每个元素是处于[0,255]的区间上。在图像预处理阶段,一般会将图像做归一化,将[0,255]的像素值映射到[0,1]。做归一化的主要原因是:CNN所用的所有激活函数在[0,255]区间内都不是全有效,有一些函数的有效区间只在[0,1]或者[-1,1]区间。因此像素值处理[0,255]不适合做图像运算。(不能激活了,还学啥模型参数)
    激活函数的输入就是这些预处理后(归一,减均值)的像素值。
    现有的激活函数有以下:
    1.sigmod
    在这里插入图片描述
    《A General and Adaptive Robust Loss Function》学习_第1张图片
    2.tanh
    在这里插入图片描述
    《A General and Adaptive Robust Loss Function》学习_第2张图片

  • Relu系列

  • 等等
    以上就是激活函数了。激活函数的意义就是将输入的处于[0,1]区间的像素通过激活函数重新得到一个值,这个值还在[0,1]区间

  • 2.2损失函数
    损失函数是用来计算CNN得到的结果与实际结果间的差距的函数。
    用gan网络,生产一张图像[3256256],为了鉴别生成的图像与实际图像间的差异,可以选择一个损失函数,计算两者的差距。如使用欧式距离作为损失计算的标准。
    《A General and Adaptive Robust Loss Function》学习_第3张图片
    Debug界面的上面那张图是生成的图,实际的图是下面的那张。
    loss就是Result界面的上面两张图(上面第一张图是差值图,可以看成loss,第二张图和第三张图只是为了方便看到loss在的位置),loss可以明显反应出生成的图和实际的图的差距,知道网络还需好好学习,生成更好的图。
    (例子为,输入是有缺陷的图,标签是好图,输出(期望)是由缺陷的图生成好图)

  • 2.3优化函数
    大头来了(为啥我想到b站up主,大头大头吃喝不愁),优化函数的作用是让loss变成0,也就是输出和标签相等,还用上面的作为例子。就是上图的标签是一张好图,输出(期望)也是一张好图。但是由于CNN无法一次性就生成好图,需要先生成无数差图,然后在生成好图。如何从差图学到好图,就需要优化函数了。

  • 2.4三者关系
    CNN学习的过程:
    《A General and Adaptive Robust Loss Function》学习_第4张图片
    自动化的朋友们这个像不像闭环反馈系统

上图可以看到,输入x已知,神经元参数未知,激活函数可以选(自己设置)已知,标签已知,
损失函数可以选(自己设置)已知,优化函数(自己设置)已知。这样一来未知的只有三个卷积层神经元参数、输出f(x)和loss。
下图红色已知,黑色未知。
《A General and Adaptive Robust Loss Function》学习_第5张图片
从已有的知识可以知道输出的f(x)和loss是通过神经元参数得到的,所以当神经元参数已知时,f(x)和loss都可以知道了,网络就成立了。
因此可以设置神经元参数为随机值w0,b0,这样就可以先得到一个f(x0),然后同y0计算,得到loss0。然后loss0通过优化函数控制。
《A General and Adaptive Robust Loss Function》学习_第6张图片
废话那么多没说三者间的关系,
激活函数影响f(x)的大小,f(x)是损失函数的一个输入,因此激活函数和损失函数之间有互动。损失函数得到的损失值是优化函数的输入,影响优化函数对神经元参数的改进。神经元参数的改进会影响输入x在经过神经元后的值,这个值是激活函数的输入。
好了到此为止,写得不好,我以后在修改。

  • 2.5损失函数的作用
    这是一个非常好的例子,说明loss的区别。
    https://blog.csdn.net/weixin_43216017/article/details/88017122
    三、介绍论文
    看了一个论文《A General and Adaptive Robust Loss Function》,讲的主要是一种新的损失函数。
    该损失函数的一般表示:
    《A General and Adaptive Robust Loss Function》学习_第7张图片
    α是控制鲁棒性的参数,c是控制x接近0时候极小值大小的参数。
    结合图看吧,下图为损失函数曲线及梯度曲线。
    《A General and Adaptive Robust Loss Function》学习_第8张图片
    看了上面,我在想,loss不是期望与实际值的差么,这个x是什么鬼?后来看了这句话。
    《A General and Adaptive Robust Loss Function》学习_第9张图片
    如果α接近2的时候,这个loss可以视为L2 loss,如果为1的时候,可以视为L1 loss。原来这里的x是指的|y-f(x)|,即下面这个。
    在这里插入图片描述
    以L1和L2loss为例子,如果期望和标签差距小于1,L1 loss的值大于L2 loss,否则L1 loss小于L2 loss。这个新的loss可以根据α的不同切换成不同的loss函数。然后根据c的不同,放缩loss的值,如α=2时,是L2loss,但是通过c可以将L2loss变成1/c的L2 LOSS。
    《A General and Adaptive Robust Loss Function》学习_第10张图片
    因此,这个新的loss函数在用于深度学习的时候就会随时变换。总所周知,loss不下降的时候,切换个loss函数、优化函数以及激活函数,loss就可能下降了,模型就可能会好点了。这种动态的loss函数可以使模型训练更好。
    α与c的大小定义如下:
    《A General and Adaptive Robust Loss Function》学习_第11张图片
    α的值是先随机初始化得到一个α0,然后sigmoid(α0)*(αmax-αmin)+αmin得到的,然后αi是由上一个α(i-1)求得的,c也是同理得到的。
    全篇完,应该不更新了。

你可能感兴趣的:(CVPR2019学习,Loss学习——,A,General,and,Adaptive,Rob)