第5章 神经网络
更加详细内容可以看这篇文章
5.1 神经元模型
神经网络的基本单元是神经元模型。神经元模拟了生物神经元的行为,通过接收输入信号,进行加权求和,然后经过激活函数输出结果。
数学上,一个简单的神经元可以表示为:
y = f ( ∑ i = 1 n w i x i + b ) y = f\left(\sum_{i=1}^{n} w_i x_i + b\right) y=f(i=1∑nwixi+b)
其中, w i w_i wi是输入 x i x_i xi的权重, b b b是偏置, f f f是激活函数。
常见的激活函数包括Sigmoid函数、Tanh函数和ReLU函数,它们分别定义为:
Sigmoid ( x ) = 1 1 + e − x \text{Sigmoid}(x) = \frac{1}{1 + e^{-x}} Sigmoid(x)=1+e−x1
Tanh ( x ) = tanh ( x ) = e x − e − x e x + e − x \text{Tanh}(x) = \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} Tanh(x)=tanh(x)=ex+e−xex−e−x
ReLU ( x ) = max ( 0 , x ) \text{ReLU}(x) = \max(0, x) ReLU(x)=max(0,x)
这些激活函数各有特点,Sigmoid和Tanh函数压缩输入到固定范围内,但容易导致梯度消失问题;ReLU函数则通过简单的线性变换解决了梯度消失问题,但可能导致“死ReLU”现象。
5.2 感知机与多层网络
感知机是最简单的神经网络,由一个或多个神经元构成,它只能解决线性可分的问题。
感知机:两层神经元组成。
感知机的输出可以表示为:
y = sign ( ∑ i = 1 n w i x i + b ) y = \text{sign}\left(\sum_{i=1}^{n} w_i x_i + b\right) y=sign(i=1∑nwixi+b)
感知机的局限在于它仅能解决线性可分的问题。为了解决非线性问题,我们引入了多层感知机(MLP)。多层感知机通过引入隐藏层解决了非线性问题。一个两层感知机有输入层、隐藏层和输出层。其数学表示为:
h j = f ( ∑ i = 1 n w i j x i + b j ) h_j = f\left(\sum_{i=1}^{n} w_{ij} x_i + b_j\right) hj=f(i=1∑nwijxi+bj)
y k = g ( ∑ j = 1 m v j k h j + c k ) y_k = g\left(\sum_{j=1}^{m} v_{jk} h_j + c_k\right) yk=g(j=1∑mvjkhj+ck)
其中, w i j w_{ij} wij和 v j k v_{jk} vjk分别是输入层到隐藏层和隐藏层到输出层的权重, b j b_j bj和 c k c_k ck是偏置项, f f f和 g g g是激活函数。多层感知机的强大在于其能够通过多个隐藏层的组合,逼近任意复杂的函数。
5.3 误差逆传播算法
误差逆传播算法是训练多层神经网络的核心算法。其目标是通过最小化损失函数来调整网络的权重和偏置。常见的损失函数是均方误差(MSE),定义为:
E = 1 2 ∑ k = 1 K ( y k − t k ) 2 E = \frac{1}{2}\sum_{k=1}^{K} (y_k - t_k)^2 E=21k=1∑K(yk−tk)2
其中, y k y_k yk是网络的输出, t k t_k tk是目标值。反向传播通过链式求导法则计算损失函数相对于每个权重的梯度,然后使用梯度下降法更新权重:
w i j : = w i j − η ∂ E ∂ w i j w_{ij} := w_{ij} - \eta \frac{\partial E}{\partial w_{ij}} wij:=wij−η∂wij∂E
其中, η \eta η是学习率。
详细来说,反向传播算法分为以下几个步骤:
- 前向传播:计算每层神经元的输入和输出。
- 计算误差:使用损失函数计算输出层的误差。
- 反向传播:根据输出层的误差,利用链式求导法则逐层计算每层的误差。
- 更新权重:根据计算出的误差和梯度,调整每个权重和偏置。
梯度计算的关键在于链式法则。对于隐藏层的每个权重 w i j w_{ij} wij,其梯度可以表示为:
∂ E ∂ w i j = ∂ E ∂ y k ⋅ ∂ y k ∂ h j ⋅ ∂ h j ∂ w i j \frac{\partial E}{\partial w_{ij}} = \frac{\partial E}{\partial y_k} \cdot \frac{\partial y_k}{\partial h_j} \cdot \frac{\partial h_j}{\partial w_{ij}} ∂wij∂E=∂yk∂E⋅∂hj∂yk⋅∂wij∂hj
通过这种方式,网络能够逐层调整权重,使得损失函数逐渐减小,逼近最优解。
当然,继续补全和详细解释剩下的部分。
5.4 全局最小与局部极小
在训练神经网络的过程中,我们希望找到损失函数的全局最小值,但由于损失函数通常是非凸的,我们可能会陷入局部极小值。解决这一问题的方法包括初始化权重的多次尝试、使用动量(Momentum)方法、以及更复杂的优化算法如Adam优化器。
局部最小值是在某一区域内,函数的取值达到了最小,但是如果将这个区域扩展到定义域上来,那么这个局部最小值就不一定是最小的。
全局最小值,是在定义域内,函数值最小。全局最小一定是局部最小值,但“局部极小 ” 不一定是“全局最小 ”。因此我们的目标是找到 “ 全局最小 ”。
可能存在多个局部极小值,但却只会有一个全局最小值
动量方法通过引入动量项来加速梯度下降,并减少震荡,其更新规则为:
v t + 1 = γ v t + η ∂ E ∂ w i j v_{t+1} = \gamma v_t + \eta \frac{\partial E}{\partial w_{ij}} vt+1=γvt+η∂wij∂E
w i j : = w i j − v t + 1 w_{ij} := w_{ij} - v_{t+1} wij:=wij−vt+1
其中, γ \gamma γ是动量系数,通常设为0.9。动量方法通过保留先前梯度更新的方向,使得参数在正确方向上前进得更快。
Adam优化器结合了动量法和RMSProp方法,通过自适应调整学习率,加速收敛并降低震荡。其更新规则为:
m t = β 1 m t − 1 + ( 1 − β 1 ) ∇ E m_t = \beta_1 m_{t-1} + (1 - \beta_1) \nabla E mt=β1mt−1+(1−β1)∇E
v t = β 2 v t − 1 + ( 1 − β 2 ) ( ∇ E ) 2 v_t = \beta_2 v_{t-1} + (1 - \beta_2) (\nabla E)^2 vt=β2vt−1+(1−β2)(∇E)2
m ^ t = m t 1 − β 1 t \hat{m}_t = \frac{m_t}{1 - \beta_1^t} m^t=1−β1tmt
v ^ t = v t 1 − β 2 t \hat{v}_t = \frac{v_t}{1 - \beta_2^t} v^t=1−β2tvt
w = w − η m ^ t v ^ t + ϵ w = w - \eta \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} w=w−ηv^t+ϵm^t
其中, β 1 \beta_1 β1和 β 2 \beta_2 β2是超参数,常设为0.9和0.999, ϵ \epsilon ϵ是一个极小值防止分母为零。
5.5 其他常见神经网络
除了多层感知机,还有许多其他类型的神经网络。
-
卷积神经网络(CNN):
卷积神经网络专注于处理图像数据,通过卷积层提取特征。卷积操作可以表示为:( I ∗ K ) ( x , y ) = ∑ i = 0 m − 1 ∑ j = 0 n − 1 I ( x + i , y + j ) K ( i , j ) (I * K)(x, y) = \sum_{i=0}^{m-1}\sum_{j=0}^{n-1} I(x+i, y+j) K(i, j) (I∗K)(x,y)=i=0∑m−1j=0∑n−1I(x+i,y+j)K(i,j)
其中, I I I是输入图像, K K K是卷积核。卷积层通过滑动窗口操作提取局部特征,并通过池化层(如最大池化)进一步减少特征图的尺寸。典型的CNN架构包括卷积层、池化层、全连接层等。
-
循环神经网络(RNN):
循环神经网络用于处理序列数据,通过隐藏层之间的循环连接捕捉时间序列关系。其更新公式为:h t = f ( W h h h t − 1 + W x h x t + b h ) h_t = f(W_{hh} h_{t-1} + W_{xh} x_t + b_h) ht=f(Whhht−1+Wxhxt+bh)
y t = g ( W h y h t + b y ) y_t = g(W_{hy} h_t + b_y) yt=g(Whyht+by)其中, W h h W_{hh} Whh, W x h W_{xh} Wxh, W h y W_{hy} Why是权重矩阵, h t h_t ht是隐藏状态, x t x_t xt是输入, y t y_t yt是输出。RNN在处理长序列时可能会遇到梯度消失或爆炸问题,常用的变种有长短期记忆网络(LSTM)和门控循环单元(GRU),它们通过引入门机制有效地缓解了这些问题。
-
生成对抗网络(GAN):
生成对抗网络由生成器和判别器组成。生成器通过噪声生成假数据,判别器则用于区分真实数据和假数据。训练过程是一个零和博弈,两个网络互相竞争,使得生成器生成的数据越来越真实。GAN的损失函数为:min G max D V ( D , G ) = E x ∼ p d a t a ( x ) [ log D ( x ) ] + E z ∼ p z ( z ) [ log ( 1 − D ( G ( z ) ) ) ] \min_G \max_D V(D, G) = \mathbb{E}_{x \sim p_{data}(x)}[\log D(x)] + \mathbb{E}_{z \sim p_z(z)}[\log(1 - D(G(z)))] GminDmaxV(D,G)=Ex∼pdata(x)[logD(x)]+Ez∼pz(z)[log(1−D(G(z)))]
其中, D D D是判别器, G G G是生成器, x x x是真实数据, z z z是噪声。
-
自编码器(Autoencoder):
自编码器用于数据降维和特征学习,由编码器和解码器组成。编码器将输入数据压缩到低维表示,解码器则将低维表示重构为原始数据。自编码器的目标是最小化重构误差:L ( x , x ^ ) = ∣ ∣ x − x ^ ∣ ∣ 2 L(x, \hat{x}) = ||x - \hat{x}||^2 L(x,x^)=∣∣x−x^∣∣2
其中, x x x是输入数据, x ^ \hat{x} x^是重构数据。常见的变种有稀疏自编码器、去噪自编码器和变分自编码器(VAE)。
总结
神经网络是深度学习的核心,理解其基础构造和训练方法对于掌握现代人工智能技术至关重要。通过以上各章节的详细讲解,我们从神经元模型、感知机、多层网络、误差逆传播算法,到全局最小与局部极小问题,以及不同类型的神经网络,一步步深入了解其原理和应用。希望这些内容能够帮助你更好地理解神经网络的复杂性和强大潜力。