权重W
是一个大小为(d,m,k)
三维矩阵,b
是一个大小为(m,k)
的二维矩阵,这两个就是我们需要学习的参数。而这个k
就是我们同时训练的参数组数。本来传统的人工神经网络,第i
层到第i+1
层只有一组参数(k=1
),但是现在,我们同时训练k
组参数,然后选择激活值最大的作为输出。
以前的做法是,z=W*X+b
,然后out=f(z)
,f
就是我们通常讲的激活函数,比如Sigmoid、tanh。
而在Maxout里面,相当于在每个输出神经元前面又加了一层,相当于对输入变量线性组合后的结果并不直接送到输出神经元里面,而是相当于新加了一个『隐隐层』,这个『隐隐层』有k
个神经元,这个k
就是Maxout里面的那个参数k
,然后前面线性组合的结果就分别送到这k
个神经元里面,分别进行计算(比如k
等于5):
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)
作为输出,同时训练k
组参数,这就是Maxout。
Maxout激活函数的图像如下:
我们可以看到k=2
时第一个图像就是ReLU的函数图像。按我的理解,ReLU就是Maxout的k=2
,然后在隐隐层放了一个z=0
的神经元。
自适应学习速率
上篇文章讲梯度下降时提到过学习速率η
,它对训练效果也起到很重要的影响,如果η
过大,那每次更新后,总误差可能并不会缩小;而如果η
过小,那训练速度又会变得相当慢。所以我们很自然的有这样的想法,学习速率η
不应该是一直不变的,我们希望这个学习速率η
能够随着每次epoch而减小。