【机器学习】CNN的数学基础



🌈个人主页: 鑫宝Code
🔥热门专栏: 闲话杂谈炫酷HTML | JavaScript基础

💫个人格言: "如无必要,勿增实体"


文章目录

  • CNN的数学基础
    • [1. 引言](#1. 引言)
    • [2. 卷积运算](#2. 卷积运算)
      • [2.1 连续卷积](#2.1 连续卷积)
      • [2.2 离散卷积](#2.2 离散卷积)
      • [2.3 互相关](#2.3 互相关)
    • [3. 激活函数](#3. 激活函数)
      • [3.1 ReLU (Rectified Linear Unit)](#3.1 ReLU (Rectified Linear Unit))
      • [3.2 Sigmoid](#3.2 Sigmoid)
      • [3.3 Tanh](#3.3 Tanh)
    • [4. 池化操作](#4. 池化操作)
      • [4.1 最大池化](#4.1 最大池化)
      • [4.2 平均池化](#4.2 平均池化)
    • [5. 损失函数](#5. 损失函数)
      • [5.1 均方误差(MSE)](#5.1 均方误差(MSE))
      • [5.2 交叉熵](#5.2 交叉熵)
    • [6. 反向传播算法](#6. 反向传播算法)
      • [6.1 链式法则](#6.1 链式法则)
      • [6.2 卷积层的反向传播](#6.2 卷积层的反向传播)
      • [6.3 池化层的反向传播](#6.3 池化层的反向传播)
    • [7. 优化算法](#7. 优化算法)
      • [7.1 随机梯度下降(SGD)](#7.1 随机梯度下降(SGD))
      • [7.2 动量法](#7.2 动量法)
      • [7.3 Adam](#7.3 Adam)
    • [8. 正则化技术](#8. 正则化技术)
      • [8.1 L2正则化](#8.1 L2正则化)
      • [8.2 Dropout](#8.2 Dropout)
    • [9. 初始化方法](#9. 初始化方法)
      • [9.1 Xavier初始化](#9.1 Xavier初始化)
      • [9.2 He初始化](#9.2 He初始化)
    • [10. 结论](#10. 结论)

CNN的数学基础

1. 引言

卷积神经网络(Convolutional Neural Network,CNN)作为深度学习中的重要模型,其强大性能背后蕴含着丰富的数学原理。本文将深入探讨CNN的数学基础,包括卷积运算、激活函数、池化操作、反向传播算法以及优化方法等核心概念。通过对这些数学基础的理解,我们可以更好地把握CNN的本质,为进一步优化和创新CNN模型奠定基础。

2. 卷积运算

2.1 连续卷积

在数学中,连续函数的卷积定义如下:

( f ∗ g ) ( t ) = ∫ − ∞ ∞ f ( τ ) g ( t − τ ) d τ (f * g)(t) = \int_{-\infty}^{\infty} f(\tau)g(t-\tau)d\tau (f∗g)(t)=∫−∞∞f(τ)g(t−τ)dτ

其中, f f f和 g g g是两个可积函数, ∗ * ∗表示卷积操作。

2.2 离散卷积

在CNN中,我们主要关注离散卷积。对于二维离散卷积,其定义为:

( I ∗ K ) ( i , j ) = ∑ m ∑ n I ( m , n ) K ( i − m , j − n ) (I * K)(i,j) = \sum_{m}\sum_{n} I(m,n)K(i-m,j-n) (I∗K)(i,j)=m∑n∑I(m,n)K(i−m,j−n)

其中, I I I是输入(如图像), K K K是卷积核(或称滤波器)。

2.3 互相关

实际上,CNN中使用的"卷积"操作更准确地说是互相关(cross-correlation):

( I ⋆ K ) ( i , j ) = ∑ m ∑ n I ( i + m , j + n ) K ( m , n ) (I \star K)(i,j) = \sum_{m}\sum_{n} I(i+m,j+n)K(m,n) (I⋆K)(i,j)=m∑n∑I(i+m,j+n)K(m,n)

这里 ⋆ \star ⋆表示互相关操作。与真正的卷积相比,互相关不需要将卷积核翻转。

3. 激活函数

激活函数为神经网络引入非线性,增强模型的表达能力。

3.1 ReLU (Rectified Linear Unit)

ReLU是目前最常用的激活函数之一:

f ( x ) = max ⁡ ( 0 , x ) f(x) = \max(0, x) f(x)=max(0,x)

其导数为:

f ′ ( x ) = { 1 , if x > 0 0 , if x ≤ 0 f'(x) = \begin{cases} 1, & \text{if } x > 0 \\ 0, & \text{if } x \leq 0 \end{cases} f′(x)={1,0,if x>0if x≤0

3.2 Sigmoid

Sigmoid函数将输入映射到(0, 1)区间:

σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+e−x1

其导数为:

σ ′ ( x ) = σ ( x ) ( 1 − σ ( x ) ) \sigma'(x) = \sigma(x)(1 - \sigma(x)) σ′(x)=σ(x)(1−σ(x))

3.3 Tanh

Tanh函数将输入映射到(-1, 1)区间:

tanh ⁡ ( x ) = e x − e − x e x + e − x \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} tanh(x)=ex+e−xex−e−x

其导数为:

tanh ⁡ ′ ( x ) = 1 − tanh ⁡ 2 ( x ) \tanh'(x) = 1 - \tanh^2(x) tanh′(x)=1−tanh2(x)

4. 池化操作

池化操作用于降低特征图的空间分辨率,减少参数数量和计算量。

4.1 最大池化

最大池化选择池化窗口内的最大值:

y i j = max ⁡ ( m , n ) ∈ R i j x m n y_{ij} = \max_{(m,n) \in R_{ij}} x_{mn} yij=(m,n)∈Rijmaxxmn

其中, R i j R_{ij} Rij是以 ( i , j ) (i,j) (i,j)为中心的池化窗口。

4.2 平均池化

平均池化计算池化窗口内的平均值:

y i j = 1 ∣ R i j ∣ ∑ ( m , n ) ∈ R i j x m n y_{ij} = \frac{1}{|R_{ij}|} \sum_{(m,n) \in R_{ij}} x_{mn} yij=∣Rij∣1(m,n)∈Rij∑xmn

5. 损失函数

损失函数衡量模型预测与真实标签之间的差距。

5.1 均方误差(MSE)

对于回归问题,常用均方误差:

L M S E = 1 N ∑ i = 1 N ( y i − y ^ i ) 2 L_{MSE} = \frac{1}{N} \sum_{i=1}^N (y_i - \hat{y}_i)^2 LMSE=N1i=1∑N(yi−y^i)2

其中, y i y_i yi是真实值, y ^ i \hat{y}_i y^i是预测值, N N N是样本数量。

5.2 交叉熵

对于分类问题,常用交叉熵损失:

L C E = − ∑ i = 1 C y i log ⁡ ( y ^ i ) L_{CE} = -\sum_{i=1}^C y_i \log(\hat{y}_i) LCE=−i=1∑Cyilog(y^i)

其中, C C C是类别数, y i y_i yi是真实标签(one-hot编码), y ^ i \hat{y}_i y^i是预测概率。

6. 反向传播算法

反向传播是训练神经网络的核心算法,用于计算损失函数对各层参数的梯度。

6.1 链式法则

反向传播基于链式法则:

∂ L ∂ w = ∂ L ∂ y ⋅ ∂ y ∂ x ⋅ ∂ x ∂ w \frac{\partial L}{\partial w} = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial x} \cdot \frac{\partial x}{\partial w} ∂w∂L=∂y∂L⋅∂x∂y⋅∂w∂x

其中, L L L是损失函数, w w w是待优化的参数。

6.2 卷积层的反向传播

对于卷积层,我们需要计算损失函数对卷积核权重的梯度:

∂ L ∂ K = ∑ i , j ∂ L ∂ Y i j ⋅ X i j \frac{\partial L}{\partial K} = \sum_{i,j} \frac{\partial L}{\partial Y_{ij}} \cdot X_{ij} ∂K∂L=i,j∑∂Yij∂L⋅Xij

其中, K K K是卷积核, Y Y Y是输出特征图, X X X是输入特征图。

6.3 池化层的反向传播

对于最大池化,梯度只传递给池化窗口中的最大值元素:

∂ L ∂ x m n = { ∂ L ∂ y i j , if x m n = max ⁡ ( m , n ) ∈ R i j x m n 0 , otherwise \frac{\partial L}{\partial x_{mn}} = \begin{cases} \frac{\partial L}{\partial y_{ij}}, & \text{if } x_{mn} = \max_{(m,n) \in R_{ij}} x_{mn} \\ 0, & \text{otherwise} \end{cases} ∂xmn∂L={∂yij∂L,0,if xmn=max(m,n)∈Rijxmnotherwise

对于平均池化,梯度平均分配给池化窗口内的所有元素:

∂ L ∂ x m n = 1 ∣ R i j ∣ ∂ L ∂ y i j \frac{\partial L}{\partial x_{mn}} = \frac{1}{|R_{ij}|} \frac{\partial L}{\partial y_{ij}} ∂xmn∂L=∣Rij∣1∂yij∂L

7. 优化算法

优化算法用于更新网络参数,最小化损失函数。

7.1 随机梯度下降(SGD)

最基本的优化算法是随机梯度下降:

w t + 1 = w t − η ∇ L ( w t ) w_{t+1} = w_t - \eta \nabla L(w_t) wt+1=wt−η∇L(wt)

其中, η \eta η是学习率, ∇ L ( w t ) \nabla L(w_t) ∇L(wt)是损失函数关于参数 w t w_t wt的梯度。

7.2 动量法

动量法引入了历史梯度信息,加速收敛:

v t + 1 = γ v t + η ∇ L ( w t ) w t + 1 = w t − v t + 1 \begin{aligned} v_{t+1} &= \gamma v_t + \eta \nabla L(w_t) \\ w_{t+1} &= w_t - v_{t+1} \end{aligned} vt+1wt+1=γvt+η∇L(wt)=wt−vt+1

其中, γ \gamma γ是动量系数。

7.3 Adam

Adam结合了动量法和自适应学习率:

m t = β 1 m t − 1 + ( 1 − β 1 ) ∇ L ( w t ) v t = β 2 v t − 1 + ( 1 − β 2 ) ( ∇ L ( w t ) ) 2 m ^ t = m t 1 − β 1 t v ^ t = v t 1 − β 2 t w t + 1 = w t − η v ^ t + ϵ m ^ t \begin{aligned} m_t &= \beta_1 m_{t-1} + (1-\beta_1) \nabla L(w_t) \\ v_t &= \beta_2 v_{t-1} + (1-\beta_2) (\nabla L(w_t))^2 \\ \hat{m}_t &= \frac{m_t}{1-\beta_1^t} \\ \hat{v}t &= \frac{v_t}{1-\beta_2^t} \\ w{t+1} &= w_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t \end{aligned} mtvtm^tv^twt+1=β1mt−1+(1−β1)∇L(wt)=β2vt−1+(1−β2)(∇L(wt))2=1−β1tmt=1−β2tvt=wt−v^t +ϵηm^t

其中, β 1 \beta_1 β1和 β 2 \beta_2 β2是衰减率, ϵ \epsilon ϵ是一个小常数。

8. 正则化技术

正则化用于防止过拟合,提高模型的泛化能力。

8.1 L2正则化

L2正则化在损失函数中添加参数的平方和:

L r e g = L + λ 2 ∑ w w 2 L_{reg} = L + \frac{\lambda}{2} \sum_w w^2 Lreg=L+2λw∑w2

其中, λ \lambda λ是正则化系数。

8.2 Dropout

Dropout随机丢弃一部分神经元,可以看作是集成学习的一种形式。在训练时:

y = f ( W x ) ⊙ m , m i ∼ Bernoulli ( p ) y = f(Wx) \odot m, \quad m_i \sim \text{Bernoulli}(p) y=f(Wx)⊙m,mi∼Bernoulli(p)

其中, ⊙ \odot ⊙表示元素wise乘法, m m m是一个二元掩码, p p p是保留神经元的概率。

9. 初始化方法

参数初始化对CNN的训练至关重要。

9.1 Xavier初始化

Xavier初始化适用于tanh激活函数:

W ∼ U ( − 6 n i n + n o u t , 6 n i n + n o u t ) W \sim U\left(-\sqrt{\frac{6}{n_{in} + n_{out}}}, \sqrt{\frac{6}{n_{in} + n_{out}}}\right) W∼U(−nin+nout6 ,nin+nout6 )

其中, n i n n_{in} nin和 n o u t n_{out} nout分别是输入和输出的神经元数量。

9.2 He初始化

He初始化适用于ReLU激活函数:

W ∼ N ( 0 , 2 n i n ) W \sim N\left(0, \sqrt{\frac{2}{n_{in}}}\right) W∼N(0,nin2 )

10. 结论

本文深入探讨了CNN的数学基础,包括卷积运算、激活函数、池化操作、反向传播算法、优化方法、正则化技术和初始化方法等核心概念。这些数学原理构成了CNN的理论基础,对于理解CNN的工作原理、改进现有模型和设计新的架构都至关重要。

随着深度学习的不断发展,CNN的数学理论也在不断完善和扩展。例如,群论在解释CNN的等变性方面发挥了重要作用,而信息论则为理解CNN的表示学习能力提供了新的视角。未来,结合更多数学分支的研究将有助于我们更深入地理解CNN,推动其在各个领域的应用和创新。

相关推荐
开MINI的工科男34 分钟前
深蓝学院-- 量产自动驾驶中的规划控制算法 小鹏
人工智能·机器学习·自动驾驶
AI大模型知识分享2 小时前
Prompt最佳实践|如何用参考文本让ChatGPT答案更精准?
人工智能·深度学习·机器学习·chatgpt·prompt·gpt-3
张人玉4 小时前
人工智能——猴子摘香蕉问题
人工智能
草莓屁屁我不吃4 小时前
Siri因ChatGPT-4o升级:我们的个人信息还安全吗?
人工智能·安全·chatgpt·chatgpt-4o
小言从不摸鱼4 小时前
【AI大模型】ChatGPT模型原理介绍(下)
人工智能·python·深度学习·机器学习·自然语言处理·chatgpt
AI科研视界4 小时前
ChatGPT+2:修订初始AI安全性和超级智能假设
人工智能·chatgpt
霍格沃兹测试开发学社测试人社区4 小时前
人工智能 | 基于ChatGPT开发人工智能服务平台
软件测试·人工智能·测试开发·chatgpt
小R资源5 小时前
3款免费的GPT类工具
人工智能·gpt·chatgpt·ai作画·ai模型·国内免费
artificiali7 小时前
Anaconda配置pytorch的基本操作
人工智能·pytorch·python
酱香编程,风雨兼程8 小时前
深度学习——基础知识
人工智能·深度学习