本文已参与「新人创作礼」活动,一起开启掘金创作之路。
卷积神经网络原理详解
前言
这个什么鬼卷积神经网络,就是用于有趣的计算机视觉的一个人工智能分支。包括人脸识别、自动驾驶等众多技术都基于此。听上去好像的挺好玩的。
那这个卷积神经网络呢就像是一个函数,输入一个二维的像素矩阵,经过这个辣鸡函数后就可以得到其特征值
卷积(convolution)
图中左上角的小九宫格为卷积核(卷积核是原图中的某一部分的特征矩阵,不一定是3X3的),将图像的每个位置与卷积核进行如图所示的运算,得到右上角的这个特征矩阵
然后再将特征矩阵的所有值相加除以数据的个数,就可以得到该区域与卷积核的匹配度(等于1的话就一毛一样的)
按照同样的方法我们可以看到这个不好玩的卷积核跟中间那一块的匹配度是0.55
然后把整个图的匹配度都算出来,得到的矩阵就是关于这个卷积核的特征矩阵
这就是经过一次卷积得到的结果
我们再用多个卷积核对原图进行卷积就可以得到多个特征矩阵,上面这个过程也就是我们说的卷积了
池化(pooling)
我们再进行这个好玩的训练过程中往往图片都是成千上万张的,在加上对没张图片的卷积运算。。。。哇,这不是要算死吗,心疼我的电脑啊(那就最小化后台运行假装让你休息吧)。所以,我们就需要对经过卷积的特征矩阵进行简化,简化过程当然就是池化了
池化主要是有两种滴,第一种就是像上图这样,把一个区域里最大的那个数据提取出来,还有一种就是取这个区域内所有数的平均数
我们这里假装步长是2(就是这个2X2的框框每次移动都是两格),如果到某个区域数据没有的就补0就阔以了
继续这样的一波操作就会的到整个特征矩阵的池化结果
然后也是一样的方法就可以把多个特征矩阵池化了哈
正则化(normalization)/ReLU
正则化这个就比较好玩了
就是直接这样,把负数变成0,正数不改变就好了
Okay,就这样就好了哈哈哈
全连接(fully connect)
全连接啊就是把全部数据排成一列
像这样一行行一列列按顺序排成一列
对于每个字母(看你想要训练的图像是什么,这里就以字母图像为例了),它所对应的全连接层中每个数据都有其对应的权重(就是这个字母在这个位置的特征值为这个数的概率),看图中的例子就是字母X的全连接层第一个特征值为1.0的概率是0.9,然后把这两个数相乘,对于每个特征值都是这样相乘,然后求和去平均值就是最终得到的概率(这个概率指的就是这一串特征值代表的字母是X的概率)。求出每个字母的概率,最大概率的字母就是我们通过机器学习认为这张图所表示的字母。
全连接的另一种解释方式
当输入字母X的图片时,得到上图的全连接层,把值为1.0的数据用黑色粗线连接
当输入字母O的图片时,得到上图的全连接层,把值为1.0的数据用绿色粗线连接
我们输入一张图片(不知道是X还是O),比一下对应黑色粗线的值的和与对应绿色粗线的值的和,更大的就代表是这个字母的概率大,okk
神经网络
神经网络呢,就是把上面那几个过程按照想要的顺序进行运算,得到想要的结果
就是像上面这样,是不是挺好玩的,哈哈
损失函数(这里过两天来补充)不是偷懒哈哈哈
机器判断的东西嘛,那肯定是有不确定性的
文中图片引用自视频: www.bilibili.com/video/av161…