深度神经网络中的BNN和DNN:基于存内计算的原理、实现与能量效率

前言

请添加图片描述

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:https://www.captainbed.cn/z
请添加图片描述

ChatGPT体验地址

请添加图片描述

文章目录

  • 前言
  • 引言
  • 内存计算体系结构
  • 深度神经网络(DNN)
    • 随机梯度的优化算法
  • 二值化神经网络(BNN)
    • BNN架构
      • 基于 sram 的内存计算系统中各列偏移的硬件补偿,
      • 归一化
  • 系统演示
  • 总结

引言

深度神经网络(DNN)在机器学习领域越来越受欢迎,其在一系列任务中展现出最先进的性能。为了达到最佳结果,通常需要大量的训练数据和大型模型,从而使得训练和推理过程变得复杂。尽管图形处理单元(GPU)在许多应用中被用于提供并行计算能力,但较低能耗的平台有可能实现一系列新的应用。目前,一个趋势是降低权重和激活精度的能力,以前的研究表明,在某些情况下,权重和激活可以二值化(即二值化神经网络,BNN),从而显著减小模型尺寸。利用这一特点可以减少计算能量和数据传输能量。

内存计算体系结构

内存访问在能量和吞吐量方面是一个关键的瓶颈,无法通过传统的数字加速方法来解决。深度神经网络受到严重影响,因为其涉及到大模型尺寸,需要在内存中存储权重。这促使了内存计算方法的发展。尽管已经提出了各种方法,但它们的原理通常是通过对许多存储位访问来计算结果,从而逐个分摊访问原始数据的成本。

例如,传统内存一次只访问一行,而内存计算一次可以访问许多行(可能是所有行)。然而,这种平衡需要在许多位上进行计算,这通常会增加所需的动态范围。在现有的内存受限结构中,拟合计算通常需要模拟操作,从而降低计算的信噪比(SNR)。

下图,我们保留了一个标准的6T SRAM位单元,以最大限度地提高归一化效率和吞吐量,同时探索如何通过训练方法解决深度神经网络的计算SNR问题。通过修改存储位单元并采用电荷域运算,我们大幅提高了模拟计算的SNR,从而实现了最先进的规模和能源效率。

在这里插入图片描述

目前挑战主要有两个方向:(1)将权重值重置为1-b值;(2)针对位元变化和BL/BLB放电非线性的模拟MAC操作,产生各种非理想的因素。使用了增强的线性分类器,并在训练过程中采用约束分辨率回归(CRR)算法来适应1-b权重值。同时,他们利用错误自适应分类器增强(EACB)算法来克服模拟非理想。进一步发展到深度神经网络推理模型,以实现更高的精度。以上所采用的训练方法能够容忍有限的精度和模拟非理想。最近的内存计算架构进一步实现了1-8位的值和激活精度的可扩展性

深度神经网络(DNN)

深度神经网络的训练过程与其它机器学习算法类似,通常采用一种称为随机梯度的优化算法。

深度神经网络的结构如图2所示,每个“神经元”都是一个计算单元,接收N个输入x/n并在输入和可调权重w之间执行MAC操作。在这里,nr,re1,…R,其中R代表第1层的神经元总数,因此该层的输出维数也是R。值得注意的是,每一层的N必须等于前一层的N。在每个神经元中求和后,应用非线性函数·)产生输出激活al。对于下一层,激活作为输入,因此a→xn=r)。尽管图示了三层,但最终的输出层生成的激活.1通常对应于输出分类决策,例如,基于最高值的输出实现多类推理。

在这里插入图片描述

随机梯度的优化算法

在这里插入图片描述

随机梯度下降(SGD)是一种用于训练深度学习和机器学习模型的优化算法。其核心思想是通过计算模型参数的梯度,并乘以一个学习率来更新参数。SGD包括以下步骤:

  1. 向前传播:将训练数据输入到模型中,计算输出。
  2. 计算误差:通过代价函数表示输出与真实标签之间的差距。
  3. 向后传播:计算误差的梯度,以调整模型参数。
  4. 权重更新:根据梯度值更新模型参数。

SGD通常在处理大量训练样本(称为“批处理”)之前进行权重更新,以避免由于随机噪声导致的稳定性问题。可以通过控制批处理的大小来调整更新策略。此外,SGD可以采用多种随机方式进行更新,称为“epoch”,以实现增量权重更新。在推理阶段,只需执行前向传播以获得决策结果。

二值化神经网络(BNN)

二值化神经网络(BNN)是一种在深度学习模型中使用二进制权重和激活值的网络。在BNN的训练过程中,权重和激活值都是在正向传播过程中进行二值化的。然而,如果将梯度存储为二进制值,更新过程将变得困难,因此我们存储全精度的梯度。

在BNN中,由于激活函数的不连续性,需要使用新的导数函数。常用的成本函数有铰链损失等。为了进一步提高稳定性,提高收敛速度,并减少由于精度降低而导致的协方差偏移,建议在MLP训练过程中加入批归一化(batchnorm)。

在这里插入图片描述

BNN架构

我们考虑了一个二值化神经网络(BNN),其中每个神经元被视为一个函数,计算隐藏层的激活值。虽然重和激活值在隐藏层和输入层都是二值化的,但输入层并未二值化,而是使用5-b表示。

这个BNN架构使用MATLAB将MNIST图像从28x28缩小到10x10,并量化到5b,然后将其馈送到DNN的第一层。DNN包括两个隐藏层,每个隐藏层由96个神经元组成。每个神经元都是由一个SRAM列实现的,用于内存计算。

在BNN中,使用ReLU激活函数,并通过Theano库进行反向传播和重更新。使用基于平方铰链函数的损失函数,并使用ADAM自适应学习进行最小化。

在训练过程中,利用片上前向传播来获得一组可用于内存计算系推理的模型重。这不仅允许表示由于精度降低而导致的误差,还允许表示和通过重调优来解决由于模拟非理想而导致的误差。

在这里插入图片描述

基于 sram 的内存计算系统中各列偏移的硬件补偿,

在这里插入图片描述

首先,我们提出了一种基于硬件的补偿方法,用于减轻由比较器失配引起的每列偏移。这种方法已经在文献[6]中使用。如上图,我们使用8行SRAM进行补偿,尽管实际使用的系统具有32行。通过存储在这些行中的数据来对BIBLB放电进行偏置,其中偏置可以通过为该列存储的位单元值对每列进行完成。所有列的最优值可以使用二叉搜索算法高效且并行地确定。

在算法的开始,每列中的补偿位单元格的一半被设置为1,另一半被设置为0。当断言单词行时,补偿行名义上导致相等的BL/BL放电,因此比较器可以决定每列中的偏移量。补偿位单元的值被相应地调整,以抵消如图所示的偏移量,并重复此过程,调整存储值的数量是以前的一半,直到仅调整一行中的值。

最后,最终的偏移量对应于一个补偿行引入的放电偏置量。通过选择补偿行数和用于补偿行的字线电压,可以在补偿范围和补偿粒度之间实现平衡。因此,补偿字线电压与其他字线电压有选择地不同。

归一化

第二种方法涉及对 5-b输入图像数据进行归一化,以确保模拟偏置的某些一致性,从而减轻非线性的影响。例如,位单元电流和比较器偏置电压都是 BL/BLB 值的强函数。

在这里插入图片描述

系统演示

为进行系统演示,构建下图所示的4芯片系统。该系统与[27]中使用的系统类似,但设置和配置不同。在这个应用中,三层只需要四个芯片中的三个。在片上BNN 系统中,硬件只用于前向传播,无论是在训练还是测试中。如第三节所述,反向传播和权重更新由 Theano 处理。芯片和Theano之间的数据通过 matlab 控制的 DAO 交换。在此过程中,计算第 III-D 节中提到的批量归一化,从芯片获得的激活值a在发送到后续芯片之前被归一化并转换为5位数字。

在这里插入图片描述

总结

基于二值化值和激活的MNIST分类的BNN实现,利用标准6T SRAM位单元进行内存计算。通过使用这种方法,将神经网络中通常需要的MAC操作减少为逐位操作,从而大大减小了模型的大小,节约了能量,同时保持了存储在内存中的重量不变

随着人工智能和大数据时代的到来,深度神经网络(DNN)在计算机领域中得到了广泛应用。DNN具有较高的准确度和广泛的应用领域,如语音识别、图像识别等。然而,DNN的计算成本较高,需要大量的标记样本和计算时间。为了解决这一问题,随机梯度优化算法被提出,用于加快DNN的训练速度。同时,二值化神经网络(BNN)也被提出,通过减少神经网络中的权重和激活值的数量,降低计算和存储成本。在内存计算体系结构中,基于SRAM的内存计算系统可以提供高效的计算和存储能力,但需要对各列偏移进行硬件补偿。归一化操作也是DNN中不可或缺的一部分,能够有效提高模型的收敛速度和准确度。

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

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

相关文章

自然语言处理(NLP)——使用Rasa创建聊天机器人

1 基本概念 1.1 自然语言处理的分类 IR-BOT:检索型问答系统 Task-bot:任务型对话系统 Chitchat-bot:闲聊系统 1.2 任务型对话Task-Bot:task-oriented bot 这张图展示了一个语音对话系统(或聊天机器人)的基本组成部分和它们之间的…

MYSQL分区NOW()不支持

传说同事写个复杂的SQL代码,跑一次需要7-10秒, 复杂如上,我也懒得去分析 IF IF IF是怎么回事了! 发现此表是分区表,后面要求加上了分区时间,以便利用到分区裁剪技术. 因为需求是查近10天来到期还款的人和金额.就是今天应该还款的人, 一般还款周期是7天. 给个10天的范围挺可以的…

【Qt学习笔记】Qt Creator环境下 信号与槽 详解(自定义信号槽、断连、lambda表达式等)

文章目录 1. 信号槽概念1.1 信号的本质1.2 槽的本质1.3 标准信号槽1.4 信号槽 实例 2. 自定义信号槽2.1 自定义槽函数2.2 自定义信号2.3 带参 信号槽 3. 信号槽的意义 与 作用4. 信号槽断连 (了解)5. lamda表达式的使用5.1 基本用法5.2 捕获局部变量5.3 …

打包 iOS 的 IPA 文件

目录 摘要 引言 准备 选择证书类型 创建应用程序 设置应用程序标识和证书 配置构建设置 构建应用程序 导出IPA 签名和导出 代码案例演示 完成 总结 参考资料 摘要 本篇博客将为您介绍如何打包iOS的IPA文件。从APP提交、创建应用程序、设置应用程序标识和证书、配…

单片机接收PC发出的数据

#include<reg51.h> //包含单片机寄存器的头文件 /***************************************************** 函数功能&#xff1a;接收一个字节数据 ***************************************************/ unsigned char Receive(void) { unsigned char dat; …

Qt|实现时间选择小功能

在软件开发过程中&#xff0c;QtDesigner系统给出的控件很多时候都无法满足炫酷的效果&#xff0c;前一段时间需要用Qt实现选择时间的小功能&#xff0c;今天为大家分享一下&#xff01; 首先看一下时间效果吧&#xff01; 如果有需要继续往下看下去哟~ 功能 1&#xff1a;开…

如何连接ChatGPT?无需科学上网,使用官方GPT教程

随着AI的发展&#xff0c;ChatGPT也越来越强大了。 它可以帮你做你能想到的几乎任何事情&#xff0c;妥妥的生产力工具。 然而&#xff0c;对于许多国内的用户来说&#xff0c;并不能直接使用ChatGPT&#xff0c;不过没关系&#xff0c;我最近发现了一个可以直接免科学上网连…

阿里云ECS服务器Linux安装Mysql8

链接&#xff1a;https://pan.baidu.com/s/1s9j7OhiOMV9e9Qq9GDbysA 提取码&#xff1a;dd5a --来自百度网盘超级会员V5的分享 Mysql官网:MySQL 关于Mysql Yum Repository介绍可以看下 更加简单 关于X86和ARM 传到服务器 进入所在包 cd /usr/local/develop/mysql8 解压 …

电力负荷预测 | 基于AE-LSTM的电力负荷预测(Python)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 电力负荷预测 | 基于AE-LSTM的电力负荷预测(Python) 基于AE-LSTM(自动编码器长短期记忆网络)的电力负荷预测是一种基于深度学习的方法,用于预测未来一段时间内的电力负荷需求。该方法结合了自动编码器和LSTM网…

c#cad 创建-点(六)

运行环境 vs2022 c# cad2016 调试成功 一、代码说明 创建一个点的命令方法。代码的主要功能是在当前活动文档中创建一个点&#xff0c;并将其添加到模型空间块表记录中。 代码的主要步骤如下&#xff1a; 获取当前活动文档、数据库和编辑器对象。使用事务开始创建点的过程…

docker部署docker运维工具

简介 主要功能:管理容器,管理镜像,管理容器网络 安装 拉取镜像 docker pull joinsunsoft/docker.ui:1.0.1 启动容器 docker run -d --name docker.ui --restart always -v /var/run/docker.sock:/var/run/docker.sock -p 10039:8999 joinsunsoft/docker.ui:1.0.1 使用 打…

电力负荷预测 | 基于GRU门控循环单元的深度学习电力负荷预测,含预测未来(Python)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 电力负荷预测 | 基于GRU门控循环单元的深度学习电力负荷预测,含预测未来(Python&

Pymysql之Cursor常用API

Cursor常用API 1、cursor.execute(query, argsNone)&#xff1a;执行sql语句。 参数: query (str)&#xff1a;sql语句。 args (tuple, list or dict)&#xff1a;sql语句中如果有变量&#xff0c;或者格式化输出&#xff0c;会在这里填充数据。 Returns&#xff1a;返…

【退役之重学前端】vite, vue3, vue-router, vuex, ES6学习日记

学习使用vitevue3的所遇问题总结&#xff08;2024年2月1日&#xff09; 组件中使用<script>标签忘记加 setup 这会导致Navbar 没有暴露出来&#xff0c;导致使用不了&#xff0c;出现以下报错 这是因为&#xff0c;如果不用setup&#xff0c;就得使用 export default…

一文学会Axios的使用

异步请求 同步发送请求过程如下 浏览器页面在发送请求给服务器&#xff0c;在服务器处理请求的过程中&#xff0c;浏览器页面不能做其他的操作。只能等到服务器响应结束后才能&#xff0c;浏览器页面才能继续做其他的操作。 异步发送请求过程如下浏览器页面发送请求给服务器&…

ownips的自救指南:一次账号封停事件的心路历程与解决策略

前言 小明以前是全球500强电商类公司的运营工作人员&#xff0c;在事业的上升期日入斗金、年薪百万&#xff0c;后面分钱时被产品、总监、老板瓜分了大头&#xff0c;大气都大敢出。由于小明掌握了核心技术&#xff0c;从联系品牌供应商、电商选品、用户行为调研、用户画像收集…

c入门第十篇——指针入门

一句话来说: 指针就是存储了内存地址值的变量。 在前面讨论传值和传址的时候&#xff0c;我们就已经开始使用了指针来传递地址。 在正式介绍指针之前&#xff0c;我们先来简单了解一下内存。内存可以简单的理解为一排连续的房子的街道&#xff0c;每个房子都有自己的地址&#…

ACK One Argo工作流:实现动态 Fan-out/Fan-in 任务编排

作者&#xff1a;庄宇 什么是 Fan-out Fan-in 在工作流编排过程中&#xff0c;为了加快大任务处理的效率&#xff0c;可以使用 Fan-out Fan-in 任务编排&#xff0c;将大任务分解成小任务&#xff0c;然后并行运行小任务&#xff0c;最后聚合结果。 由上图&#xff0c;可以使…

13. UE5 RPG限制Attribute的值的范围以及生成结构体

前面几章&#xff0c;我们实现了通过GameplayEffect对Attribute值的修改&#xff0c;比如血量和蓝量&#xff0c;我们都是有一个最大血量和最大蓝量去限制它的最大值&#xff0c;而且血量和蓝量最小值不会小于零。之前我们是没有实现相关限制的&#xff0c;接下来&#xff0c;我…

React实例之完善布局菜单(一)

今天我们来用所学的知识来做一个布局菜单的组件, 针对这个组件我之前写过一个教程 React之布局菜单-CSDN博客&#xff0c;那个呢比较基础&#xff0c;这节课算是对那个教程的一个扩展和补充。这个实例讲完&#xff0c;这个系列就算告一段落了。先看效果 这个教程要求对React知识…