对于我的高级算法和数据结构课程,我的教授要求我们选择任何感兴趣的主题。他还告诉我们要进行研究,并尝试在其中实现解决方案。我选择了神经网络,因为这是我想学习很长时间的东西。
我已经能够使用神经元使用阶跃函数作为激活器来实现AND、OR和XOR。之后,我尝试实现一个反向传播神经网络,它可以学习识别XOR运算符(使用sigmoid函数作为激活器)。通过使用一个3-3-1网络(输入和隐藏层中各有1个偏置,权重随机初始化),我成功地让它在90%的时间内工作。其他时候,它似乎会陷入局部最小值,但我不确定(我之前问过这个问题,有人告诉我不应该有局部最小值)。
当它正常工作的90%的时间里,我一直按照以下顺序呈现我的输入:
然后我实现了训练集的随机化,所以这次输入的顺序已经足够随机了。我注意到我的神经网络会卡住,错误率在以非常小的速度下降(每个时期都在减小)。过一段时间,误差开始围绕一个值振荡(因此误差停止下降)。
我对这个主题是个新手,目前所知道的一切都是自学的(阅读教程、论文等)。为什么呈现输入的顺序会改变我的网络行为?是因为从一个输入到下一个输入的误差变化是一致的(因为顺序是一致的),这使得网络很容易学习吗?
我该怎么办才能解决这个问题?我正在查看我的反向传播算法,以确保我已经正确地实现它;目前,它是使用学习率和动量实现的。我正在考虑查看其他增强功能,如自适应学习率。但是,XOR网络通常被描述为非常简单的网络,因此我认为我不需要使用复杂的反向传播算法。
我已经能够使用神经元使用阶跃函数作为激活器来实现AND、OR和XOR。之后,我尝试实现一个反向传播神经网络,它可以学习识别XOR运算符(使用sigmoid函数作为激活器)。通过使用一个3-3-1网络(输入和隐藏层中各有1个偏置,权重随机初始化),我成功地让它在90%的时间内工作。其他时候,它似乎会陷入局部最小值,但我不确定(我之前问过这个问题,有人告诉我不应该有局部最小值)。
当它正常工作的90%的时间里,我一直按照以下顺序呈现我的输入:
[0, 0],[0, 1],[1, 0],[1, 0]
,期望输出设置为[0, 1, 1, 0]
。当我始终按相同的顺序呈现值时,网络最终学习到该模式。实际上,发送的顺序并不重要,只要每次时相同的顺序即可。然后我实现了训练集的随机化,所以这次输入的顺序已经足够随机了。我注意到我的神经网络会卡住,错误率在以非常小的速度下降(每个时期都在减小)。过一段时间,误差开始围绕一个值振荡(因此误差停止下降)。
我对这个主题是个新手,目前所知道的一切都是自学的(阅读教程、论文等)。为什么呈现输入的顺序会改变我的网络行为?是因为从一个输入到下一个输入的误差变化是一致的(因为顺序是一致的),这使得网络很容易学习吗?
我该怎么办才能解决这个问题?我正在查看我的反向传播算法,以确保我已经正确地实现它;目前,它是使用学习率和动量实现的。我正在考虑查看其他增强功能,如自适应学习率。但是,XOR网络通常被描述为非常简单的网络,因此我认为我不需要使用复杂的反向传播算法。