从感知机到神经网络简略

最热门的深度学习,想必很多人都想了解学习,网络上也有不少资料;小编也希望可以从头开始,更为透彻地去理解原理机制,这样在日后可以在深度学习框架实战的学习上更为轻松。那我们就从头开始,从最简单的神经元:感知机开始学习。

感知机:

感知机是最早的监督式训练算法,我们之前的学习文章中也略有提到,它是神经网络和支持向量机的基础,在支持向量机方面主要是理解支持向量和max margin的loss函数;而神经网络方面,我们可以将它看作是神经网络的一个神经元。

  假如平面中存在n个点,并被分别标记为“0”和“1”。此时加入一个新的点,如果想要对这个点进行分类判别,最简单的方法是查找离这个点最近的点是什么,然后返回和这个点一样的标记。而一种稍微“智能”的办法则是去找出平面上的一条线来将不同标记的数据点分开,并用这条线作为“分类器”来区分新数据点的标记。

在本例中,每一个输入数据都可以表示为一个向量 x_t 作为一个新的插入点,我们的感知机将如何判断,并进行权重的改变的。最终将输入、权重和偏移结合可以得到如下传递函数:

这个传递函数的结果将被输入到一个激活函数中以产生标记。在上面的例子中,我们的激活函数是一个门限截止函数(即大于某个阈值后输出1):

  看到这样的线性表达,应该很容易想到其可以通过最小化误差输出,去进行训练;重点是感知机只是一个线性的分类器,并不能解决XOR简单的函数

  为了解决非线性这个问题,我们就要使用多层感知机,也就是前馈神经网络。

前馈神经网络

  神经网络实际上就是将大量之前讲到的感知机进行组合,用不同的方法进行连接并作用在不同的激活函数上。

我们简单介绍下前向神经网络,其具有以下属性:

1. 一个输入层,一个输出层,一个或多个隐含层。上图所示的神经网络中有一个四神经元的输入层、一个三神经元的隐含层、一个二神经元的输出层。

2. 每一个神经元都是一个上文提到的感知机。

3.输入层的神经元作为隐含层的输入,同时隐含层的神经元也是输出层神经元的输入。

4. 每条建立在神经元之间的连接都有一个权重w(与感知机中提到的权重类似)。

5. 在t层的每个神经元通常与前一层(t - 1层)中的每个神经元都有连接(但你可以通过将这条连接的权重设为0来断开这条连接)。

6. 为了处理输入数据,将输入向量赋到输入层中。然后这些值将被传播到隐含层,通过加权传递函数传给每一个隐含层神经元(这就是前向传播),隐含层神经元再计算输出(激活函数)。

7. 输出层和隐含层一样进行计算,输出层的计算结果就是整个神经网络的输出。

  如果每一个感知机都只能使用一个线性激活函数会怎么样?整个网络的最终输出也仍然是将输入数据通过一些线性函数计算过一遍,只是用一些在网络中收集的不同权值调整了一下。换名话说,再多线性函数的组合还是线性函数。如果我们限定只能使用线性激活函数的话,前馈神经网络其实比一个感知机强大不到哪里去,无论网络有多少层。正是这个原因,大多数神经网络都是使用的非线性激活函数,如对数函数、双曲正切函数、阶跃函数、整流函数等。不用这些非线性函数的神经网络只能学习输入数据的线性组合。

对于常用的判别非线性函数就是:

sigmoid函数的定义如下:

将其带入式子,得到

sigmoid函数是一个非线性函数,值域是(0,1)。函数图像如下图所示

sigmoid函数的导数是:

可以看到,sigmoid函数的导数非常有趣,它可以用sigmoid函数自身来表示。这样,一旦计算出sigmoid函数的值,计算它的导数的值就非常方便。

有了传递的非线性函数,神经网络的基本表达就很容易了,通过权重向量和矩阵形式,更方便通过反向传导方法确定每一层的参数。

在上式中,激活函数是sigmoid函数;W是某一层的权重矩阵;x是某层的输入向量;a是某层的输出向量。则说明神经网络的每一层的作用实际上就是先将输入向量左乘一个数组进行线性变换,得到一个新的向量,然后再对这个向量逐元素应用一个激活函数。这里不再具体BP算法是如何操作的,主要是通过链式法则求每个神经元的偏导数,再进行权值分配。

BP反向传导算法的直观解释:当误差对权值的偏导数大于零时,权值调整量为负,实际输出大于期望输出,则权值向减少方向调整,使得实际输出与期望输出的差减少;反之,当误差对权值的偏导数小于零时,权值调整量为正,实际输出少于期望输出,权值向增大方向调整,使得实际输出与期望输出的差减少。

总之,还是利用随机梯度的方法,去在每一层进行优化,最终在整体算法上接近全局最优。 之后随着不断地学习,还会发布深度学习的相关文章。还请持续关注、转发~

参考文献:

  • https://zh.wikipedia.org/wiki/%E5%8F%97%E9%99%90%E7%8E%BB%E5%B0%94%E5%85%B9%E6%9B%BC%E6%9C%BA
  • http://www.cnblogs.com/xiaowanyer/p/3701944.html?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io
  • http://www.voidcn.com/blog/u012140304/article/p-3818963.html
  • http://www.voidcn.com/blog/qq_18515405/(神经网络学习笔记)
  • http://deeplearning.stanford.edu/wiki/index.php/UFLDL%E6%95%99%E7%A8%8B
  • https://zhuanlan.zhihu.com/p/21407711?refer=intelligentunit
  • https://www.zhihu.com/question/27239198?rf=24827633
  • http://www.cnblogs.com/liuwu265/p/4696388.html

本文分享自微信公众号 - 智能算法(AI_Algorithm)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-09-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张洁的专栏

线性回归的高斯假设

在线性回归问题中,我们定义了损失函数,但是为什么用最小二乘(而不是三次方等)作为损失函数? 我们来尝试解决一个完整的线性回归问题。

72800
来自专栏机器学习算法与Python学习

机器学习(6) -- SVM

本篇主要是对支持向量机(support vector machine , SVM) 总结性的文章,想详细的理解SVM的请看之前所发的支持向量机系列文章。 Co...

38050
来自专栏AI科技评论

开发 | 监督学习最常见的五种算法,你知道几个?

AI科技评论按:本文作者李东轩,原文载于作者个人博客,AI科技评论已经获得授权。 在机器学习中,无监督学习(Unsupervised learning)就是聚类...

40990
来自专栏书山有路勤为径

矩阵与状态转移方程

均值现在是一个向量,每个维度对应一个元素,方差变为协方差。协方差定义的是高斯函数的分散

22660
来自专栏深度学习与计算机视觉

理解激活函数在神经网络模型构建中的作用

什么是激活函数 在生物学家研究大脑神经元工作机理时,发现如果一个神经元开始工作时,该神经元是一种被激活的状态,我想着大概就是为什么神经网络模型中有一个单元叫做激...

36650
来自专栏desperate633

小白也能看懂的BP反向传播算法之Further into Backpropagation

在上一篇文章小白也能看懂的BP反向传播算法之Let's practice Backpropagation,我们计算了一个带sigmoid函数的嵌套网络的反向传播...

11210
来自专栏marsggbo

Andrew Ng机器学习课程笔记--week7(SVM)

本周主要学习SVM 一、 内容概要 Large Margin Classification Optimization Objective(优化Objectiv...

22780
来自专栏AI研习社

监督学习最常见的五种算法,你知道几个?

在机器学习中,无监督学习(Unsupervised learning)就是聚类,事先不知道样本的类别,通过某种办法,把相似的样本放在一起归位一类;而监督型学习(...

442110
来自专栏数据处理

BP神经网路

21030
来自专栏Python中文社区

机器学习算法实践:树回归

專 欄 ❈PytLab,Python 中文社区专栏作者。主要从事科学计算与高性能计算领域的应用,主要语言为Python,C,C++。熟悉数值算法(最优化方法,...

47290

扫码关注云+社区

领取腾讯云代金券