吴恩达深度学习笔记:浅层神经网络(Shallow neural networks)3.9-3.11

目录

  • 第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)
    • 第三周:浅层神经网络(Shallow neural networks)
      • 3.9 神 经 网 络 的 梯 度 下 降 ( Gradient descent for neural networks)
      • 3.10(选修)直观理解反向传播(Backpropagation intuition)

第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)

第三周:浅层神经网络(Shallow neural networks)

3.9 神 经 网 络 的 梯 度 下 降 ( Gradient descent for neural networks)

在这个视频中,我会给你实现反向传播或者说梯度下降算法的方程组,在下一个视频我们会介绍为什么这几个特定的方程是针对你的神经网络实现梯度下降的正确方程。

你的单隐层神经网络会有 W [ 1 ] , b [ 1 ] , W [ 2 ] , b [ 2 ] W^{[1]},b^{[1]},W^{[2]},b^{[2]} W[1],b[1],W[2],b[2]这些参数,还有个𝑛𝑥表示输入特征的个数, n [ 1 ] n^{[1]} n[1]表示隐藏单元个数, n [ 2 ] n^{[2]} n[2]表示输出单元个数。

矩阵 W [ 1 ] W^{[1]} W[1]的维度就是 ( n [ 1 ] , n [ 0 ] ) (n^{[1]},n^{[0]}) (n[1],n[0]) b [ 1 ] b^{[1]} b[1]就是 n [ 1 ] n^{[1]} n[1]维向量,可以写成 ( n [ 1 ] , 1 ) (n^{[1]}, 1) (n[1],1),就是一个的列向量。 矩阵 W [ 2 ] W^{[2]} W[2]的维度就是 ( n [ 2 ] , n [ 1 ] ) (n^{[2]}, n^{[1]}) (n[2],n[1]) b [ 2 ] b^{[2]} b[2]的维就是 ( n [ 2 ] , 1 ) (n^{[2]}, 1) (n[2],1)维度。

你还有一个神经网络的成本函数,假设你在做二分类任务,那么你的成本函数等于:
Cost function: 公式: J ( W [ 1 ] , b [ 1 ] , W [ 2 ] , b [ 2 ] ) = 1 m ∑ i = 1 m L ( y ^ , y ) J(W[1], b[1], W[2], b[2]) =\frac{1}{m}\sum_{i=1}^{m}L(\hat{y} , y) J(W[1],b[1],W[2],b[2])=m1i=1mL(y^,y)
loss function 和之前做 logistic 回归完全一样。

训练参数需要做梯度下降,在训练神经网络的时候,随机初始化参数很重要,而不是初始化成全零。当你参数初始化成某些值后,每次梯度下降都会循环计算以下预测值:
在这里插入图片描述
正向传播方程如下(之前讲过):forward propagation:
在这里插入图片描述
反向传播方程如下:back propagation:
在这里插入图片描述
上述是反向传播的步骤,注:这些都是针对所有样本进行过向量化,Y是1 ×m的矩阵;这里 np.sum 是 python 的 numpy 命令,axis=1 表示水平相加求和,keepdims 是防止python 输出那些古怪的秩数(n, ),加上这个确保阵矩阵 d b [ 2 ] db^{[2]} db[2]这个向量输出的维度为(n, 1)这样标准的形式。

目前为止,我们计算的都和 Logistic 回归十分相似,但当你开始计算反向传播时,你需要计算,是隐藏层函数的导数,输出在使用 sigmoid 函数进行二元分类。这里是进行逐个元素乘积,因为 W [ 2 ] T d z [ 2 ] W^{[2]T}dz^{[2]} W[2]Tdz[2] ( z [ 1 ] ) (z[1]) (z[1])这两个都为 ( n [ 1 ] , m ) (n^{[1]}, m) (n[1],m)矩阵;

还有一种防止 python 输出奇怪的秩数,需要显式地调用 reshape 把 np.sum 输出结果写成矩阵形式。

以上就是正向传播的 4 个方程和反向传播的 6 个方程,这里我是直接给出的,在下个视频中,我会讲如何导出反向传播的这 6 个式子的。如果你要实现这些算法,你必须正确执行正向和反向传播运算,你必须能计算所有需要的导数,用梯度下降来学习神经网络的参数;你也可以许多成功的深度学习从业者一样直接实现这个算法,不去了解其中的知识。

3.10(选修)直观理解反向传播(Backpropagation intuition)

这个视频主要是推导反向传播。
下图是逻辑回归的推导:
回想一下逻辑回归的公式(参考公式 3.2、公式 3.5、公式 3.6、公式 3.15) 公式 3.38:
在这里插入图片描述
所以回想当时我们讨论逻辑回归的时候,我们有这个正向传播步骤,其中我们计算𝑧,然后𝑎,然后损失函数𝐿。
在这里插入图片描述
神经网络的计算中,与逻辑回归十分类似,但中间会有多层的计算。下图是一个双层神经网络,有一个输入层,一个隐藏层和一个输出层。

前向传播:
计算 z [ 1 ] z^{[1]} z[1] a [ 1 ] a^{[1]} a[1],再计算 z [ 2 ] z^{[2]} z[2] a [ 2 ] a^{[2]} a[2],最后得到 loss function。
反向传播:
向后推算出 d a [ 2 ] da^{[2]} da[2],然后推算出 d z [ 2 ] dz^{[2]} dz[2],接着推算出 d a [ 1 ] da^{[1]} da[1],然后推算出 d z [ 1 ] dz^{[1]} dz[1]。我们不需要对x求导,因为x是固定的,我们也不是想优化x。向后推算出 d a [ 2 ] da^{[2]} da[2],然后推算出 d z [ 2 ] dz^{[2]} dz[2]的步骤可以合为一步:

公式 3.40: d z [ 2 ] = a [ 2 ] − y dz^{[2]} = a^{[2]} − y dz[2]=a[2]y d W [ 2 ] = d z [ 2 ] a [ 1 ] T dW^{[2]} = dz^{[2]}a^{[1]T} dW[2]=dz[2]a[1]T(注意:逻辑回归中;为什么 a [ 1 ] T a^{[1]T} a[1]T多了个转置:dw中的W(视频里是 W i [ 2 ] W_i^{[2]} Wi[2])是一个列向量,而 W [ 2 ] W^{[2]} W[2]是个行向量,故需要加个转置);

公式 3.41: d b [ 2 ] = d z [ 2 ] db^{[2]} = dz^{[2]} db[2]=dz[2]
公式3.42:KaTeX parse error: Double superscript at position 36: …^{[2]}∗ g^{[1]}'̲(z^{[1]}) 注意:这里的矩阵:W[2]的维度是:( n [ 2 ] , n [ 1 ] n^{[2]},n^{[1]} n[2]n[1])。
z [ 2 ] z^{[2]} z[2] d z [ 2 ] dz^{[2]} dz[2]的维度都是:( n [ 2 ] , 1 n^{[2]},1 n[2],1),如果是二分类,那维度就是(1,1)。

z [ 1 ] z^{[1]} z[1] d z [ 1 ] dz^{[1]} dz[1]的维度都是:( n [ 1 ] , 1 n^{[1]},1 n[1],1)。
证明过程: 见公式 3.42,

其中 W [ 2 ] T d z [ 2 ] W^{[2]T}dz^{[2]} W[2]Tdz[2]维度为:( n [ 1 ] , n [ 2 ] n^{[1]}, n^{[2]} n[1],n[2])、( n [ 2 ] , 1 n^{[2]}, 1 n[2],1)相乘得到( n [ 1 ] , 1 n^{[1]}, 1 n[1],1),和 z [ 1 ] z^{[1]} z[1]维度相同,KaTeX parse error: Double superscript at position 8: g^{[1]}'̲(z^{[1]})的维度为( n [ 1 ] , 1 n^{[1]}, 1 n[1],1),这就变成了两个都是( n [ 1 ] , 1 n^{[1]}, 1 n[1],1)向量逐元素乘积。
实现后向传播有个技巧,就是要保证矩阵的维度相互匹配。最后得到 d W [ 1 ] 和 d b [ 1 ] dW^{[1]}和db^{[1]} dW[1]db[1],公式 3.43: d W [ 1 ] = d z [ 1 ] x T dW^{[1]} = dz^{[1]}x^T dW[1]=dz[1]xT, d b [ 1 ] = d z [ 1 ] db^{[1]} = dz^{[1]} db[1]=dz[1]可以看出 d W [ 1 ] 和 d W [ 2 ] dW^{[1]} 和dW^{[2]} dW[1]dW[2] 非常相似,其中x扮演了 a [ 0 ] a^{[0]} a[0]的角色, x T x^T xT等同于 a [ 0 ] T a^{[0]T} a[0]T
在这里插入图片描述
下图写了主要的推导过程:
在这里插入图片描述
吴恩达老师认为反向传播的推导是机器学习领域最难的数学推导之一,矩阵的导数要用链式法则来求,如果这章内容掌握不了也没大的关系,只要有这种直觉就可以了。还有一点,就是初始化你的神经网络的权重,不要都是 0,而是随机初始化,下一章将详细介绍原因。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Redis集合List实现消息队列

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型…

MySQL经验分享:Shell开发问题

背景 之前整理过Python连接使用MySQL的经验,链接如下: pymysql封装总结_pymysql封装类-CSDN博客 相比高级语言,Shell与MySQL开发使用相对会更麻烦一些;由于 shell是linux命令集的概称,是属于命令行的人机界面。Shel…

k8s 基础入门

1.namespace k8s中的namespace和docker中namespace是两码事,可以理解为k8s中的namespace是为了多租户,dockers中的namespace是为了网络、资源等隔离 2.deployment kubectl create #新建 kubectl aply #新建 更新 升级: 滚动升级&#x…

MS35774/MS35774A,低噪声 256 细分微步进电机驱动,可用在车灯随动,香氛机等领域

MS35774/MS35774A 是一款高精度、低噪声的两相步进 电机驱动芯片,芯片内置功率 MOSFET ,长时间工作的平均电 流可以达到 1.4A ,峰值电流 2A 。芯片集成了过温保护、欠压 保护、过流保护、短地保护、短电源保护功能。 主要特点 ◼ 2…

微信支付平台与微信服务号关联配置要点

目录 JSAPI支付 前期资料及相关准备 申请微信服务号 服务号配置要点 微信认证 基本配置 功能设置 申请微信支付号 支付号配置要点 设置操作密码 API安全 开发设置 与服务号关联 小结 JSAPI支付 我们的开发应用场景以JSAPI支付为举例,这也是常用的一…

微服务——Ribbon负载均衡

Ribbon负载均衡 1.负载均衡原理1)对LoadBalancerIntercepor进行源码跟踪:2)LoadBalancerClient继续跟入execute方法:3)负载均衡策略IRule4)总结 2.负载均衡策略自定义负载均衡策略 3.饥饿加载 在eureka中&a…

从零开始学大模型 | 你必须要知道的三种大模型架构可视化的方法!

引言 大模型架构可视化对于理解、解释和优化这些复杂模型具有重要意义和作用,主要包括以下两个方面: 提高模型透明度和可解释性通过可视化,我们能够直观地观察到模型内部的计算过程、参数分布、特征提取等,从而更好地理解模型是如…

【Node.js】-PostCSS简介

简介 PostCSS中文网地址 PostCSS是一个由JavaScript插件转换样式的工具,它的目标是探索CSS工具的新可能性,特别是在自动化和优化方面。它能够让你使用未来的CSS特性,同时优化现有的CSS代码,使其更加高效和兼容。 PostCSS本身并不…

【Dynamics 365 FO】导入汇率以及在X++代码中使用这些汇率

商务合作请加微信:DingtalkCSM 首先我们需要先创建一个汇率提供方,Dyanmics 365官方为我们提供了三个汇率提供方,直接点new然后选一个就好了。 建好汇率提供方之后我们就可以导入汇率了。 配置一下各项参数。 我们可以配置一个批处理&#x…

h5接入腾讯云人脸核身

一.自助接入步骤。 1.登录腾讯云开通人脸核身服务。 2.选择微信h5。 3.填写用户授权信息,选择对比源。 4.在调用实名核身鉴权接口时,必须传入认证人姓名和身份证号。 5.配置结果。 二.时序图 三.后端接口 service package com.ynfy.buss.exam.faceve…

PurpleKeep:提供Azure管道以创建基础设施并执行Atomic测试

关于PurpleKeep PurpleKeep是一款功能强大的安全测试自动化工具,该工具能够通过提供Azure管道以创建基础设施,并帮助广大研究人员执行Atomic测试。 随着攻击技术种类的迅速增加,以及EDR(端点检测和响应)和自定义检测规…

C语言----预处理(详解)

好了书接上回。我在讲编译与链接的时候写过宏和条件建议。我说会在下一篇博客中讲解,那么来了。今天我们来详细的讲讲预处理。宏与条件编译也在其中,那么我们现在就来好好会会这个预处理吧。 预定义符号 关于预定义符号,我暂时只知道几个。并…

Python-VBA编程500例-028(入门级)

经典二分查找算法(Classic Binary Search Algorithm)(也称为折半查找算法),是一种在有序数组中查找某一特定元素的搜索算法。它要求序列必须有序,然后通过每次比较数组中间元素与目标值,将搜索范围缩小一半,直到找到目标元素或搜索…

传输大咖20|提升效率:优化文件服务器删除大文件夹过程的策略

引文| 文件服务器在删除大文件夹时,往往会比较耗时。如果在原有线程中同步等待删除结果,那么会阻塞原有线程的运行;如果在其它线程中异步删除文件夹,则虽不阻塞原有线程的运行,但对于那些关注删除结果的用户…

每日面经分享(pytest装饰器)

pytest装饰器 a. pytest.mark.parametrize:这个装饰器用于标记测试函数,并为其提供多组参数进行参数化测试。可以使用元组、列表、字典等形式来指定参数组合。 import pytestpytest.mark.parametrize("num1, num2, expected", [(2, 2, 4), (5…

力扣热门算法题 217. 存在重复元素,223. 矩形面积,225. 用队列实现栈

217. 存在重复元素,223. 矩形面积,225. 用队列实现栈,每题做详细思路梳理,配套Python&Java双语代码, 2024.04.01 可通过leetcode所有测试用例。 目录 217. 存在重复元素 解题思路 完整代码 Java Python 223…

Discuz采集发布插件

Discuz(简称DZ)是一款知名的开源论坛系统,广泛应用于各类网站社区。对于许多站长来说,保持论坛内容的更新是一项挑战,特别是在内容量庞大的情况下。为了解决这个问题,有一类特殊的插件是用于在Discuz论坛中…

惟客数据《2024泛零售行业大会员经营实践与案例》正式发布

对于多业态、多品牌、多渠道经营的泛零售企业而言,如何改变过去会员经营过程中“各自为政”的状态? 如何让企业内不同业务之间的会员经营“瞄得准、看得穿、打得透、流得通、触得动”,充分发挥多业态、多品牌、多渠道优势,最大化挖…

transformers微调模型后使用pieline调用无法预测列表文本

初学transformers框架 使用trainer简单训练一个文本分类模型三个epoch后 使用piepline调用model 和tokenizer后 发现 传入列表文本后 输出就变得不正常了,为么子哇 如下图

简单说清楚什么是SQL Injection?

最近看完了《The Pragmatic Programmer: 20th Anniversary Edition, 2nd Edition: Your Journey to Mastery》,在第7章:While You Are Coding的footnotes中,提到了一幅漫画: 这不仅用简单的方式说清楚了什么是SQL Injection&#…