NTU ML2023Spring Part2.4 卷积神经网络(CNN)
License: CC BY-NC-SA 4.0
有时候,对特定任务调整神经网络的架构会使它做得更好。例如,CNN 用于图像识别。
一张彩色图片是 3 个矩阵(RGB),当然可以把它拉直成向量然后直接硬上全连接层,但是这样会带来非常多的参数,增加了 overfitting 的风险。
下面我们要基于一些观察来简化模型。
-
人判断时是基于一些局部的特征来识别图像的。比如一只鸟,我们会注意它的头、身、嘴等。
识别局部特征不需要看整张图。
简化:给每个神经元设定一个区域 receptive field(例如左上角的
像素,算上 RGB 通道一共 个输入),一个神经元只看这个区域里的图像。什么,你说你的特征不止
大小?用更深的网络就行了。 -
同样的 pattern 可能会出现在图像的不同区域。
简化:给不同 receptive field 的神经元共享参数(共享的参数叫 filter)。
你会发现这很像卷积,于是给这种神经网络取一个新的名字,叫卷积神经网络 CNN。原来的全连接层也进化成了卷积层。
-
压缩图像前后物体不变。
比如把图像的奇数行和奇数列都删掉,(在分辨率不太小的情况下)剩下的图片还可以认出来是什么东西。
于是给神经网络加入 pooling 层。它没有参数(类似激活函数),就是取一个 2d 区域然后合并为一个数。例如 max pooling 就是取这个区域里的 max。
pooling 是一个用于节省资源的操作,你的算力足够的话可以不用 pooling。
然后成为卷王
CNN 的一个著名的应用是 AlphaGO。其实下围棋也是一种分类问题,而围棋也有局部的特点。但是围棋显然没法压缩图片,因此 AlphaGO 里没有 pooling。
CNN 虽然看起来很强,但如果把图片放大缩小旋转,它的识别能力就下降了(因为没训练过)。spacial transformer layer 就可以解决这个问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)