Large-Margin Softmax Loss for Convolutional Neural Networks
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的更多相关文章
- 源码分析 Large-Margin Softmax Loss for Convolutional Neural Networks
作者在Caffe中引入了一个新层,一般情况在Caffe中引入一个新层需要修改caffe.proto,添加该层头文件*.hpp,CPU实现*.cpp,GPU实现*.cu,代码结果如下图所示: caffe ...
- 基于Caffe的Large Margin Softmax Loss的实现(上)
小喵的唠叨话:在写完上一次的博客之后,已经过去了2个月的时间,小喵在此期间,做了大量的实验工作,最终在使用的DeepID2的方法之后,取得了很不错的结果.这次呢,主要讲述一个比较新的论文中的方法,L- ...
- 基于Caffe的Large Margin Softmax Loss的实现(中)
小喵的唠叨话:前一篇博客,我们做完了L-Softmax的准备工作.而这一章,我们开始进行前馈的研究. 小喵博客: http://miaoerduo.com 博客原文: http://www.miao ...
- Large Margin Softmax Loss for Speaker Verification
[INTERSPEECH 2019接收] 链接:https://arxiv.org/pdf/1904.03479.pdf 这篇文章在会议的speaker session中.本文主要讨论了说话人验证中的 ...
- 【论文阅读】Wing Loss for Robust Facial Landmark Localisation with Convolutional Neural Networks
Wing Loss for Robust Facial Landmark Localisation with Convolutional Neural Networks 参考 1. 人脸关键点: 2. ...
- [C6] Andrew Ng - Convolutional Neural Networks
About this Course This course will teach you how to build convolutional neural networks and apply it ...
- A Beginner's Guide To Understanding Convolutional Neural Networks(转)
A Beginner's Guide To Understanding Convolutional Neural Networks Introduction Convolutional neural ...
- (转)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 ...
- 卷积神经网络Convolutional Neural Networks
Convolutional Neural Networks NOTE: This tutorial is intended for advanced users of TensorFlow and a ...
随机推荐
- C# 如何使用配置文件保存应用程序里的配置数据
引言 我不知大家早先是如何保存应用程序配置,以备下次打开时使用的,反正我开始学.Net的时候就去研究序列化,以二进制或XML格式的序列化来保存应用程序配置.这样每次都要建立单独的配置类,并书写读写配置 ...
- Linux C启动时创建pid文件
程序在启动时将pid写入文件,当程序再次启动时会进行检测,避免启动多个实例. util-pidfile.h文件 #ifndef __UTIL_PID_H__ #define __UTIL_PID_H_ ...
- 【翻译】asp.net core2.0中的token认证
原文地址:https://developer.okta.com/blog/2018/03/23/token-authentication-aspnetcore-complete-guide token ...
- 【MySQL 读书笔记】全局锁 | 表锁 | 行锁
全局锁 全局锁是针对数据库实例的直接加锁,MySQL 提供了一个加全局锁的方法, Flush tables with read lock 可以使用锁将整个表的增删改操作都锁上其中包括 ddl 语句,只 ...
- <generatePublisherEvidence> 元素
<configuration> <runtime> <generatePublisherEvidence enabled="false"/> & ...
- Vue.js 2.x笔记:基本语法(2)
1. Vue实例及选项 1.1 创建Vue实例(new Vue instance) 每个Vue Application必须创建一个root Vue Instance. <script> v ...
- Power BI免费版(Free),专业版(Pro)以及增值版(Premium)授权功能对比, Server
Features of Power BI Report Server and the Power BI service Features Power BI Report Server Power BI ...
- String.Join Method
Overloads Join(String, String[], Int32, Int32) Concatenates the specified elements of a string array ...
- C语言博客作业03--函数
1.本章学习总结 1.1 思维导图 1.2 本章学习体会及代码量学习体会 1.2.1 学习体会 这周最大的收获就是学习函数,并且通过对函数的封装来做成一个简单的小程序,这周做的最有意义的事情就是做了老 ...
- 【集训队作业2018】【XSY3372】取石子 DP
题目大意 有 \(n\) 堆石子,初始时第 \(i\) 堆石子有 \(a_i\) 个. 你每次取石子会取 \(k\) 个.在你取完一堆石子之后才能在下一堆中取石子. 游戏会进行 \(t\) 轮,每轮会 ...