多层感知机
Outline
传统的线性神经网络存在一个问题:不论增加任何数量的节点,最终效果等价于一个节点。本篇文章为这个问题提供了一个可能的解决方案:对于部分节点,使用非线性函数代替线性函数。
Method
1.ReLU函数(实际使用较多):只保留正数。
2.sigmoid函数:将值映射到0到1之间。
3.tanh函数:将值映射到-1到1之间。
使用方法(Gluon)
net = nn.Sequential() net.add(nn.Dense(256, activation='relu'),nn.Dense(256, activation='relu'),//新增了一个全连接层作为隐藏层,它的隐藏单元个数为256,并使用ReLU函数作为激活函数。 nn.Dense(10)) net.initialize(init.Normal(sigma=0.01))
效果
softmax的learning_rate设为0.1,mlp的learning_rate设为0.5。
softmax:最高85.9%
mlp:最高87%
Discussion
虽然采取了新的ReLU隐藏层,但实际效果没有想象中好。如果设置learning_rate为0.2,在训练200轮的情况下有机会达到0.9的测试集正确率。
如果调整softmax和mlp的learning_rate和训练轮数并收集不同参数的数据,能够得到更具说服力的实验结果。