machine-learning - 更高的浮点精度和机器学习
问题描述
我通过许多研究论文发现机器学习算法(更具体地说是 CNNs/DNNs)实际上是非常容错的应用程序,即它们可以承受严重的数值错误,从而可以获得非常可接受的结果质量和准确性通过使用 8 位甚至亚字节整数计算运算符。例如,一些研究论文表明,使用 4 位整数 MAC 单元可以获得良好的结果,从而使浮点单元对于此类应用完全没有用处。
我的问题是关于浮点的,你认为这在哪里真的是强制性的?它是否在任何机器学习/人工智能子域中找到任何位置?或者它真的只是通用和科学计算的游戏?任何指向一些真正需要并依赖它的有用应用程序/基准/平台的指针?
解决方案
在浮点数/整数和位数之间做出设计决定。做出这个决定的一个好方法是对模型进行训练后量化,然后看看它如何改变模型的准确性和性能改进。如果在可接受的精度下降水平内有足够的性能改进,则可以将量化作为后处理步骤添加到模型生成过程中。
这种方法不仅限于科学计算或任何特定领域。初始图像识别模型被量化为预测时间的性能提高了 4 倍。话虽如此,在 Jetson 或 Tensforflow-Lite 应用程序等边缘设备上部署的模型中越来越多地采用量化
一个好的起点:Tensorflow 训练后量化
以下是这里的基准
推荐阅读
- objective-c - 如何在Objective C中调用方法
- oauth - 从已删除的 Google OAuth 应用程序中刷新令牌
- node.js - 当数据库不可用时阻塞路由(优雅的“关闭”)
- python - 稀疏矩阵:如果行的总和低于 X (Scipy),则删除行
- sql - 合并具有两个不同日期的表 (SQL)
- swift - 日期格式在 swift5 中显示延迟一天
- linux - Docker 容器无法连接互联网,ping 正常,wget 失败
- python - 如何在 python 中从 BigQuery 获取表名
- c# - Blazor 在 C# 类上使用 RenderTreeBuilder 创建的 html 上的 .razor 传递变量和调用事件
- reactjs - 在 vis.js 中连接具有多个边的两个节点