吴恩达《机器学习》学习笔记十——神经网络相关(2)

吴恩达《机器学习》学习笔记十——神经网络相关(2)

  • 一、 代价函数
  • 二、 反向传播算法
  • 三、 理解反向传播算法
  • 四、 梯度检测
  • 五、 随机初始化
    • 1.全部初始化为0的问题
    • 2.随机初始化的思想
  • 六、 神经网络算法整体流程
    • 1.选择网络具体架构
    • 2.训练神经网络

课程链接: https://www.bilibili.com/video/BV164411b7dx?from=search&seid=5329376196520099118

上次笔记从非线性假设的问题引入,强调了通过特征映射使线性回归、逻辑回归模型解决非线性问题是不科学的,当初始特征空间比较大时,特征映射之后的特征空间将会非常庞大,非常浪费计算。

从而开始介绍神经网络的历史、结构和工作原理。这次笔记将继续上次内容,对神经网络的反向传播算法进行学习,该算法结合梯度下降算法可以根据给定数据集对参数进行优化。

一、 代价函数

考虑神经网络解决多分类问题:
在这里插入图片描述
数据集为:
在这里插入图片描述
定义L为网络的层数,sl为第l层神经元的个数,上图中L=4。

分类问题包括两种:二分类与多分类:
在这里插入图片描述
二分类的标签只有0/1,而且只需要一个输出神经元;而多分类(K类)的标签可以被表示成one-hot形式,如上图中[1 0 0 0]这样,K分类就需要K个输出神经元。

神经网络的代价函数是逻辑回归代价函数的一般形式,将一个分类器的代价函数推广到了多个,如下图所示:
在这里插入图片描述

二、 反向传播算法

这个算法是用来根据数据集优化参数的,过程中需要对代价函数求偏导:
在这里插入图片描述
先来看一个数据样本的例子:
在这里插入图片描述
前向传播的计算过程图中已经展示,该过程可以计算每一个神经元的激活值。

前向传播计算完之后,才需要进行反向传播,反向传播算法从直观上说,就是需要对除输入层之外的每一个神经元计算一个误差δ_j ^ (l)(表示第l层第j个节点的误差),已知a_j ^ (l)表示第l层第j个节点的激活值,这个δ_j ^ (l)在某种程度上就是这个节点的激活值的误差,所以我们希望这个节点的激活值稍微有所改变。具体来说,以下面这个四层的网络为例:
在这里插入图片描述
既然被称为反向传播,那么自然要从输出层开始计算误差,输出层的误差计算如下:
在这里插入图片描述
用向量表示的话,就是δ ^ (4)=a ^ (4) - y。然后用计算出来的δ ^ (4)去反向计算第三层的误差δ ^ (3),再用δ ^ (3)去计算δ ^ (2),因为第一层就是输入层,它的值是确定的,没有误差,所以不需要计算δ ^ (1),第二层、第三层的计算公式如图中所示。

再从头理一下反向传播算法:
数据集如下所示:

在这里插入图片描述
(1) 初始化误差矩阵:(∆是δ的大写形式)
在这里插入图片描述
这个误差后面将用来计算代价函数的偏导数。

(2) 然后是前向传播的计算以及反向传播求误差:
在这里插入图片描述
先将输入层的值传给a(1),然后前向计算各神经元的激活值,前向计算完毕之后,从输出层开始,反向计算各层的误差。

(3) 计算D,从而计算代价函数偏导数的值:
在这里插入图片描述
计算出偏导数之后,就可以用梯度下降算法或其他高级优化算法去优化参数值,所以反向传播算法的作用就是求出偏导数

三、 理解反向传播算法

先看一下前向传播的过程:
在这里插入图片描述
假设只有一个样本一个输出单元,且不考虑正则化,,那么代价函数变为如下图所示的cost(i):
在这里插入图片描述

图中cost(i)表达式有误,正确应该为:
在这里插入图片描述
反向传播的计算:
在这里插入图片描述

四、 梯度检测

反向传播算法有一个不好的特性,很容易产生一些微妙的bug,当他与梯度下降或其他一些优化算法一同工作时,看起来确实能正常运行,并且代价函数在每次梯度下降的迭代中也在不断减小,但是到最后得到的神经网络其误差将会比无bug的情况下高出一个数量级,并且很可能不知道这个差距是由bug造成的。

那么如何应对这种情况呢?有一种思想叫做梯度检测,它能解决几乎所有这种问题,使用梯度检测,可以保证前向传播和反向传播都会是百分之百正确的

先来看一下代价函数导数的一种近似数值计算方法(这里的变量θ为实数而非向量):
在这里插入图片描述
这里是用割线的斜率来近似切线的斜率,即代价函数的导数,当ε足够小时,可以近似相等,如10 ^ (-4),一般也不能太小,否则会有数值计算上的误差

当变量θ是向量时,上述近似方法可以推广为:
在这里插入图片描述
对每一个变量分别求偏导数。这些等式可以让你从数值上去估算代价函数J所关于的任何参数的偏导数。由此写出的代码如下所示:
在这里插入图片描述
这里的gradApprox就是数值计算得到近似偏导数值,而我们把用反向传播算法求得的偏导数值记为DVec,梯度检测的下一步就需要检验:
在这里插入图片描述
验证gradApprox是否等于或近似等于DVec,若两种方法计算出来的导数是一样的或者说非常接近,只有几位小数的差距,那么就可以确信反向传播算法的实现是正确的,此时把DVec用到梯度下降算法或其他优化算法中时,就可以确信计算的导数是正确的,那么代码就能正确地运行,并很好的优化J

总结一下实现的细节:
在这里插入图片描述
首先需要实现反向传播算法去计算DVec,然后使用数值计算的方法计算gradApprox,并确保他们两有近似的结果,这一步确保之后,在训练时使用反向传播算法计算梯度,而不再使用梯度检测,因为数值计算法的计算量比较大、速度比较慢,而反向传播算法是一个高性能的计算导数的方法,一旦通过检验确定反向传播算法是正确的,就应该关掉梯度检验不再使用

五、 随机初始化

当使用梯度下降或高级优化算法时,首先需要为参数确定初始值。初始化结束后可以一步步通过梯度下降来最小化代价函数。

1.全部初始化为0的问题

之前在逻辑回归中是将初始值全部设置成0,但是在神经网络中这是不合适的,如下图所示:
在这里插入图片描述
因为权重都为0,那么计算出来的两个激活值a1和a2也相等,所以误差也相等。进而导致,代价函数对两个参数的偏导数也相等,所以用梯度下降更新后的参数值也会相等,只是可能不为0,但还是一直保持相等,后续也都会这样,一直相等。所以这样的话,两条蓝色的线的权重会相等,红色的会相等,绿色的也会相等,所以这个神经网络计算不出什么有趣的函数,每一层的神经元都在进行着相同的计算,这是一种高度冗余的情况。也被称为对称权重的问题
在这里插入图片描述

2.随机初始化的思想

为了避免上述的问题,在神经网络的参数初始化时,需要采用随机初始化的思想:
在这里插入图片描述
将参数值初始化为[-ε,ε]范围内的一个随机值。一般ε的值比较小,所以初始化后的参数值也是比较小的随机值。随机性打破了上述提到的对称权重的问题

六、 神经网络算法整体流程

这节将结合上述所讲的所有内容来做一个总体的回顾,相互之间有怎样的联系以及神经网络学习算法的总体实现过程。

1.选择网络具体架构

对于一个具体的问题,首先要确定神经网络的结构,包含几层、几个输入神经元、几个输出神经元、每个隐藏层各有几个神经元等等。具体的选择依据如下图所示:
在这里插入图片描述
根据输入数据的特征数来确定输入神经元的数量,根据需要分几类来确定输出神经元的数量,隐藏层默认使用一层,或几层但每层的神经元数量相同,每层隐藏层的数量一般大于输入层是有效的,越多越好。但隐藏层的具体选择还需依据具体问题来具体分析

2.训练神经网络

这里分为了六步:
在这里插入图片描述
(1) 随机初始化权重为很小的数
(2) 执行前向传播算法对所有输入计算得到相应的预测值h(x)
(3) 按照公式计算出代价函数J(θ)
(4) 反向传播算法计算代价函数的偏导数
在这里插入图片描述
然后是5、6两步:
在这里插入图片描述
(5) 使用梯度检测去比较通过反向传播算法和数值估计两种方法求出来的偏导数是否近似相等,如果近似相等,则停止梯度检测,训练过程将只使用反向传播算法。
(6) 使用梯度下降法或高级优化方法用反向传播求得的偏导数的结果去最小化代价函数,优化参数。

需要注意的一点是,神经网络的代价函数J(θ)是非凸的,所以优化算法只能得到局部最优值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491748.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

吴恩达《机器学习》学习笔记十一——神经网络代码

吴恩达《机器学习》学习笔记十一——神经网络代码数据准备神经网络结构与代价函数初始化设置反向传播算法训练网络与验证课程链接:https://www.bilibili.com/video/BV164411b7dx?fromsearch&seid5329376196520099118 数据集链接:https://pan.baidu…

中国科研人员发明单晶体管逻辑结构新原理

▲随着晶体管不断缩小特征尺寸,集成电路的性能得以持续提升。然而在超小器件尺寸下,硅材料的物理极限导致了功耗的大幅提升,难以进一步持续减小晶体管的特征尺寸。来源:文汇网通过引入层状半导体,并依据其特性设计新型…

Java 内存模型

1、并发模型编程的分类 在并发模型编程中,我们需要解决两个关键问题:线程之间如何通信以及线程之间如何同步。线程之间的通信包括两种:共享内存和消息传递。 Java并发采用的是共享内存模型。 2、Java内存模型的抽象 Java内存模型的主要目标是…

PyTorch框架学习一——PyTorch的安装(CPU版本)

PyTorch框架学习一——PyTorch的安装(CPU版本)PyTorch简介PyTorch的安装(CPU版)机器学习/深度学习领域的学习都是需要理论和实践相结合的,而它们的实践都需要借助于一个框架来实现,PyTorch在学术界目前处于…

你的大脑在自动驾驶,而你一无所知

来源:果壳想象一下,你的大脑里有着两个小人,它们在不停地打架,试图夺取控制你行动的权力。当然,这两个小人并不是你善意和邪恶的念头。那它们是什么?在很多人看来,这两者就是我们的意识和无意识…

常用的损失函数

来自 机器学习成长之路公众号 本文将常用的损失函数分为了两大类:分类和回归。然后又分别对这两类进行了细分和讲解,其中回归中包含了一种不太常见的损失函数:平均偏差误差,可以用来确定模型中存在正偏差还是负偏差。 从学习任务…

吴恩达《机器学习》学习笔记十一——应用机器学习的建议

吴恩达《机器学习》学习笔记十一——应用机器学习的建议一、训练完模型后下一步要做什么二、评估算法与模型选择1.训练集与测试集2.训练/测试步骤3.模型选择4.数据集新的划分——验证集的加入三、偏差与方差1.偏差与方差的理解2.正则化和偏差方差的关系3.学习曲线四、决定接下来…

为什么说深耕AI领域绕不开知识图谱?

来源:AI科技大本营“所有在 AI 领域深耕的人,最终都会发现语义鸿沟仍是一个非常具有挑战性的问题,这最终还需要借助知识图谱等技术,来帮助将整体的 AI 认知取得新进展。”在 5 月 26 日的 CTA 峰会机器学习专场,Hulu 首…

机器学习中的相似性度量总结

来自 机器学习算法那些事公众号 在做分类时常常需要估算不同样本之间的相似性度量(Similarity Measurement),这时通常采用的方法就是计算样本间的“距离”(Distance)。采用什么样的方法计算距离是很讲究,甚至关系到分类的正确与否。 目录 1. 欧氏距离 …

吴恩达《机器学习》学习笔记十二——机器学习系统

吴恩达《机器学习》学习笔记十二——机器学习系统一、设计机器学习系统的思想1.快速实现绘制学习曲线——寻找重点优化的方向2.误差分析3.数值估计二、偏斜类问题(类别不均衡)三、查准率P与召回率R——代替准确率的评估指标四、查准率与召回率的权衡——…

增强现实:一场正在到来的医疗革命

来源: 资本实验室图像化可以让医生的诊断、决策和治疗更加准确,可以说是医疗史上非常重要的一项技术突破。近几年,通讯技术的发展推动了空间计算的快速商业化。在医疗领域,增强现实(AR)、虚拟现实&#xff…

吴恩达《机器学习》学习笔记十三——机器学习系统(补充)

这次笔记是对笔记十二的补充,之前讨论了评价指标,这次主要是补充机器学习系统设计中另一个重要的方面,用来训练的数据有多少的问题。 笔记十二地址:https://blog.csdn.net/qq_40467656/article/details/107602209 之前曾说过不要…

全球CMOS图像传感器厂商最新排名:黑马杀出

来源:半导体行业观察近期,台湾地区的Yuanta Research发布报告,介绍了其对CMOS图像传感器(CIS)市场的看法,以及到2022年的前景预期。从该研究报告可以看出,2018年全球CMOS图像传感器的市场规模为137亿美元,其…

吴恩达《机器学习》学习笔记十四——应用机器学习的建议实现一个机器学习模型的改进

吴恩达《机器学习》学习笔记十四——应用机器学习的建议实现一个机器学习模型的改进一、任务介绍二、代码实现1.准备数据2.代价函数3.梯度计算4.带有正则化的代价函数和梯度计算5.拟合数据6.创建多项式特征7.准备多项式回归数据8.绘制学习曲线𝜆0𝜆1&…

刘锋 吕乃基:互联网中心化与去中心化之争

前言:本文发表在2019年5月《中国社会科学报》上,主要从神经学角度分析互联网的发育过程,并对云计算和区块链为代表的中心化与去中心化技术趋势进行了探讨。当前,学术界和产业界对互联网的未来发展出现了分歧。随着谷歌、亚马逊、F…

iOS-BMK标注覆盖物

在iOS开发中,地图算是一个比较重要的模块。我们常用的地图有高德地图,百度地图,谷歌地图,对于中国而言,苹果公司已经不再使用谷歌地图,官方使用的是高德地图。下面将讲述一下百度地图开发过程中的一些小的知…

PyTorch框架学习二——基本数据结构(张量)

PyTorch框架学习二——基本数据结构(张量)一、什么是张量?二、Tensor与Variable(PyTorch中)1.Variable2.Tensor三、Tensor的创建1.直接创建Tensor(1)torch.tensor()(2)to…

十年空缺一朝回归,百度正式任命王海峰出任CTO

来源:机器之心百度要回归技术初心了吗?自 2010 年李一男卸任百度 CTO 之后,百度对这一职位就再无公开任命,一空就是 10 年。而今天上午李彦宏突然发出的一纸职位调令,让这个空缺多年的百度 CTO 之位有了新的掌舵手。就…

Windows下卸载TensorFlow

激活tensorflow:activate tensorflow输入:pip uninstall tensorflowProceed(y/n):y如果是gpu版本: 激活tensorflow:activate tensorflow-gpu输入:pip uninstall tensorflow-gpuProceed&#xf…

PyTorch框架学习三——张量操作

PyTorch框架学习三——张量操作一、拼接1.torch.cat()2.torch.stack()二、切分1.torch.chunk()2.torch.split()三、索引1.torch.index_select()2.torch.masked_select()四、变换1.torch.reshape()2.torch.transpace()3.torch.t()4.torch.squeeze()5.torch.unsqueeze()一、拼接 …