1.神经网络原理

1.1神经元模型

考虑单个(多个输入,一个输出),神经元模型:y=f(∑i=1nwixi+b)y=f(\sum_{i=1}^n w_ix_i+b)y=f(i=1nwixi+b),f一般为激活函数。写成矩阵的形式:y=f(wx+b)y=f(\bold {wx}+b)y=f(wx+b)。也成为感知器Perceptron。

1.2 神经网络结构

输入层,隐藏层(至少一个或多层),输出层。
层数具体问题具体看。也叫多层感知机(Muti-Layer Perceptron,MLP)

输入层x,1×2\bold{x}, 1\times2x,1×2。一般会重构成列向量。
隐藏层50维H=w1x+b1\bold{H=w_1x}+b_1H=w1x+b1。w1就是2*50
输出层Y=w2H+b2,1×4\bold{Y=w_2H }+b_2, 1\times4Y=w2H+b2,1×4
退化:网络层数增加但是没有改变泛化能力,甚至退化。

因此,引入激活函数,sigmod(越大越平缓,梯度消失问题),relu(常用)
要求可导,进行非线性变化。
输入层=>隐藏层(H\bold{H}H后加了激活函数)
=>输出层(多分类加了softmax,再进入交叉熵损失)
验证(以0.9为例):(a)1-0.9=0.1;(b)-log(0.9)=0.046接近1越准确。
交叉熵损失

参数w和b都可以自动优化

2多层感知机

2.1线性网络的局限

线性组合无法表示复杂的非线性数据。
h1=W1x+b1h_1=W_1x+b1h1=W1x+b1
h2=W2h1+b2=W2(W1x+b1)+b2=W2W1x+W2b1+b2=W′x+b′h_2=W_2h_1+b_2=W_2(W_1x+b1)+b_2=W_2W_1x+W_2b_1+b_2=W'x+b'h2=W2h1+b2=W2(W1x+b1)+b2=W2W1x+W2b1+b2=Wx+b
又是一个线性模型,如何用线性模型逼近或解决非线性问题。因此引入激活函数。

2.2如何引入非线性

激活函数activation function:h=f(Wh+hprev+bh)\bold{h} = f(\bold{W}_h+\bold{h}_{prev}+\bold{b}_h)h=f(Wh+hprev+bh)
高维空间可以实现线性可分,激活函数的目的就是为了实现映射到高维。

2.3多层感知器(Muti-Layer Perceptron)

输入层x∈Rn\bold{x} \in \mathbb{R}^nxRn
隐藏层W1∈Rm×n,b1∈Rm\bold{W}_1 \in \mathbb{R}^{m \times n}, \bold{b}_1 \in \mathbb{R}^{m}W1Rm×n,b1Rm
输出层W2∈Rm×k,b2∈Rk\bold{W}_2 \in \mathbb{R}^{m \times k}, \bold{b}_2 \in \mathbb{R}^{k}W2Rm×k,b2Rk

h=f(W1x+b1)\bold{h} =f (\bold{W_1 x + b_1})h=f(W1x+b1)
y=fy(W2Th+b2)\bold{y} =f_y (\bold{W_2^T h + b_2})y=fy(W2Th+b2)

多隐藏层:h1,h2,h3\bold{h}_1, \bold{h}_2, \bold{h}_3h1,h2,h3;输出y\bold{y}y

2.4激活函数

非线性转化作用
常用激活函数:sigmod,tanh,relu,softmax

  • sigmod函数
    投影到0-1,二分类问题,容易梯度消失(在接近0和1处)。
    线性空间的非线性,在高维非线性空间却是线性可分。

  • tanh函数
    sigmod的改进版;输出值压缩到(-1,1);输出以0为中心;更快的收敛速度
    输入值较大时,容易导致梯度消失
    映射到高维空间,使得原本线性不可分数据变得线性可分

  • relu函数
    多数情况的第一选择;解决梯度消失问题;计算比sigmod和tanh函数更快;Dying relu函数
    高维空间实现线性可分

  • softmax函数
    输入值映射到概率分布上;主要用在多分类问题;使得输出具有可解释性

3.前向与反向传播

3.1前向传播

深度前馈网络(deep feedforward network)
前馈神经网络(feedforward neural network)
一层的前向:h=f(Wh+hprev+bh)\bold{h}=f(\bold{W}_h + \bold{h}_{prev} + \bold{b}_h)h=f(Wh+hprev+bh)
最后的输出:y=fy(Wy+hm+by)\bold{y}= f_y (\bold{W}_y + \bold{h}_m + \bold{b}_y)y=fy(Wy+hm+by)

3.2损失函数

均方误差(MSE)
MSE=1n∑i=1n(yi−y^i)2MSE = \frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2MSE=n1i=1n(yiy^i)2

3.3反向传播(Back Propagation)

损失倒查分解
计算每层参数的梯度
偏导数的链式法则

假设第一层的输入为xijx_{ij}xij计算反向的偏导数

4.回归问题

4.1一元线性回归

最优化问题
民主投票
距离的衡量
∑i=1m(yi−y^i)2\sum_{i=1}^{m} (y_i - \hat{y}_i)^2i=1m(yiy^i)2
∑i=1m(yi−kxi−b)2\sum_{i=1}^{m} (y_i - kx_i-b)^2i=1m(yikxib)2
arg min⁡k,b∑i=1m(yi−kxi−b)2\argmin_{k,b} \sum_{i=1}^{m} (y_i - kx_i-b)^2argmink,bi=1m(yikxib)2
损失函数(loss function)
参数学习:最优化(凸优化)

4.2多元线性回归

Y=XWT\bold{Y} = \bold{XW}^{T}Y=XWT
找参数最小化目标函数:∑i=1m(yi−y^i)2\sum_{i=1}^{m} (y_i - \hat{y}_i)^2i=1m(yiy^i)2
arg min⁡w(y−Xw)⊤(y−Xw)\argmin_{\bold w} \bold{(y - Xw)^{\top} (y-Xw)}argminw(yXw)(yXw)
其中,y=[y1,⋯ ,ym]⊤,m×1\bold{y}=[y_1, \cdots, y_m]^{\top}, m\times1y=[y1,,ym],m×1
X=[1x1,1x1,2⋯x1,n1x2,1x2,2⋯x2,n⋮⋮⋮⋱⋮1xm,1xm,2⋯xm,n]m×(n+1)\bold{X}= \begin{bmatrix} 1 & x_{1,1} & x_{1,2} & \cdots & x_{1,n} \\ 1 & x_{2,1} & x_{2,2} & \cdots & x_{2,n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & x_{m,1} & x_{m,2} & \cdots & x_{m,n} \end{bmatrix}_{m \times (n+1)}X= 111x1,1x2,1xm,1x1,2x2,2xm,2x1,nx2,nxm,n m×(n+1)
w=[w0,⋯ ,wn]⊤,(n+1)×1\bold{w}=[w_0, \cdots, w_n]^{\top}, (n+1)\times1w=[w0,,wn],(n+1)×1

多元线性回归的正规方程解
w=(X⊤X)−1X⊤y\bold{w} = \bold{(X^\top X)^{-1} X^\top y}w=(XX)1Xy
时间复杂度较高,不如梯度下降法效率高。

4.3多项式回归

y=ax2+bx+cy=ax^2 + bx + cy=ax2+bx+c
y=ax1+bx2+cy=ax_1 + bx_2 + cy=ax1+bx2+c

6线性回归代码实现

假设输入与输出之间具有如下线性关系
y=wx+by=wx+by=wx+b
定义损失函数
MSE=1n∑i=1n(yi−y^i)2MSE = \frac{1}{n}\sum_{i=1}^{n} (y_i - \hat{y}_i)^2MSE=n1i=1n(yiy^i)2
计算损失函数对参数的梯度,按以下公式更新
w=w−α∂L∂ww=w-\alpha \frac{\partial L}{\partial w}w=wαwL
b=b−α∂L∂bb=b-\alpha \frac{\partial L}{\partial b}b=bαbL

7. 分类问题

7.1多分类问题的数学表示

使用一个向量表示输入数据,通常被称为“特征向量”
“one-hot”编码:猫[1,0,0][1,0,0][1,0,0][0,1,0][0,1,0][0,1,0][0,0,1][0,0,1][0,0,1]
很容易区分,但是多维的时候导致数据维度非常高。

使用每个类别的概率来表示输入数据属于该类别的可能性
猫0.7狗0.2鸟0.1
用一个向量x=[0.7,0.2,0.1]⊤\bold{x}=[0.7,0.2,0.1]^{\top}x=[0.7,0.2,0.1]
很容易表示输入数据属于不同类别的可能性
可以使用贝叶斯公式进行分类

7.2softmax回归

softmax回归,多项式逻辑回归
y^=softmax(Wx+b)\hat{y}={\rm softmax} (\bold{Wx+b})y^=softmax(Wx+b)
softmax(zi)=exp⁡(zi)∑j=1Kexp⁡(zj){\rm softmax}( \bold{z}_i) = \frac{\exp{(z_i)}}{\sum_{j=1}^{K} \exp (z_j)}softmax(zi)=j=1Kexp(zj)exp(zi)

7.3损失函数

均方误差作为损失函数就不太合适
在多项式逻辑回归中,通常使用对数似然函数或交叉熵

  • 二分类
    L(y,f(x))=−[ylog⁡(f(x))+(1−y)log⁡(1−f(x))]L(y,f(x)) = -[ y\log(f(x)) + (1-y)\log(1-f(x)) ]L(y,f(x))=[ylog(f(x))+(1y)log(1f(x))]
  • 多分类
    L(y,f(x))=−∑i[yilog⁡(f(xi))]L(y,f(x)) = - \sum_i [y_i \log(f(x_i))]L(y,f(x))=i[yilog(f(xi))]
    对数可以缩放

7.4交叉熵损失函数

cross-entropy loss function
与对数函数本质上等价
L(y,f(x))=−1m∑i=1m∑j=1nyijlog⁡p(xij)L(y,f(x)) = -\frac{1}{m} \sum_{i=1}^{m} \sum_{j=1}^{n} y_{ij}\log p(x_{ij})L(y,f(x))=m1i=1mj=1nyijlogp(xij)
当类别i属于类别j的概率


以下是优化后的笔记:

1. 神经网络原理

1.1 神经元模型
  • 基本模型:单个神经元处理多个输入(x1,x2,…,xnx_1, x_2, \dots, x_nx1,x2,,xn),生成一个输出(yyy)。公式为:
    y=f(∑i=1nwixi+b) y = f\left( \sum_{i=1}^n w_i x_i + b \right) y=f(i=1nwixi+b)
    其中:
    • wiw_iwi 是权重(weight),bbb 是偏置(bias)。
    • fff 是激活函数(activation function),引入非线性。
  • 矩阵形式:将输入和权重表示为向量,更简洁:
    y=f(wx+b) y = f(\mathbf{w} \mathbf{x} + b) y=f(wx+b)
    这里 x=[x1,x2,…,xn]T\mathbf{x} = [x_1, x_2, \dots, x_n]^Tx=[x1,x2,,xn]T 是输入列向量(n×1n \times 1n×1),w=[w1,w2,…,wn]\mathbf{w} = [w_1, w_2, \dots, w_n]w=[w1,w2,,wn] 是权重行向量(1×n1 \times n1×n)。该模型也称为感知器(Perceptron)。
1.2 神经网络结构

神经网络由多层组成,称为多层感知机(Multi-Layer Perceptron, MLP)。典型结构包括:

  1. 输入层
    • 输入数据 x\mathbf{x}x(例如一个样本有2个特征,维度为 1×21 \times 21×2)。
    • 实践中需重构为列向量(x∈R2×1\mathbf{x} \in \mathbb{R}^{2 \times 1}xR2×1)。
  2. 隐藏层(至少一层或多层):
    • 例如,50维隐藏层:
      H=w1x+b1 \mathbf{H} = \mathbf{w_1} \mathbf{x} + b_1 H=w1x+b1
      其中 w1\mathbf{w_1}w1 是权重矩阵(维度 50×250 \times 250×2),b1b_1b1 是偏置向量(50×150 \times 150×1),输出 H\mathbf{H}H50×150 \times 150×1
    • 关键操作H\mathbf{H}H 后需添加激活函数(如ReLU),实现非线性变换(详见1.3节)。
  3. 输出层
    • 输出结果:
      Y=w2H+b2 \mathbf{Y} = \mathbf{w_2} \mathbf{H} + b_2 Y=w2H+b2
      其中 w2\mathbf{w_2}w2 是权重矩阵(例如维度 4×504 \times 504×50),b2b_2b2 是偏置(4×14 \times 14×1),输出 Y\mathbf{Y}Y4×14 \times 14×1(对应4个类别)。
    • 多分类处理:输出层后添加Softmax函数,将 Y\mathbf{Y}Y 转换为概率分布,再用于交叉熵损失(详见1.4节)。

过深网络问题:层数增加可能降低泛化能力(如梯度消失)。解决方案是使用合适的激活函数(如ReLU替代Sigmoid),避免训练困难。

1.3 激活函数
  • 作用:引入非线性,使网络能拟合复杂函数。需可导以支持梯度优化。
  • 常见函数
    • Sigmoidf(x)=11+e−xf(x) = \frac{1}{1 + e^{-x}}f(x)=1+ex1,但易导致梯度消失(梯度随输入增大趋近0)。
    • ReLU(常用):f(x)=max⁡(0,x)f(x) = \max(0, x)f(x)=max(0,x),计算高效,缓解梯度消失问题。
  • 应用位置:隐藏层输出(如 H\mathbf{H}H)后必须添加激活函数;输出层视任务而定(如分类任务用Softmax)。
1.4 损失函数与优化
  • 输出层处理
    • 多分类任务:输出 Y\mathbf{Y}Y 后接Softmax函数,生成概率 p=[p1,p2,…,pk]T\mathbf{p} = [p_1, p_2, \dots, p_k]^Tp=[p1,p2,,pk]Tkkk 为类别数)。
  • 交叉熵损失(Cross-Entropy Loss):
    • 公式:L=−log⁡(ptrue)L = -\log(p_{\text{true}})L=log(ptrue),其中 ptruep_{\text{true}}ptrue 是真实类别的预测概率。
    • 验证示例:假设真实类别预测概率 p=0.9p = 0.9p=0.9
      • 损失值:L=−log⁡(0.9)≈0.046L = -\log(0.9) \approx 0.046L=log(0.9)0.046(值越小,预测越准确)。
      • 错误示例修正:原笔记“(a)1-0.9=0.1” 不适用,这是错误率而非交叉熵损失。
  • 参数优化:权重 w\mathbf{w}w 和偏置 bbb 通过梯度下降自动优化(如反向传播),最小化损失函数。

2 多层感知机

多层感知机(Multilayer Perceptron, MLP)是一种前馈人工神经网络,由输入层、一个或多个隐藏层和输出层组成。它通过引入非线性激活函数来解决线性模型无法处理的复杂问题。

2.1 线性网络的局限

线性模型(如单层感知机)只能处理线性可分的数据,但现实中许多问题是非线性的。例如,考虑一个简单的两层网络:

  • 第一层:h1=W1x+b1h_1 = \mathbf{W}_1 \mathbf{x} + \mathbf{b}_1h1=W1x+b1
  • 第二层:h2=W2h1+b2=W2(W1x+b1)+b2=W2W1x+W2b1+b2h_2 = \mathbf{W}_2 h_1 + \mathbf{b}_2 = \mathbf{W}_2 (\mathbf{W}_1 \mathbf{x} + \mathbf{b}_1) + \mathbf{b}_2 = \mathbf{W}_2 \mathbf{W}_1 \mathbf{x} + \mathbf{W}_2 \mathbf{b}_1 + \mathbf{b}_2h2=W2h1+b2=W2(W1x+b1)+b2=W2W1x+W2b1+b2
  • 简化后:h2=W′x+b′h_2 = \mathbf{W}' \mathbf{x} + \mathbf{b}'h2=Wx+b,其中 W′=W2W1\mathbf{W}' = \mathbf{W}_2 \mathbf{W}_1W=W2W1b′=W2b1+b2\mathbf{b}' = \mathbf{W}_2 \mathbf{b}_1 + \mathbf{b}_2b=W2b1+b2

这仍然是一个线性模型,因为输出是输入的线性组合。线性模型无法逼近非线性函数(如异或问题),因此需要引入非线性激活函数来打破线性限制。激活函数将输入映射到高维空间,使数据在高维中线性可分。

2.2 如何引入非线性激活函数

激活函数(activation function)引入非线性,使网络能学习复杂模式。其一般形式为:
h=f(Wx+b)\mathbf{h} = f(\mathbf{W} \mathbf{x} + \mathbf{b})h=f(Wx+b)
这里,fff 是激活函数,W\mathbf{W}W 是权重矩阵,x\mathbf{x}x 是输入向量,b\mathbf{b}b 是偏置向量。激活函数的作用是将线性变换后的结果进行非线性转换,从而将数据映射到高维空间(如通过核技巧),实现原本线性不可分数据的线性可分。例如,在高维空间中,一个简单的超平面就能分离复杂数据。

2.3 多层感知器

多层感知器扩展了单层网络,包含多个隐藏层。基本结构如下:

  • 输入层x∈Rn\mathbf{x} \in \mathbb{R}^nxRn,其中 nnn 是输入特征维度。
  • 隐藏层:权重矩阵 W1∈Rm×n\mathbf{W}_1 \in \mathbb{R}^{m \times n}W1Rm×n,偏置向量 b1∈Rm\mathbf{b}_1 \in \mathbb{R}^{m}b1Rm,输出为:
    h=f(W1x+b1)\mathbf{h} = f(\mathbf{W}_1 \mathbf{x} + \mathbf{b}_1)h=f(W1x+b1)
    这里,mmm 是隐藏单元数量,fff 是激活函数。
  • 输出层:权重矩阵 W2∈Rk×m\mathbf{W}_2 \in \mathbb{R}^{k \times m}W2Rk×m(注意:维度调整为 k×mk \times mk×m 以匹配输出),偏置向量 b2∈Rk\mathbf{b}_2 \in \mathbb{R}^{k}b2Rk,输出为:
    y=fy(W2⊤h+b2)\mathbf{y} = f_y(\mathbf{W}_2^\top \mathbf{h} + \mathbf{b}_2)y=fy(W2h+b2)
    其中 fyf_yfy 是输出层的激活函数(如 softmax 用于分类),kkk 是输出维度(如类别数)。

对于多隐藏层(例如三层隐藏层 h1,h2,h3\mathbf{h}_1, \mathbf{h}_2, \mathbf{h}_3h1,h2,h3):

  • h1=f(W1x+b1)\mathbf{h}_1 = f(\mathbf{W}_1 \mathbf{x} + \mathbf{b}_1)h1=f(W1x+b1)
  • h2=f(W2h1+b2)\mathbf{h}_2 = f(\mathbf{W}_2 \mathbf{h}_1 + \mathbf{b}_2)h2=f(W2h1+b2)
  • h3=f(W3h2+b3)\mathbf{h}_3 = f(\mathbf{W}_3 \mathbf{h}_2 + \mathbf{b}_3)h3=f(W3h2+b3)
  • 最终输出:y=fy(W4⊤h3+b4)\mathbf{y} = f_y(\mathbf{W}_4^\top \mathbf{h}_3 + \mathbf{b}_4)y=fy(W4h3+b4)

多层结构允许网络学习更复杂的特征表示,但需要合理初始化权重和选择激活函数以避免梯度问题。

2.4 激活函数

激活函数是神经网络的核心,用于引入非线性。常用激活函数包括:

  • Sigmoid 函数
    σ(x)=11+e−x\sigma(x) = \frac{1}{1 + e^{-x}}σ(x)=1+ex1
    它将输入压缩到 (0,1)(0,1)(0,1) 区间,适用于二分类问题(输出可解释为概率)。但容易导致梯度消失(当输入绝对值较大时,梯度接近 0),且输出不以零为中心,可能减慢训练。

  • Tanh 函数
    tanh⁡(x)=ex−e−xex+e−x\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}tanh(x)=ex+exexex
    Sigmoid 的改进版,输出范围为 (−1,1)(-1,1)(1,1),以零为中心,收敛速度更快。但同样存在梯度消失问题(输入较大时梯度饱和)。它通过映射到高维空间,帮助线性不可分数据变得可分。

  • ReLU 函数
    ReLU(x)=max⁡(0,x)\text{ReLU}(x) = \max(0, x)ReLU(x)=max(0,x)
    多数情况的首选,计算高效,解决梯度消失问题(正区间梯度为 1)。但存在 “dying ReLU” 问题(负输入梯度为 0,导致神经元失活)。在高维空间中,它促进稀疏激活,易于实现线性可分。

  • Softmax 函数
    softmax(z)i=ezi∑j=1kezj\text{softmax}(\mathbf{z})_i = \frac{e^{z_i}}{\sum_{j=1}^k e^{z_j}}softmax(z)i=j=1kezjezi
    主要用于多分类输出层,将输入映射为概率分布(输出和为 1),具有可解释性。它本身不是非线性激活函数,而是归一化操作,常与交叉熵损失结合。

选择激活函数时,需考虑任务类型:ReLU 适合隐藏层(高效、防梯度消失),Sigmoid/Tanh 用于特定场景,Softmax 用于多分类输出。实践中,ReLU 及其变体(如 Leaky ReLU)是常见选择。

总结

多层感知机通过非线性激活函数打破了线性模型的局限,能有效处理复杂数据。关键点包括:

  • 激活函数将数据映射到高维空间,实现线性可分。
  • 多层结构(输入层、隐藏层、输出层)允许特征抽象。
  • 激活函数的选择影响训练效率和性能(如避免梯度消失)。
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐