如何设计可以区分7008个类的神经网络设计 pdf

设计神经网络硬件架构时,我们在思考些什么?(下)5 months ago4收藏分享举报文章被以下专栏收录推荐阅读{&debug&:false,&apiRoot&:&&,&paySDK&:&https:\u002F\\u002Fapi\u002Fjs&,&wechatConfigAPI&:&\u002Fapi\u002Fwechat\u002Fjssdkconfig&,&name&:&production&,&instance&:&column&,&tokens&:{&X-XSRF-TOKEN&:null,&X-UDID&:null,&Authorization&:&oauth c3cef7c66aa9e6a1e3160e20&}}{&database&:{&Post&:{&&:{&isPending&:false,&contributes&:[{&sourceColumn&:{&lastUpdated&:,&description&:&&,&permission&:&COLUMN_PUBLIC&,&memberId&:,&contributePermission&:&COLUMN_PUBLIC&,&translatedCommentPermission&:&all&,&canManage&:true,&intro&:&&,&urlToken&:&ycgkk&,&id&:17265,&imagePath&:&da7a69f92dbad3290ce5.jpeg&,&slug&:&ycgkk&,&applyReason&:&0&,&name&:&硬创公开课&,&title&:&硬创公开课&,&url&:&https:\u002F\\u002Fycgkk&,&commentPermission&:&COLUMN_ALL_CAN_COMMENT&,&canPost&:true,&created&:,&state&:&COLUMN_NORMAL&,&followers&:1754,&avatar&:{&id&:&da7a69f92dbad3290ce5&,&template&:&https:\u002F\\u002F{id}_{size}.jpeg&},&activateAuthorRequested&:false,&following&:false,&imageUrl&:&https:\u002F\\u002Fda7a69f92dbad3290ce5_l.jpeg&,&articlesCount&:76},&state&:&accepted&,&targetPost&:{&titleImage&:&https:\u002F\\u002Fv2-a9f095d18d8cae0dd9865279bdca7adc_r.jpg&,&lastUpdated&:,&imagePath&:&v2-a9f095d18d8cae0dd9865279bdca7adc.jpg&,&permission&:&ARTICLE_PUBLIC&,&topics&:[350,19008],&summary&:&基于神经网络的人工智能近年取得了突破性进展,正在深刻改变人类的生产和生活方式,是世界各国争相发展的战略制高点。神经网络作为实现人工智能任务的有效算法之一,已经在各种应用场景获得广泛的应用。从云端到移动端,不同应用场景也对神经网络的计算能力…&,&copyPermission&:&ARTICLE_COPYABLE&,&translatedCommentPermission&:&all&,&likes&:0,&origAuthorId&:0,&publishedTime&:&T17:20:48+08:00&,&sourceUrl&:&&,&urlToken&:,&id&:3199258,&withContent&:false,&slug&:,&bigTitleImage&:false,&title&:&设计神经网络硬件架构时,我们在思考些什么?(下)&,&url&:&\u002Fp\u002F&,&commentPermission&:&ARTICLE_ALL_CAN_COMMENT&,&snapshotUrl&:&&,&created&:,&comments&:0,&columnId&:17265,&content&:&&,&parentId&:0,&state&:&ARTICLE_PUBLISHED&,&imageUrl&:&https:\u002F\\u002Fv2-a9f095d18d8cae0dd9865279bdca7adc_r.jpg&,&author&:{&bio&:&雷锋公开课,用技术洞见未来,公众号【AI研习社】&,&isFollowing&:false,&hash&:&ba9af5fdb6f04a6a177a674c75731c37&,&uid&:681800,&isOrg&:false,&slug&:&ycgkk&,&isFollowed&:false,&description&:&&,&name&:&机智的大群主&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Fycgkk&,&avatar&:{&id&:&v2-387e5271c5aed2dc4c40bc&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},&memberId&:,&excerptTitle&:&&,&voteType&:&ARTICLE_VOTE_CLEAR&},&id&:693130}],&title&:&设计神经网络硬件架构时,我们在思考些什么?(下)&,&author&:&ycgkk&,&content&:&\u003Cp\u003E基于神经网络的人工智能近年取得了突破性进展,正在深刻改变人类的生产和生活方式,是世界各国争相发展的战略制高点。\u003C\u002Fp\u003E\u003Cp\u003E神经网络作为实现人工智能任务的有效算法之一,已经在各种应用场景获得广泛的应用。从云端到移动端,不同应用场景也对神经网络的计算能力提出了不同的需求。\u003C\u002Fp\u003E\u003Cp\u003E神经网络的广泛应用离不开核心计算芯片。目前的主流通用计算平台包括 CPU 和 GPU,存在着能效较低的问题(能效即能量效率,是性能与功耗的比值)。为了获得更高的能效,我们需要设计一种专用的神经网络计算芯片来满足要求。国际IT巨头,如英特尔、谷歌、IBM,都在竞相研发神经网络计算芯片。\u003C\u002Fp\u003E\u003Cp\u003E然而,神经网络的结构多样、数据量大、计算量大的特点,给硬件设计带来了巨大挑战。因此,在设计面向神经网络的高性能、高能效硬件架构时,我们需要思考清楚以下三个问题:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E好的计算模式应该是怎样的?\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E为了支持这样的计算模式,架构应该怎样设计?\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E已经实现的硬件架构,针对具体算法和应用需求,如何配置成最优的计算模式?\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E雷锋网(公众号:雷锋网)本期公开课特邀请到清华大学微纳电子系四年级博士生涂锋斌,为我们分享神经网络硬件架构的设计经验。他将通过介绍其设计的可重构神经网络计算架构 DNA (Deep Neural Architecture),与大家分享在设计神经网络硬件架构时需要思考的问题。他在完成设计的同时,解决了这些问题,并对现有的硬件优化技术做出了总结。\u003C\u002Fp\u003E\u003Cp\u003E本文根据雷锋网硬创公开课演讲原文整理,并邀请了涂锋斌进行确认,在此感谢。由于全文篇幅过长,分(上)(下)两部分。\u003C\u002Fp\u003E\u003Cp\u003E上篇传送门:\u003C\u002Fp\u003E\u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\\u002Fnews\u002F2F8sB0WHz6D70J7NAy.html%3Ftype%3Dpreview\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E清华大学博士生涂锋斌:设计神经网络硬件架构时,我们在思考些什么?(上) | 硬创公开课总结\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003Cp\u003E公开课视频:\u003C\u002Fp\u003E\u003Ca class=\&video-box\& href=\&http:\u002F\\u002F?target=https%3A\u002F\\u002Fx\u002Fpage\u002Fr0504zxvl3j.html\& target=\&_blank\& data-video-id=\&\& data-video-playable=\&\& data-name=\&设计神经网络硬件架构时,我们在思考些什么_腾讯视频\& data-poster=\&https:\u002F\\u002Fqqvideo_ori\u002F0\u002Fr0504zxvl3j_228_128\u002F0\& data-lens-id=\&\&\u003E
\u003Cimg class=\&thumbnail\& src=\&https:\u002F\\u002Fqqvideo_ori\u002F0\u002Fr0504zxvl3j_228_128\u002F0\&\u003E
\u003Cspan class=\&content\&\u003E
\u003Cspan class=\&title\&\u003E设计神经网络硬件架构时,我们在思考些什么_腾讯视频\u003Cspan class=\&z-ico-extern-gray\&\u003E\u003C\u002Fspan\u003E\u003Cspan class=\&z-ico-extern-blue\&\u003E\u003C\u002Fspan\u003E\u003C\u002Fspan\u003E
\u003Cspan class=\&url\&\u003E\u003Cspan class=\&z-ico-video\&\u003E\u003C\u002Fspan\u003Ehttps:\u002F\\u002Fx\u002Fpage\u002Fr0504zxvl3j.html\u003C\u002Fspan\u003E
\u003C\u002Fspan\u003E
\u003C\u002Fa\u003E
\u003Cp\u003E三、架构设计\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003E讲完了计算模式的优化,我们接下来针对硬件架构设计给大家做一些分享。\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-cadafbf702d_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-cadafbf702d_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='740'%20height='417'&&\u002Fsvg&\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-cadafbf702d_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-cadafbf702d_b.jpg\&\u003E\u003C\u002Fp\u003E\u003Cp\u003E我们研究工作的核心主要集中在计算模式的优化上面,而硬件架构本身其实更多的是如何去配合好的计算模式。\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-59fbeb12cc0_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-59fbeb12cc0_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='740'%20height='417'&&\u002Fsvg&\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-59fbeb12cc0_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-59fbeb12cc0_b.jpg\&\u003E\u003C\u002Fp\u003E\u003Cp\u003E如图所示,这是 DNA 架构的一个整体的框架图。DNA 的全称是 「Deep Neural Architecture」,它的整体架构和我们之前提到的硬件架构模型是类似的,当然在具体的细节上就是会有一些参数,还有一些数据、通路上会做一些细致的一些策划。值得一提的就是说我们的计算核心内部有两个计算引擎,共享同一个同一块局部输入寄存器,但有各自的输出寄存器,而架构主要有三个特点:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E针对网络各层的配置信息\u003C\u002Fp\u003E\u003Cp\u003E架构在片上会存储一些针对网络各层的配置信息(Configuration Context),存储在控制器内部(蓝色虚框)\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E可重构的数据通路\u003C\u002Fp\u003E\u003Cp\u003E即从 Output Buffer 反馈回 Output REGs 的通路(红线)是可重构的。此外,整体的输入数据通路也是可重构的形态。\u003C\u002Fp\u003E\u003Cp\u003E另外在 CE 内部,它也会有一些可重构的数据通路,我们之后会展开。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E「Ping-Pong」缓存设计\u003C\u002Fp\u003E\u003Cp\u003E我们的设计中必须要考虑的一点,在于我们必须承认,对现有的这些深度神经网络而言,它的计算量数据量非常大,以致无法在片上完整地存储整个网络的数据和权重,所以在计算过程中,我们不得不与外部的存储进行频繁地访问。为了在计算过程中对存储器的访问不影响这些计算的性能,使得计算单元一直处于工作状态,我们需要对于每一块的这些存储进行一个「Ping-Pong」Buffer 的缓存设计,意思就是说在当前 Buffer 在工作的时候,它的另一块 Buffer 在外面保留数据,使得我当前 Buffer 用完的时候,下一次需要用到的数据也准备好了。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E此外,我们对 CE 内部(Convolution Engine)内部做了一些额外的设计——4 级 CE 结构,这里提一些主要的概念。我做了一个空间上的展开图。\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-2b3c7b1dcf4e8_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-2b3c7b1dcf4e8_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='740'%20height='417'&&\u002Fsvg&\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-2b3c7b1dcf4e8_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-2b3c7b1dcf4e8_b.jpg\&\u003E\u003C\u002Fp\u003E\u003Cp\u003E它主要有四个级别:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E第一个层次叫做输入寄存器级(Input REG Level),对应的是 CE 内部的局部输入寄存器;\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E第二个级别叫数据传输级别,或称数据共享级(Data Sharing Level)。它主要是进行数据通路的重构,以支持我们刚刚提到的并行卷积映射方法,是很重要的一个部分。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E第三部分就是最核心的计算机,即 MAC 级(MAC Level),MAC 就是乘加单元的意思,就是最核心计算以一个 16×16 的阵列实现。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E第四级就是和输入级对应的输出寄存器级。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E而我们前面也提到,CE 是由很多个 PE 构成的,那么此处 CE 的第二至第四层这三个级别,他们对应的是 PE 的三个级别,实际上 PE 也是一个三级的结构,和 CE 结构是对应的,比如对于一个 CE 来说,总共有 16 个 PE,所对应的就是 16 个 Map 和 16 个数据传输级的寄存器,从数值上我们也可以看到它的对应,具体就不多展开了。\u003C\u002Fp\u003E\u003Ch3\u003E数据传输网络\u003C\u002Fh3\u003E\u003Cp\u003E采用了并行卷积映射方法的时候,如何共享所使用的输入数据呢?我们设计了一个数据传输网络(Data Sharing Network,DSN)。这三个图分别对应的是 16×16、8×8 和 4×4 的网络,以不同的块和尺寸来进行数据的传输,传输的方向主要有三个,包括从左往右的横向、从上往下的纵向、以及斜 45 度角的从左上往右下的斜向,以相邻的数据块进行数据的传递。\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-bc89b1c917ecdbfbd66ece_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-bc89b1c917ecdbfbd66ece_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='740'%20height='417'&&\u002Fsvg&\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-bc89b1c917ecdbfbd66ece_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-bc89b1c917ecdbfbd66ece_b.jpg\&\u003E\u003C\u002Fp\u003E\u003Cp\u003E我们这里以步长为 2 且使用 DSN0 的一个案例简单看一看。我们之前说到,对于步长为 2 的情况,并行计算四张 Map,而每张 Map 的数据其实是复用的。具体来说,红色小块代表的是 Map0 的第一个点,它所收集到的输入数据是可以直接共享给它相邻的三个(绿色、紫色和蓝色)的三张 map 上面的,而它们只需要直接从红色小块上的 PE 上获取各自所需要的数据,并不需要从外部导进来。这样的话,其实从一定程度上减少了访存的次数。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Ch3\u003E工作流程与调度框架\u003C\u002Fh3\u003E\u003Cp\u003E有了一个架构之后,我们需要有一套的工作流程去指导怎么使用它。\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-19b56a5ed727_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-19b56a5ed727_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='740'%20height='417'&&\u002Fsvg&\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-19b56a5ed727_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-19b56a5ed727_b.jpg\&\u003E\u003C\u002Fp\u003E\u003Cp\u003E我们的主要工作流程主要分为两个阶段,\u003Cstrong\u003E一个是编译阶段,第二个是执行阶段。\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003E阶段 1:编译\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E我们需要输入神经网络的一些参数,以及硬件的约束,比如 Buffer 的容量,还有计算资源的个数等描述硬件架构的一个参数,一旦硬件架构设计好后,这些参数是可以提出来的;\u003C\u002Fp\u003E\u003Cp\u003E在我们的编译框架里面,需要对网络的每一层逐一地进行调度,并执行一个调度框架,它内部其实是在解决一个优化问题,优化问题是什么?\u003C\u002Fp\u003E\u003Cp\u003E用户可以设定是要优先优化性能还是优先优化能效,或者优化两个目标,而它的约束条件就是我们硬件上的一些参数,比如说我缓存的需求不能超过片上的缓存大小等,这些都可以通过一个约束条件进行约束。通过执行一个调度框架,我们可以得到每一层的调度结果,分别由数据复用模式和卷积映射方式构成,并用一些参数化形式表达。\u003C\u002Fp\u003E\u003Cp\u003E对神经网络的每一层进行这样调度,我们就得到每层的一个调度表,从而生成目标神经网络的配置信息,这时候我们就可以进入执行阶段,配置信息会放入到主处理器里。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003E阶段 2:执行\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E在执行过程当中,大家看左边大的矩形就是我们的 DNA 架构,它会不断地从处理中读取配置信息,随后会根据需求从片外的 DRAM 里读取数据和权重,在片上进行神经网络的计算,在计算过程中因为片上存储有限,它会将数据再写出到片外的 DRAM,这个过程是不断的迭代,就以图中 1234 的次序进行迭代,以完成整个神经网络一个计算,这是我们所说的逐层加速的一个策略。\u003C\u002Fp\u003E\u003Cp\u003E我们在这里简单地展示了 AlexNet 的网络在 DNA 架构上的一个调度结果。\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-71506cad5ffbdc378f9e9fd_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-71506cad5ffbdc378f9e9fd_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='740'%20height='417'&&\u002Fsvg&\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-71506cad5ffbdc378f9e9fd_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-71506cad5ffbdc378f9e9fd_b.jpg\&\u003E\u003C\u002Fp\u003E\u003Cp\u003E图上呈现的是神经网络的每一个层,这里其实既包括卷积层,也包括全连接层;采用了数据复用模式与卷积映射方法。从参数中我们可以看到,对 AlexNet 的不同的层,它有不同的调度结果,这其实也是符合我们预期的。\u003C\u002Fp\u003E\u003Ch2\u003E四、实验结果\u003C\u002Fh2\u003E\u003Cp\u003E到目前为止,我们已经讲完了基本的计算模式和架构设计,接下来我们就看一看一些实验结果。\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-0e2cf4fc99d382f770122_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-0e2cf4fc99d382f770122_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='740'%20height='417'&&\u002Fsvg&\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-0e2cf4fc99d382f770122_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-0e2cf4fc99d382f770122_b.jpg\&\u003E\u003C\u002Fp\u003E\u003Cp\u003E这是 DNA 架构的实现结果图,图上每个模块也标出了对应的区域,右边是主要的一些参数,我们使用的是 TSMC 65nm LP,面积是 4.0×4.0 平方毫米,片上的 Buffer 容量是 280KB,在 220MHz 的工作频率下,控制性能达到了 204.8 GOPS,而平均的性能是 194.4 GOPS,平均功耗是 479mW,需要注意的是,这里的功耗指的只是架构芯片设计的功耗;架构内部的数据宽度(Precision),它是 16 Bit 的定点宽度。\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-8ab7d86aea938e717b8dd496c753d5b0_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-8ab7d86aea938e717b8dd496c753d5b0_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='740'%20height='417'&&\u002Fsvg&\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-8ab7d86aea938e717b8dd496c753d5b0_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-8ab7d86aea938e717b8dd496c753d5b0_b.jpg\&\u003E\u003C\u002Fp\u003E\u003Cp\u003E我们直接看一下结果。我们使用的是 AlexNet、VGG、GoogLeNet 与 ResNet 这四个非常经典的卷积神经网络,这两个图分别展示了总能耗降低及 PE 利用率提升的情况:\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-863c5a21d29b6d5ec08e_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-863c5a21d29b6d5ec08e_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='740'%20height='417'&&\u002Fsvg&\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-863c5a21d29b6d5ec08e_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-863c5a21d29b6d5ec08e_b.jpg\&\u003E\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E片上缓存访问的降低达到 1.4 到 2.2 倍,主要是与 Input Reuse、Output Reuse 与 Weight Reuse 来相比。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E片外 DRAM 访问降低了 7.6 到 11.4 倍;\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E总能耗的降低达到了 5.9 到 8.4 倍,这是一个比较大的一个提升,\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E计算资源利用率平均提升了 3.4 倍。而平均的利用率是达到 93%,这是非常高的一个值。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Ch3\u003E与顶尖工作比较(AlexNet)\u003C\u002Fh3\u003E\u003Cp\u003E除了方法上的比较,我们还和目前顶尖的这些工作进行了一些比较,这主要和英伟达的 K40,还有 FPGA'15、ISSCC'16 等非常经典的神经网络架构的文章进行一些比较,具体的话不进行过多展开。\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-fb05ec06cdbe673b6a6cb17_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-fb05ec06cdbe673b6a6cb17_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='740'%20height='417'&&\u002Fsvg&\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-fb05ec06cdbe673b6a6cb17_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-fb05ec06cdbe673b6a6cb17_b.jpg\&\u003E\u003C\u002Fp\u003E\u003Cp\u003E这张表展现的是 AlexNet 上的一些具体分析结果,大家主要看一些参数。\u003C\u002Fp\u003E\u003Cp\u003E第一个是计算资源利用率,我们评估了一下,在 FPGA'15、ISSCC'16 的工作上,计算资源利用率大约只有 68%,而用 DNA 架构,可以获得 88% 的一个计算资源利用率,达到 1.3 倍的提升,还是个比较大的一个提升。\u003C\u002Fp\u003E\u003Cp\u003E另外值得提的一点是,我们的能效是 FPGA'15 的 44.6 倍,是 ISSCC'16 的 1.8 倍。大家看名字也能知道,前者是在 FPGA 上实现的,而后者是在 ASIC 上实现的。\u003C\u002Fp\u003E\u003Cp\u003E特别强调一点,我们这里比较的能效是系统能效。大家通常喜欢比较的是纯芯片的内部能效,不考虑片外存储,其实并不是特别公平。\u003C\u002Fp\u003E\u003Cp\u003E我们在评估芯片本身的能耗以外,还评估了片外 DRAM 的能耗,综合起来我们称之为系统能效,我们认为这样的比较是相对合理的。在这种比较下,我们获得的能效提升也是非常好的。\u003C\u002Fp\u003E\u003Cp\u003E最后,我们与更多的一些工作进行比较。这一张表格里有展现出来,我们直接看结论。\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-fad6fabec834e043fb090d57_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-fad6fabec834e043fb090d57_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='740'%20height='417'&&\u002Fsvg&\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-fad6fabec834e043fb090d57_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-fad6fabec834e043fb090d57_b.jpg\&\u003E\u003C\u002Fp\u003E\u003Cp\u003E我们的 DNA 架构,它的系统级能效比 CPU 提高了三个数量级,比 GPU 高两个数量级,比 FPGA 高一个数量级,基本上达到我们的设计需求。\u003C\u002Fp\u003E\u003Cp\u003E基于 DNA 架构,我们完成了一款 Thinker 芯片,这是一款可重构的神经网络计算芯片。左边是芯片的照片,右边是我们搭的芯片 demo 演示图,相关的成果已经发表了数篇的顶级会议文章和权威期刊文章。\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-1aaf58290eaf0ba2cf3a2a_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-1aaf58290eaf0ba2cf3a2a_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='740'%20height='417'&&\u002Fsvg&\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-1aaf58290eaf0ba2cf3a2a_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-1aaf58290eaf0ba2cf3a2a_b.jpg\&\u003E\u003C\u002Fp\u003E\u003Cp\u003E值得一提的是,我们在今年 ISSCC(该领域的顶级会议)上作了 poster 的展示。\u003C\u002Fp\u003E\u003Cp\u003E此外,这款芯片作为清华的杰出的代表性工作,参加了 2016 年的全国双创周展览,获得李克强总理的高度赞许。李总理表示,希望 Thinker 芯片尽快拓展应用领域,实现规模化生产,实现芯片行业的自主创新。这是一个非常高的评价,我们会继续努力,实现总理对我们的期望。\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-9dd331d23da44_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-9dd331d23da44_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='740'%20height='417'&&\u002Fsvg&\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-9dd331d23da44_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-9dd331d23da44_b.jpg\&\u003E\u003C\u002Fp\u003E\u003Ch2\u003E五、总结思考\u003C\u002Fh2\u003E\u003Cp\u003E首先回到最开始提出的三个问题,我们对这三个问题都做了非常好的解决。\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-c51b29dab818_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-c51b29dab818_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='740'%20height='417'&&\u002Fsvg&\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-c51b29dab818_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-c51b29dab818_b.jpg\&\u003E\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003E好的计算模式是怎么样的?\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E首先它需要具备一个混合的数据复用模式,另外还需要一个并行的卷积映射方法降低总能耗,以提升计算资源利用率。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003E为了支持这样的计算模式,架构应该怎么设计?\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E我们设计了一款可重构的神经网络计算架构 DNA,它具有可重复的数据传输通路和计算引擎。\u003C\u002Fp\u003E\u003Cp\u003E我们对针对计算模式做了一个很好的架构设计,相比 CPU、GPU 和 FPGA 都有多个数量级的系统级能效提升。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003E已经实现的架构,针对具体算法和应用需求,如何配置成最优的计算模式?\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E我们设计了一个基于网络层的调度框架,配合架构的使用,将调度问题转化成一个优化问题。这样一来,针对任意的网络,其他的架构也可以使用我们的调度框架,将调度问题转换成优化问题,配置成用户想要的最优计算模式。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E这些所有的相关成果已经发表在今年的 IEEE Transactions on Very Large Scale Integration System(TVLSI)上。\u003C\u002Fp\u003E\u003Cp\u003E最后我们对现有的优化技术做一些思考。\u003C\u002Fp\u003E\u003Cp\u003E最开始我们在分析的时候提出了两个主要公式,分别对能耗和性能进行评估。这两个公式其实是一个非常好的一个描述,或者说建模的分析方法。\u003C\u002Fp\u003E\u003Cp\u003E我们也对近几年出现在顶级会议和权威期刊上,针对神经网络硬件架构所使用的硬件优化技术以及算法优化技术进行了整理。\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-cf9e141e114e46c975ac38a98bbf25da_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-cf9e141e114e46c975ac38a98bbf25da_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='740'%20height='417'&&\u002Fsvg&\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-cf9e141e114e46c975ac38a98bbf25da_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-cf9e141e114e46c975ac38a98bbf25da_b.jpg\&\u003E\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E计算模式优化\u003C\u002Fp\u003E\u003Cp\u003E第一类就是其实是和我们这份工作很相关的,就是计算模式方面的优化。它主要优化的是什么?它通过降低访存次数来以及提高计算资源的利用率来实现能效、能耗和性能的优化。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E模型压缩、降低数据精度及二值化\u003C\u002Fp\u003E\u003Cp\u003E这些技术主要能够降低单位 DRAM 和 Buffer 访问的能耗以及单位计算的能耗。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E非易失存储器\u003C\u002Fp\u003E\u003Cp\u003E第三类是在学术界非常流行的非易失存储器,简称 NVRAM,将这种新型的存储器应用到我们的架构设计当中。NVRAM 具有一个非易失的特点,然后它的通常它的功耗是很低的,可以降低单位存储访问的能耗;有的工作,比如说使用 NVRAM 进行乘加计算阵列的构建,甚至可以降低单位计算能耗。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E稀疏化\u003C\u002Fp\u003E\u003Cp\u003E无论是算法还是硬件,稀疏化是大家目前都非常关注的一个特点。不管是数据还是权重,神经网络其实有大量的零以及接近零的数值,我们通过人为的一些控制,使得数据里面出现更多的零,这样我们可以减少从存储器中访问数据的次数,甚至可以降低操作数,因为如果是零的话,我可以不做计算,因为零乘以任何数都是零。\u003C\u002Fp\u003E\u003Cp\u003E神经网络的基本计算就是零,所以稀疏化的好处就是可以降低访问次数和操作次数,对于能效的好处是非常明显的。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E动态电压频率调节\u003C\u002Fp\u003E\u003Cp\u003E动态电压频率调节简称 DVFS,它是一个非常经典的、大家很常用的电路技术。我们可以通过降低电压和频率,来降低单位访存和计算能耗。如果我希望获得很高的性能,我可以通过提升电压以提升频率,来获得更好的性能。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E\u003Cstrong\u003E我们可以发现,目前现有的这些优化技术,其实都对应我们对性能或者能效的设计或优化的需求。\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E通过对现有这些技术的分析,也可以启发我们所做的事情。比如说,我们如果想用新的技术,可以回顾一下这两个公式,是否真的有效,是否解决了关键的问题?这其实是我很想分享给大家的观点。\u003C\u002Fp\u003E\u003Cp\u003E这里有我的一些联系方式,包括个人主页、知乎专栏,电子邮箱等,欢迎大家与我联系。\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-162ea3cea6a7a402ab85d50a56c5a07e_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-162ea3cea6a7a402ab85d50a56c5a07e_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='740'%20height='417'&&\u002Fsvg&\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-162ea3cea6a7a402ab85d50a56c5a07e_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-162ea3cea6a7a402ab85d50a56c5a07e_b.jpg\&\u003E\u003C\u002Fp\u003E\u003Cp\u003E我在维护的 GitHub 项目名为「Neural Networks on Silicon」,因为我们领域近几年呈现爆发式的发展,有大量新的工作出现,我在 GitHub 上做了一个小小的项目,整理了一下近两年出现在这个领域顶级会议上的一些论文,也会对部分有意思的工作做一些评论。大家有兴趣的话可以看一看。其实这也是一个蛮好的整理,但因为现在的工作实在太多了,大家也可以帮助我一起整理。\u003C\u002Fp\u003E\u003Cp\u003E这页 PPT 上呈现了刚刚涉及到的一些重要参考文献。\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-ecb06d544eabb3d4405da1_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-ecb06d544eabb3d4405da1_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='740'%20height='417'&&\u002Fsvg&\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-ecb06d544eabb3d4405da1_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-ecb06d544eabb3d4405da1_b.jpg\&\u003E\u003C\u002Fp\u003E\u003Ch2\u003E提问环节\u003C\u002Fh2\u003E\u003Cp\u003E好,谢谢大家,现在进入提问环节。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003E1. 你们的工作和国内外神经形态芯片相比(非加速器),有哪些优势?\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E我简单介绍一下,我们的神经网络硬件芯片这一块主要有两个流派,一块是神经网络加速器范畴,另外一个是神经形态芯片,英文叫做 neuromorphic chip. 而我们的工作属于神经网络加速器的范畴,而题主提到的神经形态芯片属于另外一类芯片,以 IBM 的 TrueNorth 为代表。那么二者的主要区别是什么?\u003C\u002Fp\u003E\u003Cp\u003E它们主要是算法原型不一样。前者或者说\u003Cstrong\u003E我们的工作主要针对的是人工神经网络,特别是强调就是当前非常流行的,以深度学习为代表的神经网络\u003C\u002Fstrong\u003E,而后者的算法模型是我们称之为叫脉冲神经网络,英文叫做 spiking neural network。\u003C\u002Fp\u003E\u003Cp\u003E在脉冲神经网络的网络里面,数据以脉冲信号的形式进行信号信息的传输,这样一种网络,或者说这样的计算方法,其实更接近我们最开始提到的生物上的什么样的模型,\u003C\u002Fp\u003E\u003Cp\u003E首先,二者因为目标算法不一样,所以不好直接比较性能和功耗,如果你看到一些直接比较功耗的工作话,我觉得并不是特别公平,因为连目标算法都不一样,设计的目的也不一样。我们做科研非常讲究公平比较,为了更公平的比较,其实硬件层面其实并不是很好的一个比较方式,比如从算法层面来比较深入学习和脉冲神经网络。当前的主流观点是前者的精度更高(识别人脸),而后者因为更具备生物上的一些特点,在能效上更有优势。\u003C\u002Fp\u003E\u003Cp\u003E我个人的观点是:就目前而言,深度学习几乎统治了模式识别的各个应用领域,是当下更好的一种选择,但是科学是螺旋式发展的,深度学习不可能永远地统治下去,我觉得也应该不会是人工智能的最终形态。\u003C\u002Fp\u003E\u003Cp\u003E脉冲神经网络,其实代表的是科学探索的一个方向,但我觉得也并不是唯一的方向。如果关注人工智能这块的话,我们其实会看到有很多其他的方向也在展开,比如说量子计算。\u003C\u002Fp\u003E\u003Cp\u003E人工智能的最终形态并不一定是制造一个人的大脑,或者人脑。关键在于是否能够解决问题,比如说我们要识别人脸,什么样的算法才是好的算法,那么怎样的算法才能解决问题,这才是关键。而它具体的形态并不是我们特别关心的,这里有个比较恰当的例子分享给大家,好比人要飞翔,其实并不需要有一个鸟一样的心态,历史上已经证明过,很多人制造了翅膀也飞不上去,其实我们只要造一架飞机就够了,甚至我们还能飞上天空甚至飞出银河系。我们不在乎形态是怎样,关键是要能够解决问题。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003E2. 你们在第二代架构在设计上有哪些构想?\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E这位同学应该是看了我知乎专栏上的一些文章。其实刚刚有提到,现在有一些比较大家常用的一些技术,就像稀疏化等,其实在我们的二代架构设计当中已经有一些考虑。基本上不能说有多大创新,但我们都会考虑进来。\u003C\u002Fp\u003E\u003Cp\u003E这是我们现在在做的一些工作,主要想解决大家真正在用神经网络硬件架构的时候会遇到的一些实际的问题,如果有新的成果发表出来,也会及时地分享给大家。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003E3. 芯片只针对推断进行优化吗?推断其实就是前向计算的过程,没有包括训练的过程吗?\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E在第一代神经网络芯片 Thinker 上,我们主要只针对正向计算做了优化,如果大家对训练过程比较了解的话,其实训练的过程当中有大量的正向计算的过程,当然它还包含了一个反向的误差传播的过程,在我们第一代芯片当中没有考虑误差传播的过程,我们已经在做一些相关的工作,如果做出来之后会及时地和大家分享一下我们的一些想法。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003E4. 如何看待「芯片+人工智能」这样一种模式?\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E我简单讲讲吧,大家从新闻上已经能看到很多报道,说人工智能时代到来了,其实人工智能或者这个概念,我觉得更多是媒体在为了宣传的方便,所以靠一个很好的帽子,也更方便大家理解。\u003C\u002Fp\u003E\u003Cp\u003E其实我们刚才也提到,大家经常说到人工智能,其实它背后有更多的内容,比如深度学习、机器学习等,深度学习本质上就是神经网络,只是经过很多年的扩展之后或者说发展之后,成为现在的样子。\u003C\u002Fp\u003E\u003Cp\u003E那么人工智能硬件或者说芯片,简单来说叫做智能硬件。它在未来就是一定会代替人做很多事情,这是未来的一个发展趋势。随着生活智能化,未来的智能硬件会越来越多,会代替人做很多事情。比方工厂里使用一些机械臂,或者说一些生产线上的工具,可以代替人做体力劳动。\u003C\u002Fp\u003E\u003Cp\u003E智能硬件在未来,肯定会代替人去做一些稍微低级点的智力劳动。人的伟大,其实是在于创造工具、使用工具,我们会制造越来越多的智能工具,替代我们做很多我们不想做的事情或者说反复的事情,让我们用有限的精力去做更多的、更高层次的一些智能任务吧。所以我觉得「人工智能+芯片」或者说智能硬件的一个模式在未来肯定是会一直发展下去的,是不会变的。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003E5. 如何看待 GPU、FPGA、ASIC 的未来?\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E我谈一点自己的见解,GPU、FPGA、ASIC 是当下智能硬件,或者说人工智能芯片的三个极点。GPU 可以认为是偏向通用的一类硬件,然后 ASIC 是相对专用的一种硬件,而 ASIC 是介于二者之间的一种硬件,它们各有千秋,然后各有所长。当前 GPU 广泛地应用于训练过程或者说大量数据的训练。FPGA 可以根据应用的需求非常适应性的去改变配置,把不同的算法烧进去,完成不同的功能。\u003C\u002Fp\u003E\u003Cp\u003E狭义上的 ASIC,可以具体的某一种应用,或者说比方说做一款芯片来专门实现人脸识别。大家可以看到,我们刚刚介绍的基于 DNA 架构的 Thinker 芯片,其实是一种可重构的 ASIC,这种结构叫做 CGRA(Coarse Grained Reconfigurable Architecture),它其实有点像 FPGA,它可以重构配置来支持不同的算法。我们可以支持任意网络规模、任意参数的神经网络,它的好处是我们采用大量粗粒度的 PE 形式的计算资源,使之能够快速地、高效地、在线地配置计算资源的形态来支持不同算法。\u003C\u002Fp\u003E\u003Cp\u003E其实我个人觉得,针对未来可能会发展成一种融合的形态,不知道大家有没有注意到,英伟达最新发布的 V100 其实是有 Tensor Core 的,因此我觉得未来的通用计算可以处理很多复杂的控制或者逻辑等。\u003C\u002Fp\u003E\u003Cp\u003E而一些很关键的计算,比方说神经网络里面的神经元计算,或者说一些核心的计算,会做成一些专用的 ASIC、可配置的核,放入通用的一个处理器如 CPU 和 GPU,甚至是 FPGA 里面。其实这就是融合的一种思想。\u003C\u002Fp\u003E\u003Cp\u003E此外 CPU 通常用于训练一个过程,有很多实际的应用场景,或者说我们刚才提到云端与移动端,移动端的话有大量的低功耗的需求,此时用 CPU 平台就显得不是那么合适,所以说其实我外部的控制逻辑可以稍微简单一点,像我们用到的我们设计的这款可重构的芯片就可以直接运用到其中。\u003C\u002Fp\u003E\u003Cp\u003E对于神经网络的应用来说,它其实是有一定通用性的,所以在移动端,它其实有很大的潜力,作为一个处理的核心来做神经网络计算,来实现如图像识别或者语音识别的任务。\u003C\u002Fp\u003E\u003Cp\u003E今天的公开课就到此结束了,非常感谢大家来收听和观看雷锋网的硬创公开课。我和我们组也会继续做神经网络硬件架构的一些研究,刚刚跟大家分享的也是我们过去一些研究的成果和思考。我们现在也在做一些非常有意思的研究,也欢迎大家跟我们交流,如果有一些新的成果,我也会及时和大家分享,今天的公开课就到此结束,谢谢大家,再见。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E雷锋网原创文章,未经授权禁止转载。详情见\u003Ca href=\&http:\u002F\\u002F?target=http%3A\\u002F4ErMxZ\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E转载须知\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E。\u003C\u002Fp\u003E&,&updated&:new Date(&T09:20:48.000Z&),&canComment&:false,&commentPermission&:&anyone&,&commentCount&:0,&collapsedCount&:0,&likeCount&:4,&state&:&published&,&isLiked&:false,&slug&:&&,&isTitleImageFullScreen&:false,&rating&:&none&,&titleImage&:&https:\u002F\\u002Fv2-a9f095d18d8cae0dd9865279bdca7adc_r.jpg&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&reviewers&:[],&topics&:[{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&人工智能&},{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&神经网络&}],&adminClosedComment&:false,&titleImageSize&:{&width&:480,&height&:290},&href&:&\u002Fapi\u002Fposts\u002F&,&excerptTitle&:&&,&column&:{&slug&:&ycgkk&,&name&:&硬创公开课&},&tipjarState&:&inactivated&,&annotationAction&:[],&sourceUrl&:&&,&pageCommentsCount&:0,&hasPublishingDraft&:false,&snapshotUrl&:&&,&publishedTime&:&T17:20:48+08:00&,&url&:&\u002Fp\u002F&,&lastestLikers&:[{&bio&:&研发工程师&,&isFollowing&:false,&hash&:&fcba0d532b009dade0b20&,&uid&:52,&isOrg&:false,&slug&:&long-gang-62-42&,&isFollowed&:false,&description&:&&,&name&:&隆刚&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Flong-gang-62-42&,&avatar&:{&id&:&335f661c417aa87311ccf&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:&鸡肉味,嘎嘣脆&,&isFollowing&:false,&hash&:&b3d9c1fa46effd431ac42dbde4f58fea&,&uid&:28,&isOrg&:false,&slug&:&next-step&,&isFollowed&:false,&description&:&&,&name&:&nextstep&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Fnext-step&,&avatar&:{&id&:&92d6c1b9b&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:&&,&isFollowing&:false,&hash&:&fa058afc0e9237adbc85&,&uid&:68,&isOrg&:false,&slug&:&chang-ying-3&,&isFollowed&:false,&description&:&&,&name&:&长缨&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Fchang-ying-3&,&avatar&:{&id&:&da8e974dc&,&template&:&https:\u002F\\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:&雄关漫道真如铁,而今迈步从头越&,&isFollowing&:false,&hash&:&debc05b68c8d157eba7dc6a7b7a954cd&,&uid&:779500,&isOrg&:false,&slug&:&zheng-nan-79&,&isFollowed&:false,&description&:&&,&name&:&沉默的天使&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Fzheng-nan-79&,&avatar&:{&id&:&a8acdcc40c40bb8e7ae39ed384c98ac0&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false}],&summary&:&基于神经网络的人工智能近年取得了突破性进展,正在深刻改变人类的生产和生活方式,是世界各国争相发展的战略制高点。神经网络作为实现人工智能任务的有效算法之一,已经在各种应用场景获得广泛的应用。从云端到移动端,不同应用场景也对神经网络的计算能力…&,&reviewingCommentsCount&:0,&meta&:{&previous&:{&isTitleImageFullScreen&:false,&rating&:&none&,&titleImage&:&https:\u002F\\u002F50\u002Fv2-a9f095d18d8cae0dd9865279bdca7adc_xl.jpg&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&topics&:[{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&神经网络&},{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&人工智能&}],&adminClosedComment&:false,&href&:&\u002Fapi\u002Fposts\u002F&,&excerptTitle&:&&,&author&:{&bio&:&雷锋公开课,用技术洞见未来,公众号【AI研习社】&,&isFollowing&:false,&hash&:&ba9af5fdb6f04a6a177a674c75731c37&,&uid&:681800,&isOrg&:false,&slug&:&ycgkk&,&isFollowed&:false,&description&:&&,&name&:&机智的大群主&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Fycgkk&,&avatar&:{&id&:&v2-387e5271c5aed2dc4c40bc&,&template&:&https:\u002F\\u002F50\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},&column&:{&slug&:&ycgkk&,&name&:&硬创公开课&},&content&:&\u003Cp\u003E基于神经网络的人工智能近年取得了突破性进展,正在深刻改变人类的生产和生活方式,是世界各国争相发展的战略制高点。\u003C\u002Fp\u003E\u003Cp\u003E神经网络作为实现人工智能任务的有效算法之一,已经在各种应用场景获得广泛的应用。从云端到移动端,不同应用场景也对神经网络的计算能力提出了不同的需求。\u003C\u002Fp\u003E\u003Cp\u003E神经网络的广泛应用离不开核心计算芯片。目前的主流通用计算平台包括CPU和GPU,存在着能效较低的问题(能效即能量效率,是性能与功耗的比值)。为了获得更高的能效,我们需要设计一种专用的神经网络计算芯片来满足要求。国际IT巨头,如英特尔、谷歌、IBM,都在竞相研发神经网络计算芯片。\u003C\u002Fp\u003E\u003Cp\u003E然而,神经网络的结构多样、数据量大、计算量大的特点,给硬件设计带来了巨大挑战。因此,在设计面向神经网络的高性能、高能效硬件架构时,我们需要思考清楚以下三个问题:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E好的计算模式应该是怎样的?\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E为了支持这样的计算模式,架构应该怎样设计?\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E已经实现的硬件架构,针对具体算法和应用需求,如何配置成最优的计算模式?\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E雷锋网本期公开课特邀请到清华大学微纳电子系四年级博士生涂锋斌,为我们分享神经网络硬件架构的设计经验。他将通过介绍其设计的可重构神经网络计算架构 DNA (Deep Neural Architecture),与大家分享在设计神经网络硬件架构时需要思考的问题。他在完成设计的同时,解决了这些问题,并对现有的硬件优化技术做出了总结。\u003C\u002Fp\u003E\u003Cp\u003E本文根据雷锋网硬创公开课演讲原文整理,并邀请了涂锋斌进行确认,在此感谢。由于全文篇幅过长,分(上)(下)两部分,敬请期待。\u003Cimg src=\&https:\u002F\\u002Fv2-6471f7eacecc19b3bd86b8_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-6471f7eacecc19b3bd86b8_r.jpg\&\u003E\u003C\u002Fp\u003E\u003Cp\u003E公开课视频:\u003Ca class=\&video-box\& href=\&http:\u002F\\u002F?target=https%3A\u002F\\u002Fx\u002Fpage\u002Fr0504zxvl3j.html\& target=\&_blank\& data-video-id=\&\& data-video-playable=\&\& data-name=\&设计神经网络硬件架构时,我们在思考些什么_腾讯视频\& data-poster=\&https:\u002F\\u002Fqqvideo_ori\u002F0\u002Fr0504zxvl3j_228_128\u002F0\& data-lens-id=\&\&\u003E
\u003Cimg class=\&thumbnail\& src=\&https:\u002F\\u002Fqqvideo_ori\u002F0\u002Fr0504zxvl3j_228_128\u002F0\&\u003E
\u003Cspan class=\&content\&\u003E
\u003Cspan class=\&title\&\u003E设计神经网络硬件架构时,我们在思考些什么_腾讯视频\u003Cspan class=\&z-ico-extern-gray\&\u003E\u003C\u002Fspan\u003E\u003Cspan class=\&z-ico-extern-blue\&\u003E\u003C\u002Fspan\u003E\u003C\u002Fspan\u003E
\u003Cspan class=\&url\&\u003E\u003Cspan class=\&z-ico-video\&\u003E\u003C\u002Fspan\u003Ehttps:\u002F\\u002Fx\u002Fpage\u002Fr0504zxvl3j.html\u003C\u002Fspan\u003E
\u003C\u002Fspan\u003E
\u003C\u002Fa\u003E
\u003C\u002Fp\u003E\u003Cp\u003E各位观众晚上好,我是来自清华大学的涂锋斌,今天非常荣幸收到雷锋网(公众号:雷锋网) AI 科技评论的邀请,在此给大家做一节硬创公开课,主题是《设计神经网络硬件架构时,我们在思考什么?》\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003E首先做一个自我介绍。我是清华大学微纳电子系的博士生涂锋斌,今年直博四年级,我的导师是魏少军教授和尹首一副教授,博士课题是高能效神经网络加速芯片设计,研究兴趣包括深度学习,计算机体结构及集成电路设计。\u003Cimg src=\&https:\u002F\\u002Fv2-48bf4f3e92b064ddce190f_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-48bf4f3e92b064ddce190f_r.jpg\&\u003E\u003C\u002Fp\u003E\u003Cp\u003E我作为核心架构设计者,完成了可重构神经计算芯片 Thinker 的设计。该芯片作为清华大学代表性成果,参加了 2016 年全国双创成果展,获得李克强总理的高度赞许。相关研究成果已经发表数篇国际顶级会议和权威期刊论文。\u003Cimg src=\&https:\u002F\\u002Fv2-01cfd379d80c6d_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-01cfd379d80c6d_r.jpg\&\u003E\u003C\u002Fp\u003E\u003Cp\u003E本次公开课将从以下五个方面展开。\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E研究背景\u003C\u002Fp\u003E\u003Cp\u003E我将介绍神经网络的一些背景知识及特点,它们给硬件设计带来哪些挑战?\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E计算模式\u003C\u002Fp\u003E\u003Cp\u003E从算法和调度的角度分析神经网络需要怎样的计算模式;而基于优化的计算模式,我们需要怎样的架构支持神经网络的计算?\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E架构设计\u003C\u002Fp\u003E\u003Cp\u003E针对计算模式的需求,如何设计高性能、高能效的神经网络计算架构?可重构神经网络计算架构 DNA(Deep Neural Architecture)具有哪些特点?\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E实验结果\u003C\u002Fp\u003E\u003Cp\u003EDNA 的性能与能效表现如何?与顶尖工作相比的情况如何?\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E总结思考\u003C\u002Fp\u003E\u003Cp\u003E针对神经网络硬件架构的设计展开一些思考和讨论。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E在经过前面的学术风暴后,我将打开摄像头与大家互动,进入提问环节。\u003C\u002Fp\u003E\u003Ch2\u003E一、研究背景\u003Cimg src=\&https:\u002F\\u002Fv2-c81b7c3ef8cca4b40ecaa_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-c81b7c3ef8cca4b40ecaa_r.jpg\&\u003E\u003C\u002Fh2\u003E\u003Ch3\u003E无处不在的神经网络\u003C\u002Fh3\u003E\u003Cp\u003E随着人工智能时代的到来,图像识别、语音识别、自然语言处理等智能任务在生活中无处不在。而神经网络作为当前实现这类智能任务最有效的算法之一,已经获得广泛的应用。\u003Cimg src=\&https:\u002F\\u002Fv2-cdd9df3d0ad74f0f9f465c70e9669417_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-cdd9df3d0ad74f0f9f465c70e9669417_r.jpg\&\u003E\u003C\u002Fp\u003E\u003Cp\u003E比方说:\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E百度图片搜索;\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E微软语音识别;\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E谷歌在线翻译;\u003Cbr\u003E\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E……\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E可以说,神经网络在我们的生活中真是无处不在。\u003C\u002Fp\u003E\u003Cp\u003E那么什么是神经网络?我们不妨从神经元开始理解。如图所示,这是一个生物上的神经元。它由树突、细胞体、轴突和神经末梢这四个部分构成。\u003Cimg src=\&https:\u002F\\u002Fv2-470eb5b79aa3dfa0cceeac_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-470eb5b79aa3dfa0cceeac_r.jpg\&\u003E\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E1. 通过树突接受输入信号;\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E2. 在细胞体内进行信号处理;\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E3. 通过轴突和神经末梢把输出信号传至其它神经元;\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E4. 而大量的神经元就构成了我们的神经系统。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E而这就启发了人工神经元模型的诞生。我们可以看到,它的示意图其实与神经元是十分相似的。它仍然由左边的多个输入,经过加权求和与非线性运算得到输出。\u003C\u002Fp\u003E\u003Ch3\u003E一个简单的神经元能做些什么?\u003Cimg src=\&https:\u002F\\u002Fv2-0fdca68c5a3e_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-0fdca68c5a3e_r.jpg\&\u003E\u003C\u002Fh3\u003E\u003Cp\u003E举个简单的例子。在空间中有红色和蓝色两类点。用简单的神经元,我们可以在空间中做一套曲面,将这两类点分开。这就是一个非常简单的分类问题。神经网络\u002F神经元非常擅长用于做分类问题。\u003C\u002Fp\u003E\u003Cp\u003E那么,当我们有很多神经元后,我们可以得到一个神经网络,它又能用来做什么?\u003Cimg src=\&https:\u002F\\u002Fv2-bb0a4bb26d0d9d0b67dc17_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-bb0a4bb26d0d9d0b67dc17_r.jpg\&\u003E\u003C\u002Fp\u003E\u003Cp\u003E这幅图给出了一个非常简单的典型单层神经网络。其中的每一个圆圈代表一个神经元,它们相互连接,就构成了一个神经网络。一个相对复杂的结构可以做些什么?\u003C\u002Fp\u003E\u003Cp\u003E如图所示,空间中仍然有红蓝两种颜色的点,我们采用了相对复杂的神经网络,可以在空间中画一条分类的曲面,我们可以看到,问题比刚才的问题难度更大,图中的这条粉色线勾勒出的这条曲面,才能对复杂问题进行分类。\u003Cimg src=\&https:\u002F\\u002Fv2-95cb2e13d1bb7f40187f_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-95cb2e13d1bb7f40187f_r.jpg\&\u003E\u003C\u002Fp\u003E\u003Cp\u003E在 2012 年,神经网络 AlexNet 在 ImageNet 图像分类竞赛上取得突破,获得了 85% 的准确率,相较于之前最好的识别率提升了 10% 以上。这是一个非常大的突破,在当时引起了非常广泛的关注。而现在,每年举办的 ImageNet 的识别精确度已经超过了 95%,已经超过人类识别图片的能力。这是一个非常惊人的结果。直至今年,每年拔得头筹的团队都是采用神经网络。\u003Cimg src=\&https:\u002F\\u002Fv2-da11ac7f07dcc_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-da11ac7f07dcc_r.jpg\&\u003E\u003C\u002Fp\u003E\u003Cp\u003EAlexNet 是一个非常典型的、被大家广泛研究的神经网络,因为它的层次很深,共有 8 个层次,人们也称之为深度神经网络,而基于深度神经网络的机器学习算法,我们也给它取了一个非常好听的名字叫「深度学习」。大家经常会在媒体上听到词,其实它的本质依然是神经网络。\u003C\u002Fp\u003E\u003Ch3\u003E各种应用场景对神经网络的需求\u003C\u002Fh3\u003E\u003Cp\u003E而正是因为神经网络如此强大的能力,目前广泛地应用于各种应用场景,例如:\u003Cimg src=\&https:\u002F\\u002Fv2-d0003e7eae7c55eb9030bde09ce31755_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-d0003e7eae7c55eb9030bde09ce31755_r.jpg\&\u003E\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E云端:公司会架设一些服务器来提供人工智能的服务;\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E移动端:无论是智能手机、智能汽车、无人机或是机器人,都会运用神经网络实现图像识别、物体跟踪和语音识别的智能任务。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E而不同应用场景对神经网络也提出了不一样的计算需求,比如:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E在数据中心,大家非常关注计算的性能和并行度,对功耗的需求并不大,当然,功耗自然是越低越好;\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E而在无人机的应用场景下,大家会关注在满足最基本的识别或智能需求,保证性能的前提下,尽可能地降低功耗。因为在移动端,电池容量非常有限,对低功耗自然有着很强的需求。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Ch3\u003E现有通用计算平台的不足\u003C\u002Fh3\u003E\u003Cp\u003E然而,现有通用计算平台(CPU、GPU)具有一些不足。\u003Cimg src=\&https:\u002F\\u002Fv2-b95dc0fd691d11b819ed6_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-b95dc0fd691d11b819ed6_r.jpg\&\u003E\u003C\u002Fp\u003E\u003Cp\u003E以 CPU 为例,它的性能差,能效低。\u003Cstrong\u003E能效是能量效率的简称,是性能与功耗的比值。我们通常用 GOPS\u002FW (千兆操作数每秒每瓦) 的单位来描述能效,它是一个非常好地衡量计算效率的指标。\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E我们这里讨论的能效是考虑了片外存储的系统级能效。后面提及的能效也是指的同一概念。\u003C\u002Fp\u003E\u003Cp\u003E我们在服务器上做了一个实验,在 CPU 上计算 AlexNet 需要 254.5 ms,相当于处理 4-5 张图片,而功耗需要 80 W,总能效为 0.2 GOPS\u002FW。而同样的情况在 GPU 上计算,总能效为 1.7 GOPS\u002FW,我们希望能效能达到 100 GOPS\u002FW 甚至更高。\u003C\u002Fp\u003E\u003Ch3\u003E神经网络的三大特点\u003C\u002Fh3\u003E\u003Cp\u003E但是,神经网络的三大特点给硬件加速带来巨大挑战。\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003E挑战一:不同网络的层次不同\u003Cimg src=\&https:\u002F\\u002Fv2-0ce498d9aa54f4d82855_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-0ce498d9aa54f4d82855_r.jpg\&\u003E\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E我们列举了四个非常经典的神经网络,分别是 AlexNet(11 层)、VGG(19 层)、GoogLeNet(22 层)与 ResNet(152 层),我们可以看到,因为识别精度的不同,我们往往会设计更深更复杂的神经网络,会导致网络层次变多,给硬件加速带来很大挑战。\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Ch4\u003E挑战二:不同层的类型不同\u003Cimg src=\&https:\u002F\\u002Fv2-bbec0c598b7_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-bbec0c598b7_r.jpg\&\u003E\u003C\u002Fh4\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E同样以 AlexNet 为例子,神经网络由三种主要层类型组成,包括卷积层(CONV)、池化层(POOL)与全连接层(FC)。图中红框部分即为卷积层,而蓝框部分属于池化层,绿框部分为全连接层。每一层的计算都有些许不同。\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003E挑战三:不同层的参数多样,数据量、计算量大\u003Cimg src=\&https:\u002F\\u002Fv2-40e0cfbe270d338b5bfc8_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-40e0cfbe270d338b5bfc8_r.jpg\&\u003E\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E以 AlexNet 为例,最左列呈现了所有层的类型和名字,后面的一系列参数表示它的核尺寸、步长、输入输出图尺寸等。因为参数不同,它们的数据量与计算量都不同,且非常大。\u003C\u002Fp\u003E\u003Cp\u003E在卷积层上,它的计算量非常大;而全连接层中,计算量相比卷积层稍小,但数据量尤其是权重量则非常大。\u003Cimg src=\&https:\u002F\\u002Fv2-359ec01abe553fccdab62_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-359ec01abe553fccdab62_r.jpg\&\u003E\u003C\u002Fp\u003E\u003Cp\u003E这三大特点仍然使硬件加速的实现带来一些挑战。\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E1. 不同网络的层数、参数不同——计算的灵活性比较高\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E2. 不同层的类型不同,参数多样——计算复杂度高---降低硬件的性能\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E3. 数据量、计算量大——提高功耗\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E总体而言,我们需要一个灵活高效的硬件架构支持我们的神经网络。\u003C\u002Fp\u003E\u003Ch3\u003E我们的设计目标和实现\u003Cimg src=\&https:\u002F\\u002Fv2-4d9dbdd326e7b849e0a68cf_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-4d9dbdd326e7b849e0a68cf_r.jpg\&\u003E\u003C\u002Fh3\u003E\u003Cp\u003E这样一来,我们的设计目标就确定了,即设计一个面向神经网络的高能效计算架构,它需要具备以下三个特点:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E首先它要灵活支持不同网络;\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E其次要兼顾性能与能效;\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E再者,在针对不同的应用场景,我们得以进一步优化性能或能效,即选择进一步偏向性能优先的实现,或是偏向能效优先的实现。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E在本次公开课里面,我们会以我实现的一个计算架构为设计实例,展开我的一些讨论和思考。\u003C\u002Fp\u003E\u003Cp\u003E设计实例是一款面向卷积神经网络(CNN)的计算架构,架构的代号叫做「DNA」,它主要具有三大特点:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E特点一:可重复的数据传输通路\u003C\u002Fp\u003E\u003Cp\u003E可以支持混合的数据服务模式来提高能效。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E特点二:可重构计算引擎\u003C\u002Fp\u003E\u003Cp\u003E可以支持高效的映射方法,同时兼顾灵活性和性能。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E特点三:具有调度框架\u003C\u002Fp\u003E\u003Cp\u003E可以重复 DNA 的架构的计算资源来优化性能,或者能效,或者说二者同时优化。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E这就是这款架构的三大特点。\u003C\u002Fp\u003E\u003Ch3\u003E我们设计时思考的问题\u003Cimg src=\&https:\u002F\\u002Fv2-8a6c51d60f5afa1fde273b_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-8a6c51d60f5afa1fde273b_r.jpg\&\u003E\u003C\u002Fh3\u003E\u003Cp\u003E在展开我们的讨论之前,也是我们在设计这款架构之前一直在思考的三个问题。要设计好一个架构必须解决这三大问题:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E问题一:对于神经网络来说,一个好的计算模式究竟是怎么样的?\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E问题二:为了支持的一个计算模式,我们的硬件架构需要怎样去设计?\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E问题三:当我们已经实现了一款硬件架构,在针对具体的算法应用的需求时,我们如何对架构进行配置,使其配置成一个最优的计算模式,满足我们的计算需求?\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E我们总结的设计理念,也是我们在一直贯彻于设计过程当中的一个理念:\u003Cstrong\u003E我们认为计算模式与架构的设计是相辅相成的;在设计计算模式的过程中,实际上也是在设计硬件架构,二者是不能完全分开的。\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E刚刚讲完了研究的一些背景,还有我们一些基础的思考,那么现在,我们会从算法和调度的角度,从算法的硬件用计算模式的角度来进行分析和优化,来看看怎样才是一个好的计算模式。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Ch2\u003E二、计算模式\u003Cimg src=\&https:\u002F\\u002Fv2-a2af6c8c9c4a14a3971ec_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-a2af6c8c9c4a14a3971ec_r.jpg\&\u003E\u003C\u002Fh2\u003E\u003Ch3\u003E研究对象\u003C\u002Fh3\u003E\u003Cp\u003E首先我们要先明确一下我们的研究对象。\u003C\u002Fp\u003E\u003Cp\u003E在本次公开课里面,我们主要以卷积层的计算为主要的研究对象。有两大原因:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E卷积层的计算占到总计算量的 90% 以上,因此优化卷积层本身是很有必要的。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E其他层的计算刚刚提到的池化层和全连接层,它们的计算模式与卷积层是非常类似的,因此我们对卷积层的优化方可以很容易地迁移到其它层的计算上。\u003Cimg src=\&https:\u002F\\u002Fv2-8847c84dca357cfa2c9ef3d36b172fbb_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-8847c84dca357cfa2c9ef3d36b172fbb_r.jpg\&\u003E\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E我们详细地来看看卷积层计算。如图所示,是一个卷积层的计算示意图,它的输入是一个 3D 的特征图(Input Map),经过一个 3D 的卷积核(kernel)的扫描,在对应点做一些运算后,就会得到一张输出的 Output Map。我们可以看到,3D 的输入特征图,它总共有 N 个 channel,也就是 N 张特征图。\u003Cimg src=\&https:\u002F\\u002Fv2-87e16eaaa25e660b721e_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-87e16eaaa25e660b721e_r.jpg\&\u003E\u003C\u002Fp\u003E\u003Cp\u003E我们总共有 M 个 kernel,经过输入特征图进行计算之后就可以得到 M 张,或者说有 M 个 channel 的 Output Map,就是卷积层的计算。\u003C\u002Fp\u003E\u003Ch3\u003E卷积运算\u003C\u002Fh3\u003E\u003Cp\u003E我们再进一步看下卷积运算又是怎么一回事。\u003Cimg src=\&https:\u002F\\u002Fv2-8741ced03e08f55fc426d96cb29e70d4_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-8741ced03e08f55fc426d96cb29e70d4_r.jpg\&\u003E\u003C\u002Fp\u003E\u003Cp\u003E刚刚讲到的卷积核(kernel)会在左边 5×5 的 Input Map 上进行扫描,黄色的方框是一个 3×3 的卷积核。我们可以看到,每一个黄色小框的右下角会有一个权重分析,也就是具体的权重值。卷积核进行扫描的每个位置都会进行神经元的计算,并得到右边 3×3 的 Output Map 上的每一个点。可以看到,随着卷积核在 Input Map 的扫描,就可以得到 Output Map 上的每一个点,而具体的神经元计算其实和我们之前提及的人工神经元模型计算是完全一致的,这就是一个卷积运算的过程。\u003C\u002Fp\u003E\u003Ch3\u003E架构模型\u003C\u002Fh3\u003E\u003Cp\u003E在讲完研究对象之后,我们还要再讲一下架构模型。\u003Cimg src=\&https:\u002F\\u002Fv2-787f133ff346bf30be10e5db8549da43_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-787f133ff346bf30be10e5db8549da43_r.jpg\&\u003E\u003C\u002Fp\u003E\u003Cp\u003E如图所示,这是我们归纳出来的一个神经网络的硬件架构模型,它主要由片上和片外两部分构成。\u003C\u002Fp\u003E\u003Cp\u003E左边的大矩形就是我们要设计的神经网络硬件架构,而右边架构的外部有一个主处理器和一个片外存储叫做 Off-Chip DRAM,这两个东西是挂载在芯片外部的,而我们主要设计的,就是左边大矩形内部的结构。\u003C\u002Fp\u003E\u003Cp\u003E在架构里面有一个核心控制器 controller,然后片上通常会有三块 buffer,即 Input Buffer、Output Buffer 及 Weight Buffer,分别存储神经网络的输入数据、输出数据和权重。而中间的黄色部分为 Computing Core 也就是计算核心。\u003C\u002Fp\u003E\u003Cp\u003E在核心的内部会有一些计算器,比如 Input REGs 与 Output REGs(输入输出寄存器),而最最核心的计算单元就是这里的「CE」它的全称叫做 convolution engine,即卷积引擎或者说计算引擎。输入的数据会经过局部的计算器传输到计算引擎上,而计算机内部再继续剖开,就是一个一个的计算单元,我们称之为 PE,英文叫做 processing element(处理单元),做的是最基本的运算。\u003C\u002Fp\u003E\u003Cp\u003E神经网络内部最基本的运算是乘加运算,这就是我们最基础的一个硬件架构模型,后面我们的所有讨论都会基于的一个模型来展开。\u003C\u002Fp\u003E\u003Ch3\u003E优化目标\u003C\u002Fh3\u003E\u003Cp\u003E在讲完了我们的硬件架构模型以及研究对象以后,我们还要再讲一讲优化目标。刚刚也提到了两个优化目标,\u003Cstrong\u003E一个是能效(energy efficiency),另一个是性能。\u003Cimg src=\&https:\u002F\\u002Fv2-9fc16b7dceaba201b18e7f594d5b7efb_b.jpg\& data-rawwidth=\&740\& data-rawheight=\&417\& class=\&origin_image zh-lightbox-thumb\& width=\&740\& data-original=\&https:\u002F\\u002Fv2-9fc16b7dceaba201b18e7f594d5b7efb_r.jpg\&\u003E\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Ch3\u003E优化目标 1:能效\u003C\u002Fh3\u003E\u003Cp\u003E刚刚我们也提过,能效的单位是 GOPS\u002FW,表示的是每单位的功耗可以获得怎样的性能,它表征的是一个计算效率的问题。\u003C\u002Fp\u003E\u003Cp\u003E在公开课里面,我会尽量少用公式做过多的讨论,为了方便大家理解,我经常会用一些例子来解释,但是因为这两个公式非常重要,后面的讨论都是基于它们,所以我必须花一点篇幅来解释。\u003C\u002Fp\u003E\u003Cp\u003E首先,energy efficiency 是性能与功耗的比值,而性能我们通常用每秒做多少操作数来衡量,即 Operation\u002FT(操作数除以计算的总时间),而 Power 是 Energy\u002FT (总能耗除以时间) 的一个结果,我们可以看到 T 就被约掉了。\u003C\u002Fp\u003E\u003Cp\u003E而另外我们注意到的一点是,对于神经网络固定的一个算法来说,它的总操作数也是一个固定的值,所以我们首先得到一个结论:\u003Cstrong\u003E能效值与能耗值是成反比的。那么如果要优化能效,其实我们只需要优化能耗就好了。\u003C\u002Fstrong\u003E我们的能耗越低,那能效也会越高。因此,我们把问题转化成了能耗问题。\u003C\u002Fp\u003E\u003Cp\u003E我们继续分析能耗。能耗主要由两部分构成。\u003C\u002Fp\u0

我要回帖

更多关于 卷积神经网络设计 的文章

 

随机推荐