本文的主要目的是通过MNIST这个入门级的小项目来了解机器学习的大致工作过程,心中有一个框架就可以了,至于一些细节和理论的东西将会在后面进一步讨论。就好比你在进行绘画创作的时候先勾勒轮廓后添加细节一样。另外先跑出几个小程序也会对机器学习产生更多的兴趣,不至于在漫漫的数学海洋中漂啊漂啊,然后淹死了。
首先简单介绍一下MNIST(Mixed National Institute of Standards and Technology database),其起源于NIST(美国国家标准与技术研究所)收集修改后的两个手写体数据集,包含60000条训练数据集和10000条测试数据,由于其数据整理规范,标定准确被很多教材用于教学,所以大家都习惯将手写体识别直接称呼为MNIST。MNIST的数据很好找,大家可以下载http://yann.lecun.com/exdb/mnist/这个链接里的数据,这是卷积神经网络之父,机器学习界的大神严恩·乐纯(我喜欢翻译成闫立春,听起来亲切啊)提供的数据,里面的数字图片已经被处理成长度为784(数字图片之前被保存为28*28的大小,如下图)的向量了。
我是用的Tensorflow搭建的神经网络,感觉不错,初学的时候不到半天就吭哧吭哧的搭完了,这里插一篇Tensorflow的入门文章,如果大家没有接触过Tensorflow的话可以看看。
接下来利用MNIST来阐述一下我对机器学习的理解,就拿最简单的神经网络来说,其组成有输入节点,输出节点和隐藏层。输入节点和输出节点顾名思义,隐藏节点就是夹在输入层与输出层之间的神经层。
上图是最基本的一种神经元结构,叫做感知器,信息从左边输入经过处理从右边输出,当然单个神经元由于过于简单,无法处理复杂的数据,说以我们要搭建更加复杂的神经网络。
上吐就是一个有六个输入神经元,两层隐藏层以及一个输出的神经网络,在搭建神经网络的过程中,输入神经元个数由需要处理的数据大小决定,例如在处理手写体数据时输入神经元个数就是784,隐藏层数量不限,但理论上来讲隐藏层数量越多,机器学习的效果越好,相应的训练时间也会越长。输出层的个数则与训练数据的目的有关,例如本文中进行手写体识别,共有0到9十个数字,因此输出层神经元个数就为10。而机器学习的过程就是训练神经元之间的参数,使得输出层的输出结果越来越接近真实结果。
在搭建好神经网络之后就可以利用准备好的训练数据对神经网络进行训练了。机器学习虽然叫机器学习,但是机器其实并不了解自己学到的是什么,上图神经网络的作用也只是把数字图片的像素点作为输入,然后去尽量拟合一个复杂的函数使其输出结果接近真实结果而已。所以目前的机器学习不是学习,人工智能也不是智能。
本篇文章先大概的举了一个机器学习的例子,让大家有个概念,在接下来的文章中将会对损失函数,激活函数,梯度下降等相关的知识进行介绍。祝大家生活愉快啦。我爱大头,啦啦啦。
网友评论