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

简介: 普林斯顿大学研究人员提出了一种会在训练过程中连接、生长、移除神经元的神经网络。这种神经网络使用梯度和神经元强弱来生长(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”微信公众号

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

相关文章
|
17天前
|
机器学习/深度学习 存储 算法
神经网络分类算法原理详解
神经网络分类算法原理详解
29 0
|
6天前
|
负载均衡 算法 应用服务中间件
面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
字节跳动面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
25 0
|
22天前
|
机器学习/深度学习 算法 计算机视觉
|
2天前
|
机器学习/深度学习 算法
【MATLAB】GA_ELM神经网络时序预测算法
【MATLAB】GA_ELM神经网络时序预测算法
273 9
|
2天前
|
机器学习/深度学习 数据采集 算法
|
5天前
|
机器学习/深度学习 自然语言处理 算法
|
21天前
|
机器学习/深度学习 算法 Python
LSTM(长短期记忆)网络的算法介绍及数学推导
LSTM(长短期记忆)网络的算法介绍及数学推导
15 0
|
27天前
|
负载均衡 算法 应用服务中间件
Docker Swarm总结+service创建和部署、overlay网络以及Raft算法(2/5)
Docker Swarm总结+service创建和部署、overlay网络以及Raft算法(2/5)
72 0
|
27天前
|
NoSQL Java Linux
【Linux IO多路复用 】 Linux 网络编程 认知负荷与Epoll:高性能I-O多路复用的实现与优化
【Linux IO多路复用 】 Linux 网络编程 认知负荷与Epoll:高性能I-O多路复用的实现与优化
59 0
|
28天前
|
机器学习/深度学习 存储 算法
6 种 卷积神经网络压缩方法
6 种 卷积神经网络压缩方法
27 0