【论文笔记】Large-Margin Softmax Loss for Convolutional Neural Networks

本文介绍了L-Softmax损失函数,这是一种改进的Softmax损失函数,能够引导卷积神经网络学习到更具区分性的特征。文章详细阐述了L-Softmax的工作原理,包括如何通过增加间隔来提高特征的类间距离并减小类内距离,进而提升分类性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考文献: Liu W, Wen Y, Yu Z, et al. Large-Margin Softmax Loss for Convolutional Neural Networks[C]//Proceedings of The 33rd International Conference on Machine Learning. 2016: 507-516.

摘要

Softmax Loss 函数经常在卷积神经网络被用到,较为简单实用,但是它并不能够明确引导网络学习区分性较高的特征。这篇文章提出了large-marin softmax (L-Softmax) loss, 能够有效地引导网络学习使得类内距离较小、类间距离较大的特征。同时,L-Softmax不但能够调节不同的间隔(margin),而且能够防止过拟合。可以使用随机梯度下降法推算出它的前向和后向反馈,实验证明L-Softmax学习出的特征更加有可区分性,并且在分类和验证任务上均取得比softmax更好的效果。

算法介绍

1. Softmax Loss回顾

在介绍L-Softmax之前,我们先来回顾下softmax loss。当定义第 i 个输入特征 Xi 以及它的标签 yi 时,softmax loss 记为:

L=1NiLi=1Nilog(efyijefj)

其中 fj 表示最终全连接层的类别输出向量 f 的第 j 个元素, N 为训练样本的个数。由于 f 是全连接层的激活函数 W 的输出,所以 fyi 可以表示为 fyi=WTyixi , 最终的损失函数又可以写为:
Li=log(eWyixicos(θyi)jeWjxicos(θj))

其中 0θjπ 。 虽然softmax在深度卷积神经网络中有着广泛的应用,但是这种形式并不能够有效地学习得到使得类内较为紧凑、类间较离散的特征。

2. 动机

初始的softmax的目的是使得 WT1x>WT2x ,即 W1xcos(θ1)>W2xcos(θ2) ,从而得到 x (来自类别1)正确的分类结果。作者提出large-magrin softmax loss的动机是希望通过增加一个正整数变量 m ,从而产生一个决策余量,能够更加严格地约束上述不等式,即:

W1xcos(θ1)W1xcos(mθ1)>W2xcos(θ2)

其中 0θ1<πm 。如果 W1 W2 能够满足 W1xcos(mθ1)>W2xcos(θ2) ,那么就必然满足 W1xcos(θ1)>W2xcos(θ2) 。这样的约束对学习 W1 W2 的过程提出了更高的要求,从而使得1类和2类有了更宽的分类决策边界。

(其实说白了,基于softmax loss学习同类和不同类样本时,都用的是同一种格式,因此学习到的特征的类内和类间的可区分性不强。而这篇论文是在学习同类样本时,特意增强了同类学习的难度,这个难度要比不同类的难度要大些。这样的区别对待使得特征的可区分性增强。感觉就像是管孩子,对自己家的孩子严一些,对别人家的孩子宽容些,哈哈)

Large-Margin Softmax Loss

按照上节的思路,L-Softmax loss可写为:

Li=log(eWyixiψ(θyi)Wyixiψ(θyi)+jyieWjxicos(θj))

在这里, ψ(θ) 可以表示为:

ψ(θ)={cos(mθ),0θπmD(θ),πm<θπ

m 越大时,分类的边界越大,学习难度当然就越高。同时,公式中的 D(θ) 必须是一个单调减函数且 D(πm)=cos(πm) , 以保证 ψ(θ) 是一个连续函数。 (这样的要求是为了保证 ψ(θ) cos(θ) 是较为类似的函数,具体的数学原理我不是特别清楚)

作者为了能够简化前向和后向传播,构建了这样一种函数形式 ψ(θ)

ψ(θ)=(1)kcos(mθ)2k,θ[kπm,(k+1)πm]

其中 k 是一个整数且 k[0,m1]。下图是softmax loss 和L-Softmax loss的比较。

这里写图片描述

再使用 WTjxiWjxi 替代 cos(θj) , 以及将 cos(mθyi) 替换为 cos(θyi) m 的函数(论文中已交待,太长,我就不敲上去了),这样,最终的L-Softmax loss 函数就可以分别对 x W 进行求导。后续的推导过程可以参考原论文(公式太多,我又太懒)。

简单分析

为了简单明了地表明L-Softmax Loss的有效性,作者讨论了一个二分类问题,只包含 W1 W2 。分析结果如下图所示。

这里写图片描述

在训练过程中,当 W1=W2 时,softmax loss 要求 θ1<θ2 , 而 L-Softmax则要求 mθ1<θ2 ,我们从图中可以看到L-Softmax得到了一个更严格的分类标准。当 W1>W2 W1<W2 时,虽然情况会复杂些,但是同样可以看到L-Softmax会产生一个较大的决策余量。

实验结果

作者分别使用分类和人脸验证对softmax loss 和L-Softmax Loss进行了对比。在分类问题中,采用了MNIST, CIFAR10以及CIFAR100三个数据集进行评测,而人脸验证则采用了LFW进行验证。

最后的结果是L-Softmax Loss均取得了更好的效果,而且当 m 越大时,最终的结果会越好。特别值得一提的是,作者仅使用了 WebFace的人脸数据作为训练集和一个较小的卷积网络,就在LFW上达到了98.71%的正确率。
这里写图片描述

总结

L-Softmax Loss有一个清楚的几何解释,并且能够通过设置 m 来调节训练难度。它还能够有效地防止过拟合,能够有效地减小类内距离,同时增加类间距离。最终的分类和人脸验证实验也证明,它取得了比softmax loss更好的结果。

PS: 有同学已经开始使用L-Softmax Loss,不过反映训练难度比较大,需要反复调参。等有空了我也来试试。深度学习的东西我研究的时间也不是很长,一些东西没有理解到位。错误在所难免,欢迎拍砖。

卷积神经网络Convolutional Neural Networks, CNN)是一种专门用于处理网格状数据(例如图像)的深层学习架构。它们由卷积层、池化层、激活函数和全连接层组成。由于篇幅限制,这里我会提供一个简化版的Python示例,使用Keras库构建基本的CNN。假设我们想在一个MNIST手写数字数据集上训练一个简单的CNN。 ```python # 导入必要的库 from tensorflow.keras import layers, models import tensorflow as tf # 创建一个Sequential模型 model = models.Sequential() # 添加卷积层 model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))) # 输入图像大小为28x28,单通道灰度图 model.add(layers.MaxPooling2D((2, 2))) # 下采样操作 # 可能添加更多的卷积层和池化层... model.add(layers.Flatten()) # 展平卷积层的输以便于全连接层处理 model.add(layers.Dense(64, activation='relu')) # 全连接层 model.add(layers.Dropout(0.5)) # 防止过拟合 model.add(layers.Dense(10, activation='softmax')) # 输层,10个类别对应0到9的手写数字 # 编译模型 model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy']) # 加载MNIST数据并训练模型 (train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data() train_images = train_images.reshape((60000, 28, 28, 1)) test_images = test_images.reshape((10000, 28, 28, 1)) model.fit(train_images, train_labels, epochs=5, validation_data=(test_images, test_labels)) ``` 这只是一个基础示例,实际使用时还需要预处理数据、调整超参数和进行更复杂的架构设计。如果你想查看完整的代码实现,可以参考Keras官方文档或GitHub上的开源项目。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值