热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

关于第5周反向传播算法的一些争论与思考

关于第5周反向传播算法的一些争论与思考第5周介绍了神经网络的反向传播算法。由于介绍得比较简要,很多地方没有讲透(众:Youcany


关于第5周反向传播算法的一些争论与思考                 

第5周介绍了神经网络的反向传播算法。由于介绍得比较简要,很多地方没有讲透(众:You can you up!),后来C站论坛里有几个网友开始争论其中的公式有点奇怪,究竟是讲错了还是另有原因(最后结论似乎应该是没讲错)。全程围观的耿先生记录了相关的一些要点。

背景:

反向传播算法就是说好比你有一个神经网络,输入层 -> 隐藏层 -> 输出层酱紫。我们现在把所有系数初始化,把训练集里的 x 都代入到输入层,经过层层计算最后得到一组输出值。这时候我们就可以和实际的值 y 作比较,计算cost函数。假设我们用的是逻辑回归来研究分类问题,那么cost函数就应该是:

(摘自课程维基页。下同)

学过前几周应该会知道这个公式是怎么来的。前半部分和前几周逻辑回归的cost函数区别在于多了一个 K。因为逻辑回归最后的结果是一个输出值,0 到 1 之间。而上述神经网络最后的结果是一排值,每一个都是 0 到 1 之间,所以多了一次求和。后半部分其实就是把所有的统统求平方加起来。

cost函数有了之后我们就可以使用梯度下降法,那么就需要计算梯度gradient。这就要用到反向传播算法了。简单来说就是,我们从最后的输出层的值(可以叫或者叫)开始,计算每一个值的值。这个值描述了当前的计算结果和实际结果 y 之间的偏差量error。

对于输出层,课程告诉我们,就等于。争论就发生在这里,我们下面会详细说是什么争论。现在先把背景知识介绍完。

对于其它层,则需要从后一层的,倒推前一层的。公式是:

这个公式体现了什么思想呢?我们说了表现了每一个结点的值与实际值之间的偏差。对于输出层看似很好理解,减一下得到的就是偏差。不过实际上这里面暗藏玄机。详见下文(此处为悬念1)。

而对于中间层,所谓“偏差”应该这么理解:对于后一层某一个结点上出现的偏差,前一层的每一个结点都要承担一部分责任,所以我们可以把后一层结点的偏差量按照系数比例分配给前一层的结点。同时,前一层的某一个结点,对后一层的每一个节点都承担着责任,那么它的“总责任”就是这些所有的小责任之和。如果你仔细想想这个矩阵乘法的计算过程,会发现正好就是上面说的这个责任分配与求和的过程。

但是后面乘的 g' 项是从哪里来的呢?我们先不说,详见下文(此处为悬念2)。我们只要知道,由于这里用的是逻辑回归,g(z)函数就是逻辑函数。g' 是指对它求导。求导之后我们会发现:,而根据定义又有,所以我们就把上式展开为:

这样我们就得到了每一层的。之后再用前一层的“每一个”结点的值 a,乘以后一层的“每一个”结点的,就得到了一个矩阵。写成公式是。这个矩阵的规模和前后两层之间的系数矩阵是一致的,因为它们都是由前一层的每一个结点指向后一层的每一个结点。这个矩阵有什么意义呢?实际上,前一层的结点 i 的值,乘以后一层结点 j 的,得到的就是cost函数对于的偏微分。为什么呢?详见下文(悬念3)。总之,这其实就是我们要求的梯度。

注意,上面这部分(从“简单来说就是……”那句话往后)是针对“一条”输入数据所进行的计算。而我们的训练集里通常有很多条,比如有 m 条数据。我们针对每一条都进行上述计算,最后把每一条的都累加起来再除以 m,得到的就是我们真正需要的梯度矩阵。然后就可以使用梯度下降法寻找最优了。

争议:

在C站课程论坛上,有人发了一个帖子,指出输出层的计算公式有问题。课程给出的公式是:

Andrew Ng在这里并没有详细解释这个计算公式是怎么来的。实际上它是cost函数求导求出来的,具体求法详见下文(悬念4)。该贴楼主和楼主的小伙伴认为Andrew Ng犯了一个错误,误将线性回归的cost函数用在了逻辑回归计算中。因为逻辑回归的cost函数是长最上面那个鬼样子。为了便于看清楚我们将它简化一下(忽略求和,忽略后半部分项):

对它求导后得到的应该是:

(注意。)

而只有线性回归的cost函数:

求导之后才能得到:

几位TA觉得他们说的好有道理无法反驳,只能不断地说我信任Prof Ng男神是不会错的!最后还是楼主的小伙伴自己发了个帖子指出了真正的问题出在哪里。

原来还是他们理解错了公式。并非简单地对cost函数求导就可以。它真正的计算方法是:详见下文(众:你去死吧!)……

真相:

问题的焦点集中在了真正的计算公式上面。维基百科“反向传播算法”页面给出了这个过程。我们下面来看看到底是怎么求的。我们之前留下的悬念1、2、3、4,也将一次性解决。

让我们回到我们的初心。这一切究竟是为了什么?啊!是为了求cost函数对于每一个的偏微分,也就是求:

(其中分母上的那坨东东是指:第 l 层的结点 i,指向其下一层也就是 l+1 层的结点 j 的系数。)

(评论中有人指出这里似乎 i 和 j 的意义弄反了。我查了一下似乎是反了,表示前一层结点的字母应该写在后面。如果第 l 层是结点 i,第 l+1 层是结点 j,的下标应该是 j,i 这样子。如果这里反了的话上面背景部分的倒数第二段估计也弄反了。如果你需要参考这篇文章里的公式,请留意一下这个问题。我暂时先不改了。)

再回顾一下我们计算输出值时的一些定义:

为了使用这些定义,我们可以将上面的偏微分式子展开为:

(此处使用技能:链式法则x2)

把求一次偏微分变成了求三次偏微分。

右边这三项,我们先看最后一项。根据定义我们知道:

所以:

JOB DONE...........33%

顺便说一句,右边前两项的乘积,就是课程里引入的值!这就回答了悬念 3 提出的问题:为什么得到后一层的值之后,要乘以前一层的 a 值来得到偏微分?答案是:因为它们分别是偏微分式子展开后的两个乘数。

接下来我们看第二项:这不就是对sigmoid函数求导吗?之前我们遇到过的g'(z),它的出处原来是这里!

我们经过计算后会得到这样一个式子:

恰好,算出来也是这个式子,所以我们就用后面这个更好算的式子来计算了。这就是计算公式的后半部分,的来源。

JOB DONE...........67%

现在来到第一项偏微分。对于中间层的结点,这个偏微分并不好算。(也能算,需要继续使用链式法则展开成更多的项!最后算出来就是上面计算公式的前半部分。)但是我们只想知道关于最后输出层的情况。那就简单多了!上面争议部分中,那位楼主的小伙伴已经给出了cost函数对于输出层求偏微分的结果:

JOB DONE...........100%

那么说到底输出层的到底等于多少?

等于前两项的乘积:

原来地球是这个样子滴……

结论:

Andrew Ng给的公式没有错。他只是把复杂的推倒,不是,推导过程省略了。但是这样一来容易产生误解。很多人以为输出层的偏差量就是计算值减实际值这么简单,其实是碰巧才这么简单的。还有很多人说为什么这个值和很多别的网站,包括维基百科上说的不一样啊?因为很多别的网站包括维基百科,cost函数用的是线性回归的那种,。它的偏微分就和逻辑回归的cost函数有差别了。具体地说,就差在分母的那一项上。

tl;nr:男神没搞错。微积分很复杂。而猫咪依旧是可爱的。


推荐阅读
  • 本文探讨了卷积神经网络(CNN)中感受野的概念及其与锚框(anchor box)的关系。感受野定义了特征图上每个像素点对应的输入图像区域大小,而锚框则是在每个像素中心生成的多个不同尺寸和宽高比的边界框。两者在目标检测任务中起到关键作用。 ... [详细]
  • 机器学习中的相似度度量与模型优化
    本文探讨了机器学习中常见的相似度度量方法,包括余弦相似度、欧氏距离和马氏距离,并详细介绍了如何通过选择合适的模型复杂度和正则化来提高模型的泛化能力。此外,文章还涵盖了模型评估的各种方法和指标,以及不同分类器的工作原理和应用场景。 ... [详细]
  • 探索电路与系统的起源与发展
    本文回顾了电路与系统的发展历程,从电的早期发现到现代电子器件的应用。文章不仅涵盖了基础理论和关键发明,还探讨了这一学科对计算机、人工智能及物联网等领域的深远影响。 ... [详细]
  • 智能车间调度研究进展
    本文综述了基于强化学习的智能车间调度策略,探讨了车间调度问题在资源有限条件下的优化方法。通过数学规划、智能算法和强化学习等手段,解决了作业车间、流水车间和加工车间中的静态与动态调度挑战。重点讨论了不同场景下的求解方法及其应用前景。 ... [详细]
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • 机器学习核心概念与技术
    本文系统梳理了机器学习的关键知识点,涵盖模型评估、正则化、线性模型、支持向量机、决策树及集成学习等内容,并深入探讨了各算法的原理和应用场景。 ... [详细]
  • 2017年人工智能领域的十大里程碑事件回顾
    随着2018年的临近,我们一同回顾过去一年中人工智能领域的重要进展。这一年,无论是政策层面的支持,还是技术上的突破,都显示了人工智能发展的迅猛势头。以下是精选的2017年人工智能领域最具影响力的事件。 ... [详细]
  • 本文档旨在帮助开发者回顾游戏开发中的人工智能技术,涵盖移动算法、群聚行为、路径规划、脚本AI、有限状态机、模糊逻辑、规则式AI、概率论与贝叶斯技术、神经网络及遗传算法等内容。 ... [详细]
  • 基于2-channelnetwork的图片相似度判别一、相关理论本篇博文主要讲解2015年CVPR的一篇关于图像相似度计算的文章:《LearningtoCompar ... [详细]
  • 在上一篇文章中,我们初步探讨了神经网络的基础概念,并通过一个简单的例子——将摄氏度转换为华氏度——介绍了单个神经元的工作原理。本文将继续探索神经网络的应用,特别是如何构建一个基本的分类器。 ... [详细]
  • 在Ubuntu 16.04中使用Anaconda安装TensorFlow
    本文详细介绍了如何在Ubuntu 16.04系统上通过Anaconda环境管理工具安装TensorFlow。首先,需要下载并安装Anaconda,然后配置环境变量以确保系统能够识别Anaconda命令。接着,创建一个特定的Python环境用于安装TensorFlow,并通过指定的镜像源加速安装过程。最后,通过一个简单的线性回归示例验证TensorFlow的安装是否成功。 ... [详细]
  • 李宏毅机器学习笔记:无监督学习之线性方法
    无监督学习主要涵盖两大类别:一是聚类与降维,旨在简化数据结构;二是生成模型,用于从编码生成新的数据样本。本文深入探讨了这些技术的具体应用和理论基础。 ... [详细]
  • 本文探讨了亚马逊Go如何通过技术创新推动零售业的发展,以及面临的市场和隐私挑战。同时,介绍了亚马逊最新的‘刷手支付’技术及其潜在影响。 ... [详细]
  • 利用Java与Tesseract-OCR实现数字识别
    本文深入探讨了如何利用Java语言结合Tesseract-OCR技术来实现图像中的数字识别功能,旨在为开发者提供详细的指导和实践案例。 ... [详细]
  • 目标检测之Loss:softmaxLoss和Cross Entropy的讲解
    最大似然估计:就是什么样的参数才能使我们观测的这组数据的概率最大化.;我们知道卷积神经网络(CNN)在图像领域的应用已经非常广泛了,一般一个CNN网络主要包含卷积层,池化层(poolin ... [详细]
author-avatar
实圪垯电动乐园_855
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有