更新权重
学习如何通过更新权重来减少误差。
基于误差控制的权重更新
我们尚未讨论神经网络中连接权重更新的核心问题。虽然我们一直在为这一目标做铺垫,但还差最后一个关键思想,就能揭开这个秘密。
到目前为止,我们已经将误差逐层反向传播回网络的每一层。为什么要这样做?因为这些误差可用于指导我们如何调整连接权重,从而提升神经网络整体输出的准确性。这其实与本课程开始时我们对线性分类器所做的操作类似。
但这些节点不再是简单的线性分类器。这些更复杂的节点会对接收到的加权信号求和,并应用S型激活函数(sigmoid)进行非线性变换。那么,面对这种更复杂的节点结构,我们究竟该如何更新它们之间连接的权重呢?为什么不能用复杂的代数方法直接算出正确的权重值?
我们无法直接计算出最优权重,是因为其中涉及的数学过程极为复杂。当信号在网络中前向传播时,大量权重组合叠加在一起,形成多层嵌套的函数关系,导致解析求解变得不可行。试想一个仅有三层、每层三个神经元的小型神经网络(如我们之前的例子),如果我们希望将第一个输入节点与第二个隐藏节点之间的连接权重进行调整,使得第三个输出节点的输出值增加0.5,这个调整该如何精确计算?即使我们侥幸找到了某个有效调整,这种效果也可能在后续调整其他权重以优化不同输出节点时被破坏。由此可见,这类问题远非简单的数学运算可以解决。
为了更直观地理解其复杂性,请看下面这个表达式:它表示在一个简单的三层神经网络(每层三个节点)中,某个输出节点的输出值作为输入和连接权重的函数形式。设第 个输入节点的输入为 ,从输入节点 到隐藏节点 的连接权重为 ;隐藏节点 的输出为 ,从隐藏节点 到输出节点 的连接权重为 。符号 表示对从 到 的所有取值求和。
穷举法(暴力搜索)
我们是否可以尝试随机组合不同的权重,直到找到一组合适的结果?当面对难题时,这并不总是一个糟糕的想法。这种方法被称为穷举法(brute-force method)。有些人使用穷举法来破解密码——如果密码是英文单词且长度不长,这种方法可能奏效,因为可尝试的组合数量有限,现代家用计算机可以在较短时间内遍历所有可能性。
然而,设想每个权重在 -1 到 +1 之间有 1000 种可能的取值,例如 0.501、-0.203 或 0.999。对于一个三层神经网络,每层三个节点,共有 18 个权重,就需要测试 18,000 种组合。如果是一个更典型的网络结构,每层包含 500 个节点,则需要测试的权重组合将达到五亿种之多。即便每次组合的计算仅需一秒钟,仅完成一次训练样本的权重更新就要耗时约 16 年。如果有 1000 个训练样本,总时间将高达 16,000 年!显然,这种方法完全不具备可行性。