热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

深度学习UFLDL教程翻译之BP算法

假设我们有一个固定由m个训练实例组成的训练集{(x(1),y(1)),…,(x(m),y(m))}.我们可以用批量梯度下降方法来训练我们的神经网络.细节上,对于一个训练实例(

        假设我们有一个固定由m个训练实例组成的训练集{(x(1),y(1)),…,(x(m),y(m))}.我们可以用批量梯度下降方法来训练我们的神经网络.细节上,对于一个训练实例(x,y),我们定义关于该实例的代价函数:


       这是平方误差(的一半)代价函数。给定m个实例的训练集,我们定义全局代价函数:


       第一项J(W,b)是平方误差和的平均项。第二项是正则化项(也称为权重衰减项),用来降低权重(占的)大小,可以防止过拟合。

       (注意:通常权重衰减不会应用在偏置项b(l),这一点在我们J(W,b)的定义中可以看出。然而,对偏置单元应用权重衰减通常只会对最终的网络产生很小的影响。如果你有上斯坦福CS229(机器学习)课程或者在YouTube看过视频课程,你还能意识到权重衰减实质上是贝叶斯正则化那些方法的一种变体,这种情况下我们会在参数上添加高斯先验并作最大后验估计(而不是最大似然估计)。

       权重衰减参数λ控制着两项的相对重要性。还要注意到这个稍微复杂的一项J(W,b;x,y)是对一个实例的平方误差代价;J(W,b)是全局的代价函数,还包括了权重衰落项。

       上面的代价函数通常用于分类和回归问题。在分类问题中,我们让y=0或1代表两个类标记(回忆sigmoid激活函数输出值在[0,1]区间。如果我们使用tanh激活函数,我们会使用-1和+1来表示标记)。在回归问题中,我们缩放我们的输出保证它们在[0,1]区间(或者如果我们在使用tanh激活函数,则是[-1,+1]区间。

       我们的目标是最小化W和b的函数J(W,b)。为了训练我们的神经网络,我们将初始化每个W(l)ij和b(l)到接近0的小随机数(比如符合标准正态分布(0,ϵ2),ϵ可以取些小值比如0.01),然后采取优化算法比如批量梯度下降。既然J(W,b)是非凸函数,梯度下降容易受局部最优解的影响;然而,实际中梯度下降法表现地非常好。最后,注意随机初始化参数是非常重要的,而不是全部设为0。如果所有的参数都从相同的值开始(训练),那么所有隐藏层单元会以学习相同输入函数结束(正式地说,W(1)ij对所有的i值都相等,因此对任意的输入x,a(2)1=a(2)2=a(2)3=…)。随机初始化达到了打破对称性的目的。

       梯度下降的一次迭代按如下更新W和b:


其中α是学习率。关键步骤是计算上面的偏导数。我们现在会介绍反向传播算法,它提供了一种高效的计算这些偏导数的方法。

我们首先介绍反向传播怎样能应用在计算∂J(W,b;x,y)/∂W(l)ij和J(W,b;x,y)/∂b(l)i,这些对于单个实例(x,y)定义的代价函数J(W,b;x,y)的偏导数。一旦我们能计算这些偏导数,我们发现全局代价函数J(W,b)的导数就能这么计算:


以上两行稍微有点差别因为权重衰减应用在W而不是b。

反向传播算法背后直观的理解如下。给定一个训练实例(x,y),我们首先进行前向传播计算网络的所有激活值,包括假设hW,b(x)的输出。然后,对于层l的每一个节点i,我们会计算一个误差项δi(l),衡量这个节点对输出的任何误差“负多大责任”。对于一个输出节点,我们可以直接衡量网络的激活值和真正的目标值的差距,并用于定义δi(nl)(nl层是输出层)。那么对隐藏单元而言呢?对于它们,我们将基于那些使用ai(l)作为输入的节点的加权平均的误差项计算δi(l)。具体而言,以下是反向传播算法:

1、 执行前馈传播,计算L2、L3层的激活值,一直到Lnl层。

2、 对于每个在nl层(输出层)的输出单元i,令


3、 对于l=nl−1,nl−2,nl−3,…,2层,对于每个在l层的输出单元i,令


4、 计算所需要的偏导数,如下:


最后,我们还可以使用矩阵向量形式重写算法。我们将使用”∙”表示逐元素的乘积操作(在Matlab和Octave中用”∙*”,也称为阿达玛积。因此如果a=b∙c,即表示ai=bici。类似我们扩展f(⋅)的定义应用在向量逐元素中,我们同样可以应用在f′(⋅)(因此有f′([z1,z2,z3])=[f′(z1),f′(z2),f′(z3)])。

然后,算法就能写为:

1、 执行前馈传播,使用定义前向传播步骤的等式计算L2、L3层的激活值,一直到Lnl层。

2、 对于输出层(nl层),令


3、 对于l=nl−1,nl−2,nl−3,…,2,令


4、 计算所需的偏导数:


实现注意:

在上面第2步和第3步中,我们需要对每个i计算f′(zi(l))。假设f(z)是sigmoid激活函数,我们已经通过网络前向传输存储了ai(l)的值。这样,使用我们为f′(z)早就计算好的表达式,我们可以计算f′(zi(l))=ai(l)(1−ai(l))。

最后,我们准备描述完整的梯度下降算法。在下面的伪代码中,ΔW(l)是一个矩阵(与W(l)维数相同),Δb(l)是一个向量(与b(l)维数相同)。注意到在这些符号中,ΔW(l)是一个矩阵,而尤其它不是指Δ乘以W(l)。按照如下,我们实现批量梯度下降的一次迭代:

1、 对所有l,令ΔW(l):=0 , Δb(l):=0(零矩阵/向量)。

2、 For i=1 to m,

1、 使用反向传播计算∇W(l)J(W,b;x,y)和∇ b(l)J(W,b;x,y)。

2、 令ΔW(l):=ΔW(l)+∇W(l)J(W,b;x,y)。

3、 令Δb(l):=Δb(l)+∇b(l)J(W,b;x,y)。

3、 更新参数:


为了训练我们的神经网络,我们现在可以重复地采用梯度下降的步骤来减小我们的代价函数J(W,b)。

 

补充:

练习:有监督的神经网络

       在这次练习中,你将训练一个神经网络分类器将MNIST数据集的10个数字分类。神经网络的输出单元和你在softmax练习中建立的softmax回归函数一样。只用softmax回归函数不能很好地匹配训练集,是欠拟合的一个例子。相比而言,神经网络有较低的偏差并能较好地匹配训练集。在多层神经网络一节中我们介绍了用平方误差函数,通过反向传播算法来计算网络中所有参数的梯度。在这次练习中,我们需要用到和softmax回归(交叉熵)一样的代价函数,而不是平方误差函数。

       代价函数于softmax回归代价函数几乎一样。注意到,不是通过输入数据x来做预测,而是softmax函数将网络的最后一层隐藏层hW,b(x)看作输入。损失函数是这样的:


代价函数的区别导致了输出层误差项的不同δ(nl)。对于交叉熵形式的代价函数,我们有


使用这式子,你就可以推到所有的反相传播算法来计算网络所有参数的梯度。


推荐阅读
  • 机器学习核心概念与技术
    本文系统梳理了机器学习的关键知识点,涵盖模型评估、正则化、线性模型、支持向量机、决策树及集成学习等内容,并深入探讨了各算法的原理和应用场景。 ... [详细]
  • 机器学习中的相似度度量与模型优化
    本文探讨了机器学习中常见的相似度度量方法,包括余弦相似度、欧氏距离和马氏距离,并详细介绍了如何通过选择合适的模型复杂度和正则化来提高模型的泛化能力。此外,文章还涵盖了模型评估的各种方法和指标,以及不同分类器的工作原理和应用场景。 ... [详细]
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • 吴恩达推出TensorFlow实践课程,Python基础即可入门,四个月掌握核心技能
    量子位报道,deeplearning.ai最新发布了TensorFlow实践课程,适合希望使用TensorFlow开发AI应用的学习者。该课程涵盖机器学习模型构建、图像识别、自然语言处理及时间序列预测等多个方面。 ... [详细]
  • 强人工智能时代,区块链的角色与前景
    随着强人工智能的崛起,区块链技术在新的技术生态中扮演着怎样的角色?本文探讨了区块链与强人工智能之间的互补关系及其在未来技术发展中的重要性。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 探索电路与系统的起源与发展
    本文回顾了电路与系统的发展历程,从电的早期发现到现代电子器件的应用。文章不仅涵盖了基础理论和关键发明,还探讨了这一学科对计算机、人工智能及物联网等领域的深远影响。 ... [详细]
  • 2017年人工智能领域的十大里程碑事件回顾
    随着2018年的临近,我们一同回顾过去一年中人工智能领域的重要进展。这一年,无论是政策层面的支持,还是技术上的突破,都显示了人工智能发展的迅猛势头。以下是精选的2017年人工智能领域最具影响力的事件。 ... [详细]
  • 浪潮AI服务器NF5488A5在MLPerf基准测试中刷新多项纪录
    近日,国际权威AI基准测试平台MLPerf发布了最新的推理测试结果,浪潮AI服务器NF5488A5在此次测试中创造了18项性能纪录,显著提升了数据中心AI推理性能。 ... [详细]
  • 本文探讨了图像标签的多种分类场景及其在以图搜图技术中的应用,涵盖了从基础理论到实际项目实施的全面解析。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 深入解析:手把手教你构建决策树算法
    本文详细介绍了机器学习中广泛应用的决策树算法,通过天气数据集的实例演示了ID3和CART算法的手动推导过程。文章长度约2000字,建议阅读时间5分钟。 ... [详细]
  • NVIDIA Titan RTX深度评测
    NVIDIA的Titan RTX被誉为当前最强大的桌面显卡之一,其卓越的性能和高昂的价格吸引了众多专业人士和技术爱好者的关注。本文将详细介绍Titan RTX的技术规格、性能表现及应用场景。 ... [详细]
  • 图像分类算法的优化策略与实践
    本文探讨了《Bag of Tricks for Image Classification with Convolutional Neural Networks》论文中的多项技术,旨在通过具体实例和实验验证,提高卷积神经网络在图像分类任务中的性能。文章详细介绍了从模型训练加速、网络结构调整到训练参数优化等多个方面的改进方法。 ... [详细]
author-avatar
轻梦云裳_904
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有