【学习AI-相关路程-mnist手写数字分类-一段学习的结束:自我学习AI-复盘-代码-了解原理-综述(5) 】

【学习AI-相关路程-mnist手写数字分类:自我学习AI-复盘-代码-了解原理-综述(5) 】

1、前言

今天我们来做个复盘,之前做了一些实验,主要是使用一些图片,作为屏幕开关机识别,和mnist识别手写体识别的测试,并且在尝试mnist识别的时候,尝试了使用两种方式,一种叫BP的全连接网络,一种CNN的卷积网络。

那么今天我们做一个复盘,翻过来,还是需要了解一下其中道理,虽然到时也不一定能记得。

2、综述铺垫

这里我们在需要关联前几篇案例,说说之前做过什么,也算是综述了。

第一篇文章:基础知识铺垫

【学习AI-相关路程-mnist手写数字分类-python-硬件:jetson orin NX-自我学习AI-基础知识铺垫-遇到问题(1) 】

第二篇文章:尝试全神经网络

【学习AI-相关路程-mnist手写数字分类-python-硬件:jetson orin NX-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(2) 】

第三篇文章:win尝试全神经网络

【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】

第四篇文章:尝试CNN网络

【学习AI-相关路程-mnist手写数字分类-jetson-硬件:linux-自我学习AI-实验步骤-CNN-操作流程(4) 】

3、CNN网络的底层原理、数学原理与实现原理

卷积神经网络(Convolutional Neural Network,CNN)是深度学习中最重要的模型之一,特别适用于处理具有网格状拓扑结构的数据,例如图像。CNN在计算机视觉、自然语言处理等领域取得了巨大的成功。下面将详细介绍CNN的底层原理、数学原理和实现原理。

一、引言

CNN的设计灵感来自于生物视觉系统的结构,尤其是猫的视觉皮层的研究。其核心思想是利用局部感受野、权值共享和下采样等技术,提取数据的局部特征并逐级抽象,实现对高维数据的有效处理。

二、底层原理

1. 局部连接

在传统的全连接神经网络中,每个神经元与上一层的所有神经元相连,参数量巨大。而在CNN中,神经元只与上一层的局部区域相连,称为感受野。这利用了数据的局部相关性,减少了参数数量。

2. 权值共享

同一卷积核在输入的不同位置进行卷积操作,使用相同的参数(权值)。这大大降低了模型的复杂度,同时增强了模型的平移不变性。

3. 下采样(池化)

通过池化层对特征进行下采样,降低数据的维度,减少计算量,并增强模型对位置和尺度变化的鲁棒性。

三、数学原理

1. 卷积操作

卷积是CNN的核心操作。对于二维输入(如图像),卷积操作定义为:

s ( i , j ) = ( x ∗ w ) ( i , j ) = ∑ m = 0 M − 1 ∑ n = 0 N − 1 x ( i + m , j + n ) ⋅ w ( m , n ) s(i,j) = (x * w)(i,j) = \sum_{m=0}^{M-1} \sum_{n=0}^{N-1} x(i+m, j+n) \cdot w(m, n) s(i,j)=(x∗w)(i,j)=m=0∑M−1n=0∑N−1x(i+m,j+n)⋅w(m,n)

  • ( x ):输入矩阵(图像)
  • ( w ):卷积核(权值矩阵)
  • ( s(i,j) ):输出矩阵的位置( (i,j) )的值

2. 激活函数

在卷积操作后,通常会应用非线性激活函数,如ReLU函数:

a ( i , j ) = ReLU ( s ( i , j ) ) = max ⁡ ( 0 , s ( i , j ) ) a(i,j) = \text{ReLU}(s(i,j)) = \max(0, s(i,j)) a(i,j)=ReLU(s(i,j))=max(0,s(i,j))

激活函数引入非线性,使网络能够拟合复杂的函数。

3. 池化操作

池化层用于下采样,常用的有最大池化和平均池化。例如,最大池化定义为:

p ( i , j ) = max ⁡ ( m , n ) ∈ pool a ( i ⋅ k + m , j ⋅ k + n ) p(i,j) = \max_{(m,n) \in \text{pool}} a(i \cdot k + m, j \cdot k + n) p(i,j)=(m,n)∈poolmaxa(i⋅k+m,j⋅k+n)

  • ( k ):池化窗口的大小
  • ( p(i,j) ):池化后的输出

4. 全连接层

在经过多次卷积和池化后,提取到高层次的特征。然后通过全连接层进行分类或回归:

y = f ( W ⋅ a + b ) y = f(W \cdot a + b) y=f(W⋅a+b)

  • ( W ):权重矩阵
  • ( a ):上一层的激活输出展开为向量
  • ( b ):偏置向量
  • ( f ):激活函数

5. 反向传播

CNN的训练过程使用反向传播算法,计算损失函数对各层参数的梯度,并更新参数。关键步骤包括:

  • 前向传播:计算各层的输出
  • 计算损失:如交叉熵损失
  • 反向传播:利用链式法则计算梯度
  • 参数更新:使用梯度下降等优化算法

反向传播中,卷积层和池化层的梯度计算需要考虑到卷积和池化操作的特点。

四、实现原理

1. 网络结构

典型的CNN由以下几种层组成:

  • 输入层:接受原始数据,如图像
  • 卷积层:提取特征
  • 激活层:引入非线性
  • 池化层:下采样,降低维度
  • 全连接层:整合特征,输出结果

这些层可以堆叠多次,形成深度网络。

2. 参数初始化

参数的初始化对训练的收敛和效果有重要影响。常用的方法有:

  • Xavier初始化:适用于Sigmoid、Tanh等激活函数
  • He初始化:适用于ReLU激活函数

3. 正则化技巧

  • 批量归一化(Batch Normalization):加速训练,稳定收敛
  • Dropout:防止过拟合
  • 数据增强:通过旋转、翻转等方式增加数据量

4. 优化算法

  • 随机梯度下降(SGD)
  • 动量(Momentum)
  • 自适应学习率算法:如Adam、Adagrad

5. 常见的CNN架构

  • LeNet-5:最早的CNN之一,用于手写数字识别
  • AlexNet:引入ReLU、Dropout和数据增强,在ImageNet比赛中取得优异成绩
  • VGG:使用小卷积核(3x3),网络加深
  • ResNet:引入残差连接,解决深度网络的退化问题

五、总结

卷积神经网络通过卷积、激活、池化等操作,有效地提取数据的局部和全局特征。其数学原理基于卷积运算和反向传播算法,实现了从低级特征到高级语义的逐层抽象。CNN的成功得益于其特殊的结构设计和强大的特征学习能力,在实践中,通过合理的网络架构、参数初始化和优化算法,可以训练出性能卓越的模型。

六、参考文献

  • LeCun, Y., Bottou, L., Bengio, Y., & Haffner, P. (1998). Gradient-based learning applied to document recognition. Proceedings of the IEEE.
  • Krizhevsky, A., Sutskever, I., & Hinton, G. E. (2012). ImageNet classification with deep convolutional neural networks. NIPS.
  • He, K., Zhang, X., Ren, S., & Sun, J. (2016). Deep residual learning for image recognition. CVPR.
  • Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press.

4、全连接神经网络(BP网络)背后的数学原理

全连接神经网络,又称为前馈神经网络,是人工神经网络中最基础和常见的一种结构。BP(Backpropagation,反向传播)算法是训练全连接神经网络的核心方法,它利用梯度下降法来最小化损失函数。下面我们将详细解释全连接神经网络和BP算法背后的数学原理。

一、神经元模型

每个神经元接收来自上一层的输入,经过加权求和和激活函数的非线性变换,输出结果。数学上,单个神经元的输出可以表示为:

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)

  • ( x_i ):第( i )个输入
  • ( w_i ):输入( x_i )对应的权重
  • ( b ):偏置项
  • ( f ):激活函数(如Sigmoid、ReLU等)
  • ( y ):神经元的输出

二、前向传播(Forward Propagation)

在前向传播过程中,输入数据通过各层神经元的计算,逐层传递,最终产生输出。对于第( l )层的第( j )个神经元,其净输入和输出为:

  1. 净输入:
    z j ( l ) = ∑ i = 1 n l − 1 w i j ( l ) a i ( l − 1 ) + b j ( l ) z_j^{(l)} = \sum_{i=1}^{n_{l-1}} w_{ij}^{(l)} a_i^{(l-1)} + b_j^{(l)} zj(l)=i=1∑nl−1wij(l)ai(l−1)+bj(l)
  2. 激活输出:
    a j ( l ) = f ( z j ( l ) ) a_j^{(l)} = f\left( z_j^{(l)} \right) aj(l)=f(zj(l))
  • ( n_{l-1} ):第( l-1 )层的神经元数量
  • ( a_i^{(l-1)} ):第( l-1 )层第( i )个神经元的激活输出

三、损失函数

为了衡量预测输出与真实标签之间的差异,定义了损失函数(也称代价函数)。常用的损失函数有均方误差(MSE)和交叉熵(Cross-Entropy)。以均方误差为例:

E = 1 2 ∑ k = 1 n ( y k − y ^ k ) 2 E = \frac{1}{2} \sum_{k=1}^{n} \left( y_k - \hat{y}_k \right)^2 E=21k=1∑n(yk−y^k)2

  • ( y_k ):第( k )个样本的真实值
  • ( \hat{y}_k ):第( k )个样本的预测值

四、反向传播(Backpropagation)

反向传播的目标是计算损失函数对每个权重的偏导数(梯度),并利用梯度下降法更新权重。

1. 计算输出层的误差项

对于输出层的每个神经元,误差项为:

δ j ( L ) = ∂ E ∂ z j ( L ) = ( a j ( L ) − y j ) f ′ ( z j ( L ) ) \delta_j^{(L)} = \frac{\partial E}{\partial z_j^{(L)}} = \left( a_j^{(L)} - y_j \right) f'\left( z_j^{(L)} \right) δj(L)=∂zj(L)∂E=(aj(L)−yj)f′(zj(L))

  • ( L ):输出层的层数索引
  • ( y_j ):真实输出
  • ( f'\left( z_j^{(L)} \right) ):激活函数的导数

2. 计算隐藏层的误差项

对于隐藏层的神经元,误差项为:

δ j ( l ) = ( ∑ k = 1 n l + 1 δ k ( l + 1 ) w j k ( l + 1 ) ) f ′ ( z j ( l ) ) \delta_j^{(l)} = \left( \sum_{k=1}^{n_{l+1}} \delta_k^{(l+1)} w_{jk}^{(l+1)} \right) f'\left( z_j^{(l)} \right) δj(l)=(k=1∑nl+1δk(l+1)wjk(l+1))f′(zj(l))

  • ( n_{l+1} ):第( l+1 )层的神经元数量
  • ( w_{jk}^{(l+1)} ):从第( l )层第( j )个神经元到第( l+1 )层第( k )个神经元的权重

3. 计算梯度并更新权重

权重的梯度为:

∂ E ∂ w i j ( l ) = a i ( l − 1 ) δ j ( l ) \frac{\partial E}{\partial w_{ij}^{(l)}} = a_i^{(l-1)} \delta_j^{(l)} ∂wij(l)∂E=ai(l−1)δj(l)

利用梯度下降法更新权重:

w i j ( l ) ← w i j ( l ) − η ∂ E ∂ w i j ( l ) w_{ij}^{(l)} \leftarrow w_{ij}^{(l)} - \eta \frac{\partial E}{\partial w_{ij}^{(l)}} wij(l)←wij(l)−η∂wij(l)∂E

  • ( \eta ):学习率

偏置的更新类似:

b j ( l ) ← b j ( l ) − η δ j ( l ) b_j^{(l)} \leftarrow b_j^{(l)} - \eta \delta_j^{(l)} bj(l)←bj(l)−ηδj(l)

五、数学原理解析

1. 链式法则(Chain Rule)

反向传播算法的核心是链式法则,它允许我们将复杂函数的导数分解为简单函数的导数之积。对于复合函数:

∂ E ∂ w = ∂ E ∂ z ∂ z ∂ w \frac{\partial E}{\partial w} = \frac{\partial E}{\partial z} \frac{\partial z}{\partial w} ∂w∂E=∂z∂E∂w∂z

2. 梯度下降法(Gradient Descent)

通过沿着损失函数梯度的反方向调整权重,网络的损失可以逐步减少,达到优化的目的。

3. 矩阵形式

为了提高计算效率,实际计算中常采用矩阵运算。前向传播和反向传播都可以用矩阵乘法和元素级操作来实现。

六、小结

全连接神经网络通过模拟生物神经元的工作方式,利用加权求和和激活函数对输入数据进行非线性变换。BP算法通过计算损失函数对权重的梯度,使用梯度下降法更新权重,使网络的预测结果逐步逼近真实值。这一过程的数学基础是微积分中的链式法则和优化中的梯度下降方法。

七、参考文献

  • Rumelhart, D. E., Hinton, G. E., & Williams, R. J. (1986). Learning representations by back-propagating errors. Nature.
  • Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press.

5、自我感受

(1)时间有点太久了,之前学习的时候,有些印象,但是现在只是为了补充相对概念,如果深入学习,还是很有必要了解得。

(2)自己本身在学习过中,也在使用AI,有些流程,很多时候,不知道就是不知,但是你要会问问题,自己不会点,直接问问题即刻,这点相关AI是帮助了很多。

相关推荐
A-大程序员4 小时前
【Pytorch】分类问题交叉熵
人工智能·pytorch·分类
一车小面包4 小时前
基于bert-base-chinese的外卖评论情绪分类项目
人工智能·机器学习
wu_jing_sheng04 小时前
ai 作物分类
人工智能·分类·数据挖掘
飞翔的佩奇4 小时前
【完整源码+数据集+部署教程】烟叶植株计数与分类系统源码和数据集:改进yolo11-TADDH
python·yolo·计算机视觉·目标跟踪·分类·数据集·yolo11
董建光d4 小时前
PyTorch 实现多种 CNN 模型并采用集成方法提升 CIFAR-10 分类性能
人工智能·pytorch·cnn
摘星编程4 小时前
从0到1:打造专业级AI教学助手的完整开发实录
人工智能
文真同学4 小时前
《动手学深度学习》5.3~5.5
人工智能·深度学习
小苏兮4 小时前
【C++】priority_queue和deque的使用与实现
开发语言·c++·学习
科研服务器mike_leeso4 小时前
41 年 7 次转型!戴尔从 PC 到 AI 工厂的技术跃迁与组织重构
大数据·人工智能·机器学习