精华内容
下载资源
问答
  • 针对深度卷积神经网络中 maxout 单元非最大特征无法传递、特征图像子空间池化表达能力不足的局限性,提出混合maxout (mixout,mixed maxout)单元。首先,计算相同输入在不同卷积变换下所形成的特征图像子空间的指数...
  • 深度学习maxout单元

    千次阅读 2018-10-03 16:19:57
    今天学习深度学习看到整流线性单元及其扩展里的maxout单元,感觉这个有点东西,书中讲的不是特别详细,在此记录一下学习到的东西。参考了http://www.cnblogs.com/tornadomeet 一、相关理论  maxout出现在ICML...

        今天学习深度学习看到整流线性单元及其扩展里的maxout单元,感觉这个有点东西,书中讲的不是特别详细,在此记录一下学习到的东西。参考了http://www.cnblogs.com/tornadomeet

    一、相关理论

        maxout出现在ICML2013上:《Maxout  Networks》,作者Goodfellow将maxout和dropout结合后,号称在MNIST, CIFAR-10, CIFAR-100, SVHN这4个数据上都取得了start-of-art的识别率。从论文中可以看出,maxout其实一种激发函数形式。本文主要介绍这个函数的具体算法。

    二、Maxout函数

        假设输入的特征向量为x = (x_{1},...,x_{d}),Maxout隐藏层每个神经元的计算公式如下:

                                                                           h_{i}(x) = \underset{j\in [1,k]}{max}\; z_{ij}

                                                                           where\, z_{ij} = x^{T}W_{...ij} +b_{ij},and \, W \in \mathbb{R}^{d\times m \times k }

    W是3维的,d表示输入层节点数,m表示隐含层节点数,k表示每个隐含层节点对应了k个"隐隐含层"节点,b是一个大小为(m,k)的二维矩阵,这是我们需要学习的参数。这个公式就是Maxout隐藏层神经元i的计算 公式。k就是maxout层需要的参数。像dropout一样,也有参数p(每个神经元dropout的概率)。如果我们设定参数k=1,那么这个时候,网络就类似于以前我们所学普通的MLP网络。我们可以这么理解,本来传统的MLP算法在第i层到第i+1层,参数只有一组,然而现在我们不怎么干了,我们在这一层同时训练n组参数,然后选择激活值最大的作为下一层神经元的激活值。模型参考一张图片:

    假设我们网络第i层有2个神经元x1、x2,第i+1层的神经元个数为1个:

     (1)以前MLP的方法。我们要计算第i+1层,那个神经元的激活值的时候,传统的MLP计算公式就是:

                                                                    z = W * X +b

                                                                       h = f(z)

    f是我们熟悉的激活函数,sigmoid,Relu,Tanh等。

    (2)Maxout 的方法。如果我们设置maxout的参数k=5,maxout层就如上图中所示,相当于在每个输出神经元前面又多了一层“隐隐含层”。这一层有5个神经元,此时maxout网络的输出计算公式为:

                                                                 z1 = W1 * X +b1z2 = W2 * X +b2,...,z5 = W5 * X +b5,

                                                                 h = max(z1,z2,...,z5)

    所以这就是为什么采用maxout的时候,参数个数成k倍增加的原因。本来我们只需要一组参数就够了,采用maxout后,就需要有k组参数。

    maxout的拟合能力是非常强的,它可以拟合任意的的凸函数。最直观的解释就是任意的凸函数都可以由分段线性函数以任意精度拟合(学过高等数学应该能明白),而maxout又是取k个隐隐含层节点的最大值,这些”隐隐含层"节点也是线性的,所以在不同的取值范围下,最大值也可以看做是分段线性的(分段的个数与k值有关)。论文中的图1如下(它表达的意思就是可以拟合任意凸函数,当然也包括了ReLU了):

     作者从数学的角度上也证明了这个结论,即只需2个maxout节点就可以拟合任意的凸函数了(相减),前提是”隐隐含层”节点的个数可以任意多,如下图所示:

    展开全文
  • maxout单元学习(转载)

    2020-06-09 17:30:24
  • 通过IoU自归一化和Maxout单元使用3D ConvNet检测肺结节
  • 该目录包含maxout单元的实现,并提供有关CIFAR-10的简单分类示例。 它基于张家仁的代码,可以找到。 安装 该模块可以与MatConvNet vl_contrib软件包管理器一起安装: vl_contrib('install', 'mcnMaxout') ; vl_...
  • Maxout详解

    万次阅读 多人点赞 2018-09-21 11:53:35
     本篇博文主要讲解2013年,ICML上的一篇文献:《Maxout Networks》,这个算法我目前也很少用到,个人感觉最主要的原因应该是这个算法参数个数会成k倍增加(k是maxout的一个参数),不过没关系,对于我们来说知识积累...

    一、相关理论

       本篇博文主要讲解2013年,ICML上的一篇文献:《Maxout  Networks》,这个算法我目前也很少用到,个人感觉最主要的原因应该是这个算法参数个数会成k倍增加(k是maxout的一个参数),不过没关系,对于我们来说知识积累才是最重要的,指不定某一天我们就需要用到这个算法,技多不压身。个人感觉Maxout网络和Dropout有很多相似的地方。

        本篇博文将从什么是maxout网络讲起,先解答maxout的源码层实现,因为很多人最感兴趣的还是算法要怎么实现,当然我也是这样的。我看文献,一般最在意的还是源码的实现,有的文献理论公式推导了十几页,结果5行代码搞定,我看到想哭,这也许就是我讨厌做学术研究的原因吧。知道了源码怎么实现后,我们简单啰嗦一下maxout相关的理论意义。

    二、Maxout算法流程

    1、算法概述

    开始前我们先讲解什么叫maxout networks,等我们明白了什么叫maxout 网络后,再对maxout的相理论意义做出解释。Maxout是深度学习网络中的一层网络,就像池化层、卷积层一样等,我们可以把maxout 看成是网络的激活函数层,这个后面再讲解,本部分我们要先知道什么是maxout。我们假设网络某一层的输入特征向量为:X=(x1,x2,……xd),也就是我们输入是d个神经元。Maxout隐藏层每个神经元的计算公式如下:

     

    上面的公式就是maxout隐藏层神经元i的计算公式。其中,k就是maxout层所需要的参数了,由我们人为设定大小。就像dropout一样,也有自己的参数p(每个神经元dropout概率),maxout的参数是k。公式中Z的计算公式为:

     

    权重w是一个大小为(d,m,k)三维矩阵,b是一个大小为(m,k)的二维矩阵,这两个就是我们需要学习的参数。如果我们设定参数k=1,那么这个时候,网络就类似于以前我们所学普通的MLP网络。

    我们可以这么理解,本来传统的MLP算法在第i层到第i+1层,参数只有一组,然而现在我们不怎么干了,我们在这一层同时训练n组参数,然后选择激活值最大的作为下一层神经元的激活值。下面还是用一个例子进行讲解,比较容易搞懂。

    为了简单起见,假设我们网络第i层有2个神经元x1、x2,第i+1层的神经元个数为1个,如下图所示:

    (1)以前MLP的方法。我们要计算第i+1层,那个神经元的激活值的时候,传统的MLP计算公式就是:

    z=W*X+b

    out=f(z)

    其中f就是我们所谓的激活函数,比如Sigmod、Relu、Tanh等。

    (2)Maxout 的方法。如果我们设置maxout的参数k=5,maxout层就如下所示:

    相当于在每个输出神经元前面又多了一层。这一层有5个神经元,此时maxout网络的输出计算公式为:

    z1=w1*x+b1

    z2=w2*x+b2

    z3=w3*x+b3

    z4=w4*x+b4

    z5=w5*x+b5

    out=max(z1,z2,z3,z4,z5)

    所以这就是为什么采用maxout的时候,参数个数成k倍增加的原因。本来我们只需要一组参数就够了,采用maxout后,就需要有k组参数。

    三、源码实现

    ok,为了学习maxout源码的实现过程,我这边引用keras的源码maxout的实现,进行讲解。keras的网站为:http://keras.io/   。项目源码网站为:https://github.com/fchollet/keras。下面是keras关于maxout网络层的实现函数:

    #maxout 网络层类的定义
    class MaxoutDense(Layer):
        # 网络输入数据矩阵大小为(nb_samples, input_dim)
        # 网络输出数据矩阵大小为(nb_samples, output_dim)
        input_ndim = 2
       #nb_feature就是我们前面说的k的个数了,这个是maxout层特有的参数
        def __init__(self, output_dim, nb_feature=4,
                     init='glorot_uniform', weights=None,
                     W_regularizer=None, b_regularizer=None, activity_regularizer=None,
                     W_constraint=None, b_constraint=None, input_dim=None, **kwargs):
            self.output_dim = output_dim
            self.nb_feature = nb_feature
            self.init = initializations.get(init)
     
            self.W_regularizer = regularizers.get(W_regularizer)
            self.b_regularizer = regularizers.get(b_regularizer)
            self.activity_regularizer = regularizers.get(activity_regularizer)
     
            self.W_constraint = constraints.get(W_constraint)
            self.b_constraint = constraints.get(b_constraint)
            self.constraints = [self.W_constraint, self.b_constraint]
     
            self.initial_weights = weights
            self.input_dim = input_dim
            if self.input_dim:
                kwargs['input_shape'] = (self.input_dim,)
            self.input = K.placeholder(ndim=2)
            super(MaxoutDense, self).__init__(**kwargs)
        #参数初始化部分
        def build(self):
            input_dim = self.input_shape[1]
     
            self.W = self.init((self.nb_feature, input_dim, self.output_dim))#nb_feature是我们上面说的k。
            self.b = K.zeros((self.nb_feature, self.output_dim))
     
            self.params = [self.W, self.b]
            self.regularizers = []
     
            if self.W_regularizer:
                self.W_regularizer.set_param(self.W)
                self.regularizers.append(self.W_regularizer)
     
            if self.b_regularizer:
                self.b_regularizer.set_param(self.b)
                self.regularizers.append(self.b_regularizer)
     
            if self.activity_regularizer:
                self.activity_regularizer.set_layer(self)
                self.regularizers.append(self.activity_regularizer)
     
            if self.initial_weights is not None:
                self.set_weights(self.initial_weights)
                del self.initial_weights
     
        def get_output(self, train=False):
            X = self.get_input(train)#需要切记这个x的大小是(nsamples,input_num) 
            # -- don't need activation since it's just linear.
            output = K.max(K.dot(X, self.W) + self.b, axis=1)#maxout激活函数
            return output
    

    看上面的代码的话,其实只需要看get_output()函数,就知道maxout的实现了。所以说有的时候,一篇文献的代码,其实就只有几行代码,maxout就仅仅只有一行代码而已:

    output = K.max(K.dot(X, self.W) + self.b, axis=1)#maxout激活函数

    下面在简单啰嗦一下相关的理论,毕竟文献的作者写了那么多页,我们总得看一看才行。Maxout可以看成是一个激活函数 ,然而它与原来我们以前所学的激活函数又有所不同。传统的激活函数:

     

    比如阈值函数、S函数等。maxout激活函数,它具有如下性质:

    1、maxout激活函数并不是一个固定的函数,不像Sigmod、Relu、Tanh等函数,是一个固定的函数方程

    2、它是一个可学习的激活函数,因为我们W参数是学习变化的。

    3、它是一个分段线性函数:

    然而任何一个凸函数,都可以由线性分段函数进行逼近近似。其实我们可以把以前所学到的激活函数:relu、abs激活函数,看成是分成两段的线性函数,如下示意图所示:

     maxout的拟合能力是非常强的,它可以拟合任意的的凸函数。最直观的解释就是任意的凸函数都可以由分段线性函数以任意精度拟合(学过高等数学应该能明白),而maxout又是取k个隐隐含层节点的最大值,这些”隐隐含层"节点也是线性的,所以在不同的取值范围下,最大值也可以看做是分段线性的(分段的个数与k值有关)-本段摘自:http://www.cnblogs.com/tornadomeet/p/3428843.html

     

    maxout是一个函数逼近器对于一个标准的MLP网络来说,如果隐藏层的神经元足够多,那么理论上我们是可以逼近任意的函数的。类似的,对于maxout 网络也是一个函数逼近器。

    定理1:对于任意的一个连续分段线性函数g(v),我们可以找到两个凸的分段线性函数h1(v)、h2(v),使得这两个凸函数的差值为g(v):

    参考文献:

    1、《Maxout  Networks》

    2、http://www.cnblogs.com/tornadomeet/p/3428843.html

    原文地址http://blog.csdn.net/hjimce/article/details/50414467

    作者:hjimce

    展开全文
  • Maxout Networks

    2019-11-07 16:02:29
    我们定义了一个简单的新模型maxout(之所以这样命名,是因为它的输出是一组输入的最大值,而且它是dropout的一个自然伙伴),旨在促进dropout优化和提高dropout的快速近似模型平均技术的准确性。我们通过经验验证模型...

    摘要

    我们考虑的问题是如何设计模型来利用最近引入的近似模型平均技术(dropout)。我们定义了一个简单的新模型maxout(之所以这样命名,是因为它的输出是一组输入的最大值,而且它是dropout的一个自然伙伴),旨在促进dropout优化和提高dropout的快速近似模型平均技术的准确性。我们通过经验验证模型成功地完成了这两个任务。我们使用maxout和dropout来演示在四个基准数据集上的最新分类性能:MNIST、CIFAR-10、CIFAR-100和SVHN。

    1、简介

    Dropout提供了一种廉价而简单的方法,既可以训练大量共享参数的模型集合,又可以近似平均这些模型的预测。Dropout应用于多层感知器和深度卷积网络,提高了从音频分类到超大尺度目标识别等任务的技术水平。虽然dropout在实践中工作得很好,但它之前并没有被证明可以真正地为深层架构执行模型平均。Dropout通常被视为一种不加区分的适用工具,当应用于几乎任何模型时,它都能可靠地产生适度的性能改进。我们认为,与其使用dropout作为应用于任意模型的性能增强,不如直接设计一个模型来增强dropout作为模型平均技术的能力,从而获得最佳性能。使用dropout进行训练与以往的方法如普通的随机梯度下降法有很大的不同。当在参数空间中采取较大的步骤时,Dropout是最有效的。在这种情况下,每次更新都可以看作是对训练集的不同子集上的不同模型的重大更新。对于dropout来说,理想的操作机制是当整个训练过程类似于参数共享约束下的bagging集合。这与理想的随机梯度操作制度有很大的不同,在这种制度下,单个模型通过小步骤稳步前进。另一个考虑是,dropout模型平均只是一个近似值,当应用到深层模型。明确地设计模型来最小化这种近似误差,也可以提高dropout的性能。我们提出了一个简单的模型,我们称之为maxout,它具有优化和模型平均Dropout有益的特点。我们将此模型与dropout结合使用来设置四个基准数据集的最新状态。

    2、回顾Dropout

    Dropout是一种可以应用于确定性前馈架构的技术,它预测给定输入向量v的输出y。这些架构包含一系列的隐含层h = {h(1),…h (L)}。Dropout训练的整体模型的集合组成的模型包含变量的子集在v和h。同一组参数θ是用于参数化的分布p(y|v,\theta,\mu),其中M是一个二进制掩码决定哪些变量在模型中。在每个训练实例的演示中,我们通过p(y|v;\theta,\mu)随机采样不同的\mu。对于p的许多参数化(如最多层感知器),不同子模型的实例化p(y | v;θ,µ)可以通过使用mask对v和h进行逐元素乘积得到。Dropout训练类似于bagging,许多不同的模型在不同的数据子集上训练。Dropout训练不同于bagging,因为每个模型只训练一个步骤,所有模型共享参数。这个培训过程要表现得好像自己是一个整体而不是单个模型,每个更新都必须有巨大的影响,因此,它使被µ适合当前输入引起的v。

    当集合需要将所有子模型的预测平均起来进行预测时,函数形式就变得非常重要。以前的大多数工作都是用算术平均数来计算平均值,但是在许多指数型的模型中,如何用dropout来计算还不是很明显。幸运的是,一些模型族给出了一个便宜的几何平均值。当p(y | v;θ)= softmax (vTW + b),定义的预测分布的几何平均数重新归一化p (y | v;θ,µ)/ M只是由softmax (vTW / 2 + b)。换句话说,指数多个子模型的平均预测可以简单地通过运行权值除以2的完整模型来计算。这个结果完全适用于单层softmax模型。之前关于dropout的工作将相同的方案应用于更深层次的架构,例如多层感知器,其中W/2方法只是对几何平均值的近似。这种近似没有经过数学描述,但在实践中表现良好。

    3、Maxout的描述

    maxout模型只是一个前馈结构,如多层感知器或深度卷积神经网络,它使用一种新的激活函数:maxout单元。对于输入x\in R^d (x可以是v,也可以是隐层的状态),maxout隐层实现该函数:

                                                              

    其中z_{ij}=x^TW_{...ij}+b_{ij}W\in R^{d\times m \times k}b\in R^{m\times k}。在卷积网络中,取k个仿射特征图(即,池跨渠道,此外空间位置)。当使用Dropout进行训练时,我们使用Dropout掩码执行elementwise乘法,而在所有情况下,我们都是在对权值进行乘法之前执行的——我们不会将输入丢给max操作符。单个maxout单元可以解释为对任意凸函数进行分段线性逼近。Maxout网络不仅学习隐藏单元之间的关系,而且还学习每个隐藏单元的激活函数。有关其工作原理的图形描述,请参见图1。

                                  

    Maxout抛弃了传统激活功能设计的许多支柱。它产生的表示完全不是稀疏的(见图2),尽管梯度是高度稀疏的,并且dropout会在训练过程中人为地使有效的表示稀疏化。虽然maxout可能会学习在一边或另一边饱和,但这是一个度量为零的事件(因此它几乎从不从上面开始有界)。当很大一部分参数空间对应于下面有界的函数时,maxout完全不受约束地学习有界。Maxout几乎处处是局部线性的,而许多常用的激活函数都有显著的曲率。考虑到所有这些与标准实践的背离,maxout激活函数竟然能够正常工作似乎有些令人惊讶,但是我们发现它们非常健壮,并且很容易用dropout进行训练,并且实现了出色的性能。

    4、Maxout是一个通用的近似器

    带有足够隐藏单位的标准MLP是一个通用逼近器。类似地,maxout网络是通用逼近器。假设每个maxout单元可以有任意多个仿射分量,我们证明了只有两个隐藏单元的maxout模型可以任意逼近v∈Rn的任意连续函数。图3展示了证明的基本思想。考虑在Rn上由k个局部仿射区域组成的连续分段线性函数g(v)。

    命题4.1

    对于任意正整数m和n,存在两组n + 1维实值参数向量[W1j, b1j], j∈[1,k]和[W2j, b2j], j∈[1,k],使得:

                                          

    也就是说,任何连续的PWL函数都可以表示为两个凸PWL函数的差。证据见(Wang, 2004)。

    命题4.2

    根据Stone-Weierstrass近似定理,设C为紧支域C\subset R^n, f:C\rightarrow R为连续函数,\epsilon >0为任意正实数。然后存在一个连续的PWL函数g(取决于\epsilon),对于所有的v\in C|f(v)-g(v)|<\epsilon

    命题4.3

    普遍接近者定理。在紧支域C\subset R^n上,任何连续函数f都可以由带有两个maxout隐藏单元的maxout网络任意逼近。

                                          

    素描的证明:根据命题4.2,任何连续函数都可以由分段线性函数任意逼近。我们现在注意到,命题4.1中给出的分段线性函数的表示形式与一个包含两个隐藏单元h1(v)和h2(v)的maxout网络完全匹配,并且具有足够大的k来实现所需的近似程度。结合这些,我们得出结论:一个双隐单元maxout网络可以很好地逼近紧支域c上的任意连续函数f(v)。一般来说,对于\epsilon \rightarrow 0,我们有k→∞。

                                            

    5、基准结果

    我们在四个基准数据集上评估maxout模型,并在所有数据集上设置最新的状态。

                                   

                                 

    5.1、MNIST

    MNIST数据集由28×28像素的手写数字0-9灰度图像组成,包含6万个训练样本和1万个测试示例。对于MNIST任务的置换不变版本,只允许不知道数据的2D结构的方法。在这个任务中,我们训练了一个模型,它由两个紧密相连的maxout层和一个softmax层组成。我们使用dropout对模型进行正则化,并对每个权向量的范数施加约束。除了maxout单元,这是Hinton等人使用的相同架构。我们通过最小化包含最后10,000个训练示例的验证集的错误来选择超参数。为了充分利用整个训练集,我们在最小验证错误处记录了前50,000个示例的日志似然值。然后,我们继续对整个60,000个示例训练集进行训练,直到验证集日志似然值匹配这个数字。我们得到的测试集误差为0.94%,这是我们知道的最好的结果,不使用无监督的前训练。我们在表1中总结了关于排列不变MNIST的最佳发表结果。我们还考虑了不受排列不变性限制的MNIST数据集。在本例中,我们使用了三个卷积的maxout隐藏层(在maxout层的顶部使用空间最大池)和一个紧密连接的softmax层。由于Krizhevsky等人开发的极其快速的GPU卷积库devel,我们能够快速探索超参数空间。我们获得了0.45%的测试集错误率,这在这一类别中设置了一个新的技术状态。(通过对标准图像集的转换来扩展数据集,可以获得更好的MNIST结果)表2给出了一般MNIST数据集的最佳方法的总结。

    5.2、CIFAR-10

    CIFAR-10数据集由从10个类中抽取的32×32张彩色图像组成,分为50,000张训练图像和10,000张测试图像。我们使用全局对比归一化和ZCA白化对数据进行预处理。我们遵循与MNIST数据集类似的过程,只是做了一个更改。在MNIST上,我们找到了验证集错误方面的最佳训练周期数,然后记录训练集日志似然,并继续使用整个训练集进行训练,直到验证集对数似然达到这个值。在CIFAR-10中,以这种方式继续训练是不可行的,因为学习率的最终值非常小,验证集误差非常高。因此,在验证集的似然值与交叉验证的训练值匹配之前的训练将花费非常长的时间。相反,我们从零开始重新训练模型,并在新的可能性与旧的匹配时停止。我们的最佳模型由三个卷积maxout层、一个全连接maxout层和一个全连接softmax层组成。使用这种方法,我们得到了11.68%的测试集错误,这比目前的水平提高了两个百分点以上。(如果我们没有在验证集上进行训练,我们将获得13.2%的测试集错误,这也比以前的水平有所提高)。如果我们用平移和水平反射来补充数据,我们就可以得到这个任务的绝对状态,误差为9.35%。在这种情况下,再训练期间的可能性永远不会达到验证运行时的可能性,因此我们对与验证运行相同数量的epoch进行再训练。表3总结了CIFAR-10的最佳方法。

    5.3、CIFAR-100

    CIFAR-100数据集的大小和格式与CIFAR-10数据集相同,但包含100个类,每个类只有十分之一的标记示例。由于时间有限,我们没有在CIFAR-100上广泛交叉验证超参数,而是简单地应用超参数,我们发现在CIFAR-10上运行良好。我们得到了38.57%的测试集误差,这是最先进的。如果我们不使用整个训练集进行再训练,我们将获得41.48%的测试集错误,这也超过了当前的技术水平。表4总结了CIFAR-100上的最佳方法。

                                    

    5.4、街景屋子数

    SVHN数据集由谷歌Street View收集的房屋编号彩色图像组成。数据集有两种格式。我们考虑第二种格式,即每张图像的大小为32×32,任务是对图像中心的数字进行分类。其他数字可能会出现在它旁边,但必须忽略。在训练集有73257位,26032位在测试集和531131另外,不太困难的例子,作为一个额外的训练集建立一套验证,我们选择400个样本训练集的每个类和200年从额外的每个类的样本集。火车的剩余的数字和额外的集是用于培训。对于SVHN,我们根本没有在验证集上进行培训。我们只用它来寻找最佳超参数。我们采用与Zeiler & Fergus(2013)相同的方法进行局部对比归一化预处理。除此之外,我们采用了与MNIST相同的方法。我们的最佳模型由三个卷积的maxout隐藏层和一个密集连接的maxout层以及一个密集连接的softmax层组成。我们获得了2.47%的测试集错误率,这是目前的水平。表5提供了比较方法的摘要。

    6、和整流相比

    关于我们的结果,一个明显的问题是,我们是通过改进的预处理还是更大的模型来获得它们,而不是使用maxout。对于MNIST,我们没有使用预处理;对于SVHN,我们使用与Zeiler & Fergus相同的预处理。然而,在CIFAR数据集上,我们使用了一种新的预处理形式。因此,我们将maxout与在此数据集上以相同处理和不同模型大小运行的整流器进行比较。通过一个大型的交叉验证实验(见图6),我们发现maxout比整流器有明显的改进。我们还发现,我们的预处理和模型的大小改善整流器和dropout超过以前的状态的艺术结果。跨通道池是一种减少状态大小和参数数量的方法,需要在模型中有一定数量的过滤器。性能似乎与maxout的过滤器数量相关,但与整流器i的输出单元数量相关。整流单元从跨通道合用中获益不大。整流单元在没有跨通道池的情况下性能最好,但滤波器数量相同,这意味着整流器的状态大小和参数数量必须是maxout的k倍左右,才能获得接近maxout的泛化性能。

                                 

    7、模型平均

    在证明maxout网络是有效的模型之后,我们现在分析它们成功的原因。我们首先确定了maxout与dropout的近似模型平均技术高度兼容的原因。Hinton给出的通过将权重除以2来平均子模型的直观理由是,这对单层模型进行了精确的模型平均,即softmax回归。在此特性中,我们还发现,如果将模型扩展到多个线性层,则模型平均仍然是精确的。虽然这与单层具有相同的表示能力,但将权重表示为几个矩阵的乘积可能具有不同的归纳偏差。更重要的是,这表明dropout在更深层次的架构中做了精确的模型平均,前提是它们在每一层的输入空间中是局部线性的,通过应用不同的dropout掩模访问这些空间。我们认为,Dropout训练鼓励maxout单元在训练数据中出现的输入周围有大的线性区域。由于每个子模型都必须对输出进行良好的预测,因此每个单元都应该学习具有大致相同的激活,而不管删除哪个输入。在具有任意选择参数的maxout网络中,改变dropout掩码通常会将有效输入移动到足够远的地方,从而逃离干净输入周围的局部区域,其中隐藏的单元是线性的。更改dropout掩码可以频繁地更改输入映射到分段函数的哪一部分。经过训练的Maxout在每一个单元变化中可能具有最大滤波器的标识,而随着dropout掩码的变化,该标识相对较少。线性操作网络和max(·)可以很好地利用dropout的近似模型平均技术。许多常用的激活函数几乎到处都有显著的曲率。这些观察结果表明,对于包含这些激活函数的网络,dropout的近似模型平均值将不那么准确。为了验证这一点,我们将在MNIST和dropout上训练的最佳maxout模型与在MNIST和dropout上训练的双曲正切网络进行了比较。我们对每个模型的几个子集进行采样,并将这些采样模型的预测的几何平均值与使用权重除以2的dropout技术进行的预测进行比较。我们发现了dropout确实在进行模型平均的证据,甚至在多层网络中也是如此,而且它在maxout的情况下更准确。具体见图7、图8。

                                  

                                   

    8、优化

    maxout表现出色的第二个关键原因是它改进了辍学生的套袋式训练阶段。注意,第7节中激励使用maxout的参数也同样适用于经过矫正的线性单元。maxout和最大池在一组经过矫正的线性单元上的唯一区别是maxout在最大中不包含0。表面上看,这似乎是一个小的差异,但我们发现,包括这个常数0是非常有害的优化背景下的Dropout。例如,在MNIST上,MLP的最佳验证集错误是1.04%。如果我们在最大值中包含一个0,这个数字将上升到1.2%以上。我们认为,当训练与辍学,maxout更容易优化比矫正线性单位与跨渠道池。

    8.1、优化实验

    为了验证maxout的优化性能优于max合并整流线性单元,我们进行了两个实验。首先,我们通过在大型(600,000例)SVHN数据集上训练一个小的(两个隐藏的卷积层,k = 2和16个内核)模型来强调训练算法的优化能力。当使用整流器单元进行训练时,训练误差保持在7.3%。如果我们用maxout单元进行训练,我们会得到5.1%的训练误差。作为另一个优化压力测试,我们尝试在MNIST上训练非常深入和狭窄的模型,并发现maxout在增加深度时比合并整流器更好。详见图9。

                                       

    8.2、饱和

                                     

    使用dropout时的优化过程与使用普通随机梯度下降时的优化过程非常不同。SGD通常在学习率较小的情况下效果最好,从而导致目标函数平稳下降,而dropout在学习率较大的情况下效果最好,从而导致目标函数不断波动。Dropout迅速探索了许多不同的方向,并拒绝了那些恶化性能的方向,而SGD则缓慢而稳定地朝着最有希望的方向前进。我们发现,这些不同的操作制度导致不同的结果整流单位。当用SGD进行训练时,我们发现整流单元在0以下5%的时间饱和。当训练退出时,我们很少将单元初始化,但训练逐渐使单元的饱和率提高到60%。因为max(0,z)激活函数中的0是一个常数,这就阻止了梯度通过单元。在没有单位梯度的情况下,训练很难使这个单位重新活跃起来。Maxout不会遇到这个问题,因为梯度总是流经每个Maxout单元—即使Maxout单元为0,这个0也是参数的函数,并且可以对具有负激活的单元进行调整,以使其稍后再次变为正。图10说明了在训练时,有源整流单元的失活速率比无功单元的失活速率大,但是始终处于活动状态的maxout单元在每个方向上的正、负激活速率大致相同。我们假设较高的零点比例和转义困难会影响整流器相对于maxout的优化性能。为了验证这个假设,我们在MNIST上训练了两个mlp,每层都有两个隐藏层和1200个过滤器,每层5个。当我们在max pooling中包含一个常数0时,得到的训练模型并没有利用到第二层中17.6%的滤波器和第二层中39.2%的滤波器。一小部分过滤器通常取池中的最大值,其余时间的最大值为常数0。另一方面,Maxout只使用了2400个过滤器中的2个。在某些训练实例中,网络中每个maxout单元的每个滤波器都是最大的。所有的过滤器都已使用和调整。

    8.3、底层梯度和Bagging

    与SGD不同的是,dropout需要随着单位选择的改变而明显改变梯度。如果梯度相对于失步掩模近似恒定,则失步简化为SGD训练。在MNIST上对两种不同的mlp进行训练时,通过监测固定数据相对于漏出掩模的差异,我们验证了整流网络受到流向网络下层的梯度流减少的假设。maxout在平均训练步长上输出权值的梯度变化是maxout的1.4倍,而第一层权值的梯度变化是maxout的3.4倍。结合我们之前的结果,maxout允许训练更深的网络,这个更大的方差表明maxout更好地向下传播不同的信息到较低的层,并帮助dropout训练更好地类似于下层参数的套袋。整流网络,随着他们的梯度失去更多的饱和,可能导致辍学训练类似于一般的SGD接近网络的底部。

    9、结论

    我们提出了一个新的激活函数maxout,它特别适合用dropout进行训练,并且我们已经证明了一个普遍的近似定理。我们已经证明,在深层模型中,dropout可以很好地近似于模型平均。我们已经证明了maxout利用了这种模型平均行为,因为maxout单位的近似比tanh单位更精确。我们已经证明,优化在dropout环境中的行为与在纯SGD情况下非常不同。通过设计maxout梯度来避免诸如未能使用许多模型过滤器之类的缺陷,我们能够训练比使用整流单元更深入的网络。我们还展示了maxout将由于dropout掩码的不同选择而导致的梯度变化传播到网络的最低层,从而确保模型中的每个参数都能充分享受dropout的好处,并更忠实地模拟bagging训练。我们的方法在五个不同的基准测试任务上的最新表现,激发了进一步模型的设计,这些模型明确地打算在与模型平均的廉价近似相结合时表现良好。

    展开全文
  • Maxout 论文笔记

    千次阅读 2018-05-09 21:49:21
    MaxoutMaxout networks Maxout模型实际上是一种新型的激活函数。 maxout的思想其实和dropout有点像,都是多个不同训练模型的集成技术。 1.Dropout dropout由Hinton提出的一个网络正则技术。dropout通过对共享...
  • 对于后向传递,错误wrt输入的导数仅通过在正向传递中激活的特征图数组的单元传播(这是Maxout的导数)。 为确保此方法正常运行,将结果与Theano中的Maxout(名称为Featurepool图层)进行了比较,并确认工作正常。 ...
  • maxout论文阅读

    千次阅读 2017-09-04 23:50:39
    简介Maxout来自ICML2013,作者大名鼎鼎的GAN模型发明人Ian J,Goodfellow,这篇文章作者主要提出了maxout的激活函数,结合dropout在cifar10,100等数据集上取得了state of art 的效果。Review Dropoutdropout是指在...
  • Maxout Networks学习笔记

    2017-07-10 16:06:00
    Maxout Networks是Goodfellow等在ICML2013中提到的一种模型,作者将Maxout与Dropout相结合,在MNIST,CIFAR-10,CIFAR-100,SVHN数据集中取得了state of the art 的分类表现。 Maxout模型同多层感知器、深度卷积...
  • ReLU 和 MaxOut 网络

    2019-10-06 15:18:15
    MaxOut 网络4.1 与ReLU的关系4.2 可能训练处激活函数的样子4.3 MaxOut 的训练 1 sigmoid激活函数的不足之处 在网络结构非常深的情况下,由于梯度消失问题的存在,可能会导致靠近输入附近的隐藏层的权重变化较慢,...
  • 论文笔记:Maxout NetWorks

    2020-05-05 01:31:39
    maxout是Goodfellow设计的一种类似于dropout的网络结构,该网络结构可以更容易的被优化,并且效果也相当可观。 maxout模型通常是一个简单的前馈神经网络,可以用在多层感知机里,也也可以用在卷积神经网络里。 ...
  • 本篇blog内容基于Maxout Networks(Goodfellow, Yoshua Bengio, 2013)。在GAN很多应用中都用到了这个技巧。 全篇大部分转载自:Maxout Networks, 深度学习(二十三)Maxout网络学习 作者:hjimce  一、Dropout ...
  • 论文笔记_Maxout Networks

    2019-06-13 17:56:10
    描述maxout4. Maxout是一个通用的近似器5. 实验结构6. 与RELU进行对比7. 模型平均8.优化实验8.1优化实验8.2 饱和8.3 更低层的梯度和bagging9. 总结 摘要   本文考虑使用最近提出的一种近似模型平均技术–dropout。...
  • Maxout网络的剪枝,李映虹,高博扬,近年来,Maxout网络在计算机视觉和语音识别等领域均取得了很好的成果。与Dropout方法类似,Maxout网络通过对神经网络每层单元进行分组��
  • Maxout 是 Goodfellow 在 2013 年提出的一个新的激活函数,相比于其它的激活函数,Maxout 本身是需要参数的,参数可以通过网络的反向传播得到学习,相应地,它比其它激活函数有着更好的性能,理论上可以拟合任意凸...
  • Dropout,maxout,NIN

    千次阅读 2015-07-16 17:02:37
    假定maxout单元有很多仿射组元,具有两个隐含层节点的maxout模型可以拟合任意的 v ∈ R n v\in \mathbb R^n 的连续函数。该思路可有下图说明 Proposition 4.1 任意连续PWL函数可由两个凸函数之差表示: ...
  •   神经网络中使用激活函数来加入非线性因素,提高模型的表达...ReLU(Rectified Linear Unit,修正线性单元) 形式如下: ReLU公式近似推导:: 下面解释上述公式中的softplus,Noisy ReLU. softplus函数与ReLU...
  • 论文Maxout Networks实际上非常简单,只是发现一种新的激活函数(叫maxout)而已,跟relu有点类似,relu使用的max(x,0)是对每个通道的特征图的每一个单元执行的与0比较最大化操作,而maxout是对5个通道的特征图在...
  • 5. maxout 单元 6. logistic sigmoid 单元 7. 双曲正切单元 8. 径向基函数 9. softplus 函数 10. 硬双曲正切函数 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩...
  • 2.RELU 线性整流函数(Rectified Linear Unit, ReLU),又称修正线性单元,是一种人工神经网络中常用的激活函数(activation function),它函数表达式为: f(x)=max(0,x)f(x)=max(0,x)f(x)=max(0,x),图像长成这样...
  • ReLU(Rectified Linear Unit,修正线性单元) softplus函数与ReLU函数接近,但比较平滑, 同ReLU一样是单边抑制,有宽广的接受域(0,+inf), 但是由于指数运算,对数运算计算量大的原因,而不太被人使用.并且从一些人的...
  • 常用激活函数分析(ReLU, Swish, Maxout)

    千次阅读 2019-11-28 09:47:17
    尊重原创,著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。...ReLU(Rectified Linear Unit,修正线性单元) 形式如下: f(x)=⎧⎩⎨0,x,x≤0x>0(1)(1)f(x)={0,x≤0x,x&g...
  • ReLU Rectified Linear Unit(整流线性单元函数,又称修正线性单元) a={0z≥0a= \begin{cases} 0& \text{z≥0} \end{cases} a={0z​z≥0​ 跟sigmoid function比起来,选择ReLU的理由如下: 运算快 生物上的观察 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,105
精华内容 842
关键字:

maxout单元