type
Post
status
Published
date
Jan 31, 2026
slug
NN-DL-Learning3
summary
神经网络与深度学习笔记_Day3,包含 自动微分 与 激活函数
tags
Python
机器学习
PyTorch
category
机器学习
icon
password
@ZZHow(ZZHow1024)
参考课程:
【黑马程序员AI大模型《神经网络与深度学习》全套视频课程,涵盖Pytorch深度学习框架、BP神经网络、CNN图像分类算法及RNN文本生成算法】
01_自动微分小问题_detach函数
- 梯度计算注意点
- 不能将自动微分的张量转换成 numpy 数组,会发生报错,可以通过 detach() 方法实现。
- 案例演示:01_detach_function.py(自动微分_detach () 函数介绍)
02_自动微分真实应用场景
- 本小节主要讲解了 PyTorch 中非常重要的自动微分模块的使用和理解。
- 我们对需要计算梯度的张量需要设置
requires_grad=True属性。
- 案例演示:02_autograd_real_world_applications.py(自动微分真实应用场景)
03-05_PyTorch模拟线性回归
- 我们使用 PyTorch 的各个组件来构建线性回归的实现。在 PyTorch 中进行模型构建的整个流程一般分为四个步骤:
- 准备训练集数据
- numpy 对象 → 张量 Tensor → 数据集对象 TensorDataset → 数据加载器 DataLoader
- 构建要使用的模型
- 设置损失函数和优化器
- 模型训练
- 要使用的 API
- 使用 PyTorch 的
nn.MSELoss()代替平方损失函数 - 使用 PyTorch 的
data.DataLoader代替数据加截器 - 使用 PyTorch 的
optim.SGD代替优化器 - 使用 PyTorch 的
nn.Linear代替假设函数
- 案例演示:03_linear_regression_simulation.py(PyTorch框架_模拟线性回归)
06_如何构建神经网络(neural network)
- 什么是神经网络
- 人工神经网络 (Artificial Neural Network,简写为 ANN) 也简称神经网络(NN),是一种模仿生物神经网络结构和功能的计算模型。人脑可以看做是一个生物神经网络,由众多的神经元连接而成。各个神经元传递复杂的电信号,树突接收到输入信号,然后对信号进行处理,通过轴突输出信号。
- 如何构建神经网络
- 神经网络是由多个神经元组成,构建神经网络就是在构建神经元。
- 这个过程就像来源不同树突(树突都会有不同的权重)的信息,进行的加权计算,输入到细胞中做加和,再通过激活函数输出细胞值。
- 接下来,我们使用多个神经元来构建神经网络,相邻层之间的神经元相互连接,并给每一个连接分配一个强度。


07_神经网络_文字介绍
- 如何构建神经网络
- 神经网络中信息只向一个方向移动, 即从输入节点向前移动, 通过隐藏节点, 再向输出节点移动。其中的基本部分是:
- 输入层(Input Layer):即输入 x 的那一层(如图像、文本、声音等)。每个输入特征对应一个神经元。输入层将数据传递给下一层的神经元。
- 输出层(Output Layer):即输出 y 的那一层。输出层的神经元根据网络的任务(回归、分类等)生成最终的预测结果。
- 隐藏层(Hidden Layers):输入层和输出层之间都是隐藏层,神经网络的“深度”通常由隐藏层的数量决定。隐藏层的神经元通过加权和激活函数处理输入,并将结果传递到下一层。
- 特点是:
- 同一层的神经元之间没有连接
- 第 N 层的每个神经元和第 N-1 层的所有神经元相连(这就是 full connected 的含义),这就是全连接神经网络
- 全连接神经网络接收的样本数据是二维的,数据在每一层之间需要以二维的形式传递
- 第 N-1 层神经元的输出就是第N层神经元的输入
- 每个连接都有一个权重值(w 系数和 b 系数)
- 神经网络内部状态值和激活值

- 每一个神经元工作时,前向传播会产生两个值,内部状态值(加权求和值)和激活值;反向传播时会产生激活值梯度和内部状态值梯度。
- 内部状态值
- 神经元或隐藏单元的内部存储值,它反映了当前神经元接收到的输入、历史信息以及网络内部的权重计算结果。
- :权重矩阵
- :输入值
- :偏置
- 激活值
- 通过激活函数(如 ReLU、Sigmoid、Tanh)对内部状态值进行非线性变换后得到的结果。激活值决定了当前神经元的输出。
- :激活函数
- :内部状态值
08_激活函数介绍
- 激活函数用于对每层的输出数据进行变换,进而为整个网络注入了非线性因素。此时,神经网络就可以拟合各种曲线。
- 没有引入非线性因素的网络等价于使用一个线性模型来拟合。
- 通过给网络输出增加激活函数,实现引入非线性因素,使得网络模型可以逼近任意函数,提升网络对复杂问题的拟合能力。
- 如果不使用激活函数,整个网络虽然看起来复杂,其本质还相当于一种线性模型。
09_Sigmoid激活函数介绍
- Sigmoid 激活函数公式:
- Sigmoid 激活函数求导公式:
- Sigmoid 激活函数的函数图像

- Sigmoid 函数可以将任意的输入映射到 (0, 1) 之间,当输入的值大致在 <-6 或者 >6 时,意味着输入任何值得到的激活值都是差不多的,这样会丢失部分的信息。
- 比如:输入 100 和输出 10000 经过 Sigmoid 的激活值几乎都是等于 1 的,但是输入的数据之间相差 100 倍的信息就丢失了。
- 对于 Sigmoid 函数而言,输入值在 [-6, 6] 之间输出值才会有明显差异,输入值在 [-3, 3] 之间才会有比较好的效果。
- 通过上述导数图像,我们发现导数数值范围是 (0, 0.25),当输入 <-6 或者 >6 时,sigmoid 激活函数图像的导数接近为 0,此时网络参数将更新极其缓慢,或者无法更新。
- 一般来说, sigmoid 网络在 5 层之内就会产生梯度消失现象。而且,该激活函数并不是以 0 为中心的,所以在实践中这种激活函数使用的很少。sigmoid函数一般只用于二分类的输出层。
- 案例演示:04_activation_sigmoid.py(激活函数_Sigmoid图解)
10_Tanh激活函数介绍
- Tanh 激活函数公式:
- Tanh 激活函数求导公式:
- Tanh 激活函数的函数图像

- Tanh 函数将输入映射到 (-1, 1) 之间,图像以 0 为中心,在 0 点对称,当输入 大概<-3 或者 >3 时将被映射为 -1 或者 1。其导数值范围 (0, 1),当输入的值大概 <-3 或者 > 3 时,其导数近似 0。
- 与 Sigmoid 相比,它是以 0 为中心的,且梯度相对于 Sigmoid 大,使得其收敛速度要比 Sigmoid 快,减少迭代次数。然而,从图中可以看出,Tanh 两侧的导数也为 0,同样会造成梯度消失。
- 若使用时可在隐藏层使用 Tanh 函数,在输出层使用 Sigmoid 函数。
- 案例演示:05_activation_tanh.py(激活函数_Tanh图解)
11_ReLU激活函数介绍
- ReLU 激活函数公式:
- ReLU 激活函数求导公式:
- ReLU 激活函数的函数图像

- ReLU 激活函数将小于 0 的值映射为 0,而大于 0 的值则保持不变,它更加重视正信号,而忽略负信号,这种激活函数运算更为简单,能够提高模型的训练效率。
- 当 x<0 时,ReLU 导数为 0,而当 x>0 时,则不存在饱和问题。所以,ReLU 能够在 x>0 时保持梯度不衰减,从而缓解梯度消失问题。然而,随着训练的推进,部分输入会落入小于 0 区域,导致对应权重无法更新。这种现象被称为“神经元死亡”。
- ReLU 是目前最常用的激活函数。与 Sigmoid 相比,ReLU 的优势是:
- 采用 Sigmoid 函数,计算量大(指数运算),反向传播求误差梯度时,计算量相对大,而采用 RelU 激活函数,整个过程的计算量节省很多。
- Sigmoid 函数反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练。
- RelU 会使一部分神经元的输出为 0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。
- 案例演示:06_activation_relu.py(激活函数_ReLU图解)
12_Softmax激活函数介绍
- Softmax 用于多分类过程中,它是二分类函数 Sigmoid 在多分类上的推广,目的是将多分类的结果以概率的形式展现出来。
- Softmax 激活函数公式:

- Softmax 就是将网络输出的 logits 通过 softmax 函数,就映射成为 (0, 1) 的值,而这些值的累和为 1(满足概率的性质),那么我们将它理解成概率,选取概率最大(也就是值对应最大的)节点,作为我们的预测目标类别。
- 其他常见的激活函数

- 激活函数的选择方法
- 对于隐藏层
- 优先选择 ReLU 激活函数
- 如果 ReLU 效果不好,那么尝试其他激活,如 Leaky ReLU 等。
- 如果你使用了 ReLU,需要注意一下 Dead ReLU 问题,避免出现 0 梯度从而导致过多的神经元死亡。
- 少用使用 Sigmoid 激活函数,可以尝试使用 Tanh 激活函数
- 对于输出层
- 二分类问题选择 Sigmoid 激活函数
- 多分类问题选择 Softmax 激活函数
- 回归问题选择 identity 激活函数
- 案例演示:07_activation_softmax.py(激活函数_Softmax图解)