并不是所有使用神经网络的尝试都能够成功,这有许多原因。一些问题可以通过改进训练数据、初始权重、设计良好的输出方案来解决。
1.改进输入
对于S激活函数,可以发现, 如果输入变大, 激活函数就会变得非常平坦。
由于我们使用梯度学习新的权重, 因此一个平坦的激活函数会出问题。
权重的改变取决于激活函数的梯度。 小梯度意味着限制神经网络学习的能力。 这就是所谓的饱和神经网络。 这意味着, 我们应该尽量保持小的输入。 当计算机处理非常小或非常大的数字时, 可能会丧失精度, 因此, 使用非常小的值也会出现问题。
一个好的建议是重新调整输入值, 将其范围控制在0.0到1.0。 输入0会将oj 设置为0, 这样权重更新表达式就会等于0, 从而造成学习能力的丧失, 因此在某些情况下, 我们会将此输入加上一个小小的偏移, 如0.01,避免输入0带来麻烦。
2.改进输出
神经网络的输出是最后一层节点弹出的信号。 如果我们使用的激活函数不能生成大于1的值, 那么尝试将训练目标值设置为比较大的值就行不通了。逻辑函数甚至不能取到1.0 ,只能渐进于1。逻辑激活函数的输出值根本不可能大于1.0,也不可能小于0。
如果我们将目标值设置在这些不可能达到的范围, 训练网络将会驱使更大的权重, 以获得越来越大的输出, 而这些输出实际上是不可能由激活函数生成的。 这使得网络饱和 。
因此, 我们应该重新调整目标值, 匹配激活函数的可能输出, 注意避开激活函数不可能达到的值。
虽然, 常见的使用范围为0.0~1.0, 但是由于0.0和1.0这两个数也不可能是目标值, 并且有驱动产生过大的权重的风险, 因此一些人也使用0.01~0.99的范围。
3.改进随机初始权重
与输入和输出一样, 同样的道理也适用于初始权重的设置。 由于大的初始权重会造成大的信号传递给激活函数, 导致网络饱和, 从而降低网络学习到更好的权重的能力, 因此应该避免大的初始权重值。可以从-1.0~+1.0之间随机均匀地选择初始权重。
而我们又不希望权重破坏了精心调整输入信号的努力。 数学家所得到的经验规则是, 我们可以在一个节点传入链接数量平方根倒数的大致范围内随机采样, 初始化权重。 例如:
如果每个节点具有3条传入链接, 那么初始权重的范围应该在从-1/√3到+1/√3, 即±0.577之间。 如果每个节点具有100条传入链接, 那么权重的范围应该在-1/√100至 +1/√100, 即±0.1之间。 如果链接更多, 那么减小权重
的范围, 这个经验法则是有道理的。
注意:禁止将初始权重设定为相同的恒定值, 特别是禁止将初始权重设定为0。
如果这样做, 那么在网络中的每个节点都将接收到相同的信号值, 每个输出节点的输出值也是相同的, 在这种情况下, 如果我们在网络中通过反向传播误差更新权重, 误差必定得到平分。 这将导致同等量的权重更新, 再次出现另一组值相等的权重。 那么由于这种对称性,将永远得不到训练正确的网络。
对于0权重, 输入信号归零, 取决于输入信号的权重更新函数也因此归零, 这种情况更糟糕, 网络完全丧失了更新权重的能力。
关键点:
(1)一个常见的问题是饱和。 在这个时候, 大信号(这有时候是由大权重带来的) 导致了应用在信号上的激活函数的斜率变得非常平缓。 这降低了神经网络学习到更好权重的能力。
(2)另一个问题是零值信号或零值权重。 这也可以使网络丧失学习更好权重的能力。
到更好权重的能力。
(2)另一个问题是零值信号或零值权重。 这也可以使网络丧失学习更好权重的能力。
(3)还有一个问题是将初始权重设定为相同的恒定值。这将导致同等量的权重更新, 再次出现另一组值相等的权重,将永远得不到训练正确的网络。