首先声明这篇博客适用于有适当数学和计算机基础的同学,因为适用范围较广,因而我会从最基本的只是开始讲解从机器学习一直到深度学习的延伸和发展。
为了能够让更多的人了解深度学习的入门知识,自不量力地写一篇基本的卷积神经网络的入门教程,来让大家对深度学习有一个基本的认识。下面是对整篇博客的一个梗概:
- 分类器训练
- 神经网络
- 卷积神经网络
- googLenet的inception基本介绍
分类器训练
社会和科技的进步迫使计算机具备精确的分类功能,而且随着网络的发展获取已经明确知道分类结果的数据越来越容易,这些数据用行话说就是带标签的数据。我们的任务就是用这些带标签的数据来制作一个分类器来满足人工智能的需求。而要如何做呢,下图就是一个比较好的解释:
如图所示,training set中的x就是我们已经获取的训练数据,y是已知的数据分类结果,注意这里的x是一维行向量,而y是一个数字,一个x对应一个y, 我们目前获取到的是成千上万个<x, y>, 而我们的任务通过这些数据对来训练出一个分类器,使得一个未知数据通过这个分类器的时候能够很大概率的预测出其所属分类。这个领域惯用的伎俩是用一个列向量W来和x相乘,得到的结果是一个数字,这其实是对x进行一个线性变换,让得到的这个数字更加接近于y,就证明这个分类器的分类效果好,
而后来证明线性分类器的分类效果有局限性,而非线性分类器的效果更好,因而就把W和x相乘的结果通过一个非线性转换器f, 行话叫**函数,字面意思就是f的输入符合它本身的要求,它就被**,反之就不被**,从f的输出结果result就是调整方案之后的结果(
上文提到我们拿到的不是一个样本,而是成千上万个样本,而我们的任务也不是让某一个样本的预测结果准确,而是让所有的样本的预测结果的准确性较高,这就引入了下一个概念–损失函数,
损失函数: 预测结果和真实结果之间的差异 –
L(W)=L(y,result)
而我们任务的最终目的就是为了找到损失函数
随着问题的深入,问题看来已经解决的差不多了,但是再一想可能就会有些麻烦了。如果
寻找一个函数的最小值,就好比站在一个起起伏伏的山丘上找到周围这篇区域的最低点,而由于地势复杂,我们不能够一下子走到最低点,按照常识我们会先找到下山最快的方向走一小步,然后再看看周围哪里下山最快,而后接着走,一直走到最低点为止,而梯度下降法就是采用了这样的策略,上述提到的下山最快的方向对应于行话就是负梯度方向,这是有学数学基础的同学都知道的,而每走一步,就会更新一下自己的步伐,更新后的步伐就更接近于山丘的最低点,也就是是损失函数的值进一步减小,这样一直不断的迭代下去,直到再走一步和之前的高度差不多,就不用再走了,行话叫函数收敛了,上述的基本原理转换为如下公式:
Repeat until converge{
这里的
分类器升级
这里首先为下面的升级版作一下铺垫,知识点如下图所示,
反向传播,为了对求梯度的进一步深化,可以实现求解连续多步的梯度。
如图,
而后进入正题,上一节介绍的只是
Tips: 这里的
神经网络
这里介绍的神经网络是对上面分类器的一个升级,之前
神经网络升级
这一节又是对上一节的进一步升级,这里和上一节有如下两点不同:
- 如今的
x 和W 都已经变为了二维的,而f(x,W) 也变为了二维的, -
W 的尺寸已经减小,且不是和x 的所有值相乘,只是和x 的局部区域做卷积,输出一个点,把x 的所有局部区域都滑过后结束本层的计算,
这里的
而为什么不让
卷积神经网络
铺垫了那么久,终于进入要讲的章节了,可见知识真的是要一步一步的深入才能学好。
之前提到的
而这里重点要进一步讲述一下卷积核,卷积核有三个维度,长,宽和深度,这个深度必须和输入数据的深度一致,比如输入的是彩色图像,深度为3,而一个卷积核的深度一定是3,而卷积核的个数是不受限制的,每一层的卷积核的个数越多,对于输入提取的信息就越全面,但是要调整的参数就越多,因而这需要结合实际情况对卷积核的个数具体设计。高维的卷积核示意图如下所示,
一个卷积核对应于输入的一个特征检测,更专业一点就是输入的一个基,这个术语对于学过线性代数的同学来说并不陌生,一个矩阵的基越多,这个矩阵就能够被描述的越全面,这就正好符合现在的情形,而卷积核就代表了图像的特征,例如边缘,颜色,色调…
结语
这篇博客从一开始的分类器训练一步步递进,分别介绍神经网络已经卷积神经网络,是对深度学习初学者的一个帮助。如果哪里说的不对,请大家为我指明,共同学习共同进步。