1. 项目概述当印刷电子遇见机器学习如何用“比特流”替代乘法器在可穿戴健康监测、智能物流标签这些新兴的边缘计算场景里我们总在追求一个看似矛盾的目标既要设备足够智能能运行机器学习模型进行实时判断又要它足够便宜、柔软且省电最好能像贴纸一样“印”在各种表面上。这就是印刷电子Printed Electronics, PE技术所瞄准的领域。它用特殊的导电油墨通过印刷工艺制造电路成本极低、柔性可弯曲但代价是晶体管尺寸大、集成度低、运行速度慢。传统的二进制计算架构特别是其中占大头的乘法累加MAC运算在这里成了“奢侈品”其面积和功耗开销常常让整个系统设计变得不可行。那么有没有一种计算方式能从根本上简化这些运算呢答案是肯定的而且它就藏在一种看似“复古”的算术表示里——一元算术Unary Arithmetic。你可能没听过这个名字但它的思想很简单不用二进制那种复杂的位权比如8、4、2、1而是用一串比特流里“1”的个数或者密度来直接表示一个数值。比如在8比特的流里有4个“1”那这个数就是0.54/8。这种表示法的魔力在于两个一元数相乘理论上只需要一堆按位与AND门就能完成因为“1”的相遇概率正好对应了乘法结果。这听起来简直是硬件简化者的梦想。但梦想照进现实总有沟壑。纯一元计算虽然硬件简单但数据表示效率低需要很长的比特流才能达到可接受的精度这在资源本就紧张的印刷电路上并不划算。于是一个更精巧的思路诞生了为什么不把一元和二进制结合起来各取所长呢这就是我们今天要深入探讨的“混合一元-二元架构”。它的核心目标非常明确为印刷电子上的MLP分类器设计一套彻底抛弃传统乘法器、最大限度削减面积和功耗的硬件方案。我将在下文中为你拆解这套架构的设计精髓、实操中的关键实现细节以及如何通过软硬件协同设计在几乎不损失精度的前提下平均砍掉46%的面积和39%的功耗。2. 核心思路拆解为什么是“混合”一元与二元在深入电路细节之前我们必须先理解这个混合架构背后的设计哲学。它不是一个随意的拼凑而是针对印刷电子的特定约束和MLP的计算特征所做的精准权衡。2.1 印刷电子的独特约束与机遇印刷电子不是硅芯片的“廉价平替”它有自己的一套规则约束一巨大的特征尺寸。印刷晶体管的尺寸通常在微米甚至数十微米量级比硅基晶体管大几个数量级。这意味着同样功能的电路在PE上会占据巨大的面积。因此减少逻辑门和连线的数量是设计的首要目标。约束二极低的功耗预算。许多PE设备由印刷电池或能量采集器供电功率预算可能只有几十毫瓦甚至更低。任何不必要的动态功耗都是致命的。约束三低速但高度并行。PE电路的工作频率很低通常几十赫兹但得益于印刷工艺的特性它可以非常方便地实现大规模的并行结构因为“多印一条线”的成本增加相对较低。与此同时PE也带来了一个关键机遇定制化成本极低。与传统硅流片高昂的非重复性工程NRE成本不同修改PE电路设计的边际成本很低。这使得我们可以为每一个特定的机器学习模型量身定制一套硬件将“通用性”的包袱扔掉从而极致优化。2.2 一元算术的诱惑与陷阱一元算术之所以吸引人正是因为它完美击中了“减少逻辑门”这个目标。乘法的简化在二进制里两个8位数相乘需要一个64个与门阵列和复杂的加法树。在一元表示中例如采用速率编码如果两个操作数分别是概率为A和B的独立随机比特流那么将它们进行按位与操作输出比特流中“1”的概率就是A*B。乘法奇迹般地变成了一个比特级的逻辑门操作。加法的并行性由于一元表示中每个比特的权重相同加法就变成了简单的计数。多个一元数相加可以直接将它们所有比特位放在一起然后用一个二进制加法器统计“1”的总数即可天然支持高度并行。然而纯一元体系有两个致命陷阱精度与延迟的权衡要达到一定的数值精度一元表示需要很长的比特流比如256位才能达到8位二进制的精度水平。如果采用串行时序处理延迟无法接受如果采用全并行则面积爆炸。数据转换开销现实世界的传感器数据模拟量和训练好的模型权重通常是二进制浮点数都需要转换到一元域这个编码/解码过程本身可能就会引入巨大的开销抵消掉计算简化的收益。2.3 混合架构的智慧分而治之各司其职混合架构的核心思想是**“在最适合的地方使用最适合的表示”**具体策略如下第一层输入层采用一元这是整个设计的点睛之笔。传感器信号经过模数转换器ADC后传统的闪存式ADCFlash ADC其内部结构天然输出一种叫做“温度计码”的信号这本身就是一种一元表示例如对于模拟电压所有低于该电压的比较器输出1高于的输出0。如果我们直接砍掉ADC后端那个将温度计码转换为二进制码的编码器那么ADC的输出直接就是一元格式的比特流。这一步操作不仅省去了一个复杂的数字模块更关键的是它让传感器数据以“零成本”的方式进入了一元计算域。中间与输出层回归二进制经过第一层一元计算后数据被转换回紧凑的二进制格式。后续的隐藏层和输出层继续使用传统的定点数二进制运算。这样做的原因是越到网络深层数据维度通常越低但数值精度要求相对稳定。此时使用高效的二进制表示可以避免一元表示在深层网络带来的面积膨胀问题同时复用大量经过验证的优化技术。这种混合策略本质上构建了一条“一元进二进制出”的数据通路。它巧妙地将一元计算的优势输入接口简化、首层乘法消除局限在开销最大、收益最高的地方而避免了其劣势在整个网络中蔓延。3. 硬件架构深度解析从比特流到神经元输出理解了为什么混合接下来我们看怎么做。这套架构的硬件实现充满了精巧的设计目标就一个用最少的门和线完成MLP的前向传播。3.1 无乘法器的核心一元乘法的硬件实现这是整个设计中最硬核的部分。论文中提到了一种“全并行一元乘法器”其设计思路非常巧妙值得我们拆开揉碎了看。首先我们需要两种一元编码温度计码用于表示权重。例如数值3在8位温度计码中就是11100000。这种编码的“1”是连续的。速率编码用于表示激活值输入。例如数值0.5在8位速率编码中可能是10101010“1”随机分布。这种编码的“1”是随机分布的其密度代表数值。乘法的硬件原理是将权重温度计码的每一位与输入速率编码的对应位进行按位与操作。但由于权重是固定的模型训练好后被固化到硬件里我们可以进行极度优化。看一个例子假设一个权重是0.5温度计码为11110000输入是0.75速率编码例如11011011。传统做法需要8个与门每个门连接权重的一位和输入的一位。优化洞察观察权重的温度计码11110000。前四位是1后四位是0。对于权重为0的位无论输入是什么与之相与的结果肯定是0。这意味着对应权重为0的那些输入比特根本不需要参与任何计算硬件实现因此这个“乘法器”的硬件根本不需要一个完整的8输入与门阵列。它只需要将输入比特流中对应权重为1的那几位即前4位直接“路由”到加法树的输入端。对应权重为0的输入位则被完全忽略。如下图所示权重 (温度计码): 1 1 1 1 0 0 0 0 输入 (速率编码): i0 i1 i2 i3 i4 i5 i6 i7 | | | | (以下连接断开) v v v v 加法树在这个例子中乘法操作退化成了选择与路由。i4, i5, i6, i7这四个输入比特因为撞上了权重0直接被丢弃。只有i0, i1, i2, i3被选中并送入后续的累加单元。这完全消除了乘法器的逻辑门开销。注意这里有一个关键前提输入必须是速率编码随机分布的1。如果输入也是温度计码那么按位与的结果将不再是概率乘法而是最小值操作。因此在将传感器数据温度计码输入第一层之前可能需要一个简单的随机化电路如线性反馈移位寄存器LFSR将其转换为速率编码但这个开销远小于一个乘法器阵列。3.2 混合神经元的具体计算流程让我们跟随一个数据走完一个混合神经元以第一个隐藏层的神经元为例的完整计算过程。参考论文中的图示这个过程非常直观输入来自ADC的、N位并行的一元比特流例如8位代表一个传感器特征。权重固化该神经元有M个输入连接对应M个权重。每个权重都被转换为N位的温度计码并固化在硬件中。正权重用原码负权重则需要用其绝对值的温度计码并标记为负。并行“乘法”对于每一个输入-权重对执行上述的“选择路由”操作。例如对于权重为0.5(11110000)的连接它选中输入流的前4位对于权重为-0.25(11000000)的连接它选中输入流的前2位并标记为负。二元累加所有被选中的、标记为正的输入比特被送到一个二进制加法器中求和得到“正部和”。所有被选中的、标记为负的输入比特被送到另一个二进制加法器中求和得到“负部和”。合并与激活计算正部和 - 负部 偏置。这个最终的和是一个二进制数。然后对其应用ReLU激活函数如果为正则输出为负则输出0。输出该神经元的输出一个二进制数将作为下一层二进制域的输入。这个过程完美诠释了“混合”的含义第一层的乘法和累加的前半部分发生在一元域通过选择路由而累加的合并、偏置相加和激活函数则发生在二进制域。3.3 定制化ADC与布线优化硬件优化不止于计算单元。这个架构对模拟前端也动了手术定制化Flash ADC传统的Flash ADC包含比较器阵列和编码器。由于我们只需要一元输出温度计码那个将温度计码转换为二进制码的编码器可以被彻底移除。这直接减少了ADC约30%-50%的面积和功耗。更进一步我们可以分析第一层所有权重。如果一个权重向量的某一位在所有连接上都为0即这一列永远不会被选中那么对应这个比特位的比较器也可以被关掉甚至移除进一步节省功耗和面积。布线优化在印刷电子中连线电阻大、寄生参数高布线本身也是面积和功耗的重要来源。由于一元计算大幅减少了第一层所需的活跃信号数量只有权重为1对应的输入线需要连接并且后续二进制层的位宽也因量化而降低整个电路的布线复杂度显著下降这带来了额外的、在传统硅基设计中常常被忽略的收益。4. 软硬件协同设计让算法适应硬件再好的硬件架构如果算法模型不配合也是徒劳。这套混合架构的威力很大程度上得益于一套为其量身定制的模型训练与优化方法。4.1 面向硬件的MLP训练训练的目标不再仅仅是准确率最高而是要在保证精度的前提下生成一个对混合一元-二进制硬件极度友好的模型。关键点有两个第一层权重的离散化与一元化在训练时需要对第一层的权重进行约束使其能够用较低精度的温度计码很好地表示。这通常通过在训练损失函数中加入正则化项或者采用量化感知训练QAT来实现鼓励权重值聚集在几个离散的电平上如0, 0.25, 0.5, 0.75, 1.0。这样在硬件中生成对应的温度计码时精度损失最小。后续二进制层权重的2的幂次量化这是另一个大招。如果我们能把权重约束为2的幂次如..., 0.125, 0.25, 0.5, 1, 2, ...那么在二进制乘法中操作就可以简化为移位。在硬件上移位只需要连线不需要任何逻辑门。论文中描述了一个迭代的“训练-量化-微调”流程a. 正常训练一个浮点模型。b. 对某个二进制层的所有权重将其舍入到最近的2的幂次值。c. 固定这些权重用少量周期如2个epoch微调其他层的权重以恢复精度。d. 评估验证集精度。如果精度下降超过预设阈值如1%则回滚该层的量化操作否则保留。e. 对下一层重复b-d过程。这种方法能自动地、分层地将尽可能多的权重转换为2的幂次从而在二进制域也实现大量的乘法器消除。4.2 精度-效率的权衡实践在实际操作中如何设定精度损失的阈值T和微调的周期数m是关键。根据我们的经验阈值T对于大多数分类任务如传感器事件检测1-3%的精度损失通常是可接受的因为带来的面积和功耗收益是巨大的。这个阈值需要根据具体应用对可靠性的要求来设定。微调周期m不宜过多。通常2-5个epoch就足够了。过多的微调可能导致模型“忘记”了为硬件优化所做的量化约束又绕回到原来的解空间。微调的目的只是让网络快速适应部分权重的冻结而不是重新学习。层间顺序通常从靠近输出的层开始量化收益更大因为那些层的神经元数量少单个权重量化对整体连接数的影响比例高。但有时也需要尝试从输入层开始具体顺序可以通过简单的启发式搜索来确定。5. 设计实现与评估从理论到实测纸上得来终觉浅任何硬件设计都必须经过实际评估。我们参考论文的流程在典型的数据集和设计工具链上走了一遍验证其效果。5.1 实验设置与基线选择为了公平对比我们严格复现了论文的环境数据集选用UCI仓库中的6个中小型数据集Cardio RedWine WhiteWine Seeds Vertebral Balance Scale。这些数据集的特征维度适中4-21维非常适合作为边缘设备上的轻量级分类任务原型。基线以文献[7]中报道的、采用3位输入5位权重的全并行二进制MLP作为“黄金基线”。它实现了接近浮点模型的精度代表了传统方法在PE上的性能天花板。对比对象同时与近年提出的几种面向PE的近似计算MLP设计DATE‘22 TCAD’23 TC‘23进行对比这些设计采用了不同的近似乘法器或权重优化技术。工具链使用Synopsys Design Compiler进行逻辑综合用PrimeTime进行功耗分析。虽然PE的工艺库与标准硅库不同单位面积和功耗更大但为了横向比较我们统一使用一个缩放后的PE单元库进行估算工作频率设为20Hz符合PE的典型性能。5.2 性能评估结果分析综合评估结果清晰地展示了混合架构的优势对阵精确二进制基线如表1和图5所示仅采用混合一元-二元架构未使用2的幂次训练平均就能获得25%的面积减少和24%的功耗降低而平均精度损失仅为2%。这是一个非常可观的收益意味着许多原本因功耗超标而无法自供电的设计现在变得可行了。启用2的幂次训练的威力当引入面向硬件的训练后收益进一步扩大。平均能将33.6%的权重转换为2的幂次带来额外的8.5%面积和7.9%功耗优化而额外的精度损失不到0.6%。这说明软硬件协同设计产生了“112”的效果。与先进近似计算的对比如图6所示我们的混合设计尤其是启用2的幂次训练的版本在面积和功耗上全面超越了之前发表的几种先进近似二进制设计[2,4]。虽然[3]的报告数据更低但需要特别注意他们的结果没有包含ADC的开销。而在PE上一个Flash ADC的面积可能比整个数字逻辑部分还大。我们的设计通过消除ADC编码器和定制化比较器恰恰在这一块取得了决定性优势。此外[3]要求所有权重都是2的幂次这对于复杂数据集很难保证精度而我们的方法是自适应的、部分量化的鲁棒性更强。5.3 实际部署考量与挑战将这套设计真正“印刷”出来还需要考虑一些工程细节随机数生成输入一元速率编码需要随机性。在PE上实现一个高质量的伪随机数发生器如LFSR可能有一定面积开销。一种折中方案是使用一个共享的、低速的随机源或者利用传感器噪声等物理随机源。工艺波动性PE的制造工艺波动比硅基大得多可能导致晶体管特性不一致。这对Flash ADC的比较器阈值和数字逻辑的时序都是一大挑战。设计时需要加入足够的冗余和容错裕度。测试与校准由于定制化程度高每一片生产出来的电路可能都需要简单的校准流程例如调整ADC的参考电压以确保一元编码的线性度。6. 常见问题与扩展思考在实际研究和尝试复现这类设计时我遇到并总结了一些典型问题希望能帮你避坑。6.1 问题排查速查表问题现象可能原因排查思路与解决方法分类精度大幅下降10%1. 第一层权重一元化误差过大。2. 2的幂次量化过于激进阈值T设得太低。3. 输入数据范围未归一化到[0,1]。1. 检查权重分布看是否有很多中间值被粗暴舍入。可尝试在训练中增加对第一层权重的量化正则化强度。2. 放宽量化阈值T或减少每轮微调后尝试量化的权重比例如每次只量化绝对值最大的10%的权重。3. 确保输入特征在训练和推理前都进行了正确的归一化否则一元表示的范围假设不成立。硬件综合后面积/功耗优化不明显1. 数据集特征维度太低二进制基线本身很小优化空间有限。2. ADC定制化优化未生效所有权重位都被用到。3. 工具链未正确识别常数乘法/移位优化。1. 这是架构特性对于极小模型混合架构的优势可能被控制逻辑开销抵消。评估是否值得使用。2. 分析第一层权重矩阵尝试调整训练鼓励产生更多全零的输入比特位。3. 检查综合约束和编译指令确保工具被引导进行了常数传播和门级优化。电路时序不满足20Hz要求1. 二进制累加器关键路径过长。2. 一元到二元的转换逻辑延迟大。1. 优化累加器结构如使用进位保留加法器CSA树。由于频率极低这问题在PE中较少见但需检查。2. 确保转换逻辑是纯组合逻辑并检查是否有不必要的寄存器。功耗仍高于自供电预算如30mW1. 激活率过高导致动态功耗大。2. 时钟网络功耗占比高。3. 模拟部分ADC比较器功耗未优化。1. 在训练中引入稀疏性约束降低神经元激活率。2. 在PE中可以考虑使用门控时钟甚至异步电路设计来彻底消除时钟树功耗。3. 采用动态比较器或根据输入信号动态关断部分比较器。6.2 架构的边界与扩展这套混合架构非常优雅但它也有其适用的边界模型类型目前主要针对全连接层MLP。对于卷积神经网络CNN其核心的卷积运算同样是乘积累加理论上可以借鉴。但需要解决一元表示如何高效处理图像数据二维卷积的问题可能需要在输入处理上引入新的设计。数据集规模当前验证集中在中小型数据集。对于特征维度极高的数据如图像第一层的一元并行输入会导致ADC的位数和布线复杂度剧增可能抵消优势。此时可能需要结合特征提取或降维。超越分类该架构本质上是高效的乘积累加引擎。因此它可以扩展到其他基于内积运算的轻量级机器学习模型如支持向量机SVM的推理阶段或者简单的循环神经网络RNN单元。我个人认为这套设计最启发人的地方在于它展现了一种**“基于约束的反向设计”** 思维。不是把硅芯片的架构生搬硬套到印刷电子上而是从PE的物理特性低速、并行、低成本定制和瓶颈面积、功耗出发重新审视最基本的算术表示从而衍生出全新的架构。这种思路对于其他受物理约束的新型计算载体如存算一体、量子计算初期器件同样具有借鉴意义。