采用简单的3层MLP神经网络,例如this。每个隐藏层都实现y=xw+b
,其中y
是形状[batch_size, output_size]
的层的输出激活矩阵,x
是形状[batch_size, input_size]
的输入激活矩阵,{ {1}}是形状为w
的可训练权重矩阵,[input_size, output_size]
是形状为b
的可训练偏差矢量。
现在修改层定义,以便每个层实现[output_size]
,其中y = x(w mod m) + b
是类似于m
且形状与w
相同的可训练矩阵。由于tensorflow为反向传播实现了模函数的梯度,因此由于增加了模数而引起的梯度传播应该不是问题。在网络中进行这种相当琐碎的修改会破坏MLP,并且网络将完全停止学习。换句话说,对于MNIST(10位数字分类),准确度下降到〜10%,相当于随机猜测。
对于网络为何无法通过添加的w
运算符进行学习,会有人有任何猜测吗?我能够实现mod
,但效果很好。仅当将y=xw + (b mod m)
与mod
一起使用时,问题才出现。