吴恩达深度学习课程一:神经网络和深度学习 第三周:浅层神经网络(二)

news/2025/10/18 23:21:44/文章来源:https://www.cnblogs.com/Goblinscholar/p/19150292

此分类用于记录吴恩达深度学习课程的学习笔记。
课程相关信息链接如下:

  1. 原课程视频链接:[双语字幕]吴恩达深度学习deeplearning.ai
  2. github课程资料,含课件与笔记:吴恩达深度学习教学资料
  3. 课程配套练习(中英)与答案:吴恩达深度学习课后习题与答案

本篇为第一课第三周,3.6到3.10部分的笔记内容。

经过第二周的基础补充,本周内容的理解难度可以说有了很大的降低,主要是从逻辑回归扩展到浅层神经网络,讲解相关内容,我们按部就班梳理课程内容即可,当然,依旧会尽可能地创造一个较为丝滑的理解过程。
我们继续上一篇的内容,来展开一下激活函数对浅层神经网络拟合效果的影响,并完成浅层神经网络的反向传播部分,这样,我们就大致了解了浅层神经网络相比逻辑回归,是如何提高算法性能的。

1. 浅层神经网络里的激活函数

1.1 隐藏层激活函数的作用

在逻辑回归中,我们知道,最后使用sigmoid激活函数是为了让加权和映射为概率从而实现分类效果。
而现在,如果我们仍要进行二分类,而浅层神经网络输出层的sigmoid函数已经实现了分类效果,那隐藏层再使用激活函数的作用是什么?
我们看一看如果不设隐藏层神经元的激活函数,正向传播的输出是什么形式:

  1. 首先,隐藏层只有线性组合,那么隐藏层的输出就是加权和本身:

\[\mathbf{Z^{[1]}} = \mathbf{W^{[1]}} \mathbf{X} + \mathbf{b^{[1]}} \]

  1. 现在,隐藏层的加权和就是输出层的输入,即:

\[\mathbf{Z^{[2]}} = \mathbf{W^{[2]}}( \mathbf{W^{[1]}} \mathbf{X} + \mathbf{b^{[1]}} ) + \mathbf{b^{[2]}} = \mathbf{W^{[2]}}\mathbf{W^{[1]}} \mathbf{X}+(\mathbf{W^{[2]}}\mathbf{b^{[1]}} + \mathbf{b^{[2]}}) \quad (1 \times m) \]

  1. 我们观察一下就会发现,\(\mathbf{Z^{[2]}}\) 的实际形式没有发生任何变化,我们换一个示例看一下:

\[y = 3(2x+1)+1 =6x+4 \]

可以发现,其形式依旧是“权重 × 输入 + 偏置”的线性表达式。
也就是说,无论我们堆叠多少层这样的“线性层”,最后得到的结果仍然等价于一个没有任何非线性能力的线性模型。这与逻辑回归本质上并没有区别。
在这种情况下,多层和一层的区别就相当于:

\[10 = 1*2*5(多层) \]

\[10 = 1*10(一层) \]

这便是激活函数的核心作用:引入非线性

1.2 激活函数如何引入非线性?

我们已经知道, 在没有激活函数的情况下,神经元的输出是:

\[\mathbf{A^{[1]}} = \mathbf{Z^{[1]}} = \mathbf{W^{[1]}}\mathbf{X} + \mathbf{b^{[1]}} \]

而当我们加入激活函数 \(g(x)\) 后,输出就变成:

\[\mathbf{A^{[1]}} = g(\mathbf{Z^{[1]}}) = g(\mathbf{W^{[1]}}\mathbf{X} + \mathbf{b^{[1]}}) \]

因为此时,下一层的输入就变成了一个经过非线性映射的结果

\[\mathbf{Z^{[2]}} = \mathbf{W^{[2]}},g(\mathbf{W^{[1]}}\mathbf{X} + \mathbf{b^{[1]}}) + \mathbf{b^{[2]}} \]

这意味着:
如果 \(g(x)\) 是线性的(例如恒等函数 \(g(z)=z\)),网络整体依旧是线性关系;
而只要 \(g(x)\)非线性函数(如 Sigmoid、ReLU、tanh 等),网络整体的映射关系就无法再化简为一个单一的线性变换
我们继续刚刚那个例子:

\[y = 3(2x+1)+1 =6x+4 \]

现在我们只改一点,把激活函数换成ReLU,即:

\[g(z) = \max(0, z) \]

隐藏层的传播过程即为:

\[Z^{[1]} = 2x + 1,\quad A^{[1]} = \max(0, 2x+1) \]

再输入输出层:

\[Z^{[2]} = 3A^{[1]} + 1 = 3\max(0, 2x+1) + 1 \]

这个时候,整体的输出函数变成:

\[y = \begin{cases} 6x + 4, & x > -0.5 \\ 1, & x \le -0.5 \end{cases} \]

这就是一个分段线性函数可以拐弯、有“折点”,不再是单一直线。
那如果再换成更复杂的激活函数呢?
这也意味着网络具备了拟合非线性关系的能力。

最后看一张图:
Pasted image 20251018180929

我们想通过图中的几个数据点进行拟合,没有激活函数,我们就只能像左侧一样画一条直线,而只有使用了激活函数,我们才能让这条直线弯曲,来实现更好拟合效果。

1.3 常见的激活函数

在了解了激活函数的作用——为神经网络引入非线性能力之后,我们来看看几种常见的激活函数及其特性。不同的激活函数,会对神经元的输出特征、梯度传播和训练效果产生显著影响。

(1)Sigmoid 函数

Sigmoid 的表达式为:

\[g(z) = \frac{1}{1 + e^{-z}} \]

其输出范围在 \((0, 1)\) 之间,形状如“S”型曲线。
Sigmoid 的优点在于它可以将任意实数映射为 \((0,1)\),非常适合二分类任务的输出层,例如预测概率。
缺点是当输入较大或较小时,梯度接近 0,容易出现梯度消失问题,导致网络难以训练。
myplot1

(2)Tanh函数

Tanh 是 Sigmoid 的改进版本,其表达式为:

\[g(z) = \tanh(z) = \frac{e^{z} - e^{-z}}{e^{z} + e^{-z}} \]

输出范围在 \((-1, 1)\) 之间,同样是“S”型曲线。
Tanh 的优点在于输出均值为 0,有助于加快梯度下降的收敛,并在一定程度上缓解了梯度消失问题。
缺点在于,当输入过大或过小时,依然会出现梯度趋于 0 的饱和现象。
如果把 Sigmoid 看作“挤压到 [0,1]”,那么 Tanh 就是“挤压到 [-1,1]”,更加对称,有利于后续层学习,因此,Tanh比sigmoid更适合作为隐藏层的激活函数。
myplot2

(3)ReLU函数

ReLU 是目前最常用的激活函数之一,定义为:

\[g(z) = \max(0, z) \]

当输入为正时,输出等于自身;当输入为负时,输出为 0。
ReLU 的优点在于计算简单,梯度传播效率高,并且在正区间保持线性,减少了梯度消失问题,从而加快训练速度。
缺点在于对于负输入,梯度恒为 0,容易出现“神经元死亡”现象,即某些神经元永远输出 0,无法更新。
myplot3

(4)Leaky ReLU(带泄漏的 ReLU)

为了缓解 ReLU 的“神经元死亡”问题,便出现了 Leaky ReLU:

\[g(z) = \begin{cases} z, & \text{if } z > 0, \\ \alpha z, & \text{if } z \leq 0. \end{cases} \]

其中 \(\alpha\) 是一个很小的常数(通常取 0.01)。Leaky ReLU 的优点在于对负区间保留一个微小的斜率,避免梯度完全为 0,从而训练更加稳定,减少“死神经元”的出现。
缺点是其输出仍然不是严格的零中心,且 \(\alpha\) 的选取需要进行调试。
myplot4

2.浅层神经网络的反向传播

我们知道,在浅层神经网络里,我们涉及到两个层级各自的权重和偏置,因此,不同于逻辑回归中的一次更新,我们这次需要在一次反向传播过程中,更新两个层级的参数
参数的传递过程如下:

\[\begin{aligned} &\text{隐藏层参数(4个神经元):} \\ &\Delta W^{[1]}, \Delta b^{[1]} \;\; \to \;\; \Delta Z^{[1]} \;\; \to \;\; \Delta A^{[1]} \\ \\ &\text{输出层参数(1个神经元):} \\ &\Delta W^{[2]}, \Delta b^{[2]} \;\; \to \;\; \Delta Z^{[2]} \;\; \to \;\; \Delta A^{[2]} \to \;\; \Delta L\\ \end{aligned} \]

2.1 损失函数

我们知道二分类交叉熵成本函数格式如下:

\[\mathcal{L} = -\frac{1}{m} \sum_{i=1}^{m} \Big[ y^{(i)} \log a^{[2](i)} + (1 - y^{(i)}) \log (1 - a^{[2](i)}) \Big] \]

向量化后即可表示为: $$ \mathcal{L}(\mathbf{A^{[2]}}, \mathbf{Y}) $$
我们依旧通过损失函数,使用链式法则来计算梯度。

2.2 输出层梯度

输出层激活函数为 \(sigmoid(x)\)
而输出层误差定义为:

\[\mathbf{dZ^{[2]}} = \frac{\partial \mathcal{L}}{\partial \mathbf{Z^{[2]}}} \]

在第二周的推导中,我们已经知道,对于二分类交叉熵 + sigmoid,损失对加权和的导数可简化为:

\[\mathbf{dZ^{[2]}} = \mathbf{A^{[2]}} - \mathbf{Y} \quad (1 \times m) \]

继续通过链式法则,我们得到输出层权重和偏置的梯度(详细过程可看第二周的推导):

\[\mathbf{dW^{[2]}} = \frac{1}{m} \mathbf{dZ^{[2]}} (\mathbf{A^{[1]}})^T \quad (1 \times 4) \]

\[\mathbf{db^{[2]}} = \frac{1}{m} \sum_{i=1}^{m} \mathbf{dZ^{[2](i)}} \quad (1 \times 1) \]

3.3 隐藏层梯度

对于隐藏层,这里我们便不定义具体的激活函数,用通式来展示过程:
先梳理一下我们现在有的量:

  1. 损失对输出层加权和的导数\(\mathbf{dZ^{[2]}}\)
  2. 隐藏层的加权和\(\mathbf{Z^{[1]}}\)
  3. 隐藏层的的加权和经过激活函数的输出\(\mathbf{A^{[1]}}\)
  4. 隐藏层的激活函数\(g(\mathbf{Z^{[1]}})\) 和它的导数\(g'(\mathbf{Z^{[1]}})\)
  5. 隐藏层的参数\(\mathbf{W^{[1]}}\),\(\mathbf{b^{[1]}}\)

现在,我们要求隐藏层参数的梯度,首先要得到损失关于隐藏层输出的导数,即:

\[\mathbf{dA^{[1]}} = \frac{\partial \mathcal{L}}{\partial \mathbf{A^{[1]}}} \]

再通过链式法则细化一下,我们得到:

\[\mathbf{dA^{[1]}} = \mathbf{dZ^{[2]}}⋅ \frac{\partial \mathbf{Z^{[2]}}}{\partial \mathbf{A^{[1]}}} \]

再看一眼加权和公式:

\[\mathbf{Z^{[2]}} = \mathbf{W^{[2]}}\mathbf{A^{[1]}}+ \mathbf{b^{[2]}} \quad (1 \times m) \]

所以,通过求导我们得到:

\[\mathbf{dA^{[1]}} = \mathbf{(W^{[2]})^T}\mathbf{dZ^{[2]}},转置为了匹配维度 \quad (4 \times m)\]

下一步,得到损失关于隐藏层加权和的输出,即:

\[\mathbf{dZ^{[1]}} = \mathbf{dA^{[1]}}⋅ \frac{\partial \mathbf{A^{[1]}}}{\partial \mathbf{Z^{[1]}}} \]

而隐藏层输出对加权和求导,其实就是激活函数的导数:\(g'(\mathbf{Z^{[1]}})\)
因此,我们得到:

\[\mathbf{dZ^{[1]}} = \mathbf{dA^{[1]}}⋅ g'(\mathbf{Z^{[1]}}) \quad (4 \times m) \]

注意!这里的乘是Hadamard 乘。
Hadamard 乘激活导数 = 对每个神经元每个样本的误差单独乘上对应的激活导数
到了这一步,我们就可以得到最后的梯度:

\[\mathbf{dW^{[1]}} = \frac{1}{m} \mathbf{dZ^{[1]}} \mathbf X^T \quad (4 \times n) \]

\[\mathbf{db^{[1]}} = \frac{1}{m} \sum_{i=1}^{m} \mathbf{dZ^{[1]}_{:,i}} \quad (4 \times 1) \]

还没完,这里还有一点要强调,注意看这个符号:\(\mathbf{dZ^{[1]}_{:,i}}\)
我们之前的逻辑回归,以及本次传播的输出层偏置,使用的符号都是\(\mathbf{dZ^{(i)}}\),对这个符号求平均就代表对 \(m\) 个样本在同一神经元上的误差求平均
而现在,我们的隐藏层有四个神经元,由此解释一下\(\frac{1}{m} \sum_{i=1}^{m} \mathbf{dZ^{[1]}_{:,i}}\) 的含义:

  1. "\(:\)"代表所有行
  2. "\(:,i\)"代表第 \(i\)
  3. "\(\sum_{i=1}^{m} \mathbf{dZ^{[1]}_{:,i}}\)"代表对\(dZ^{[1]}\) 的每一列求和,得到的结果是所有样本分别在四个隐藏神经元总误差
  4. 最后求平均值,即为平均误差,现在, 每个元素就对应一个隐藏神经元的偏置梯度。

我们也总结一下反向传播过程中各个量和其维度:

维度 说明
X n × m 输入特征
W[1] 4 × n 隐藏层权重
b[1] 4 × 1 → 4×m 隐藏层偏置(广播)
Z[1] 4 × m 隐藏层线性组合
A[1] 4 × m 隐藏层激活输出
W[2] 1 × 4 输出层权重
b[2] 1 × 1 → 1×m 输出层偏置(广播)
Z[2] 1 × m 输出层线性组合
A[2] 1 × m 输出层激活输出
dZ[2] 1 × m 输出层误差
dW[2] 1 × 4 输出层权重梯度
db[2] 1 × 1 输出层偏置梯度
dA[1] 4 × m 输出层误差传回隐藏层
dZ[1] 4 × m 隐藏层误差(Hadamard乘激活导数)
dW[1] 4 × n 隐藏层权重梯度
db[1] 4 × 1 隐藏层偏置梯度

3.4 更新参数

在完成所有梯度计算后,我们就可以使用梯度下降法来更新网络的权重和偏置,公式如下:

(1) 输出层参数更新

\[\mathbf{W^{[2]}} := \mathbf{W^{[2]}} - \eta \mathbf{dW^{[2]}} \]

\[\mathbf{b^{[2]}} := \mathbf{b^{[2]}} - \eta \mathbf{db^{[2]}} \]

(2) 隐藏层参数更新

\[\mathbf{W^{[1]}} := \mathbf{W^{[1]}} - \eta \mathbf{dW^{[1]}} \]

\[\mathbf{b^{[1]}} := \mathbf{b^{[1]}} - \eta \mathbf{db^{[1]}} \]

这样,我们就完成了浅层神经网络的一个反向传播过程的梳理。
相比逻辑回归,浅层神经网络在一次反向传播中更新了两层参数,而在之后的更复杂的神经网络结构中,隐藏层数量也不只一层,这样,在一次反向传播中,就会更新更多的参数。

但其形式,也只是像现在这样的通过链式法则的层层求导,更新即可。
所以,之后便会尽量少的出现这样比较繁杂的求导,但前提是要了解神经网络通过反向传播更新参数的逻辑。

下一篇即为本周理论部分的最后一部分,是神经网络的参数初始化,也是多个隐藏层神经元能发挥不同作用的原因。

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

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

相关文章

2025.10.18总结

今天继续学软考相关内容,看了操作系统一个章节进程管理的内容。 操作系统的定义:操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的划分,以提供给用户和其他软件方便的…

C++动态多态原理分析

class Animal { public:void speak() {cout << "Animal.speak()" << endl;} };class Cat :public Animal {void speak() {cout << "Cat.speak()" << endl;} }; void doW…

Java基础——初识Math类,基本运算符,自增自减运算符,逻辑运算符,位运算符,三元运算符

Java基础——初识Math类,基本运算符,自增自减运算符,逻辑运算符,位运算符,三元运算符初识Math类 Math.pow(2,3); //运用工具类进行次方运算基本运算符 1.算术运算符:+,-,,/,%(此前为二元运算符),++,--(一…

ENC28J60

ENC28J60ENC28J60 是在嵌入式开发、物联网、单片机联网中常见的一种芯片。 我们来从硬件、软件、应用三个角度讲清楚它。🧩 一、基本定义ENC28J60 是 Microchip(微芯科技) 公司生产的一款 独立的以太网控制器芯片(…

第七章 常见攻击事件分析--钓鱼邮件

第七章 常见攻击事件分析--钓鱼邮件 1、请分析获取黑客发送钓鱼邮件时使用的IP,flag格式: flag 将文件下来到虚拟机解压有个钓鱼邮件.eml 查阅的时候觉得这里很奇怪,这里跟其他的不大一样,这里对来源进行了base64的…

10月18日日记

1.今天放假出去吃饭 2.明天准备去图书馆 3.编写怎样的代码更有利于JIT优化?

第九章-实战篇-运维杰克

第九章-实战篇-运维杰克 1、攻击者使用的的漏洞扫描工具有哪些(两个) flag 我们首先先去 /var/log下面看一下 发现这个网站中间件是apach 逛了一圈没有发现什么东西, 但是先统计一下在日志里面哪些ip访问的数量最多,…

AntennaPod - 开源Android播客管理器

AntennaPod是一款易于使用、功能灵活的开源Android播客管理器。支持自动下载、播放控制、多平台同步等特性,提供无广告的纯净播客收听体验,让您自由管理个人播客订阅。AntennaPod - 开源Android播客管理器AntennaPod…

硬件基础知识

1. 关于串口电平和 RS232 、RS485、RS422 的引脚接线 串口常用的电平标准有如下三种:TTL电平:+5V表示1,0V表示0RS232电平:-3~-15V表示1,+3~+15V表示0RS485电平:两线压差+2~+6V表示1,-2~-6V表示0(差分信号) 引…

第三章 权限维持-linux权限维持-隐藏

第三章 权限维持-linux权限维持-隐藏 1、黑客隐藏的隐藏的文件 完整路径md5 使用命令查看隐藏文件 find / -type f -name .*这个文件看着有点可疑临时性:将文件放在 /tmp 目录下表明这些文件可能是临时的。系统重启后…

第五章 linux实战-黑链

第五章 linux实战-黑链 1、找到黑链添加在哪个文件 flag 格式 flag 什么是黑链?在网络安全领域,黑链(Blacklink 或 Badlink)一般指那些用于 恶意目的的链接。这些链接通常不是合法或正常的网站地址,而是被攻击者利…

AI元人文:价值原语化——在创新与传承间搭建文明桥梁

AI元人文:价值原语化——在创新与传承间搭建文明桥梁 当我们深耕价值语义的原语化,实则是启动了一项宏大的文明工程:为流动的价值经验建造可传承、可演化的语言载体。这不仅是方法论的创新,更是对文明传承模式的深…

Channel小结

一:channel的一些特性 1.尽量避免使用锁来解决临界资源安全问题 2.通道的角色必须在两个及以上 3.chan,必须要作用在两个以上的goroutine 二:通道的声明点击查看代码 func main() {//声明+赋值var c chan intc = ma…

线段树历史值学习笔记

(先单开出来,后面准备合并到线段树 trick 里) (好像合并不了了) 历史和指的是线段树维护的序列 \(a\),我们再开一个序列 \(b\),每次修改 / 查询后进行 \(\forall b_i \leftarrow b_i + a_i\) 操作,\(b\) 称作 …

连续两行fastq、连续两行MD5值如何转换为每行一个fastq一个MD5格式

001、shell实现(base) [b20223040323@admin2 test]$ ls a.txt (base) [b20223040323@admin2 test]$ cat a.txt ## 测试数据 SRR5534377_1.fastq.gz SRR5534377_2.fastq.gz d27d0b0f0bb9cae5dc52dc934384699b 1139…

bridge 一般是 网络桥接模块。

bridge 一般是 网络桥接模块。bridge 一般是 网络桥接模块。 在 Linux 网络栈中,Bridge 就是用来实现 “二层转发(L2 switch)” 的:让两个网络接口互通(比如 eth0 ↔ wlan0);常用于路由器的 AP 模式;也可能是 …

深入解析密码库低级lowlevel抽象层接口与高级highlevel抽象层接口 - 实践

深入解析密码库低级lowlevel抽象层接口与高级highlevel抽象层接口 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family:…

abc428

AC 4 (ABCE), Score 1125, Penalty 42:25(1), Rank , Ranting .4 题遗憾离场/ll C 删字符的时候忘记删字符的,罚时 +1 D 怎么这么困难,跳了。 E 大水题换根 dp 板子。 罚坐 1h,F 以为自己会了的时候发现读错题了,纠…

周六训练-1018

C Cut 我的质因数分解不是在杨老师这里学的,所以我写挂了,杨老师好闪拜谢杨老师 #include <iostream> #define int long longusing namespace std;const int MaxN = 1e5 + 10;int f[MaxN][20], mn[MaxN][20], …

23-网关选型

网关选型指南:支持多协议的统一流量入口摘要:本文档全面分析了支持HTTP/1.1、WebSocket、gRPC和gRPC-Web协议的统一网关选型方案,通过对比Nginx、Envoy、Kong、APISIX和Spring Cloud Gateway等主流解决方案,为不同…