**函数maxout


  maxout函数相对于其他的**函数有很大的区别,可以看做是在神经网络中**函数的地方加入一个**函数层。maxout可以看做是一个可学习的分段线性函数,因为可学习所以是需要参数的,而且参数是可以通过反向传播来学习的。因为参数量的增大,势必导致计算量的增大。
  传统的神经网络从第i层输入到第i+1层,只需要训练一组权重参数,这些参数决定了上一层输入到到达这一层之后进行的变换。但是maxout做的事情就是第i层到第i+1层之前我们多训练一些参数,对第i层的输出,我们将每个输出连接k个隐藏层,通过k个隐藏层的参数进行计算之后,然后把这k个隐藏层求最大值,作为最终的输出。

  这里我们给出maxout的计算公式。
**函数maxout
  ,使用maxout需要人为的设定一个参数k,这个参数k就是每个神经元输出之后接的虚拟隐藏层的个数。而权重参数W的维度是(d,m,k)(d,m,k)的,d代表的是输入节点的个数,m代表的则是输出层节点的个数。这也是之前神经网络第i+1层的参数设置。但是现在多出来一个维度k,就是为了产生中间的k个输出,然后将这k个输出再取一个最大值。
**函数maxout
  如上图,原本的神经网络只有输入的两个神经元x,输出的只有一个神经元hi(x)h_i(x),普通的神经元则是直接把x和hi(x)h_i(x)连接,现在相当于在两层之间又增加了k=5k=5个参数,然后输入先经过这个maxout的隐藏层得到输出,然后对输出取最大值,再输入到下一层当中。其中虚拟隐藏层的WWbb就是所需要学习的参数。可以看到,参数量的增大是针对每一个输出神经元增加k个的。
  普通的神经元配合**函数得到一组输出,经过了maxout将会得到k组输出,然后在k组之中取最大值。可见maxout非线性的拟合能力是更强的,因为参数更多,而且可学习。我们能想到relu(z)=max(0,z)relu(z)=max(0,z),而maxout也是取最大,如果我们能让一个虚拟神经元学习m(x)=xm(x)=x,一个虚拟神经元学习m(x)=0m(x)=0,然后两个神经元求最大就得到了relu**函数。可见这是k=2的情况,如果我们有更多的k,就可以学习更加负责的**函数,这就是maxout拟合能力更强的原因。事实上maxout可以拟合任意的凸函数。
  相比于ReLU,ReLU有的优点maxout有,是分段线性的,不容易梯度消失。同时ReLU没有的优点,maxout可能也有,比如神经元不会死亡。但是这些优点是通过计算量换来的,maxout的计算量非常大,我们已经解释过。
  这个**函数的实现没什么难的,就是在指定的维度上取最大值即可,但是为了得到能够得到这个要取最大值的维度的变量,往往需要在上一层的神经元上做手脚,需要增加参数量。原本是m维的输出通道数,现在需要变成k×m的数出通道。

系列文章:

神经网络中的**函数总述
sigmoid**函数
tanh**函数
ReLU系列**函数
maxout**函数

相关文章:

  • 2021-08-05
  • 2022-12-23
  • 2021-07-27
  • 2021-12-14
  • 2022-01-23
  • 2022-12-23
  • 2021-06-24
猜你喜欢
  • 2021-06-21
  • 2021-11-11
  • 2021-12-24
  • 2021-06-18
  • 2021-05-31
  • 2022-12-23
相关资源
相似解决方案