技术控

    今日:60| 主题:49101
收藏本版 (1)
最新软件应用技术尽在掌握

[其他] 基于Caffe的Large Margin Softmax Loss的实现(上)

[复制链接]
与我无关统统 发表于 2016-10-1 18:26:05
140 6

立即注册CoLaBug.com会员,免费获得投稿人的专业资料,享用更多功能,玩转个人品牌!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
小喵的唠叨话:在写完上一次的博客之后,已经过去了2个月的时间,小喵在此期间,做了大量的实验工作,最终在使用的DeepID2的方法之后,取得了很不错的结果。这次呢,主要讲述一个比较新的论文中的方法,L-Softmax,据说单model在LFW上能达到98.71%的等错误率。更重要的是,小喵觉得这个方法和DeepID2并不冲突,如果二者可以互补,或许单model达到99%+将不是梦想。
  和上一篇博客一样,小喵对读者做了如下的假定:
  
       
  • 了解Deep Learning的基本知识。   
  • 仔细阅读过L-Softmax的论文,了解其中的数学推导。   
  • 使用Caffe作为训练框架。   
  • 即使不满足上述3条,也能持之以恒的学习。  
  L-Softmax的论文:Large-Margin Softmax Loss for Convolutional Neutral Networks
   Google一下,第一条应该就是论文的地址,鉴于大家时间有限,小喵把原文地址也贴出来了,但不保证长期有效。 http://jmlr.org/proceedings/papers/v48/liud16.pdf
  这里我们也将整个系列分几部分来讲。
  一、margin与lambda

  margin和lambda这两个参数是我们这篇博客的重点。也是整篇论文的重点。对于分类的任务,每个样本都会有N的输出的分数(N的类别),如果在训练中,人为的使正确类别的得分变小,也就是说加大了区分正确类别的难度,那么网络就会学习出更有区分能力的特征,并且加大类间的距离。作者选用的加大难度的方式就是改变最后一个FC层中的weight和特征之间的角度值,角度增大的倍数就是margin,从而使特定类别的得分变小。而第二个参数lambda是为了避免网络不收敛而设定的,我们之后会讲到。
  为了实现这个效果,我们需要设计一个新的层,large_margin_inner_product_layer。这个层和一般的inner_product_layer很相似,但是多了特定类别削弱的功能。
  考虑到这个层是有参数的,我们需要在caffe.proto(caffe_home/src/caffe/proto/caffe.proto)中做一些修改。这里的定义是按照protobuf的语法写的,简单的修改只要照着其他的参数来改写就好。
  首先定义我们的这个层的参数。
  [code]message LargeMarginInnerProductParameter {
  optionaluint32num_output = 1; // The number of outputs for the layer
  optionalbool bias_term = 2 [default = true]; // whether to have bias terms
  optionalFillerParameterweight_filler = 3; // The filler for the weight
  optionalFillerParameterbias_filler = 4; // The filler for the bias

  // The first axis to be lumped into a single inner product computation;
  // all preceding axes are retained in the output.
  // May be negative to index from the end (e.g., -1 for the last axis).
  optionalint32axis = 5 [default = 1];
  // Specify whether to transpose the weight matrix or not.
  // If transpose == true, any operations will be performed on the transpose
  // of the weight matrix. The weight matrix itself is not going to be transposed
  // but rather the transfer flag of operations will be toggled accordingly.
  optionalbool transpose = 6 [default = false];
  optionaluint32margin = 7 [default = 1];
  optionalfloat lambda = 8 [default = 0];
}
[/code]  参数的定义和InnerProductParameter非常相似,只是多了两个参数margin和lambda。
  之后在LayerParameter添加一个可选参数(照着InnerProductParameter写就好)。
  [code]optionalLargeMarginInnerProductParameterlarge_margin_inner_product_param = 147;
[/code]  这时,喵粉可能很在意这个147是怎么回事。其实呢,在protobuf中,每个结构中的变量都需要一个id,只要保证不重复即可。我们在LayerParameter的最开始可以看到这么一行注释:
   
基于Caffe的Large Margin Softmax Loss的实现(上)-1 (Google,博客,读者,论文,数学)

  说明下一个有效的id是147。这里我们新加的参数就果断占用了这个id。修改之后,建议把注释改一下(不要人为的挖坑):
  LayerParameter next available layer-specific ID: 148 (last added: large_margin_inner_product_param)
  避免之后再新加层的时候出问题。
  工作完毕,我们就可以在train_val.prototxt中用这种方式使用这个新层了(具体的使用,后面再说):
  [code]layer {
  name: "fc2"
  type: "LargeMarginInnerProduct"
  bottom: "fc1"
  bottom: "label"
  top: "fc2"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
  large_margin_inner_product_param {
    num_output: 10000
    margin: 2
    lambda: 0
    weight_filler {
      type: "xavier"
    }   
  }
}
[/code]  二,运筹帷幄之成员变量

  我们刚刚在caffe.proto中,添加了新参数的定义。而事实上,我们还没有这个层的具体实现。这部分,主要介绍我们需要的临时变量。
  首先,我们要理清整个计算的流程。
  先看前馈。
  第一步,需要求出W和x的夹角的余弦值:

基于Caffe的Large Margin Softmax Loss的实现(上)-2 (Google,博客,读者,论文,数学)

  第二步,计算m倍角度的余弦值:
123下一页
友荐云推荐




上一篇:One Way Analysis of Variance Exercises
下一篇:RE:DOM is now 1.0!
酷辣虫提示酷辣虫禁止发表任何与中华人民共和国法律有抵触的内容!所有内容由用户发布,并不代表酷辣虫的观点,酷辣虫无法对用户发布内容真实性提供任何的保证,请自行验证并承担风险与后果。如您有版权、违规等问题,请通过"联系我们"或"违规举报"告知我们处理。

qa402 发表于 2016-10-2 01:37:34
楼主的头像是本人吗?
回复 支持 反对

使用道具 举报

中国电器门户 发表于 2016-10-2 17:48:15
那些路人甲乙丙丁在年生散场的剧场里将五彩纷呈和苍白无力潇洒的演绎。
回复 支持 反对

使用道具 举报

董怡壤 发表于 2016-10-4 04:24:01
锄禾日当午,发帖真辛苦。谁知坛中餐,帖帖皆辛苦!
回复 支持 反对

使用道具 举报

qcwvw 发表于 2016-10-5 01:43:15
以后要跟与我无关统统好好学习学习!
回复 支持 反对

使用道具 举报

delihuaf 发表于 2016-11-6 09:23:38
朋友妻不可欺睡睡觉还可以
回复 支持 反对

使用道具 举报

kshskb005 发表于 2016-11-13 14:22:41
好厉害啊!楼主怎么做到的
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

我要投稿

推荐阅读

扫码访问 @iTTTTT瑞翔 的微博
回页顶回复上一篇下一篇回列表手机版
手机版/CoLaBug.com ( 粤ICP备05003221号 | 文网文[2010]257号 )|网站地图 酷辣虫

© 2001-2016 Comsenz Inc. Design: Dean. DiscuzFans.

返回顶部 返回列表