忆阻器芯片STELLAR权重更新算法(清华大学吴华强课题组)

本文主要是介绍忆阻器芯片STELLAR权重更新算法(清华大学吴华强课题组),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考文献(清华大学吴华强课题组)

Zhang, Wenbin, et al. “Edge learning using a fully integrated neuro-inspired memristor chip.” Science 381.6663 (2023): 1205-1211.

image.png
image.png

STELLAR更新算法原理

在权值更新阶段,只需根据输入、输出和误差的符号计算权值更新方向。此外,该算法预先定义了一个阈值,在计算误差符号时过滤掉小误差信号,并通过避免过于敏感和不必要的更新。省略掉小更新信号后,在STELLAR更新方案下基于忆阻器的梯度向量可以更接近地近似标准BP梯度向量。设定的阈值是硬件可重构的,以适应各种学习任务。STELLAR算法取决于权重更新的方向,将对应的相同SET和RESET脉冲施加到忆阻器单元。

前向传播(inference)

image.png
对每个输入向量执行权重更新。该学习算法以网络输出和目标的损失函数最小为目标,对电导进行最优更新。

反向传播——损失函数(平方损失函数)

image.png

反向传播——权重更新量(基于阈值性方向)

image.png
image.png
C 1 , C 2 C_1,C_2 C1,C2可灵活配置。如果将ReLU激活函数应用于加权和输出向量 Z \textbf{Z} Z,则 C 1 C_1 C1通常是第一层输出中的最大值乘以0.4, C 2 C_2 C2值通常设置为零。如果输出层省略了ReLU激活函数,则没有 C 2 C_2 C2,且 C 1 C_1 C1设置为零。

关于激活函数

在这项工作中,ReLU激活函数是在制造的芯片上进行实验证明的。当输出层神经元函数配置为sigmoid、tanh函数时, s y 2 sy_2 sy2需要由神经元对应的导数函数量化,而不是直接用 y 2 y_2 y2的值进行量化。

器件非对称切换下的STELLAR更新方案

实际的忆阻器器件存在非理想的调谐行为,例如更新曲线的非线性和不对称性,这阻碍了基于忆阻器的边缘学习应用的开发和探索。
STELLAR更新方法引入了一种基于阈值的三值化方案来计算输入和输出导数向量(derivative vectors),随后将其用于计算基于符号的权重梯度。这种STELLAR方案有利于简化梯度计算和权重更新的硬件设计,节省硬件成本,以实现用于边缘学习的完全集成的忆阻器芯片。
实验模拟结果和理论分析表明,STELLAR方案可以适应器件的非对称更新。

定制设计的电路能耗从忆阻器芯片中使用的电路和Cadence仿真器获得;
传统BP算法产生的功耗(Intel Xeon E5-2699处理器产生的功耗)估算方法为:计算操作数/能效(Jouppi et al.)
*整个训练过程中的
电导调谐操作的总能量*消耗估算方法为:**调谐操作数
每个操作的平均能量**。调谐操作数来自片上学习仿真。根据忆阻器芯片产生的测量结果估计write操作的平均能量,从8-bit分辨率的130 nm ADC获得read操作的能量

循环并联电导调谐方案(2T2R)

image.png
*比较编程脉冲数[周期并行STELLAR(stellar1)、非周期并行STELLAR(stellar2)、具有写入验证方案的常规BP(BP w/verify)]:
image.png
循环并行STELLAR方案可以在相同的训练时期内具有与BPw/verify一样快地收敛。但是STELLAR方案所需的脉冲数远低于后者。stellar1相比于stellar2只需要近一半的脉冲数

权重迁移算法

image.png

硬件上实现电导更新电压控制的方法

控制器将输入级选择信号解码为用于电压选择的输出信号。将电压选择信号作为BL/WL和SL驱动器的控制信号。通过驱动器中的MUX选择要加到忆阻器阵列上的电压。
第一层阵列采用2T2R来降低IR压降,第二层阵列采用1T1R配置,两个相邻列分别表示正权重和负权重
image.png

硬件上实现其他计算模块的方法

忆阻器阵列和片上ADC执行VMM运算,实现前向传播;
ADC配置沿模拟VMM信号的量化实现ReLU激活函数;
基于脉冲数的定时依赖方案、差分对减法输出、误差计算电路、符号变换电路略(依靠定制电路和逻辑电路实现)

片外训练与片内推理

网络训练在定制的外围电路中实现,然后通过权重迁移算法和周期STELLAR方案的电压脉冲写入器件电导
芯片测试系统主要集成了FPGA和相应的电压发生器。FPGA为忆阻器生成控制命令,沿BL向忆阻器发送输入,并接入SL读取结果电压发生器为VMM操作和忆阻器编程(电导更新)提供可编程的电压
FPGA通过以太网连接与实现用户界面的PC进行通信。(他们还做出了应用程序编程接口(API))
片内推理(前向传播)在芯片内部的crossbar阵列内实现,测量测试集准确率。输入图像采用二值化像素。导入的电导能够长期存储(训练后48天内测试集准确率不变)

周期性STELLAR更新方案的电路设计(1T1R)

image.png
image.png

第二层阵列的完整电路图

image.png

这篇关于忆阻器芯片STELLAR权重更新算法(清华大学吴华强课题组)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/589296

相关文章

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Oracle 通过 ROWID 批量更新表的方法

《Oracle通过ROWID批量更新表的方法》在Oracle数据库中,使用ROWID进行批量更新是一种高效的更新方法,因为它直接定位到物理行位置,避免了通过索引查找的开销,下面给大家介绍Orac... 目录oracle 通过 ROWID 批量更新表ROWID 基本概念性能优化建议性能UoTrFPH优化建议注

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

Redis中6种缓存更新策略详解

《Redis中6种缓存更新策略详解》Redis作为一款高性能的内存数据库,已经成为缓存层的首选解决方案,然而,使用缓存时最大的挑战在于保证缓存数据与底层数据源的一致性,本文将介绍Redis中6种缓存更... 目录引言策略一:Cache-Aside(旁路缓存)策略工作原理代码示例优缺点分析适用场景策略二:Re

Pandas利用主表更新子表指定列小技巧

《Pandas利用主表更新子表指定列小技巧》本文主要介绍了Pandas利用主表更新子表指定列小技巧,通过创建主表和子表的DataFrame对象,并使用映射字典进行数据关联和更新,实现了从主表到子表的同... 目录一、前言二、基本案例1. 创建主表数据2. 创建映射字典3. 创建子表数据4. 更新子表的 zb

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作