ICML 2023 | 达成无振荡模型量化?港科,Meta 提出新的量化训练方式

8b78bfd28e03551f32c3423999f0a9df.png

来源:AI科技评论
本文约1200字,建议阅读5分钟
随着现在模型越来越巨大,模型压缩也显得越来越重要。

f51a87c5f6548ac56da64c49a48db2c5.png

随着现在模型越来越巨大,模型压缩也显得越来越重要。量化模型是模型压缩的其中一种算法,但在训练量化模型的时候,训练过程和模型训练结果会因为量化本身的离散性而产生一种模型权重振荡现象(Weight Oscillation Phenomenon)。之前只有一篇2022年高通的工作对于有对于权重振荡现象的研究,但他们的研究仅实验在了量化相对简单的CNN上。

我们的工作发现了现在主流的模型权重量化方法LSQ(Learned Step Size Quantization)会加剧权重振荡现象,导致训练过程的导数不稳定,和使得模型收敛到不好的local minima。

基于上述发现,我们在量化难度更高的Vision Transformer上研究权重振荡现象,并提出了统计权重量化方法StatsQ(Statistical Weight Quantization)去取代LSQ,和信心引导退火CGA(Confidence-Guided Annealing)算法去帮助权重逃离振荡装态,实现零振荡模型并更好的收敛。

efa1772333f83ad31922f00108af741d.png

论文地址:

http://proceedings.mlr.press/v202/liu23w/liu23w.pdf

代码地址:https://github.com/nbasyl/OFQ

随着模型的规模增加,模型量化是经常用来压缩模型大小和提升神经网路运算速度的实用方法,能使得原本计算量庞大的模型,可以在有限的资源上运行。虽然模型量化的算法一直推成出新,但关于权重振荡现象和Vision Transformer量化的工作少之又少,因此我们的工作利用Vision Transformer来研究权重振荡现象背后真正的成因。

文章首先发现,现在主流的量化算法LSQ(Learned Step Size Quantization)中的learnable scaling facor会加剧模型训练时的权重振荡现象,并在下图中视觉化了learnable scaling facor在个个不同神经网路模块都有振荡的现象。

1d615821cdd9764bb433926f7002b17d.png

出于好奇,我们可视化了收敛后的模型,并发现模型的权重会蜷缩在量化临界点(Quantization Threshold)附近,因此在最后收敛的过程会使得权重来回在相邻的量化节点跳动,使得模型无法收敛。

0ad55ca967962f37721cde548da8ebc8.png

我们追踪了这些靠近量化临界点的权重,并发现这些权重的组成并不是固定的,而是随着训练的过程会不段变动,换句话说,不段的有权重进入靠近临界点的区间,也不断的有权重离开。

c769aabec3251bed339d77ba5fe80fab.png

结合了上述我们的发现,我们首先提出了StatsQ(Statistical Weight Quantization)取代LSQ,StatsQ参照了maximum information entropy theory利用了权重的统计值去计算scaling factor,借此移除了离群权重对学习scaling factor的负面影响。

f3f231b9935453f5df7514c86a59717e.png

除此之外,利用了我们上述发现的权重组成和收敛特性,我们提出了信心引导退火CGA(Confidence-Guided Annealing)去帮助权重逃离振荡装态并收敛到更好的局部最小值,我们在每次更新权重的时候只更新靠近量化临界值的权重,并冻结了剩余的权重。这个方法是基于我们认为远离量化临界值的权重相比于靠近量化临界值的权重已经收敛,并且有着更高的信心,所以可以不去更动他们。我们接着可视化了scaling factor在CGA的训练过程中的变化并发现经过一定的更新次数,StatsQ停止了变化,意味着所有的权重都已经成功逃离了振荡装态,也因此得到了一个收敛到更好局部极小的零振荡模型。

5d0deb1a0b190562018fa8e80ee165ba.png

7dcc36a4257d203758490b6ee532e4e4.png

我们将我们提出的方法统称维Oscillation Free Quantization (OFQ) 并用于 DeiT-T, DeiT-S 以及 Swin-T的网路结构上,且都取得了远超state-of-the-art的结果。可以看出随着量化位宽的递减,量化难度的增加,OFQ的优势越发明显。

5133ae46292dd191472ab0448359afc8.png

论文代码和模型已经开源,感兴趣的读者可以试用。

编辑:文婧

8fafa49e8ae4bd4eecd6b8b5811caf9d.png

《餐馆点餐管理系统——基于Java和MySQL的课程设计解析》 在信息技术日益发达的今天,餐饮行业的数字化管理已经成为一种趋势。本次课程设计的主题是“餐馆点餐管理系统”,它结合了编程语言Java和数据库管理系统MySQL,旨在帮助初学者理解如何构建一个实际的、具有基本功能的餐饮管理软件。下面,我们将深入探讨这个系统的实现细节及其所涉及的关键知识点。 我们要关注的是数据库设计。在“res_db.sql”文件中,我们可以看到数据库的结构,可能包括菜品表、订单表、顾客信息表等。在MySQL中,我们需要创建这些表格并定义相应的字段,如菜品ID、名称、价格、库存等。此外,还要设置主键、外键来保证数据的一致性和完整性。例如,菜品ID作为主键,确保每个菜品的唯一性;订单表中的顾客ID和菜品ID则作为外键,与顾客信息表和菜品表关联,形成数据间的联系。 接下来,我们来看Java部分。在这个系统中,Java主要负责前端界面的展示和后端逻辑的处理。使用Java Swing或JavaFX库可以创建用户友好的图形用户界面(GUI),让顾客能够方便地浏览菜单、下单。同时,Java还负责与MySQL数据库进行交互,通过JDBC(Java Database Connectivity)API实现数据的增删查改操作。在程序中,我们需要编写SQL语句,比如INSERT用于添加新的菜品信息,SELECT用于查询所有菜品,UPDATE用于更新菜品的价格,DELETE用于删除不再提供的菜品。 在系统设计中,我们还需要考虑一些关键功能的实现。例如,“新增菜品和价格”的功能,需要用户输入菜品信息,然后通过Java程序将这些信息存储到数据库中。在显示所有菜品的功能上,程序需要从数据库获取所有菜品数据,然后在界面上动态生成列表或者表格展示。同时,为了提高用户体验,可能还需要实现搜索和排序功能,允许用户根据菜品名称或价格进行筛选。 另外,安全性也是系统设计的重要一环。在连接数据库时,要避免SQL注入攻击,可以通过预编译的PreparedStatement对象来执行SQL命令。对于用户输入的数据,需要进行验证和过滤,防止非法字符和异常值。 这个“餐馆点餐管理系统”项目涵盖了Java编程、数据库设计与管理、用户界面设计等多个方面,是一个很好的学习实践平台。通过这个项目,初学者不仅可以提升编程技能,还能对数据库管理和软件工程有更深入的理解。在实际开发过程中,还会遇到调试、测试、优化等挑战,这些都是成长为专业开发者不可或缺的经验积累
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值