NeurIPS 2020 | 没有乘法的神经网络,照样起飞?

文:苏剑林
编:兔子酱
单位:追一科技

今天给大家介绍一篇1962年的论文《Computer Multiplication and Division Using Binary Logarithms》[1],作者是John N. Mitchell,他在里边提出了一个相当有意思的算法:在二进制下,可以完全通过加法来近似完成两个数的相乘,最大误差不超过1/9。整个算法相当巧妙,更有意思的是它还有着非常简洁的编程实现,让人拍案叫绝。然而,笔者发现网上居然找不到介绍这个算法的网页,所以在此介绍一番。

你以为这只是过时的玩意?那你就错了,前不久才有人利用它发了一篇NeurIPS 2020呢!所以,确定不来了解一下吗?

快速对数与指数

说到乘法变加法,大家应该很自然能联想到对数和指数,即

本文是基于二进制的,所以a=2。问题在于上式虽然确实将乘法转为加法了,但是对数和转换后的指数算起来都不是一件容易的事情。所以要利用这个等式做乘法,关键在于要实现快速对数和指数运算。

对于十进制的非负数p,我们假设它的二进制表示为

其中且各个,那么我们就有

,我们得到

在这里,Mitchell做了一个相当果断而美妙的近似,那就是(后面我们会再进行误差分析),于是得到

这个结果妙在何处呢?首先n是一个整数,等于p的二进制的整数部分的位数减去1,它转换为二进制自然自然也是整数;那x呢?根据x的定义我们不难看出,实际上x的二进制表示就是

也就是说x其实就是上述近似的小数部分,它的二进制表示只不过是p的二进制表示的简单变形(小数点平移)。

综上所述,我们得到对数的Mitchell近似算法:

将上述过程逆过来,就得到了指数的Mitchell近似算法:所以,在二进制下对数和指数的近似计算就只是数数和拼接操作而已!惊艳不?神奇不?

一个乘法的例子

有了快速的(近似的)对数和指数算法,我们就可以乘法了,现在我们就用这个思路来算一个具体例子,由此加深我们对上述过程理解。

我们要算的是12.3×4.56,计算流程如下表(近似指数是对求和的结果算的):其中p,qp,qp,q二进制表示为无限循环小数,这里只截断了有限位,如果保留精确的二进制表示,那么最终结果是53.68,跟上表的53.625相差不大。可以看到,整个过程的主要计算量有两部分:求和、十进制与二进制之间的转换。然而,尽管十进制与二进制之间的转换对于我们人来说是计算量比较大的操作,但对于计算机来说,它本身就是二进制存储的,我们可以认为两者之间的转换计算量可以忽略不计;又或者说,只要我们还是以十进制为输出,那么不管什么算法这部分计算量都是必然存在的,因此我们不把它算进去算法的复杂度中。所以,整个算法的计算量就只有求和这一步,实现了将乘法(近似地)转化为加法运算。

神奇的C++实现

更妙的是,上述过程有一个非常简单的C++实现,参考如下:

#include<stdio.h>int main() {float a = 12.3f;float b = 4.56f;int c = *(int*)&a + *(int*)&b - 0x3f800000;printf("近似结果:%f\n", *(float*)&c);printf("精确结果:%f\n", a * b);return 0;
}

没有C++编译环境的朋友也可以找个网页版的在线C++运行程序试跑一下,测试一下它的结果。就算是不懂C++的朋友(比如笔者)大概也可以感觉到,这段代码大概就是转化为两个数相加并且减去一个常数,这怎么就能实现乘法了?还有的读者可能问Python里边能这样写吗?

首先,后一个问题的答案是不能,因为Python的数据类型已经经过了高度封装了,而上述C++代码的可行性在于浮点数的IEEE754表示法:一个十进制浮点数首先会被转化为二进制,然后标准化为科学计数法,最后用一个特定的结构将科学计数法的结果存下来。具体来说,IEEE754用32个0/1表示一个浮点数,其中1位表示正负号(0为正),8位表示科学计数法的指数,23位表示科学计数法的小数,以9.75为例,它的二进制为1001.11,写成科学计数法就是,这里的10、11都是二进制,对应十进制的,注意指数部分我们还需要加上偏移量127,即3次方实际上存的是130(二进制表示为10000010),因为前面126个数要用来表示负整数幂,而主要部分1.00111,由于第一位必然是1,因此只需要把0.00111存下来,所以9.75背后的表示方式为:

知道IEEE754表示法之后,就可以理解上述代码了,*(int*)&a*(int*)&b其实就是把a,ba,ba,b的IEEE754表示拿出来,当作普通的整数来运算,两者相加,其实正好对应着Mitchell近似对数后的相加结果,但是指数部分会多出一个偏移量,所以要减去整个偏移量,由于偏移量是127,并且后面还有23位,所以减去偏移量相当于减去常数127×2^23,表示为十六进制就是3f800000(因为二进制表示太长了,所以计算机一般用十六进制来代替二进制进行IO),最后将加减后的结果恢复为浮点数。

(注:其实笔者也不懂C++,上述理解是东拼西凑勉强得到的,如果不当之处,请大家指出。)

最大误差的分析

标题写到,这个算法的误差不超1/9,现在我们就来证明这一点。证明需要全部转换到十进制来理解,Mitchell近似实际上是用了如下近似式:

其中n是整数,而x∈[0,1),所以分析误差也是从这两个近似入手。

假设两个数为那么根据近似就有,可见要分两种情况讨论:第一种情况,那么近似指数的结果就是,因此近似程度就是

第二种情况,这时候近似指数的结果就是,因此近似程度就是

可以按部就班地证明,上面两种情况的最小值,都是在时取到,其结果为8/9,所以最大的相对误差为1/9(如果是除法变成减法,那么它的最大误差是12.5%)。因为按部就班的证明有点繁琐,我们这里就不重复了,而是直接用软件画出它的等高线图,看出误差最大的地方应该是中心处:

作图代码:

import numpy as np
import matplotlib.pyplot as pltx = np.arange(0, 1, 0.001)
y = np.arange(0, 1, 0.001)X, Y = np.meshgrid(x, y)
Z1 = (1 + X + Y) / (1 + X + Y + X * Y)
Z2 = 2 * (X + Y) / (1 + X + Y + X * Y)
Z = (X + Y < 1) * Z1 + (X + Y >= 1) * Z2
plt.figure(figsize=(7, 6))
contourf = plt.contourf(X, Y, Z)
plt.contour(X, Y, Z)
plt.colorbar(contourf)
plt.show()

其实这个误差本质上取决于的近似程度,我们知道x是自然对数的一阶泰勒展开式,而e=2.71828更加接近于3,所以如果计算机使用3进制的话,本算法会有更高的平均精度。事实上,确实有一些理论分析表明,对于计算机来说其实最理想是e进制,而3比2更接近于e,所以三进制计算机在不少方面会比二进制更优,我国和前苏联都曾研究过三进制计算机,不过由于二进制实现起来更加容易,所以当前还是二进制计算机的天下了。

搬到深度学习中

Mitchell近似的介绍就到这里了。读者可能会困惑,这不该是计算机基础和数据机构那一块的东西吗?你研究它干嘛?还能在深度学习中有什么应用吗?

笔者学习它的原因有两个:一是它确实很漂亮,值得学习;二是它还真的可以用到深度学习中。事实上,笔者是NeurIPS 2020的一篇论文《Deep Neural Network Training without Multiplications》[2]中发现它的,该论文在“ImageNet+ResNet50”验证了直接将神经网络中的乘法换成Mitchell近似的加法形式,准确率只有轻微的下降,甚至可能不下降。

当然,作者目前的实现只是验证了这种替换在效果上是可接受的,在速度上其实是变慢了的。这是因为虽然从理论上来讲乘法换成近似加法速度一定会有提升,但要实现这个提升需要从硬件底层进行优化才行,所以作者是提供了未来深度学习硬件优化的一个方向吧。此外,Mitchell近似在深度学习中的应用分析,也不是第一次被讨论了,直接Google就可以搜到两篇,分别是《Efficient Mitchell’s Approximate Log Multipliers for Convolutional Neural Networks》[3]和《Low-power implementation of Mitchell's approximate logarithmic multiplication for convolutional neural networks》[4]

可能读者联想到了华为之前提出的加法神经网络AdderNet,其目的确实有类似之处,但方法上其实差别很大。AdderNet是将神经网络的内积换成了距离,从而去掉了乘法;这篇论文则是修改了乘法的实现,降低了乘法的计算量,已有的神经网络运算可能都可以保留下来。

也把新瓶装旧酒

本文介绍了1962年发表的Mitchell近似算法,它是一种近似的对数和指数计算,基于此我们可以将乘法转化为加法,并保持一定的精度。看上去已经过时,但将这个算法“新瓶装旧酒”一下,就成为了NeurIPS 2020中一篇论文了。

所以,你还发现了哪些可以装到新瓶的“旧酒”呢?

后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

 

[1] https://ieeexplore.ieee.org/document/5219391

[2] https://arxiv.org/abs/2012.03458

[3] https://ieeexplore.ieee.org/document/8532287

[4] https://ieeexplore.ieee.org/document/8297391

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479361.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 1160. 拼写单词

文章目录1. 题目2. 解题1. 题目 给你一份『词汇表』&#xff08;字符串数组&#xff09; words 和一张『字母表』&#xff08;字符串&#xff09; chars。 假如你可以用 chars 中的『字母』&#xff08;字符&#xff09;拼写出 words 中的某个『单词』&#xff08;字符串&…

MTFlexbox自动化埋点探索

1. 背景 跨平台动态化技术是目前移动互联网领域的重点关注方向&#xff0c;它既能节约人力&#xff0c;又能实现业务快速上线的需求。经过十年的发展&#xff0c;美团App已经变成了一个承载众多业务的超级平台&#xff0c;众多的业务方对业务形态的快速迭代和更新提出了越来越高…

Android官方开发文档Training系列课程中文版:添加ActionBar之设置ActionBar

导言- 添加ActionBar 原文地址&#xff1a;http://android.xsoftlab.net/training/basics/actionbar/index.html ActionBar是很多重要的特性之一&#xff0c;你可以用它实现用户的自定义行为。它提供了若干的用户界面特性&#xff0c;以便你的应用可以很快的提供与其它应用很…

论文浅尝 | 具有图卷积网络和顺序注意力机制的应用于目标导向的对话系统

论文笔记整理&#xff1a;吴涵&#xff0c;天津大学硕士&#xff0c;研究方向&#xff1a;自然语言处理。来源&#xff1a;2019 Association for Computational Linguistics论文链接&#xff1a;https://www.mitpressjournals.org/doi/full/10.1162/tacl_a_00284开放源码&#…

Docker的基本使用(部署python项目)+两个奇技淫巧,将 Docker 镜像体积减小 99%

两个奇技淫巧&#xff0c;将 Docker 镜像体积减小 99% 使用Docker运行程序 Docker的基本使用(部署python项目) 一、准备项目 我写的是一个爬取某ppt网站的代码&#xff0c;就一个ppt1.py是爬虫&#xff0c;然后&#xff0c;ppts是存放下载的ppt的 二、准备requirement.txt文件…

Pytorch与Tensorflow,哪个更适合你?

本文转载自公众号“夕小瑶的卖萌屋”&#xff0c;专业带逛互联网算法圈的神操作 -----》我是传送门 关注后&#xff0c;回复以下口令&#xff1a; 回复【789】 &#xff1a;领取深度学习全栈手册&#xff08;含NLP、CV海量综述、必刷论文解读&#xff09; 回复【入群】&#xf…

LeetCode 500. 键盘行

文章目录1. 题目2. 解题1. 题目 给定一个单词列表&#xff0c;只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。 示例&#xff1a; 输入: ["Hello", "Alaska", "Dad", "Peace"] 输出: ["Alaska", &quo…

XGBoost缺失值引发的问题及其深度分析

1. 背景 XGBoost模型作为机器学习中的一大“杀器”&#xff0c;被广泛应用于数据科学竞赛和工业领域&#xff0c;XGBoost官方也提供了可运行于各种平台和环境的对应代码&#xff0c;如适用于Spark分布式训练的XGBoost on Spark。然而&#xff0c;在XGBoost on Spark的官方实现中…

Android官方开发文档Training系列课程中文版:添加ActionBar之添加Action按钮

原文地址 : http://android.xsoftlab.net/training/basics/actionbar/adding-buttons.html 添加Action按钮 ActionBar允许在当前的APP上下文内添加很多重要的功能按钮。这样便可以通过图标或者文字作为功能按钮直接展示在ActionBar上。功能按钮如果没有足够空间或无足轻重的按…

快手搜索技术部招聘NLP算法工程师!

星标/置顶小屋&#xff0c;带你解锁最萌最前沿的NLP、搜索与推荐技术工作职责快手搜索技术部招聘&#xff0c;负责研发快手主APP搜索中的关键NLP模型/算法&#xff0c;包括但不限于&#xff1a;适合快手数据生态的NLP预训练语言模型&#xff0c;并推动预训练模型在query解析&am…

论文浅尝 | 解决知识图谱补全中的长尾关系和不常见实体问题

论文笔记整理&#xff1a;汪寒&#xff0c;浙江大学硕士。链接&#xff1a;https://www.aclweb.org/anthology/P19-1024.pdf动机KG的分布遵循长尾分布&#xff0c;大部分关系只有很少的三元组&#xff0c;且大体趋势是关系出现的频率和与之相关的不常见实体的比例呈反比关系。而…

LeetCode 944. 删列造序

1. 题目 题目链接 每个单词的位组成的列非降&#xff0c;最少删除几列。 示例 1&#xff1a;输入&#xff1a;["cba", "daf", "ghi"] 输出&#xff1a;1 解释&#xff1a; 当选择 D {1}&#xff0c;删除后 A 的列为&#xff1a;["c&quo…

Android官方开发文档Training系列课程中文版:添加ActionBar之自定义ActionBar样式

原文地址 : http://android.xsoftlab.net/training/basics/actionbar/styling.html ActionBar的样式 ActionBar提供了为用户提供了常见的习惯性的用户界面以及按钮功能。但是这并不意味着必须要和其它APP看起来一模一样。如果需要设计更符合产品品牌样式风格的话&#xff0c;…

美团 iOS 工程 zsource 命令背后的那些事儿

zsource 命令是什么&#xff1f; 美团 App 在 2015 年就已经基于 CocoaPods 完成了组件化的工作。在组件化的改造过程中&#xff0c;为了能够加速整体工程的构建速度&#xff0c;我们对需要集成进美团 App 的组件进行了二进制化&#xff0c;同时提供一个叫做 cocoapods-binary …

互联网大厂CTR预估前沿进展

文 | Ruhjkg编 | 小鹿鹿lulu源 | 知乎前言CTR&#xff08;click through rate&#xff09;预估模型是广告推荐领域的核心问题。早期主要是使用LR&#xff08;线性回归&#xff09;人工特征工程的机器学习方法&#xff0c;但是存在人工组合特征工程成本较高&#xff0c;不同任务…

以史为鉴 | 为什么要将「知识图谱」追溯到1956年?

本文转载自公众号&#xff1a;AI科技评论。作者 | Claudio Gutierrez 编译 | MrBear编辑 | Tokai以史为鉴&#xff0c;可以知兴替。纵观近期包括 AAAI、NeurIPS、IJCAI 在内的AI顶级会议&#xff0c;对图结构模型的研究是一个绕不开的话题&#xff0c;大量学者涌入这个赛道&…

Android官方开发文档Training系列课程中文版:添加ActionBar之ActionBar浮层效果

原文地址 : http://android.xsoftlab.net/training/basics/actionbar/overlaying.html 浮层效果的ActionBar 默认情况下&#xff0c;ActionBar总是会出现在Activity窗口的顶部&#xff0c;这样会稍微的减少Activity布局的剩余空间。如果需要在用户使用的时候隐藏和显示Action…

美团大规模微服务通信框架及治理体系OCTO核心组件开源

微服务通信框架及治理平台OCTO作为美团基础架构设施的重要组成部分&#xff0c;目前已广泛应用于公司技术线&#xff0c;稳定承载上万应用、日均支撑千亿级的调用。业务基于OCTO提供的标准化技术方案&#xff0c;能够轻松实现服务注册/发现、负载均衡、容错处理、降级熔断、灰度…

领域应用 | 知识结构化在阿里小蜜中的应用

本文转载自公众号&#xff1a;DataFunTalk。分享嘉宾&#xff1a;李凤麟 阿里巴巴 算法专家文章整理&#xff1a;付一韬内容来源&#xff1a;2019知识图谱前沿技术论坛出品社区&#xff1a;DataFun导读&#xff1a;阿里小蜜是阿里巴巴服务领域的重要人工智能产品&#xff0c;是…

内卷的世界,我们是否可以换一种思维生活?

文 | Flood Sung源 | 知乎前言今年最热门的词汇之一当属内卷了。似乎很多行业都由于份额有限而陷入内卷当中。最火的或许是清华学生的这张图&#xff0c;“骑车写代码”&#xff1a;图片来自网络虽然后来知道是这位同学怕关了屏幕程序就断了&#xff0c;但这不禁让人思考&#…