【两项业界最佳】普林斯顿新算法自动生成高性能神经网络,同时超高效压缩

简介: 普林斯顿大学研究人员提出了一种会在训练过程中连接、生长、移除神经元的神经网络。这种神经网络使用梯度和神经元强弱来生长(grow)和修剪(prune),从而实现权重和结构的同时训练。此算法可同时实现神经网络结构的自动选择和超高效压缩。所取得的压缩率,所获得的神经网络模型均为当前业内最好纪录。

神经网络的结构对其性能有极其重要的影响。目前主流的神经网络结构搜索法仍然是试凑法,该方法存在三大问题:

  1. 训练过程中神经网络结构是固定的,训练并不能改善结构
  2. 时间和计算消耗巨大
  3. 生成的网络通常很冗余,计算和存储成本过高

为了解决以上问题,普林斯顿大学研究人员仿照人类大脑的学习过程,提出了一种自动生成神经网络的算法。该算法从一个种子结构(seed architecture)开始,这个种子结构类似于初生婴儿的大脑。

在训练过程中,先根据反向传播算法获得的梯度(gradient),连接和生长(grow)神经元,类似于幼儿的大脑的生长。随后,根据神经连接的强度(magnitude)逐步修剪(prune)冗余的连接和神经元,最终实现高性能、低能耗的神经网络,此时得到的推理模型(inference model)类似于成年人的大脑。

7c5b8cff7dde25654de9357433853a7f6a8091c5

普林斯顿大学的一组研究人员提出了一种自动生成神经网络的算法,过程与人脑发育类似。图片来自论文(下同)

自动生成高性能神经网络,并实现超高效压缩,当前业界最佳

算法主体由两部分组成: 基于梯度的生长(gradient-based growth) 和基于强度的修剪(magnitude-based pruning)。前者在结构空间(architecture space)里通过生长和连接神经元实现梯度下降(gradient descent);实验表明,这种生长和连接可快速降低损失函数(loss function)值。后者通过修剪弱连接和再训练来精简神经网络结构;实验表明, 这种修剪过程可以有效的降低存储和计算能耗。此外,生长和修剪过程针对卷积层都有特殊的设计。

a89d6915f0763d7171ff50cf820c6af193a046f7

算法主体由两部分组成: 基于梯度的生长(gradient-based growth) 和基于强度的修剪(magnitude-based pruning)

实验结果表明,对于线性分类器、SVM等多种种子结构,这种算法都能自动生成高性能的神经网络,并实现超高效压缩。在LeNet-5上,该算法取得了74.3x (43.7x)的参数数量(浮点运算数量)的压缩率。在AlexNet上,对应的数值为15.7x (4.6x)。在不影响精度的前提下,这些压缩比均为当前最好纪录。

d340e4fa420a258b272a41857a2a3da4a2dea1a4

在LeNet-5上,该算法取得了74.3x (43.7x)的参数数量(浮点运算数量)的压缩率。在AlexNet上,对应的数值为15.7x (4.6x)。

三大特性,克服传统神经网络压缩局限

目前主流的神经网络压缩方法是单纯的修剪。而普林斯顿研究者发现,在相同的修剪(pruning)方式下,修剪前相对大的神经网络,修剪之后仍然比较大。这意味着传统的修剪方法具有很大的局限性: 对于修剪前本身很冗余(redundant)的神经网络,再好的修剪也回天无力;反之,如果修剪前的神经网络已经很精简(compact),那么修剪则为锦上添花,并最终实现超高效的压缩

69981afd2b7e54e66aba710a01d4cdce0131735c

研究者所提出的算法主要是受到了人脑的三个特性的启发:

1、动态连接:人类的学习过程,本质是大脑神经元连接方式的动态改变。然而目前的神经网络学习方式只是权重的调整。因此,研究者模仿人脑的学习机制,在训练过程中根据梯度动态调整神经元的连接方式来实现梯度下降。普林斯顿的研究人员证明,这种学习方式比单纯的权重训练更加有效

2、数量演化:人脑在不同年龄段有着不同的神经突触数量。从出生开始,人脑神经元逐步增长,在一岁左右达到峰值,随后稳定下降。研究者模仿这一机制,让神经网络在生长过程中,不断生成新的神经元和对应连接来提高性能,在修剪过程中不断移除冗余的神经元和连接来降低能耗。这种网络的神经元连接数量随训练时间发生变化,与人脑神经元随年龄增长发生的变化几乎完全吻合。

fe93bfe91ebaa896813dd624d8234a07106e4a2d

3、稀疏特性:人脑单次推理(inference)通常只有很少量的神经元处于活跃状态,这也是人脑能以很低的功率(<20瓦)运行的原因。然而目前主流的神经网络仍然是全连接(fully connected)。为了实现稀疏性,研究者提出了多种不同的修剪方式,以及对卷积层的局部卷积算法(partial-area convolution),从而实现了在精度不变的前提下,参量和浮点计算数量的大幅减少。

目前,研究者正在将这一方法拓展到RNN、LSTM和强化学习(reinforcement learning)。同时,他们也在研究如何将这一方法应用于在线学习(online learning)和终生学习(lifelong learning)。

论文:NeST:基于生长-修剪范式的神经网络合成工具

d99a396c51b98850d12f817db14316dcdca91836


摘要

神经网络(NN)已经开始对机器学习的各种应用产生广泛的影响。然而,为大型应用寻找最佳NN架构的问题几十年来一直没有得到很好解决。传统方法通过大量试错来寻找最佳的NN架构。这种过程非常低效。此外,生成的NN架构会产生相当大的冗余。为了解决这些问题,我们提出了一个NN合成工具(NeST),它可以为给定的数据集自动生成非常紧凑的结构。NeST从种子NN结构开始,通过基于梯度的生长(growth)和基于神经连接强度(magnitude)的神经元修剪,不断迭代调整架构。实验结果表明,在大范围的种子结构选择中,NeST都生成了高精度且非常紧凑的神经网络。例如,对于MNIST数据集的LeNet-300-100(LeNet-5)NN架构,我们将网络参数减少了34.1倍(74.3倍),将浮点运算(FLOPs)减少了35.8倍(43.7倍)。对于ImageNet数据集的AlexNet NN结构,我们将网络参数减少了15.7倍,FLOP减少了4.6倍。所有这些结果都是这些结构当前最佳记录。


原文发布时间为:2017-11-14

本文作者:闻菲

本文来自云栖社区合作伙伴新智元,了解相关信息可以关注“AI_era”微信公众号

原文链接:【两项业界最佳】普林斯顿新算法自动生成高性能神经网络,同时超高效压缩

相关文章
|
2月前
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
324 0
|
1月前
|
机器学习/深度学习 算法
采用蚁群算法对BP神经网络进行优化
使用蚁群算法来优化BP神经网络的权重和偏置,克服传统BP算法容易陷入局部极小值、收敛速度慢、对初始权重敏感等问题。
251 5
|
2月前
|
存储 算法 安全
即时通讯安全篇(三):一文读懂常用加解密算法与网络通讯安全
作为开发者,也会经常遇到用户对数据安全的需求,当我们碰到了这些需求后如何解决,如何何种方式保证数据安全,哪种方式最有效,这些问题经常困惑着我们。52im社区本次着重整理了常见的通讯安全问题和加解密算法知识与即时通讯/IM开发同行们一起分享和学习。
280 9
|
2月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
196 2
|
1月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
112 0
|
2月前
|
机器学习/深度学习 并行计算 算法
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
|
2月前
|
算法 数据挖掘 区块链
基于遗传算法的多式联运车辆路径网络优优化研究(Matlab代码实现)
基于遗传算法的多式联运车辆路径网络优优化研究(Matlab代码实现)
108 2
|
2月前
|
机器学习/深度学习 传感器 算法
【表面粗糙度】基于粒子群PSO算法优化-BP神经网络的表面粗糙度研究(Matlab代码实现)
【表面粗糙度】基于粒子群PSO算法优化-BP神经网络的表面粗糙度研究(Matlab代码实现)
214 7
|
2月前
|
监控 前端开发 安全
Netty 高性能网络编程框架技术详解与实践指南
本文档全面介绍 Netty 高性能网络编程框架的核心概念、架构设计和实践应用。作为 Java 领域最优秀的 NIO 框架之一,Netty 提供了异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。本文将深入探讨其 Reactor 模型、ChannelPipeline、编解码器、内存管理等核心机制,帮助开发者构建高性能的网络应用系统。
224 0
|
2月前
|
机器学习/深度学习 编解码 并行计算
【创新未发表!】基于BKA算法优化-BP、HO算法优化-BP、CP算法优化-BP、GOOSE算法优化-BP、NRBO算法优化-BP神经网络回归预测比较研究(Matlab代码)
【创新未发表!】基于BKA算法优化-BP、HO算法优化-BP、CP算法优化-BP、GOOSE算法优化-BP、NRBO算法优化-BP神经网络回归预测比较研究(Matlab代码)
171 0

热门文章

最新文章

下一篇
oss云网关配置