【知识星球】从SVM对偶问题,到疲劳驾驶检测,到实用工业级别的模型压缩技巧

欢迎大家来到《知识星球》专栏,本次发布这两天有三AI知识星球中专栏《AI 1000问》,《模型结构1000变》,《数据集》的知识便利贴。

作者&编辑 | 言有三

有三AI1000问-机器学习篇

为什么SVM要把原问题转化为对偶问题

我们知道SVM在求解的时候,会把原问题转换为对偶问题,那为什么要这么做呢?

作者/编辑 言有三

首先我们看看原问题到底是什么?

SVM的优化目标是一个带约束的方程,如下:

这个问题是一个凸二次规划问题,可以用成熟的优化计算包求解,但问题就是计算量很大,因此要寻求更高效的办法。

这可以构建拉格朗日方程来求解,如下,对每条约束添加拉格朗日乘子ai>0,构造拉格朗日函数如下:

关于拉格朗日方程和KKT条件,篇幅限制本次不讲述,读者需要自行补充知识。

上述问题假如有任何一个样本分类错误,那么就有

此时如果让对应的系数ai趋于无穷大,则该函数是不可能取得极小值的,所以上面的式子要想有解,一定会满足:

因此

而我们本来想求的就是在约束条件下的w的范数极小值,所以:

它要求出w,b的值满足内侧的极大值,但这个形式是难解的,不过因为下面的式子存在:

所以上式极小极大值问题可以转换为极大极小值问题:

求解上面的式子只需要将内侧的式子对w,b求导,就能得到a。

要求上式的极大值问题,又可以转化为极小值问题求解,不再赘述。

从上面式子来看,与原问题相比有两点好处:

(1) 改变了问题的复杂度。不管是直接采用优化方法还是拉格朗日方程的原问题,都需要直接求特征向量w,因此求解的复杂度与样本的维度有关。而在对偶问题下,直接求ai即可,这只和样本数量有关,复杂度降低了很多。

(2) 另外再看上式中的x_i·x_j,虽然我们在这里没有讲述核函数,但是非线性可分的SVM问题需要引入核函数,转换为这种形式后,可以非常方便的应用核函数。

有三AI知识星球-网络结构1000变

DeepRebirth

在深度学习模型中有许多的非tensor网络层虽然参数很少,但是有较大的计算量,因此模型在最终部署到移动端时经常合并这些网络层从而进一步提高推理速度。

作者/编辑 言有三

模型压缩有许多的方法,比如使用小卷积,多尺度,去除全连接层,瓶颈结构等思路设计紧凑的网络,也有对权重进行量化剪枝等方法,而DeepRebirth则采用了另外一种思路,即将Non-tensor layer(包括pooling、BN、LRN、ReLU等)合并到tensor层中,因为它们虽然参数不多,但是有很大的计算量,下面首先看看经典网络中这些层的计算时间比例:

可以看出这些非卷积层占据了很大比例的计算时间,在Intel x86上甚至能占到一半,如果能够将其去除将大幅度的提升模型的运算速度。

作者提出了两种思路,分别是StreamLine Merging和Branch Merging。

StreamLine Merging是一种串行的合并方式,如下:

通常来说,就是将Pooling、LRN,BN等网络层与相邻近的Conv层进行合并,上图的案例中经过合并后从153.8ms直接降低到了16.6ms。这里卷积本身的计算时间也大大降低,是因为pool2融合进了conv,使其步长从1变为2。

现今更为常见的情况是将BN,Scale等网络层和相邻的Conv层合并,也能降低不少计算量。

Branch Merging是一个分支的合并方式,如下:

如上图,将1*1卷积层以及Pooling层分支分别合并到和它并行的3*3卷积和5*5卷积分支中。另外考虑到3*3卷积和5*5卷积分支输出通道增加会增大参数量和运算量,因此调整这些分支的输入通道进行压缩。

在进行以上的合并后,模型的性能通常会降低,所以需要重新训练,作者采用的方式是合并得到的新层使用标准的初始化方式,将其他层的参数固定不变,然后将新层的学习率设置为其他层的10倍后进行finetuning。

那么实验效果如何呢?以GoogLeNet为基准模型的实验结果如下:

上表展示了对不同的网络层使用以上合并策略,可以发现各种网络层的速度都有很大提升,在精度只降低0.4%的时候,能有超过3倍的速度提升。

这是非常实用且强大的一个提升模型运行速度的方法,在实际进行模型部署时,常常会对BN等网络层进行合并。

[1] Li D, Wang X, Kong D. Deeprebirth: Accelerating deep neural network execution on mobile devices[C]//Thirty-Second AAAI Conference on Artificial Intelligence. 2018.

有三AI知识星球-数据集

Distracted Driver Detection

Distracted Driver Detection是一个司机状态检测数据集,包含10个状态,共22425张图 。

作者/编辑 言有三

数据集地址:https://www.kaggle.com/c/state-farm-distracted-driver-detection/data,发布于2016年。

每年很多的交通事故的发生都是因为司机没有专注于驾驶,因此一个好的辅助驾驶系统不仅要关注车外的情况,也要时刻关注车内驾驶员的情况。

这一个数据集来自于Kaggle平台,该包含了10种状态,如下:

c0: safe driving

c1: texting - right

c2: talking on the phone - right

c3: texting - left

c4: talking on the phone - left

c5: operating the radio

c6: drinking

c7: reaching behind

c8: hair and makeup

c9: talking to passenger

一些样本如下,每一类约2000多张图像,共22425张图。

更多模型解读和数据集

加入有三AI知识星球即可获取

每日更新网络架构解读

已经超过4万字的内容

每日更新数据集

大量干货供你下载

AI1000问,补全你的知识漏洞

转载文章请后台联系

侵权必究

(0)

相关推荐