paper url: https://arxiv.org/pdf/1612.02295
year:2017

Introduction

交叉熵损失与softmax一起使用可以说是CNN中最常用的监督组件之一。 尽管该组件简单而且性能出色, 但是它只要求特征的可分性, 没有明确鼓励网络学习到的特征具有类内方差小, 类间方差大的特性。 该文中,作者提出了一个广义的 large margin softmax loss(L-Softmax),是large margin系列的开篇之作. 它明确地鼓励了学习特征之间的类内紧凑性和类间可分离性。

Softmax Loss

Softmax Loss定义如下

\[
\bf \text{Softmax Loss = FC + Softmax + Cross-Entropy}
\]

如上图, 当前CNN分类网络可以看成 特征提取backbone+Softmax Loss 部分
特征提取网络最后一层特征记为 \(\bf x\), 最后一层 FC 可以看成一个 N 类线性分类器, N 为类别数.

Insight

由于 Softmax 并没有明确地鼓励类内紧凑性和类间分离性。 基于此, 该文中一个insight就是, 特征提取网络提取的特征向量 x 和与相应类别c的权重向量\(W_c\)的乘积可以分解为模长+余弦值:
\[W_cx = ||W_c||_2 ||x||_2 \cos(θ_c)\]
其中, c为类别索引, \(W_c\) 是最后一个FC层的参数, 可以认为是的类别 c 的线性分类器。

从而, Softmax Loss 重构如下

这样, 在L-Softmax loss中,类别预测很大程度上取决于特征向量\(x\)与权重\(W_c\)的余弦相似性.

method

余弦函数如下

当 \(\theta = [0, \pi]\)时候, \(\cos(\theta)\) 单调递减

下面以二分类为例, 对于类别 1

Softmax 要求,
\[W_1x > W_2x\]
\[\Downarrow\]
\[||W_1||_2 ||x||_2 \cos(θ_1) > ||W_2||_2 ||x||_2 \cos(θ_2)\]
\[\Downarrow\]
\[||W_1||_2 \cos(θ_1) > ||W_2||_2 \cos(θ_2)\]

L-Softmax 要求,

\[
||W_1||_2 \cos(mθ_1) > ||W_2||_2 \cos(θ_2)
\]
那么, 由于\(\cos\theta\) 在 \([0, \pi]\)上的单调递减特性, 有如下不等式

\[||W_1||_2 \cos(θ_1) \gt ||W_1||_2 \cos(mθ_1) > ||W_2||_2 \cos(θ_2), \quad m \gt 1\]

几何上直观理解如下

property

L-Softmax损失具有清晰的几何解释. m控制类别之间的差距. 随着m越大(在相同的训练损失下),类之间的margin变得越大, 学习困难也越来越大.
L-Softmax损失定义了一个相对困难的学习目标,可调节margin(margin 表示了特征学习困难程度)。 一个困难的学习目标可以有效地避免overfiting,并充分利用来自深层和广泛架构的强大学习能力。

experiment result

toy example

可以看出, L-softmax 的训练损失更大, 但是在测试集上损失更小.

thought

该篇论文为 larger-margin softmax loss 的开篇之作. 提出乘性 larger-margin softmax loss, 相较与加性 larger-margin softmax loss(如 AM-softmax, ArcFace), 训练难度更大(需要用到退火训练方法, 见原文 5.1), 效果而言, 也是加性 loss 更好.


\[||W_1||_2 \cos(θ_1) \ge ||W_1||_2 \cos(mθ_1) > ||W_2||_2 \cos(θ_2), \quad m \ge 1\]
可以看出, 该不等式不仅依赖余弦角度而且依赖最后一层 FC 的权重的模长, 所以, 为了学习的特征更加专注于对于余弦角度的优化, 后面一批论文很多都用到权重归一化, 效果很好.

同时可以看到, 在特征分类时, 其实 feature 的模长会被消元, 为了各个类别学习的特征更加有判别能力, 后面一批论文也做了特征归一化(实际上将特征模长限制为 1 会降低特征的表达能力, 其实在加难特征学习的过程)

总之, 后面的各个large margin 系列, 特征归一化, 权重归一化已经是标配了.

Large-Margin Softmax Loss for Convolutional Neural Networks的更多相关文章

  1. 源码分析 Large-Margin Softmax Loss for Convolutional Neural Networks

    作者在Caffe中引入了一个新层,一般情况在Caffe中引入一个新层需要修改caffe.proto,添加该层头文件*.hpp,CPU实现*.cpp,GPU实现*.cu,代码结果如下图所示: caffe ...

  2. 基于Caffe的Large Margin Softmax Loss的实现(上)

    小喵的唠叨话:在写完上一次的博客之后,已经过去了2个月的时间,小喵在此期间,做了大量的实验工作,最终在使用的DeepID2的方法之后,取得了很不错的结果.这次呢,主要讲述一个比较新的论文中的方法,L- ...

  3. 基于Caffe的Large Margin Softmax Loss的实现(中)

    小喵的唠叨话:前一篇博客,我们做完了L-Softmax的准备工作.而这一章,我们开始进行前馈的研究. 小喵博客: http://miaoerduo.com 博客原文:  http://www.miao ...

  4. Large Margin Softmax Loss for Speaker Verification

    [INTERSPEECH 2019接收] 链接:https://arxiv.org/pdf/1904.03479.pdf 这篇文章在会议的speaker session中.本文主要讨论了说话人验证中的 ...

  5. 【论文阅读】Wing Loss for Robust Facial Landmark Localisation with Convolutional Neural Networks

    Wing Loss for Robust Facial Landmark Localisation with Convolutional Neural Networks 参考 1. 人脸关键点: 2. ...

  6. [C6] Andrew Ng - Convolutional Neural Networks

    About this Course This course will teach you how to build convolutional neural networks and apply it ...

  7. A Beginner's Guide To Understanding Convolutional Neural Networks(转)

    A Beginner's Guide To Understanding Convolutional Neural Networks Introduction Convolutional neural ...

  8. (转)A Beginner's Guide To Understanding Convolutional Neural Networks

    Adit Deshpande CS Undergrad at UCLA ('19) Blog About A Beginner's Guide To Understanding Convolution ...

  9. 卷积神经网络Convolutional Neural Networks

    Convolutional Neural Networks NOTE: This tutorial is intended for advanced users of TensorFlow and a ...

随机推荐

  1. 算法01 C语言设计

    8.21 #include <stdio.h> void bubbleSort(int **p, int n); int main(void){ int a[100]; int *b[10 ...

  2. JAVA之字符串

    求字符串长度: 使用.length()方法: 注意:字符串是使用字符串类里的方法,而数组是用数组类里的变量,因此数组是.length. String str="123456789" ...

  3. matplotlib设置中文标签

    import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei']

  4. Windows Subsystem for Linux 环境变量

    WSL(Windows Subsystem for Linux )的环境变量是包含Linux子系统和Windows系统的,测试如下: wy@WY-PC:/mnt/c/Windows/System32$ ...

  5. Re.FFT

    前言 上虽然算是学过了但是实质上还是根本什么都不会 看大佬们的模板去A了模题(手动滑稽) 于是下定决心要理解FFT的代码 一些的证明主要是从算法导论和两位大佬的博客上学的 大佬1  大佬2 在这过程中 ...

  6. ab命令

    ab -V -n在测试会话中所执行的请求个数.默认时,仅执行一个请求.请求的总数量 -c一次产生的请求个数.默认是一次一个.请求的用户量 -t测试所进行的最大秒数.其内部隐含值是-n 50000,它可 ...

  7. 清理Windows Serer Backup备份数据生成的卷影副本(DiskShadow命令)

    DiskShadow基本命令: 1.进入DiskShadow命令行: C:\>diskshadow 2.列出所有的卷影副本: DISKSHADOW> list shadows all 3. ...

  8. dgraph解决社交关系中的正反向查找

    dgraph解决社交关系中的正反向查找 本篇介绍的是, 社交关系中的关注者与被关注者在dgraph中如何实现查找. 对dgraph的基本操作不太清楚的可以看看我之前写的博客 dgraph实现基本操作 ...

  9. 20175221 《Java程序设计》第8周学习总结

    20175221   <Java程序设计>第8周学习总结 教材学习内容总结 第十五章主要内容有:泛型.链表.堆栈.散列映射.树集以及树映射. 泛型: 声明:可以使用class名称<泛 ...

  10. 微信小程序中-折线图

    echarts配置项太多了,还是一点点积累吧~~~~~ 当然前提条件还是得老老实实看echarts官方文档 :https://echarts.baidu.com/ 今天主要就介绍下我在工作中通过ech ...