神经网络相关学习笔记
M-P神经元模型
最经典的,在这个模型中,神经元接收到来自n哥其他神经元传过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总数入值将与神经元的阈值进行比较,然后通过激活函数处理以产生神经元的输出。
把许多个这样的神经元按照一定的层次结构连接起来,就得到了神经网络。
误差逆传播算法
误差逆传播算法(Backpropagation,简称 BP 算法)是深度学习中用于训练神经网络的核心算法
它的本质是微积分中链式法则(Chain Rule)在多层复合函数梯度计算中的工程实现。
在神经网络中,我们通过前向传播计算出模型的预测值,并计算其与真实标签之间的差距(损失值 $E$)。BP 算法的核心任务,就是高效地将这个全局损失误差分配到网络中的每一个权重参数 $w$ 和偏置 $b$ 上,计算出梯度 $\frac{\partial E}{\partial w}$,从而利用梯度下降法更新参数。
核心数学机制
为了在计算图(Computational Graph)中实现最高效的计算,BP 算法引入了一个关键的中间变量——误差项(Error Term,通常用 $\delta$ 表示)。它定义为损失函数对某一层净输入(未激活的加权和 $z$)的偏导数。
假设一个多层网络中,某神经元当前的净输入为 $z = \sum w_i a_i + b$,激活后的输出为 $a = f(z)$。
1.输出层的误差项 $\delta^L$
对于最终的输出层 $L$,其误差信号直接来源于损失函数 $E$。
根据链式法则:
$\frac{\partial E}{\partial a^L}$ 取决于你选择的损失函数(如均方误差或交叉熵)。$f’(z^L)$ 是输出层激活函数的导数。
2.隐藏层的误差项 $\delta^l$(逆传播的核心)
对于任意一个隐藏层 $l$,它并没有直接连接损失函数,它的误差是从它后面的那一层($l+1$ 层)传回来的。
通过链式法则展开:
因为 $z^{l+1} = W^{l+1} a^l + b^{l+1}$,所以 $\frac{\partial z^{l+1}}{\partial a^l} = W^{l+1}$。带入后得到 BP 算法的经典递推公式:
含义:后一层的误差项 $\delta^{l+1}$ 通过权重矩阵 $W^{l+1}$ 进行反向投影,然后与当前层激活函数的导数 $f’(z^l)$ 进行按元素相乘($\odot$)。这是误差“逆传播”的几何与代数图景。
3.计算最终的参数梯度
一旦计算出了每一层的误差项 $\delta^l$,任意一层参数的梯度就可以通过极其简单的局部乘法得到:
权重的梯度:$\frac{\partial E}{\partial W^l} = \delta^l (a^{l-1})^T$ (当前层的误差项 $\times$ 前一层的输入信号)
偏置的梯度:$\frac{\partial E}{\partial b^l} = \delta^l$
- 梯度的计算:严格逐层向后推导根据多元微积分的链式法则,参数梯度 $\frac{\partial E}{\partial W}$ 的计算过程必须是逐层反向的。你必须先求出第 $L$ 层的误差项 $\delta^L$,才能利用当前的权重矩阵反向投影出第 $L-1$ 层的误差项 $\delta^{l-1}$。在这个阶段,计算图的数据流向是逐层递进的,但网络中的任何权重参数都没有发生改变。计算出的每一层梯度都会被暂时保存在内存(或寄存器/显存)中。
- 参数的更新:全局同步执行当反向传播计算完成,网络中所有层的所有参数梯度都已计算完毕并被缓存后,优化算法(如随机梯度下降 SGD)才会读取这些缓存的梯度,统一对所有层执行更新计算:
深度学习
端到端的表征学习 (Representation Learning)
端到端学习(End-to-End Learning),也称端到端训练,是指在学习过程中不进行分模块或分阶段训练,直接优化任务的总体目标。 在端到端学习中,一般不需要明确地给出不同模块或阶段的功能,中间过程不需要人为干预。 端到端学习的训练数据为“输入-输出”对的形式,无须提供其他额外信息。
在深度学习中,网络的多个隐藏层充当了自动特征提取器的角色。它们将原始输入进行逐层、非线性的空间变换:
浅层:提取底层的局部特征(例如图像中的边缘轮廓,或音频中的基础频段)。
中层:将局部特征组合成更高维的模式(例如几何形状)。
深层:抽象出具有高度语义信息的特征(例如识别出具体的物体概念)。
网络中的每一步 $y = \sigma(Wx + b)$(其中 $\sigma$ 为非线性激活函数),都在将数据从一个纠缠不清的特征空间,映射折叠到一个更容易被线性分类的全新空间中。层数越“深”,网络能够表达的非线性拓扑变换就越复杂。
CNN(卷积神经网络)
卷积神经网络 (CNN, Convolutional Neural Network) 是一种专门用来处理具有已知网格状拓扑结构数据的前馈神经网络。最典型的例子就是时间序列数据(1D 网格)和图像数据(2D 像素网格)。
底层的数学运算就是二维互相关(通常称为卷积)。我们定义一个很小的权重矩阵(比如 3x3),称为卷积核 (Filter / Kernel)。让这个小矩阵像一个放大镜一样,在整张图片上从左到右、从上到下滑动。每滑动到一个位置,就将卷积核的值与图片对应像素的值进行逐元素相乘并求和(点积运算),得出一个新的数值。
CNN 不再让隐藏层的神经元与上一层的所有节点相连(全连接),而是强制要求它们只连接到一个局部的空间区域,这个区域被称为感受野 (Receptive Field)。
权值共享:滑动的过程中,同一个卷积核在滑动扫过整张图片时,它的权重参数是不变的。
CNN 的核心机制就是局部感受野(Local Receptive Fields)和权值共享(Weight Sharing),主要处理具有空间拓扑结构的数据(如图像)。
典型的 CNN 架构流水线结合这三个机制,一个标准的 CNN 就像一条流水线:
输入图像 $\to$[卷积层 $\to$ ReLU 激活 $\to$ 池化层] (这一组操作可能会堆叠和重复很多次,特征图变得越来越小,但通道数/厚度越来越深) $\to$展平 (Flatten):将三维的特征图压平为一维向量 $\to$全连接层 (Dense):利用提取出的高度抽象特征进行最终的逻辑判断 $\to$输出层:输出分类概率。
在现代深度学习中,CNN 几乎不再使用逐层无监督预训练了,原因在于工程底层架构和数学工具的突破:
- ReLU 激活函数:数学上极其简单的 $f(x) = \max(0, x)$ 直接让正半轴的梯度恒为 1,从根本上缓解了 Sigmoid 带来的梯度消失。
- Batch Normalization (批归一化):强制将每一层的输入数据分布拉回标准正态分布,让网络极其容易收敛。
- 残差连接 (ResNet):引入了跳跃连接(Skip Connection),让梯度可以直接跨层反向流动。
PS:
卷积神经网络的理解仍不透彻,将持续更新。