如何构建“集成神经网络”“Ensemble neural network”
参考:
https://arxiv.org/pdf/1603.05691.pdf
本文要讨论的是如何构建“集成神经网络”(“Ensemble neural network”),其实“集成神经网络”其本质就是一种“集成学习”的模型,只不过个体学习器不再是传统的机器学习模型而是神经网络模型,不过一般情况下“集成神经网络”的具体形式并不能简单等价于传统的“集成学习”模型。
“集成神经网络”“Ensemble neural network”构建的关键:
The ensemble averages the logits predicted by each model before the softmax layers.
The logits (the scores just prior to the final softmax layer) from each of the CNN in the ensemble model are averaged for each class.
个体神经网络(CNN模型):
CNN层 + 全连接层(输出的是logits) + softmax层 + 交叉熵损失函数
集成神经网络:
训练N个CNN模型,这些CNN模型结构可以是不同的,并且每个CNN模型个体都是使用不同的超参数,不同的训练数据集,这里N一般是一个比较大的数值,如N=200. 需要注意的是集成神经网络往往是模型参数不太大的模型,并且每个模型的各自的训练数据集不是特别大的那种情况,因为一般集成神经网络需要单独训练出比较多的个体,这里假设是200个,如果每个个体模型的训练都很费时的话那么就需要一个极大的训练时长的,也正因此集成神经网络在现在的大数据集和大模型参数的背景下基本是不会采用的。
这里不同的神经网络个体采用不同的训练数据集,可以通过数据增强的方式对某个原有的单一数据集进行扩增,具体构建时每个模型在读入随机抽取的原训练集中数据后进行实时的数据增强,以此实现不同神经网络个体的训练数据的差异性。
假设训练200个模型个体完成后需要选出一个最优的组合,即选出M个个体神经网络,使者M个进行组合后性能最优。在具体选择个体模型的时候,需要使用验证数据集而不是训练数据集。
这个选择过程并没有找到具体的算法描述,因此这里给出一个个人给出的步骤:
对200个模型按照验证数据集的准确度进行从高到低的排序,需要选择出的模型集合为S={},默认将0号模型加入到S集合中(因为0号个体模型的验证数据集准确度最高),从1号模型开始到199号模型,判断这些模型加入到S集合后是否可以提升集成模型的性能,如果能提高则加入,如果不能则跳过,这样我们只需要用验证数据集验证199个集成模型即可。但是该种选择方法其实并不难保证最优的组合,比如该种方法选择出的集合包含1号个体模型,但是我们如果跳过1号模型(将1号模型从集合S中取出),然后从2号模型开始进行选择,那么选出的新的集合 S' 是有可能比S集合性能更优,但是考虑到这样会急剧增加运算时长,因此也不建议采用该种选择方法。
需要注意的是,从200个个体模型中最后选择出的集合往往也是有着较多个体的,比如最终选择出的M值,即S集合的大小为16或19这样的数值,因此最终构建的“集成神经网络”往往在进行预测推理时也是很费时的。
构建“集成神经网络”和传统的“集成学习”之间一个明显的不同是:
The ensemble averages the logits predicted by each model before the softmax layers.
The logits (the scores just prior to the final softmax layer) from each of the CNN in the ensemble model are averaged for each class.
传统的“集成学习”是将个体模型的预测输出进行融合(比如进行平均),而“集成神经网络”则是将个体模型输出的logits进行平均,而不是预测值p,这个区别是极为重要的。
紧邻softmax层的全连接层输出的是logits,而softmax层输出的是预测值概率P。
个体神经网络(CNN模型):
CNN层 + 全连接层(输出的是logits) + softmax层(输出的是预测值概率P) + 交叉熵损失函数
PS. 虽然集成神经网络基本被淘汰出了历史舞台,但是经典的神经网络理论模型的实证研究都是喜欢用这个“集成神经网络”的,因为虽然“集成神经网络”构建十分费时,但是其往往可以获得比单独个体的神经网络模型更好的performance(一般在一个百分点到1.5个百分点的准确度),这个“集成神经网络”作为知识盲区也是有必要补上的。
补充:
其实“集成网络”是在全连接层(输出的是logits)后进行集成(对logits进行平均),还是在softmax层(输出的是预测值概率P)后进行集成(对p进行平均),其实二者都是有的,至于哪种情况更好这或许是一个实践问题,也就是说要具体的问题具体分析,这个分类问题或许这个集成方式好,而那个数据集或许是另种集成方法好。Maybe it is an empirical question.
如何构建“集成神经网络”“Ensemble neural network”的更多相关文章
- 递归神经网络(Recursive Neural Network, RNN)
信息往往还存在着诸如树结构.图结构等更复杂的结构.这就需要用到递归神经网络 (Recursive Neural Network, RNN),巧合的是递归神经网络的缩写和循环神经网络一样,也是RNN,递 ...
- 卷积神经网络(Convolutional Neural Network, CNN)简析
目录 1 神经网络 2 卷积神经网络 2.1 局部感知 2.2 参数共享 2.3 多卷积核 2.4 Down-pooling 2.5 多层卷积 3 ImageNet-2010网络结构 4 DeepID ...
- 深度学习FPGA实现基础知识10(Deep Learning(深度学习)卷积神经网络(Convolutional Neural Network,CNN))
需求说明:深度学习FPGA实现知识储备 来自:http://blog.csdn.net/stdcoutzyx/article/details/41596663 说明:图文并茂,言简意赅. 自今年七月份 ...
- 人工神经网络 Artificial Neural Network
2017-12-18 23:42:33 一.什么是深度学习 深度学习(deep neural network)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高 ...
- [C4] 前馈神经网络(Feedforward Neural Network)
前馈神经网络(Feedforward Neural Network - BP) 常见的前馈神经网络 感知器网络 感知器(又叫感知机)是最简单的前馈网络,它主要用于模式分类,也可用在基于模式分类的学习控 ...
- 详解循环神经网络(Recurrent Neural Network)
本文结构: 模型 训练算法 基于 RNN 的语言模型例子 代码实现 1. 模型 和全连接网络的区别 更细致到向量级的连接图 为什么循环神经网络可以往前看任意多个输入值 循环神经网络种类繁多,今天只看最 ...
- 【原创】深度神经网络(Deep Neural Network, DNN)
线性模型通过特征间的现行组合来表达“结果-特征集合”之间的对应关系.由于线性模型的表达能力有限,在实践中,只能通过增加“特征计算”的复杂度来优化模型.比如,在广告CTR预估应用中,除了“标题长度.描述 ...
- 脉冲神经网络Spiking neural network
(原文地址:维基百科) 简单介绍: 脉冲神经网络Spiking neuralnetworks (SNNs)是第三代神经网络模型,其模拟神经元更加接近实际,除此之外,把时间信息的影响也考虑当中.思路是这 ...
- 吴恩达深度学习第1课第4周-任意层人工神经网络(Artificial Neural Network,即ANN)(向量化)手写推导过程(我觉得已经很详细了)
学习了吴恩达老师深度学习工程师第一门课,受益匪浅,尤其是吴老师所用的符号系统,准确且易区分. 遵循吴老师的符号系统,我对任意层神经网络模型进行了详细的推导,形成笔记. 有人说推导任意层MLP很容易,我 ...
- Bootstrap aggregating Bagging 合奏 Ensemble Neural Network
zh.wikipedia.org/wiki/Bagging算法 Bagging算法 (英语:Bootstrap aggregating,引导聚集算法),又称装袋算法,是机器学习领域的一种团体学习算法. ...
随机推荐
- 推荐一款免费的终端工具-Windterm
Windterm 提到SSH终端工具,大家一定会想到putty.xshell.MobaXterm这些产品.但是当我使用Windterm后,我彻底改变了我对之前使用SSH终端工具的认知,其强大的能力,彻 ...
- 配置系统未能初始化。“System.Transactions.Diagnostics.DiagnosticTrace”的类型初始值设定项引发异常。
配置系统未能初始化."System.Transactions.Diagnostics.DiagnosticTrace"的类型初始值设定项引发异常. 1.是检查当前程序的 App.c ...
- C# 8字节byte数组转int
对方是协议 对于整型.长整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节):而 Little endian 则相反,它认为第一个 ...
- FEL - Fast Expression Language
开源好用的表达式计算语言FEL,可惜了官网文档不在国内,我来copy个过来. Fel是轻量级的高效的表达式计算引擎 Fel在源自于企业项目,设计目标是为了满足不断变化的功能需求和性能需求. Fel是开 ...
- Win10任务栏图标居中
win+q键搜索并打开字符映射表 点击第五行的空白字符,然后先后点击下方的选择以及复制 在桌面新建一个文件夹,然后重命名,将刚才复制的空白字符粘贴进去,如图,这样我们就拥有了一个空白名称的文件夹 在任 ...
- Windows 编译 FFMpeg
Windows 编译 FFMpeg 背景: 为了提高公司产品的质量,对FFMPEG进行优化,需要重新编译. Host :Windows-10,core-i7 MinGW :网络版 pkg-config ...
- Spring MVC 中使用 RESTFul 编程风格
1. Spring MVC 中使用 RESTFul 编程风格 @ 目录 1. Spring MVC 中使用 RESTFul 编程风格 2. RESTFul 编程风格 2.1 RESTFul 是什么 2 ...
- 量子位(qubit)发微
上一篇文章我们讲了量子计算机的一些概念,文章不短,但是信息量很少.这里继续深入量子机来揭开qubit的神秘面纱. 这篇文章会有一些数学概念,不过很简单 量子叠加 量子叠加非常重要,因为qubit就是利 ...
- pymsql往数据库插入表情报错
修改数据库 需要数据库支持utf8mb4 修改/etc/my.conf [client] default-character-set = utf8mb4 [mysql] default-charact ...
- Vue 怎么用 vm.$set() 解决对象新增属性不能响应的问题 ?
受现代 JavaScript 的限制 ,Vue 无法检测到对象属性的添加或删除.由于 Vue 会在初始化实例时对属性执行 getter/setter 转化,所以属性必须在 data 对象上存在才能让 ...