首先来看下量化的具体定义，对于量化激活值到有符号8bit整数，论文中给出的定义如下：

Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference
]附录B ARM NEON details这一小节。而训练量化说白了就是在forward阶段去模拟量化这个过程，本质就是把权值和激活值量化到8bit再反量化回有误差的32bit，所以训练还是浮点，backward阶段是对模拟量化之后权值的求梯度，然后用这个梯度去更新量化前的权值。然后在下个batch继续这个过程，通过这样子能够让网络学会去修正量化带来的误差。

backward阶段求梯度的公式表示如下：

moving_max = moving_max * momenta + max(abs(act
ivation)) * (1- momenta)

逐层量化和逐通道量化

。

````bool HardcodeMinMaxForConcatenation(Model* model, Operator* op) {` ```    bool has_minmax = false;   double overall_min = std::numeric_limits<double>::infinity();   double overall_max = -std::numeric_limits<double>::infinity();   for (const auto& input : op->inputs) {     if (model->GetArray(input).minmax) {       has_minmax = true;       const auto* minmax = model->GetArray(input).minmax.get();       if (minmax) {         overall_min = std::min(overall_min, minmax->min);         overall_max = std::max(overall_max, minmax->max);       }     }   }   auto& output = model->GetArray(op->outputs[0]);   if (output.minmax) {     has_minmax = true;     const auto* minmax = model->GetArray(op->outputs[0]).minmax.get();     if (minmax) {       overall_min = std::min(overall_min, minmax->min);       overall_max = std::max(overall_max, minmax->max);     }   }   if (!has_minmax) {     return false;   }   MinMax overall_minmax;   overall_minmax.min = overall_min;   overall_minmax.max = overall_max;   bool changed = false;   for (const auto& input : op->inputs) {     auto& array = model->GetArray(input);     if (!array.minmax) {       changed = true;     } else if (!(overall_minmax == array.GetMinMax())) {       changed = true;       LOG(WARNING)           << "Tweaking the MinMax of array " << input << ", which is "           << "an input to " << LogName(*op) << ", because we want all inputs "           << "and outputs of a Concatenation operator to have the same MinMax "           << "so that it can be implemented as a pure byte-copy, no "              "arithmetic.";     }     array.GetOrCreateMinMax() = overall_minmax;   }   if (!output.minmax) {     changed = true;   } else if (!(overall_minmax == output.GetMinMax())) {     changed = true;     LOG(WARNING)         << "Tweaking the MinMax of the output array of " << LogName(*op)         << ", because we want all inputs "         << "and outputs of a Concatenation operator to have the same MinMax "         << "so that it can be implemented as a pure byte-copy, no arithmetic.";   }   output.GetOrCreateMinMax() = overall_minmax;
`   量化范围的选取   量化分为weight和activation的量化。   weight量化范围通过每次forward时，对weight的绝对值取最大值得到。   activation量化范围用EMA算法平滑，可以避免一些极端激活值情况带来的参数分布影响，公式如下 ：    为每个batch的激活值，  为接近1的值，可取0.9。     今天就先到这里，下一期我们给大家带来 量化训练 以及 卷积核剪裁原理 。   Download as PDF `
` Categories:机器学习 模型激活缩放训练量化 Previous Post ThiNet：模型通道结构化剪枝 Next Post 使用 ML.NET 实现峰值检测来排查异常 `
` Be First to Comment 发表评论 取消回复{"values":{"author":"","email":"","url":"","submit":"发表评论","comment_post_ID":"171509","comment_parent":"0","akismet_comment_nonce":"efc7a44427","ak_js":"241","comment":"","ak_hp_textarea":""},"submitting":false,"replyToName":""}邮箱地址不会被公开。 必填项已用*标注 Comment Name* Email* Website {{#message}}{{{message}}}{{/message}}{{^message}}Your submission failed. The server responded with {{status_text}} (code {{status_code}}). Please contact the developer of this form processor to improve this message. Learn More{{/message}}{{#message}}{{{message}}}{{/message}}{{^message}}It appears your submission was successful. Even though the server responded OK, it is possible the submission was not processed. Please contact the developer of this form processor to improve this message. Learn More{{/message}}Submitting… `
` `
` `
` Sidebar Search 分类目录 推荐系统 数据挖掘 机器学习 算法 自然语言处理 计算机视觉 标签TensorFlow 代码 函数 分类 单词 卷积 参数 变量 向量 图像 图谱 学习 实体 序列 推荐 数据 文本 方法 机器 权重 样本 梯度 检测 概率 模型 深度 特征 生成 用户 目标 知识 矩阵 神经元 神经网络 算法 网络 节点 计算 训练 识别 语义 语言 输入 输出 预测 近期文章 论文小综 | 知识图谱表示学习中的零样本实体研究 机器学习2-特征工程 万物皆可Graph | 当推荐系统遇上图神经网络 用于 GAN 生成之动漫图片资料集 论NLP可解释的评估：什幺才是“好”的解释？ 文章归档 2021年1月 2020年12月 2020年11月 2020年10月 2020年9月 2020年8月 2020年7月 2020年6月 2020年5月 2020年4月 2020年3月 2020年2月 2020年1月 2019年12月 2019年11月 2019年10月 2019年9月 2019年8月 2019年7月 2019年6月 2019年5月 2019年4月 2019年3月 2019年2月 2019年1月 2018年12月 2018年11月 2018年10月 2018年9月 2018年8月 2018年7月 2018年6月 2018年5月 功能 登录 项目feed 评论feed WordPress.org 内容说明 本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢. `
` 本站由又拍云提供加速 | 浙ICP备18009236号 `
``` ```