Google的神经网络算法模拟
二分类问题
激活函数使用线性函数linear,学习率为0.03
noise设置为20,避免为理想情况。
不使用隐藏层,而且就两个特征项。
可以看到模型训练良好
异或问题
线性激活函数
如果还是用线性的激活函数,则会出现下面的情况
如果要采用线性神经网络解决异或问题,就在输入引入非线性项
如果抖动太大则是学习率太高。
梯度下降法会使得误差越来越小,但是不会直接到最小值,会在最小值的两边左右横跳。调小学习率即可。
可以看到模型训练良好
BP学习算法
就需要引入隐藏层,这里我们引入5个隐藏层。将激活函数改为Sigmoid函数
其中小点代表偏置值。
换一个数据集
也能得到较好的效果。
Sigmoid激活函数在隐藏层较多的时候,会使模型学习的效率变低。
因此我们在隐藏层较多的时候使用双曲正切函数Tanh激活函数
过拟合问题
我们在用训练数据得到一个很好的训练模型之后,再用测试数据来测试的时候,得不到一个较好的测试结果。
要解决过拟合,可以加入正则项
这样会使很多权值都近等于0
复杂数据集
对于较复杂的数据集,我们就需要多个神经元去拟合模型。
下面是在不同神经元下,分别测试的结果。(最后的数据测试结果都已趋于稳定)