LLM学习笔记-神经网络的基本组成元素

神经网络的基本结构

神经元 (simple neuron)

w ww（weight）：权重
x xx：输入值
b bb：偏置
偏置类似于线性方程里面的截距
主要作用：
调整激活函数的阈值：偏置 b bb 可以看作是调整激活函数的阈值。没有偏置的神经元的输出完全依赖于输入的加权和。当输入的加权和为零时，没有偏置的神经元将总是输出相同的值。然而，加入偏置 b bb 后，即使输入的加权和为零，神经元也可以输出不同的值，从而增加了模型的灵活性。
提高模型的表达能力：通过增加偏置项，神经网络能够拟合更多类型的数据分布。偏置项允许神经网络更好地学习数据的复杂特征，从而提高了模型的表达能力和泛化能力。
避免模型欠拟合：偏置项可以帮助模型避免欠拟合问题。欠拟合发生在模型无法捕捉训练数据的潜在模式时。偏置项允许神经元在没有显著输入信号的情况下激活，从而帮助模型更好地拟合训练数据。
f ff：激活函数
注意：
这里的输出是一个标量， wT x\mathbf{w}^T\mathbf{x}wTx是点乘
公式也能写作

y=f(∑iwixi+b)y=f(∑_iw_ix_i+b)y=f(∑i​wi​xi​+b)

单层神经网络 (Single layer neural network)

单层神经元里的多个神经元都可以进并行计算

并行计算方式见注意

这里每个神经元都可以输出一个标量
注意：
这里并行计算方式是把权重 w 从一个向量变成了一个矩阵，偏置b bb从一个标量变成了一个向量，注意不是我们理解的通过多线程来进行并行计算
这里激活函数的计算是在将输入向量与权重矩阵相乘并加上偏置之后进行的
加权和计算：

首先，将输入向量 x\mathbf{x}x与权重矩阵 W\mathbf{W}W相乘得到加权和向量：
z=Wx\mathbf{z=Wx}z=Wx
其中， z\mathbf{z}z是一个向量，其每个元素对应一个神经元的加权和。

然后将偏置向量 b bb加到加权和向量上： z=Wx+b\mathbf{z=Wx}+bz=Wx+b

激活函数计算：

激活函数 f ff 应用于加权和向量 z\mathbf{z}z的每个元素，得到输出向量 y\mathbf{y}y：

y=f(z)\mathbf{y} = f(\mathbf{z})y=f(z)

具体来说，如果我们有 m mm 个神经元，z\mathbf{z}z 和 y\mathbf{y}y 都是长度为 m mm 的向量。激活函数 f ff 会逐元素（element-wise）地应用于 z\mathbf{z}z 的每个元素 zi z_izi​，得到对应的输出 yi y_iyi​：

yi=f(zi)y_i = f(z_i)yi​=f(zi​)

多层神经网络 (Multilayer neural network)

通过叠加多个类似的层我们就可以得到一个多层神经网络

前向计算：从输入开始依次计算每一层的结果

输入层（input layer)-> 隐藏层 (hidden layer)-> 输出层 (output layer)

隐藏层: 在输入之前添加的多层网络

注意：隐藏层的输出通常用 h\mathbf{h}h来表示，这里的输出 h\mathbf{h}h是一个向量，主要由线性变换和激活函数得到

重点！！！：

激活函数的作用：

引入非线性：激活函数将线性模型转换为非线性模型。因为没有激活函数的神经网络本质上就是线性变换的叠加，无论网络有多少层，都等价于一层线性变换。防止了多层神经网络塌缩为单一的神经网络，非线性激活函数使得神经网络能够学习和表示复杂的非线性关系。

神经网络中如果只存在线性运算，则多层的神经网络可以转换为单层的神经网络

增加网络的表达能力：通过引入非线性，激活函数使得神经网络能够拟合任意复杂的函数。这大大增加了网络的表达能力和泛化能力，使其能够处理各种各样的数据集和任务。

帮助梯度下降收敛：某些激活函数（如 ReLU）可以减轻梯度消失问题，从而帮助梯度下降算法更快收敛。激活函数的选择可以影响模型的训练效率和效果。

激活函数 (activation function)

Sigmoid：把负无穷到正无穷的输入转换为 0 到 1

Tanh：把负无穷到正无穷的输入转换为负 1 到 1

注意：Tanh 输入是 0 的时候输出也是 0

ReLU：对于正数的输入，他的输出仍然是原来的数，对于负数的输入，他的输出就是 0

Softmax：用于多分类问题的输出层，将输入转换为概率分布，输出值在 (0, 1) 之间，并且总和为 1

公式：

Copy f(zi)=ez i∑i e zj f(z_i)=\frac{e^zi}{∑_ie^{zj}}f(zi​)=∑i​ezjezi​

输出层 (outputlayer)

与隐藏层有一些相通之处，这里取决于你想让模型输出什么样的数据

线性输出：直接在隐藏层后面再加一个线性层，输出得到一个值，主要用于回归问题

Sigmoid：与激活函数 Sigmoid 函数类似，先用一个普通的线性层得到一个值 y yy，然后再对这个值 y yy应用 sigmoid 激活函数把输出压缩到0 到 1，主要用于解决二分类问题，我们用输出 y yy来表示这个模型预测当前输入属于某一个类的概率，用 1−y 1-y1−y来表示属于另外一个类的概率

softmax：主要用于解决多分类问题（分类类别数量 >2），首先对最后一个隐藏层应用一个线性层来得到一个输出 z zz，在对这个值 z zz应用 softmax 激活函数，得到不同类别的概率分布，让模型找到输出属于某一个类别的概率