深度学习笔记_1

### 课程部分

人工智能与神经网络初探

[点击查看课程链接](https://www.bilibili.com/video/BV1atCRYsE7x/?spm_id_from=333.337.search-card.all.click&vd_source=3ce9ddb6c893b26bce162a1a0b30e8c5)

智能本质上就是针对不同情境给出针对性的输出反应(看情况做事)。人工智能即一个根据不同环境给出相应输出回应的系统。

机器学习是通过给机器奖励或惩罚的方式让机器自主调整不断学习,从而学会解决某一种任务的智能。机器学习需要一个有学习能力的黑箱和海量数据。

神经网络(Neural Network)最早期的形式是感知机,提取各个特征乘上权值相加得出一个值,根据这个值判断与目标是否相符。这种感知机模型可以层层嵌套,通过设定特殊的系数、权值、阈值实现特定的目的,这种模型的多层嵌套就形成了神经网络。

在过往的实验中,我们时常会采用先将数据在坐标纸上描点,再计算与这些数据相符合的多项式以得到普遍规律。神经网络也可以大致这样理解,不过神经网络的系数过多,求解难度巨大,为解决这一问题,人们提出了梯度下降(Gradient descent)。将函数预测的数值和实际数据点的数值误差平方相加得到相应的损失函数,显然损失函数越小对结果的预测越精准。梯度下降则是通过每次改变一点点,根据损失函数的导数进行调整,从而得到最优的损失函数,如果有两个系数,则会得到一个损失曲面,对于这个损失曲面,固定一个系数,变化另一个系数,这样我们就能得到对于那个变化系数的偏导数,将这两个系数对应的损失函数对应的偏导数拼在一起,就得到了梯度。梯度即在某个给定位置函数值变化最快的方向,我们每次向着局部损失函数下降最快的方向前进对系数进行调节,这就是梯度下降的方法。两个系数可以延伸到多个系数,梯度下降可以找到一个损失函数比较低的函数拟合数据的底层规律。

可是对于一个非常复杂的神经网络,我们应该如何计算梯度呢?这时候就需要用到反向传播(Back Propagation)。我们关心的是每个系数改变一点点,损失函数对应的变化趋势,而这个过程是可以由后到前,层层传递的。

链式法则:
$$
\frac{\partial f(g(x))}{\partial x} = f'(g(x))g'(x)
$$
有了链式法则,我们就可以从后往前一步步拆解得到每一个参数的导数,因为任何一个参数到损失函数中间一定经过了一系列函数的复合。从损失函数往回看的时候把每一步传导的导函数乘在一起,(?得到系数对于整个输出损失函数的梯度,这就是反向传播。

#### 损失函数

[点击查看课程链接](https://www.bilibili.com/video/BV1YsqSY8EiW?spm_id_from=333.788.player.switch&vd_source=5b20ceba8ceda029b4d352ff81c5dd06&p=6)

以识别一张图片上是什么动物为例,一个权重参数矩阵,行数代表着可能的种类,列数则是像素点的个数。权重参数的大小代表着重要性,正负代表着是促进还是抑制。

这个权重参数矩阵是如何得来的呢?先随机地构建一个矩阵,再在迭代的过程中不断对权重参数进行优化。(猜测就是用梯度下降法进行优化)

损失函数有很多种,例如之前提到的将函数预测的数值和实际数据点的数值误差平方相加等等,用来衡量当前权重参数的效果。

#### 梯度下降法

[点击查看课程链接](https://www.bilibili.com/video/BV1Ux411j7ri/?spm_id_from=333.1387.collection.video_card.click&vd_source=3ce9ddb6c893b26bce162a1a0b30e8c5)

代价函数即所有样本上损失函数的平均值。

我们需要知道系数如何调节才能使代价函数向着变小的方向走。梯度下降法就是用来找最小的代价函数。

函数$f(x_1, x_2, \dots, x_n)$的梯度$\nabla f = \left( \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, \dots, \frac{\partial f}{\partial x_n} \right)$反应了函数增长最陡峭的方向,沿梯度反方向走,函数下降的最快。因此我们需要求出代价函数的梯度,再按梯度反方向走一小步,然后循环。这种将函数输入值向其负梯度方向微调一定倍数,来反复迭代的过程就是梯度下降法。

#### 反向传播算法(Back Propagation)

[点击查看课程链接](https://www.bilibili.com/video/BV1YsqSY8EiW?spm_id_from=333.788.player.switch&vd_source=5b20ceba8ceda029b4d352ff81c5dd06&p=8)

深度学习中我们要调节权重参数以使损失函数越小越好。

可以举一个简单但相似的例子函数$$f(x, y, z) = (x + y)z$$,我们调节x,y,z是函数值最小,已知中间变量 $q = x + y$,则最终函数可以表示为 $f = q \cdot z$。对x求偏导:$\frac{\partial f}{\partial x} = \frac{\partial f}{\partial q} \cdot \frac{\partial q}{\partial x}$ (还是链式法则),求得偏导就得知了x变化对函数值得影响。

假设一个函数$$((xw_1)w_2)w_3 = f$$首先看$w_3$对$f$的贡献,再看$w_2$再看$w_1$,从后往前层层传播,即反向传播的过程。因为直接计算损失函数对输入层权重的导数极其困难,而从后往前利用已计算的偏导数可以极大地减少重复计算

#### 卷积神经网络CNN

[点击查看课程链接](https://www.bilibili.com/video/BV1YsqSY8EiW?spm_id_from=333.788.videopod.sections&vd_source=5b20ceba8ceda029b4d352ff81c5dd06&p=130)

CNN能在一定程度上解决权重参数矩阵过大,训练时间较长等问题。

CNN与传统网络的区别:传统网络处理的是一维数据(如向量、表格数据)CNN处理的是二维/三维数据(如图像、视频)。

卷积神经网络(CNN)的基本架构是由输入层接收数据,经卷积层提取特征和池化层降维压缩后,再通过全连接层汇总信息并输出最终结果。

##### 卷积层

卷积把原始数据进行分割多个小区域,对于每个小区域计算其特征值。

###### 卷积特征值的计算方法:

对于每一个小区域,将其内部的输入值与权重参数矩阵中对应位置的权重参数相乘再相加,再将每个小区域的特征值相加,最后再加上一个偏置项。

AI给的描述:将卷积核放置在输入图像的起始位置(通常是左上角),将卷积核覆盖区域的像素值与卷积核对应的权重值逐一相乘,再将将所有乘法得到的结果相加。在求和结果上加上一个偏置项 $b$。

数学公式:

$$
y = \sigma \left( \sum_{i=1}^{k} \sum_{j=1}^{k} (x_{i\_j} \cdot w_{i\_j}) + b \right)
$$

**$x_{i,j}$**:输入图像局部区域的像素值。

**$w_{i,j}$**:卷积核的权重值。

**$k$**:卷积核的尺寸(如 3×3)。

**$b$**:偏置(Bias)。

**$\sigma$**:激活函数。

###### 卷积层涉及参数:

步长:每次的小区域滑动几个单元格。

卷积核尺寸:卷积核尺寸越小,提取越精细

边缘填充:中间位置在提取时会被多次提取(多个小区域的交集位置),而边缘信息的提取次数少的得多,为解决边界特征信息提取不充分的问题,在数据周围以0为值进行边缘填充。

卷积核个数:决定了输出的通道数 (Channels)。

###### 卷积结果计算公式:

长度:
$$H_2 = \frac{H_1 – F_H + 2P}{S} + 1$$

宽度:

$$W_2 = \frac{W_1 – F_W + 2P}{S} + 1$$

变量含义说明:

其中 $W_1$、$H_1$ 表示输入的宽度、长度;$W_2$、$H_2$ 表示输出特征图的宽度、长度;$F$ 表示卷积核长和宽的大小;$S$ 表示滑动窗口的步长;$P$ 表示边界填充(加几圈0)。

##### 池化层

池化层的核心作用是按照一定的规则,把一个区域内的像素点进行压缩。

最大池化:对其中一个特征图,滑动选择不同的区域,把其中最大的拿出来。

##### 整体架构

1. 卷积层 (Conv):提取特征。

2. 激活层 (ReLU):引入非线性,决定哪些特征被保留。

3. 池化层 (Pool):压缩特征,减少计算量。

经上面三层后,经过转换,将三维张量拉成一维向量,进入全连接层,进行分类。

##### 残差网络

在残差网络出现之前,神经网络堆叠得越深,性能反而下降。

如果有一层的效果不好,那么输出 $y = x$,也就是把输入原封不动地传下去。这样就能保证网络至少不会比之前的差。

##### 感受野

感受野指的是输出特征图上的一个像素点,在原始输入图像上能看到的范围有多大,即有多少个值参与计算得到的。

感受野计算公式(从前往后推导):

$$RF_{i+1} = RF_i + (k – 1) \times \prod_{j=1}^{i} s_j$$

**$RF_i$**:当前层的感受野。

**$k$**:当前层的卷积核大小。

**$s_j$**:前面每一层的步长乘积。

例:一个堆叠3个3*3的卷积层,并且保持滑动窗口步长为1。

First Conv为第一层,依次向后延

所有层的卷积核大小 $k = 3$,步长 $s = 1$。

第一层的感受野 $RF_1 = k $(卷积核大小);

通过公式计算第二层$$RF_2 = 3 + (3 – 1) \times 1 = 5$$,第二层卷积后的感受野是 $5 \times 5$;

接着计算第三层$$RF_3 = 5 + (3 – 1) \times (1 \times 1) = 7$$,第三层卷积后的感受野最终为 $7 \times 7$。

#### 循环神经网络(RNN,LSTM)

在卷积神经网络(CNN)中,每一次信息处理都是独立的;但在 RNN 中,模型会“记住”之前的信息,这对于处理序列数据非常有优势。RNN的弱点是当序列非常长时,由于在反向传播过程中梯度被连乘了太多次,传到前面的层时已经趋近于 0。比如一本书RNN 往往只能记住最近的几个词,而忘了文章开头讲了什么。

LSTM在RNN的基础上进行改进,LSTM通过控制参数,决定什么样的信息会被保留什么样的会被遗忘,只记忆重要信息。

##### RNN

[点击查看课程链接](https://www.bilibili.com/video/BV1e5411K7oW?spm_id_from=333.788.videopod.episodes&vd_source=3ce9ddb6c893b26bce162a1a0b30e8c5&p=2)

![image-20260320002032325](/wp-content/uploads/2026/04/image-20260320002032325.png){.aligncenter}
图上是一个多输入多输出模型中的一个单元。$x^{\langle t \rangle}$为一个输入,$\hat{y}^{\langle t \rangle}$为一个输出。

$a^{\langle t-1 \rangle}$代表上一个状态

$a^{\langle t \rangle}$代表当前的输出状态,会传给下一个单元。

W是权重参数,tanh是激活函数,b为偏置项。

###### 特点

1.串联结构:体现出“前因后果”,后面结果的生成,要参考前面的信息。

2.所有特征共享同一套参数。

###### 损失函数

整个序列的损失函数=单个时间步的损失函数加起来

###### 反向传播

前面的BP算法

###### RNN的梯度消失和梯度爆炸

梯度消失:参数更新只能捕捉到局部依赖关系,没法再捕捉序列之间的长期关联或者依赖关系

网格参数梯度推导:

$$S_1 = \tanh(W_x X_1 + W_s S_0 + b_1)$$

$$S_2 = \tanh(W_x X_2 + W_s S_1 + b_1)$$

$$S_3 = \tanh(W_x X_3 + W_s S_2 + b_1)$$

$$O_1 = W_o S_1 + b_2$$

$$O_2 = W_o S_2 + b_2$$

$$O_3 = W_o S_3 + b_2$$

W较小时(0-1),经过多次连乘,会导致梯度消失。

W较大时,经过多次连乘,会导致梯度爆炸。

##### LSTM

[点击查看课程链接](https://www.bilibili.com/video/BV1qM4y1M7Nv/?spm_id_from=333.337.search-card.all.click&vd_source=3ce9ddb6c893b26bce162a1a0b30e8c5)

![images](/wp-content/uploads/2026/04/images.png){.alignnone}

###### 各个单元所起到的作用:

**$X_t$ **:当前输入

**$C_{t-1}$ **:上一层细胞状态。

**$h_{t-1}$ **:上一层隐藏状态。

**$\sigma$**:门单元,输出 $0 \sim 1$ 的概率,决定信息通过多少(0 丢弃,1 保留)。

$f_{t}$:遗忘门,丢弃$C_{t-1}$中无用的信息。$f_t$是由 0 or 1 构成的向量,通过与$f_t$相乘即可实现对无用信息的丢弃。

$g_t$:候选记忆 ,通过 tanh 激活,产生待写入细胞状态的候选值,经过 $i_t $ 筛选后写入 $c_t$。

$i_{t}$:更新门,作用的对象是$g_t$,将$g_t$中无用的信息过滤掉。

$o_{t}$:输出门,$C_t$输入tanh中,经tanh激活。$o_t$决定当前的 $C_t$ 有多少内容要展示给 $h_t$

**$h_t$**:当前时刻的输出

###### 前向传播过程公式:

1.$f_t = \sigma(\tilde{f}_t) = \sigma(W_{xf}x_t + W_{hf}h_{t-1} + b_f)$ //W为权重值

2.$g_t = \tanh(\tilde{g}_t) = \tanh(W_{xg}x_t + W_{hg}h_{t-1} + b_g)$ //$g_t$图中未标注

3.$i_t = \sigma(\tilde{i}_t) = \sigma(W_{xi}x_t + W_{hi}h_{t-1} + b_i)$

4.$c_t = c_{t-1} \odot f_t + g_t \odot i_t$ //$\odot$:逐元素相乘

5.$o_t = \sigma(\tilde{o}_t) = \sigma(W_{xo}x_t + W_{ho}h_{t-1} + b_o)$

6.$m_t = \tanh(c_t)$ //$c_t$经4生成

7.$h_t = o_t \odot m_t$

8.$y_t = W_{yh}h_t + b_y$

暂无评论

发送评论 编辑评论


				
下一篇