谢邀。这简直是为了昨晚我写的专栏量身设计的问题,不过是MobileNet“慢”的原因,ShuffleNet我本人没自己实现过,就不在这里献丑了。
这里我假设你对MobileNet的深度可分离卷积,以及这种轻量化结构如何节省内存与计算量都了如指掌了(ps:不了如指掌请看下文↓)薰风初入弦:薰风读论文:MobileNet 详解深度可分离卷积,它真的又好又快吗?zhuanlan.zhihu.com
而在速度方面,经过大量实验,我发现在算力足够的GPU平台上,MobileNet不会带来任何速度上的提升(有时甚至是下降的),然而在计算能力有限的平台上,MobileNet能让速度提升三倍以上。
注:这个速度的计算方法是随机生成一个224x224x3的tensor,送入网络进行前向计算,多次计算计时并取平均值。一次试验统计的网络推断速度
那么,为什么GPU上表现乏力的GPU,到CPU上反而一骑绝尘了呢?
我们回想一下,什么叫深度可分离卷积。
深度可分离卷积将一个标准卷积分割成了两个卷积(逐深度,逐点),因此减小了参数量,对应也减小了总计算量。
好的,在上面的话中,我们可以发现一个有趣的事实:深度可分离卷积的总计算量变小了,但深度可分离卷积的层数变多了。
而结合我们对GPU和CPU的认识:GPU是并行处理大规模数据(矩阵内积)的运算平台,而CPU则倾向于对数据串行计算(一个一个算)。
因此,若GPU的显存足够大(干脆假设无限大好了),因为每层的计算都可以并行一次处理,则此时总运算时间的主导因素是网络的层数。
而对于缺乏并行能力的CPU,总的运算时间的主导因素则是总计算量有关。
正因如此,才会出现这个乍一看神奇的现象。实际上,乍一看神奇的东西,背后的道理往往并不会太难。
安利时间,我一直致力于结合感性的人文艺术思考和理性的数学分析。并梦想着帮助大家更好的理解计算机视觉/人工智能/深度学习有关的种种问题。
若你同样想听我用如上讲故事的口吻介绍人工智能的干货知识,欢迎关注我的知乎专栏:薰风的计算机科学家之路zhuanlan.zhihu.com
另外,在开学之后,我会继续坚持把自己喜欢的音乐录制成视频,权当安利自己爱听的歌,如果你想听一听的话,不妨试试我的最新作:勾指起誓的竹笛版!https://www.bilibili.com/video/av60589194www.bilibili.com