比方说,我有一个具有n
个输入和n
层的神经网络(是的,这个模型很深),每个层都有n
个神经元。每层具有相同数量的神经元,并且稀疏连接。在最后一层,每个神经元的激活被汇集到最终的标量损失中。
现在让我们说,我不仅要合并最后一层,还要合并中间层并计算中间损失。我当然可以通过我的神经网络运行n
backprops。但是,如果单个反向执行程序的成本为O(n)
时间,则这将导致O(n²)
算法-当n
大时效果不佳。尽管如此,在这种情况下,一遍又一遍地计算了许多正在计算的中间导数,这表明也许有一种更有效的方法。
天真的,我认为更有效的方法是前向累积-在每一层,使用累积的雅可比矩阵,单个矢量矩阵乘积可能会产生损失。但是,在此算法中,会累积潜在的中间导数矩阵,这也可能导致昂贵的O(n²)
(或更糟)算法。
有什么办法可以做到两全其美吗?有没有办法在接近线性时间的地方使这个潜在的深层神经网络的每一层产生损失?