机器学习Basics-第三期-神经网络前身Perceptron

背景

第一期覆盖了此系列所有的数学部分,第二期覆盖了基础概念。本期将着手介绍一个最基础的神经网络及其关键的组成部分。

本期的主体是Perceptron,其大概是1950年代发明的,历史部分就不过多介绍。Perceptron是一个简单的神经网络结构,后面的CNN、LSTM、RNN等等都是基于Perceptron上面衍生复杂化得来的。所以,了解与明白Perceptron尤其重要。

我将一步一步,逐步地展示Perceptron的计算和运行的结果。看完此文章大家会了解:

Perceptron的基本结构和计算运用过程神经网络与Perceptron

另外,需要申明下,本篇文章所用的图片或者Gif来自于Torward Data Science。

Perceptron

Perceptron 其实就是一个 单层的神经网络,一般我们提到的多层神经网络 才是神经网络。

一般的神经网络,大家肯定会有所印象,或者或多或少看过一些。 如下图,就是一个神经网络识别图片的过程,猫or狗。

Perceptron的整体框架如下图,从下图大家可以对Perceptron有一个整体的概念。其中带方向的箭头是代表着数据流向。Perceptron包含以下几个步骤,将对其进行逐步讲解:

输入层or输入值参数汇总激励函数

Perceptron整体框架

输入值:

不同的问题,输入值当然不同。假设,我们面对的是一个只有五个像素点的图片,那么输入值就是五个X1~5. 可能我们有50000张这种图片,组成了一个50000*5的矩阵。最初,我在理解输入层的时候,就像且面包,一片一片的输入。

参数

这里的参数是指的是Weights 和 Bias,假设输入值只有一个X

那么其结果应该是: W * X + B

通过下图,大家可能会有一个更直观的印象。

另外,关于参数的重要性和意义,需要再解释下。也是我最初学习时候的一个疑问,神经网络学的是什么?

我们设置一个场景来试图回答这个问题,假设我们的输入是一个X矩阵,任务是判断该图片是猫?or 不是猫,输出值为 0 or 1.神经网络学习最直观的结果就是判断的准确率提高,即输出的准确率提高。

但是,我们的输入值并未改变,即X未改变。输出的结果变得不同或者说更准确,那么变更的就是参数了。

所以,对于该问题的结论是,神经网络学习的结果是其参数的变化。在这个例子中就是Weights 和 Bias。

汇总

我们已经有了输入值和参数,那么下一步就是汇总。这个步骤很简单也很直观,就不再解释了。

激励函数

在上述步骤,我们得到的是:

W*X + B

而激励函数就是在上述结果外再加了一个F(X)

最终的结果是y=F(W*X + B)

那么激励函数的作用是什么呢?

激励函数的作用非常大,也挺复杂的。后续会单独一篇来介绍。此处只介绍最基础部分。

线性to非线性

假设没有激励函数,那么Perceptron就是一个线性公式:W * X + B

如果是特别复杂的神经网络,很多层的那种。公式就是:

W1*(W2*X)+b2)+b1 = W1*W2 * X + W1*b2 + b1 = W*X + B

大家可以看出来,如果没有激励函数,再复杂的神经网络本质也是一个线性方程,其中W1*b2 和b1 都是常数。也就是说,再复杂的神经网络都是W*X + B。这就很尴尬了。

如果是线性方程的结果就是,别说承载复杂的信息了,连二元一次方程都搞不定。

所以,激励函数是必要的,但是选择什么激励函数呢?有哪些常用的激励函数呢? 将在激励函数专题中讲解

控制输出结果

激励函数另一个重要的作用就是控制输出的结果。比如,我们需要判断一张图片是猫or not。 那么我们期望的输出结果是 0 or 1.

如下图,unit step 激励函数,当X>0, 输出值为1;当X<0,输出值为0.

总结下

其实Perceptron的结构和神经网络的单一神经元的结构类似。

上面几个步骤很简单。也就是输入一个矩阵X,然后X与参数 矩阵相乘,然后进入激励函数计算。但是它的意义非常重大。以下是个人观点

首先,它这种输入层的设计适用非常广,可以使用图片Matrix,语音Matrix。 还能将上一个Perceptron的结果,输入到下一个Perceptron;将输入值非线性化,这一点在上一部分已经介绍了,就不再详细解释;扩展性,一个Perceptron就相当于一个神经元。它可以无限扩展,比如一个Perceptron连接到下一个Perceptron;

大家可以想象下,如果N个这种神经元连接在一起,将会形成一个多么复杂的神经网络。当前很厉害的神经网络,就是以不同的方式将这种神经元组合在一起。所以理解了Perceptron,就相当于理解了神经网络的50%

下期预告

虽然只是第三期,但是这期肯定是本系列最重要的一期了。虽然Perceptron简单,但是其也包含了神经网络的重要元素,输入值、神经元参数、激励函数等等。 如果大家有问题,可以给我留言。

下一期,基于Perceptron建立一个简单的神经网络 和初步设计神经网络训练部分。