机器学习入门--神经元模型

人工神经元模型

机器学习入门--神经元模型

我们高中都学习过神经元大概是个什么样子。通常是由一个神经细胞都有树突、轴突、细胞核等等。树突可以接受其他神经元传来的信号,然后对这些信号进行一下处理传递给下一个神经元。

在这里我们通过一个数学模型来描述一下这个过程。

机器学习入门--神经元模型

在上面这副图里面、…这些带表神经元从前面的神经元所接受到的信号;、…表示权重即表示这个输入对输出有多大的影响,有一个函数f(*)表示神经元对于信号的处理过程;是输出打下一个神经元的信号。除此之外输入之中有一个特殊的=-1。这是为什么呢?我们知道学过神经元只有接收的信号大于一档程度时,神经元才会被**。在这里就是这个作用,输入的信号不够大时,这个神经元就不会被**。也有一个权重θ。

神经元会将输入x和起对应的权重w相乘然后再将其相加得到一个总输入,数学表达式是:

机器学习入门--神经元模型

然后这个值会被当作**函数f(*)的自变量得到输出yi:

机器学习入门--神经元模型

说到这其实大家对于这个神经元进行的计算过程有了一定的了解了。神经元其实就是一个有着n个变量的方程。给定n个输入,然后神经元给出一个输出。

现在我们将输入x和权重w用矩阵表示:

 机器学习入门--神经元模型

那么整个计算过程就可以用一个很简单的方程表示:

机器学习入门--神经元模型

在写成程序的时候,调用库文件写成矩阵进行计算会比使用for循环速度快很多。这样在进行大量计算的时候会省很多时间。

下面跟大家说说**函数

**函数有很多种,列个表格:

机器学习入门--神经元模型

**函数的作用是加入非线性因素,来解决神经元在处理分类问题时,分类能力不足的情况;在神经网络之中非线性的**函数可以让神经网络解决更复杂的任务。

目前使用最多的**函数是ReLU函数(y=max(0,x)),比较接近生物上神经元真实的工作状态。

简单介绍一下线性:

如果一个方程满足下面这连个条件:

1, 可加性f(x + y) = f(x)+ f(y)

2,齐次性(同质性) fx) = αf(x)

那么我们就可以称这个方程是线性的。实在不懂就暂时把认为这个方程是个直线。

 

神经元模型的几何解释

 

首先给大家复习一下点到直线的距离公式:

设直线 L 的方程为Ax+By+C=0,点 P 的坐标为(),则点 P 到直线 L 的距离为:

               机器学习入门--神经元模型  (百度百科)

把这里的、当成输入、;A、B当成权重、;c当成θ;这个式子是不是就很像神经元模型?只是**函数看起来有点难受。

如果这里把绝对值去掉,那么结果的正负是根据P的所在的位置确定的,在直线L的一边是正另一边就是负。

因为分母是常数,我们选择忽略它。

这里大家大概也能看得出来,把输入当作空间中的一点,那么我们前面计算的net值其实就是这个点到空间中一条直线的距离,会根据点所在直线哪一侧而有正负的区别。看张图大家会更明白。

机器学习入门--神经元模型

如果**函数选择sigmoid函数(表中第三个)图像为

机器学习入门--神经元模型

那么输出可以近似看成根据输入在空间中相对于直线的位置输出1或者0。

 

神经元模型的一个简单应用

机器学习入门--神经元模型

这是我自己造的数据,以身高为x,头发长度为y我们能得到一个散点图:

机器学习入门--神经元模型

在神经元模型中如果参数设定得好,那么我们就可以得到一条直线把这两种输入分开。这样给定只要给定一个人的身高和头发长度,我们完全可以预测这个人的性别。

至于确定参数,反向传播算法(BackPropagation)可以帮助我们从已有的数据中找到合适的参数。这里不和大家过多地介绍了,有兴趣的同学可以到网上查一下。

(参考:http://blog.csdn.net/mao_xiao_feng/article/details/53048213

 

怎么进行手写数字识别?

MNIST数据集(不知道的话可以百度一下)中有很多手写数字的图片并且大小都是28*28的,总共有784个像素,把这些图片当作一个784维的空间(线代中向量空间的概念)中的点,输入到一个神经元之中,得到这个图片是不是某个特定的数字(比如是不是8,是8就输出1不是就输出0)。将图片同时输入10个不同的神经元中,我们就能判断这个数字到底是几了。(参数合适准确率能到85%以上)这十个神经元也可以算是组成了一个神经网络。

 

就说到这吧,有兴趣的话希望同学们在空闲时间自己到网上找一些资料看,同时别忘了一定要把数学学好。