目的
为避免一学就会、一用就废,这里做下笔记
说明
本文内容紧承前文-对卷积的理解、对神经网络的理解,欲渐进,请循序。
一、 是什么?------ 卷积神经网络的本质
核心定义:
卷积神经网络(Convolutional Neural Network, CNN)是一种专门为处理具有类似网格结构的数据(如图像、视频、音频频谱图)而设计的前馈人工神经网络 。其核心思想是通过卷积、池化等操作,自动、逐层地从输入数据中提取从低级到高级的抽象特征,最终完成分类、预测等任务。
前馈人工神经网络:
- 一种人工神经网络中最基础、最常见的网络结构。它的核心特点是:信息单向流动,从输入层流向输出层,没有反馈循环
- 并列的概念,包括循环神经网络RNN、图神经网络等
关键比喻:
想象你识别一只猫。你不会一次性处理整张图片的每一个像素,而是先关注局部边缘(如胡须、耳朵的轮廓),然后组合成更大的部件(眼睛、鼻子),最后识别出整个物体(猫脸、猫的身体)。CNN正是模拟了这种由局部到全局、由简单到复杂的层次化信息处理方式。
CNN的三大核心构建模块:
-
卷积层: CNN的"心脏"。
- 作用: 特征提取器。使用一组可学习的滤波器(或卷积核) 在输入数据上滑动,进行局部区域的特征匹配计算。
- 关键概念:
- 局部连接: 每个神经元只与前一层的一个小局部区域连接(如3x3窗口),而非全连接,极大减少了参数数量。
- 权值共享: 同一个滤波器在整个输入上滑动使用,意味着它在不同位置检测相同的模式(如特定方向的边缘)。
- 输出: 生成特征图,高响应的区域表示该处存在该滤波器所代表的特征。
-
池化层: 信息压缩器。
- 作用: 对特征图进行下采样 ,降低空间尺寸,减少计算量和参数,同时提供一定的平移不变性。
下采样 :一种信息压缩手段,仅保留核心特征,略过非核心特征
平移不变形:物体在图像中位置的变化,但物体本身的核心特征不变- 常见操作: 最大池化(取窗口内最大值)、平均池化(取窗口内平均值)。最大池化最为常用,因为它能保留最显著的特征信号。
-
全连接层: 决策器。
- 作用: 在网络的末端,将经过多次卷积和池化后提取的高维抽象特征图"展平"成一个一维向量,并像传统神经网络一样进行综合判断,输出最终的分类结果(如属于哪个类别的概率)。
典型CNN架构(如LeNet-5, AlexNet, VGGNet)遵循模式:
输入 -> {[卷积 -> 激活(ReLU)]*N -> 池化}*M -> 全连接层]*K -> 输出
二、 为什么?------ 为什么需要CNN?它的优势何在?
CNN的出现是为了解决传统神经网络在处理图像等高维数据时的根本性缺陷。
-
解决维度灾难与参数爆炸问题
- 问题: 一张1000x1000像素的RGB图像,输入层就有300万个节点。如果第一个隐藏层也有1000个神经元,全连接将产生 30亿 个权重参数。训练这样的网络几乎不可能。
- CNN的解决方案: 通过局部连接 和权值共享,将参数数量减少了数个数量级。一个3x3的卷积核,无论输入图像多大,其参数只有9个(加上偏置共10个),且被整个图像共享。
-
利用数据的空间局部性与层次结构
- 问题: 图像中的特征具有强烈的空间局部相关性(相邻像素关系紧密)。传统全连接网络忽略了这种结构,将图像视为一组无序的像素点。
- CNN的解决方案: 卷积操作天生就是为捕捉局部空间模式而设计的。底层的卷积核学习边缘、角点;中层的组合成纹理、部件;高层的组合成完整的物体。这是其成功的关键。
-
带来平移、缩放和形变的某种程度不变性
- 问题: 物体在图像中的位置变化不应影响识别结果。
- CNN的解决方案: 池化层使网络对特征的微小平移不再敏感(因为池化保留了窗口内的主要特征)。通过数据增强(训练时随机裁剪、旋转)和多层抽象,网络也能获得一定的尺度和形变鲁棒性。
-
自动特征工程
- 问题: 在CNN之前,机器学习需要大量人工设计特征(如SIFT, HOG),过程繁琐且依赖专家知识。
- CNN的解决方案: 网络通过端到端 的训练,从数据中自动学习最适合当前任务的特征表示,避免了繁琐的手工特征工程。
总结:CNN是针对图像等网格数据的"量身定制"网络,通过其独特的结构,高效、自动地解决了高维数据处理和特征提取的根本难题。
三、 怎么办?------ CNN如何工作与构建?
1. 前向传播(如何工作)
- 第一步:卷积计算。 卷积核在输入上滑动,每一步进行元素点乘后求和,加上偏置,生成特征图的一个点。
- 第二步:激活函数(通常为ReLU)。 对特征图进行非线性变换,引入非线性表达能力,使网络能拟合复杂函数。
- 第三步:池化。 对激活后的特征图进行下采样(如2x2最大池化,将4个像素变为1个最大值)。
- 第四步:重复与展平。 重复"卷积->激活->池化"的组合多次。然后将最终的三维特征图展平成一维向量。
- 第五步:全连接与输出。 将一维向量输入全连接层,最后通过Softmax函数输出每个类别的概率。
2. 训练过程(如何学习)
- 目标: 调整所有卷积核的权重和全连接层的参数,使网络的预测结果尽可能接近真实标签。
- 流程:
- 初始化: 随机初始化所有参数。
- 损失计算: 使用前向传播得到预测值,通过损失函数(如交叉熵损失)计算与真实值的差距。
- 反向传播: 利用链式法则 ,将损失从输出层反向传播回网络的每一层,计算每个参数对损失的梯度(即贡献度)。
- 参数更新: 使用优化算法(如随机梯度下降SGD、Adam),根据梯度的方向更新参数("减小损失的方向")。
- 迭代: 重复以上步骤,直到模型收敛(损失不再显著下降)。
3. 如何构建一个现代CNN
现代CNN架构更复杂,通常包含以下技术和模块:
- 更深的网络结构: 如ResNet引入残差连接,解决了深层网络梯度消失/爆炸问题,允许构建成百上千层的网络。
- 先进模块: 如Inception模块使用不同尺寸的卷积核并行处理并融合,以捕获多尺度信息。
- 正则化技术: 如Dropout (随机丢弃神经元)、批归一化(加速训练并稳定过程)用于防止过拟合。
- 迁移学习: 实践中,很少从零开始训练巨大的CNN。通常使用在大型数据集(如ImageNet)上预训练好的模型(如VGG16, ResNet50),去掉最后的全连接层,针对自己的任务进行微调,极大地节省时间和数据需求。
总结
- 是什么: CNN是一种利用卷积、池化 等操作进行层次化特征提取的神经网络,专为图像类网格数据设计。
- 为什么: 它解决了处理图像数据时的参数爆炸 问题,并高效利用空间局部性 ,实现了自动特征学习。
- 怎么办: 通过前向传播 提取特征并预测,通过反向传播和梯度下降 优化网络参数进行学习。现代应用中,常使用深度架构 和迁移学习来构建强大的模型。
CNN不仅是计算机视觉的基石,其核心思想也已被成功应用于自然语言处理(文本卷积)、语音识别、AlphaGo的棋盘分析等诸多领域。