神经网络是一种受生物大脑神经元连接方式启发的 机器学习模型,核心功能是通过多层非线性变换从数据中学习规律,实现预测、分类、模式识别等任务。
一、核心组成单元
1. 神经元(Neuron)
神经网络的基本计算单元,接收输入信号,通过激活函数处理后输出结果。神经元有几个重要的组成部分分别是输入,权重(Weight),偏置(Bias),激活函数(Activation Function)。下面是关于他们的介绍
- 输入(input):多个特征值(如图像的像素值、文本的词向量)。
- 权重(Weight):每个输入对应一个权重,代表该特征的重要性。
- 偏置(Bias):调节神经元输出的常数项,类似线性方程中的截距。
- 激活函数(Activation Function):对加权求和结果进行非线性转换,使网络能学习复杂关系(如 $ReLU$、$Sigmoid$ 等)。
用公式来说神经网络中主要发生了这样的过程,首先假设一个向量 $\vec{w}$ 这个代表的是这个节点的权重 $\vec{x}$ 代表的是输入的数据,$b$ 是偏置。 令 $z=\vec{w}\cdot\vec{x}+b$ 然后激活函数我们令其为 $g(z)$ 我们在这个过程中所干的事情就是先计算出 $z$ 然后将其带入激活函数,得到一个值。这就是神经元的输出
2.层(layer)
就是神经元按照层级排列的结构,主要分为三类
- 输入层(Input Layer):接收原始数据,无计算过程。
- 隐藏层(Hidden Layer):位于输入层和输出层之间,负责特征提取和转换,层数和神经元数量决定网络复杂度。
- 输出层(Output Layer):输出最终结果,如分类任务的类别概率、回归任务的预测值。
二、神经网络的工作原理
1.前向传播(Forward Propagation)
这个过程就是一个信号从输入层流入,经隐藏层逐层计算,最终从输出层得到预测结果的过程。每个神经元的结果是一个标量, 我们通过这个神经网络层得到的是一个向量。最后结果出来后我们带入 损失函数(Loss Function) 进行计算
2.反向传播(Backward propagation)
反向传播的最大用处一般是用于高效计算导数,然后通过梯度下降来训练模型, 用公式表达出就是这样的。
$$
(\frac{\partial J}{\partial \hat{y}} \rightarrow \frac{\partial J}{\partial z_2} \rightarrow \frac{\partial J}{\partial W_2}、\frac{\partial J}{\partial b_2} \rightarrow \frac{\partial J}{\partial a_1} \rightarrow \frac{\partial J}{\partial z_1} \rightarrow \frac{\partial J}{\partial W_1}、\frac{\partial J}{\partial b_1})
$$
反向传播通过链式法则和计算图实现高效的导数计算:
- 链式法则:将复杂函数的导数分解为多个简单函数的导数乘积。例如,若 $J = f(a)$ 且 $a = g(z)$ 且 $z = h(w)$,则 $$\frac{\partial J}{\partial w} = \frac{\partial J}{\partial a} \cdot \frac{\partial a}{\partial z} \cdot \frac{\partial z}{\partial w}$$
- 反向遍历计算图:从损失函数 J 开始,沿计算图反向(从输出层到输入层)逐层计算导数,每一步只需要前一层的导数结果和当前层的局部导数(如激活函数的导数、矩阵乘法的导数)。
这种方式避免了冗余计算,将导数计算的时间复杂度从参数数量的三次方降至线性,使深层网络的训练成为可能。
三、常用的激活函数(Activation Function)成本函数(Cost Function)
激活函数是神经网络中神经元的 “决策函数”,对输入的加权和进行非线性变换,使模型能够学习复杂的非线性关系。没有激活函数,多层神经网络会退化为线性模型(等价于单层感知机)。
一、常用的成本函数(Cost Function)
首先先明确一下 损失函数(Loss Function) 与 成本函数(Cost Function) 之间的关系与区别。
- 损失函数(Loss Function):通常指单个样本的误差,公式为 $L(\hat{y}_i, y_i) = (\hat{y}_i - y_i)^2$ 用于衡量模型对单个样本的预测误差。
- 成本函数(Cost Function):通常指整个训练集的平均误差,它是所有样本损失的平均值,用于衡量模型在整个训练集上的整体表现。
体现在公式上就是
$$
J(\hat{y},y)=\frac{1}{n}\sum_{i=1}^{n}{L(\hat{y_i},y_i)}
$$
一、回归任务
1.均方误差(Mean Squared Error,MSE)
公式如下
$$
J=\frac{1}{n} \sum_{i=1}^{n}(\hat{y}-y)^2
$$
-特点:计算简单,对异常值敏感,因为误差是平方计算,较大的误差会被放大,常用于线性回归等模型 。
2.平均绝对误差(Mean Absolute Error,MAE)
公式如下
$$
J=\frac{1}{n} \sum_{i=1}^{n}|\hat{y}-y|
$$
特点:相比于 MSE,MAE 对异常值更鲁棒,因为它没有对误差进行平方操作,不会放大异常值的影响。但 MAE 在某些点上不可导,不利于使用梯度下降等优化算法。
3.均方根误差(Root Mean Squared Error,RMSE)
公式如下
$$
J=\sqrt{\frac{1}{n}\sum_{i=1}^{n}(y_i-y_i)^2}
$$
特点:RMSE 与预测值和真实值有相同的量纲,便于理解模型预测误差的实际大小,同样对异常值敏感。
二、分类任务
1.交叉熵损失(Cross - Entropy Loss)
公式如下
$$
J = -\frac{1}{n}\sum_{i = 1}^{n}[y_{i}\log(\hat{y}_{i})+(1 - y_{i})\log(1-\hat{y}_{i})]
$$
其中 $y_{i} \in \{0, 1\}$ 是样本的真实类别标签,$\hat{y}_{i}$ 是模型预测样本属于正类 $y = 1$的概率。
特点:当预测概率接近真实标签时,损失值会迅速减小;当预测概率远离真实标签时,损失值会增大,能够很好地衡量分类模型的性能。
2.多分类交叉熵损失(也称为 Softmax 交叉熵损失)
公式如下
$$
J = -\frac{1}{n}\sum_{i = 1}^{n}\sum_{j = 1}^{k}y_{ij}\log(\hat{y}_{ij})
$$
其中 $n$ 是样本数量,$k$ 是类别数,$y_{ij}$ 是第 $i$ 个样本属于第 $j$ 类的真实概率(通常是 $one - hot$ 编码形式),$\hat{y}_{ij}$ 是模型预测第 $i$ 个样本属于第 $j$ 类的概率。
二、常用的激活函数(Activation Function)
1.$ReLU$(Rectified Linear Unit,修正线性单元)
公式:$$f(z)=max(0,z)$$
$ReLU$ 是我们最常用的激活函数, 他的训练速度要比 $sigmoid$ 更快, 所以我们一般在隐藏层使用 $ReLU$ 激活函数。
特点:计算简单(仅需判断输入是否为正),训练速度快。解决了梯度消失问题(正区间导数恒为 1)。
2.$Sigmoid$ 函数
公式:
$$
\sigma(z)=\frac{1}{1+e^{-x}}
$$
特点:输出范围在 $(0, 1)$ 之间,可表示概率。平滑连续,易于求导。早期用于二分分类中,但现在很少用于隐藏层。最常用与多标签分类中的输出层中。使用 交叉熵损失 作为其损失函数
3.$Leaky ReLU$
公式:
$$
\sigma(z)=max(\alpha x, x)
$$
特点:对 ReLU 的改进,允许负输入有一个微小的梯度(如 $alpha=0.01$),避免 “死亡 ReLU”。但是缺点是 $\alpha$ 需要自己手动去设定
4.$softmax$ 函数
公式:
$$
\sigma(z)_i=\frac{e^{z_{i}}}{\sum_{j=1}^{K} e^{z_{j}}}
$$
特点:将多个输出值映射为 $(0, 1)$ 之间的概率分布,且总和为 1。常用于多分类任务的输出层,直接表示样本属于每个类别的概率。他的损失函数是 多分类交叉熵损失 。具体举例是 $MNIST$ 手写数字识别。
四、关于提高结果精度与训练速度的方法
众所周知, 由于计算机存储信息的特点。我们可以做一个优化, 在输出层时使用 线性回归激活函数 然后进行模型的训练。 在外部在根据这个神经网络输出的要求在外部对激活函数进行调用。这样能提高精度。
为了提高训练速度, 我们可以利用 $Adam$ (Adaptive Moment Estimation) 算法。该算法能够自适应动态调整学习率。具体如何实现的之后会单独出一篇文章进行讲解
Comments NOTHING