查看: 484|回复: 0

[机器学习] 反向传导算法

[复制链接]

146

主题

3

听众

1503

积分

助理设计师

Rank: 4

纳金币
1422
精华
4
发表于 2018-6-7 10:35:50 |显示全部楼层
假设我们有一个固定样本集 b449e6d375809abbc4097d2c55e9f8c0.png
,它包含 25e97e8a905fc2cb05d76cd4872a8567.png
个样例。我们可以用批量梯度下降法来求解神经网络。具体来讲,对于单个样例 0dc6f65ba6022a9a2f5ce13473eb35e8.png
,其代价函数为:

029cdd402b83ee43c7e9a900dccd675a.png

这是一个(二分之一的)方差代价函数。给定一个包含 个样例的数据集,我们可以定义整体代价函数为:

4539f5f00edca977011089b902670513.png

以上关于 8e94ae776ae14b36b3af183726ababb9.png
定义中的第一项是一个均方差项。第二项是一个规则化项(也叫权重衰减项),其目的是减小权重的幅度,防止过度拟合。

[注:通常权重衰减的计算并不使用偏置项 4c786c16575b63bbb554254725b6b648.png
,比如我们在 的定义中就没有使用。一般来说,将偏置项包含在权重衰减项中只会对最终的神经网络产生很小的影响。如果你在斯坦福选修过CS229(机器学习)课程,或者在YouTube上看过课程视频,你会发现这个权重衰减实际上是课上提到的贝叶斯规则化方法的变种。在贝叶斯规则化方法中,我们将高斯先验概率引入到参数中计算MAP(极大后验)估计(而不是极大似然估计)。]

权重衰减参数 ddf8905bd6bfeba5cfd2936466d4139e.png
用于控制公式中两项的相对重要性。在此重申一下这两个复杂函数的含义: 67b844ee86f32de53bab325b8a76a94f.png
是针对单个样例计算得到的方差代价函数; 是整体样本代价函数,它包含权重衰减项。

以上的代价函数经常被用于分类和回归问题。在分类问题中,我们用 b52c56aff08fc87a9ce5b9439200906c.png
6e924e04b5c9d4c5be131609a038b821.png
,来代表两种类型的标签(回想一下,这是因为 sigmoid激活函数的值域为 84235d31ac83fe764546463aba7acc0e.png
;如果我们使用双曲正切型激活函数,那么应该选用 0fa78f9ce83744e1651c9d729c2d19b6.png
dcb8dd3d14a2c0aa9b06ec6ce4ec0d59.png
作为标签)。对于回归问题,我们首先要变换输出值域(译者注:也就是 c81e76c28ed991b22b8c1bb8fa392701.png
),以保证其范围为 (同样地,如果我们使用双曲正切型激活函数,要使输出值域为 85a1c5a07f21a9eebbfb1dca380f8d38.png
)。

我们的目标是针对参数 8c9cb254a5e388f2bcaf294e52d745a6.png
5254b90d248051980262672a1bbc2433.png
来求其函数 的最小值。为了求解神经网络,我们需要将每一个参数 dfe43c64e3c42ea4ff1774fc82b87805.png
和 初始化为一个很小的、接近零的随机值(比如说,使用正态分布 b19e677536c9c7b9da542e4d36c07001.png
生成的随机值,其中 a8eae7b5e90c024c40de690158e0e6b1.png
设置为 60ec211aca4ac585f1c0ef4de8e08f39.png
),之后对目标函数使用诸如批量梯度下降法的最优化算法。因为 是一个非凸函数,梯度下降法很可能会收敛到局部最优解;但是在实际应用中,梯度下降法通常能得到令人满意的结果。最后,需要再次强调的是,要将参数进行随机初始化,而不是全部置为 96f7362eaaa825744141afe4d5c2d340.png
。如果所有参数都用相同的值作为初始值,那么所有隐藏层单元最终会得到与输入值有关的、相同的函数(也就是说,对于所有 0b36ee693126b34b58f77dba7ed23987.png
82d79561e2994ccba3e4fe2cc4d527e5.png
都会取相同的值,那么对于任何输入 f6c0f8758a1eb9c99c0bbe309ff2c5a5.png
都会有: 3aa55fedae234afd387a314144cd6b32.png
)。随机初始化的目的是使对称失效

梯度下降法中每一次迭代都按照如下公式对参数 和 进行更新:

6fe7c74511cd6d49a4c9cb6de2afdc33.png

其中 7eaa466003e48c1c96824a2edf3de038.png
是学习速率。其中关键步骤是计算偏导数。我们现在来讲一下反向传播算法,它是计算偏导数的一种有效方法。

我们首先来讲一下如何使用反向传播算法来计算 5fb8e62e296ad365a076617b04d66d03.png
ca49d387f9ead91008f9688b3880e91b.png
,这两项是单个样例 的代价函数 的偏导数。一旦我们求出该偏导数,就可以推导出整体代价函数 的偏导数:


93367cceb154c392aa7f3e0f5684a495.png

以上两行公式稍有不同,第一行比第二行多出一项,是因为权重衰减是作用于 而不是 。

反向传播算法的思路如下:给定一个样例 ,我们首先进行“前向传导”运算,计算出网络中所有的激活值,包括 58d3a4fe4ad68b333b180071dd46db82.png
的输出值。之后,针对第 ba0593b3db2fa8535b077516f4b0d70b.png
层的每一个节点 ,我们计算出其“残差” 585c0367cc7e9eb2cc244888c503e04e.png
,该残差表明了该节点对最终输出值的残差产生了多少影响。对于最终的输出节点,我们可以直接算出网络产生的激活值与实际值之间的差距,我们将这个差距定义为 ee873581c1e0d83e6e235f3240671f67.png
  (第 5b7a0657fdea25f29866c8e1d6e884ac.png
层表示输出层)。对于隐藏单元我们如何处理呢?我们将基于节点(译者注:第 9068105ec8ebb97277c937bfa61b606d.png
层节点)残差的加权平均值计算 ,这些节点以 c9b144e0a6735fafb01b3615a2a0dc05.png
作为输入。下面将给出反向传导算法的细节:


  • 进行前馈传导计算,利用前向传导公式,得到 a2ec4c7c0fce868f4b5275e8ce307469.png
    直到输出层 221a7296664022427d488fdb9b14b19b.png
    的激活值。
  • 对于第 层(输出层)的每个输出单元 ,我们根据以下公式计算残差: 57a203683fc9c009c41ff97c1e1f6f54.png
    [译者注: 0b057858cd01020adb2c41cd8a586049.png
    ]
  • dc5396666d7679f1dae597dbc1a8ff5d.png
    的各个层,第 层的第 个节点的残差计算方法如下: 20f9979d6a46e7bca83f217bdfead4f0.png
    {译者注: 701c8dc8dbd71013c6a4110a1cb4f6f7.png
    将上式中的 4f6cfb751715090b0493154e4b912097.png
    与的关系替换为与的关系,就可以得到: 以上逐次从后向前求导的过程即为“反向传导”的本意所在。]
  • 计算我们需要的偏导数,计算方法如下: 21db5874b1c1c14bcb675e9961dac9cb.png



最后,我们用矩阵-向量表示法重写以上算法。我们使用“ 9937b108a65d2d09961c23259e819e31.png
” 表示向量乘积运算符(在Matlab或Octave里用“.*”表示,也称作阿达马乘积)。若 b1362783e5c1d9d1e627ca2a91b04f28.png
,则 14b4e060883883de874d0ebf1ab758d3.png
。在上一个教程中我们扩展了 0303dd697c0e1b72185d7939f9870784.png
的定义,使其包含向量运算,这里我们也对偏导数 fedde117b610fc785ad71db67e618ab2.png
也做了同样的处理(于是又有 c7515c53b59e670ceee277e06c1229cb.png
)。

那么,反向传播算法可表示为以下几个步骤:

  • 进行前馈传导计算,利用前向传导公式,得到 直到输出层 的激活值。
  • 对输出层(第 层),计算: 0ea6bda6255f544dca0bfa80d622f382.png
  • 对于 的各层,计算: 7d5660d4a911ecb84113c436f82b1109.png
  • 计算最终需要的偏导数值: 5391ac390a4e279ac8a543d4d5498ecc.png



实现中应注意:在以上的第2步和第3步中,我们需要为每一个 值计算其 f745dea1a82d8cd64aa6b92466e3bbc5.png
。假设 5d1c55e9d6b297473de425651557d4fc.png
是sigmoid函数,并且我们已经在前向传导运算中得到了 。那么,使用我们早先推导出的 a5f7d3f914f4e383ce51e4998592caee.png
表达式,就可以计算得到 d4d5e09ac8e035283671cc03d942f955.png

最后,我们将对梯度下降算法做个全面总结。在下面的伪代码中, 6c600894179e37800af01a5795be30b8.png
是一个与矩阵 f8f8834256f511d88fec05e3b27c67b1.png
维度相同的矩阵, e580f95036a0ccb35019a866cb10191f.png
是一个与 8c2936afffcaf9eeabf8837d501ddb9d.png
维度相同的向量。注意这里“”是一个矩阵,而不是“ 529ca30eb74564461bc8e0e7d7864e95.png
与 相乘”。下面,我们实现批量梯度下降法中的一次迭代:


  • 对于所有 ,令 3650852a6b08d261b08a5f4f324fe3a0.png
    ,   75bf8778e859c31930f7629fe5eab821.png
    (设置为全零矩阵或全零向量)
  • 对于 2964cb4e8851d521d24364f0d409a51d.png
    到 ,
    • 使用反向传播算法计算 d21ff7e7308c9fd8c428fd926f671a39.png
      fed489077fe3753c894638d131c0b442.png
    • 计算 50bd90d031437ba98debea738afad0a2.png
    • 计算 3abc7162b757ceac7bdb8f0c4555fe8e.png

  • 更新权重参数: 0f7430e97ec4df1bfc56357d1485405f.png


现在,我们可以重复梯度下降法的迭代步骤来减小代价函数 的值,进而求解我们的神经网络。


中英文对照

反向传播算法        Backpropagation Algorithm(批量)梯度下降法        (batch) gradient descent(整体)代价函数        (overall) cost function方差        squared-error均方差        average sum-of-squares error规则化项        regularization term权重衰减        weight decay偏置项        bias terms贝叶斯规则化方法        Bayesian regularization method高斯先验概率        Gaussian prior极大后验估计        MAP极大似然估计        maximum likelihood estimation激活函数        activation function双曲正切函数        tanh function非凸函数        non-convex function隐藏层单元        hidden (layer) units对称失效         symmetry breaking学习速率        learning rate前向传导        forward pass假设值        hypothesis 残差        error term加权平均值        weighted average 前馈传导        feedforward pass阿达马乘积        Hadamard product前向传播        forward propagation



中文译者

王方(fangkey@gmail.com),林锋(xlfg@yeah.net),许利杰(csxulijie@gmail.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号  

GMT+8, 2019-8-19 13:23 , Processed in 0.166952 second(s), 19 queries , Redis On.

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部