背景
脱更好久啦,又花了很多时间看西部世界,真的好好看。有机会写写西部世界的感想。
上一期有提到Perceptron,其实Perceptron就是一个神经单元。那么神经元组合起来就是一个神经网路了。本期会初步介绍,神经网络的组成部分。希望能建立起一个对神经网络的初步概念. 当然又绕不开,神经网络的Hello World的例子。
好规矩,仍然从问题出发,用问题引导思路
神经网络
从问题出发,当我们面对一张图片,如下图28*28的图片。我们需要识别其中数字的时候。我们的任务是什么?
首先,阿拉伯数字设计是科学的,其中一个原因是其结构的差异性,且不容易混淆;
那么,图片识别的任务就是,发掘其结构的差异性。(当然是通过像素分布)
那么如何实现呢?
首先,传统的方法,通过逻辑结构判断。个人感觉挺困难的,毕竟不是程序员;
其次,传统方法难在,其需要有严格的逻辑判断。但是我们输入值,却是一个28*28的数字;
除此之外,同一个数字的字体,位子都可能不同
所以,传统方法实现困难。
那么神经网络如何实现呢?
首先,在上一期我们知道,一个神经元 通过在W*X + b 再加上激励函数,我们可以得到一个非线性方程;
那么,如果将很多个神经元串联在一起呢?
其结果是一个很大结构很复杂的非线性方程。
那么一个很大很复杂的非线性方程有什么用呢?
非线性方程有什么用。
如何我们换一个角度看待我们的问题,识别图片中的数字。
将其看作一个公式,公式的输入是 28*28的像素矩阵。 输出是一个十纬的one-hot 向量(如下图,如果是第一行hot,那么意味着其结果是数字0)。
先不谈训练的事情,如果该公式输入28*28像素,预测的结果很准确。那么说明该公式是靠谱的。
神经网络训练
上一部分提到神经网络是一个大公式。但是公式如何输出一个准确的结果呢。 这靠的是神经网络训练。
首先,需要明确一点训练的目标是什么?
其实很好理解,当我们输入一个28*28像素给公式时,不管对错,它自然会输出一个结果。 那我们训练的目标就是让其预测的结果与实际真实的结果的差距越来越小;
其次,训练改变的是什么呢?
这个其实和人类学习有点像,能够认识数字了。但是,具体是怎么回事,好像不太清楚。
那么机器学习,我们需要回到上一期Perceptron,一个Perceptron 可以表示为y= F(W*X + b)。X是输入值,y是输出值,那么要改变输出的结果,就是要改变该公式的参数W和b。
神经网络是由很多个神经元组成的,所以训练的结果就是通过修改参数,来改变预测结果。
那么,训练是如何实现的呢?
这个其实也很好理解。假设我们只有一个神经元。y=WX+b。那么我们的目标是缩小 y_预测 与 y_实际的差。那么可以通过对X求导来实现。如下图。
那么如果是多层神经网络是如何实现的呢? 其实多层神经网络和单层是一样的。因为前一个神经元的计算结果作为X进入第二个神经元。相当于嵌套在一起来。
最后,神经网络是如何识别图片中的数字的呢?
正经的回答是,通过搭建合适的神经网络结构,然后将足够的训练数据用于神经网络训练。
不正经的回答是,我也不知道怎么实现的。上面的回答实际上是操作过程,而不是他实现的原因。
这也是神经网络很有魅力的地方, 你对他的框架负责,但是你并不清楚影响最终预测的哪些因子权重较大。虽然并不清楚影响因子,但是预测结果可以检验,这使得它的实用性很强。可以想像下,当你训练好一个模型之后,这个模型可以直接照搬过去预测新的图片。
所以还是那句话,作为一个小白,拿到大神的模型和一些数据,你也能跑出最先进模型的感觉。
下期预告
前几期,提到了数学部分、名词概念部分、Perceptron。本期,用问题的方式牵引了神经网络的结构,希望有助于理解。
其中很多部分比我上面提到的更复杂。后续也许会带来。
领取专属 10元无门槛券
私享最新 技术干货