为什么需要神经网络?

  • https://pic2.zhimg.com/df53fac99fc53ba5a90666abcca25e6d_b.jpg
    https://pic2.zhimg.com/df53fac99fc53ba5a90666abcca25e6d_b.jpg
  • 神经网络原本是生物学当中的知识。如上图所示,就是一个神经网络的放大图,在图中我们可以看到好几个大的节点,生物术语叫做神经元,而神经元之间可以看到连接着小的神经线。这就如同一个图的结构一样,包含了节点和连接节点的边。那么不同的神经元是有不同的功能的,而神经线(非专业术语)可以给不同的神经元传递信息。这样的一个神经网络可以完成很多不同的功能,如我们的大脑一样,我们的大脑遍布着神经网络,而我们的大脑是我们身体的控制中心,实现了非常多的功能。
  • 所以在机器学习当中为什么需要机器学习呢?因为机器学习当中现时的模型简单,有时候解决不了复杂的问题。所以为了对付复杂的模式,就用到了神经网络。

神经网络的架构

  • 一般的神经网络架构是包含输入层(input layer),隐藏层(hidden layer)和输出层(output layer)。
  • http://futurehumanevolution.com/wp-content/uploads/Artificial-Intelligence-Neural-Network-Nodes.jpg
    http://futurehumanevolution.com/wp-content/uploads/Artificial-Intelligence-Neural-Network-Nodes.jpg

神经网络的计算

  • 那么神经网络是如何计算的呢?在神经网络中,神经元都是有功能的,我们称之为激活函数,当input输入网络时,会经过神经元,神经元会通过激活函数判断当前的输入是否应该激活,如果激活了就会进入下一层,如果没有激活,那么这个input就不会进入到下一层了。同样的input输入到不同的节点时得到的结果不一样,是因为节点上的激活函数不同,激活函数不同也就是weighs和bias不同。
  • 当input到达输出层时会得到一个预测值,神经网络通过比较预测值和实际值的误差,并不断地调整节点的weights和bias,从而使得预测值和实际值之间的误差越来越小,预测效果会越来越好,这个过程就叫做training。

最简单的神经网络-感知器(Perceptron)

  • 感知器是一个简单的二类分类模型,也是最简单的神经网络结构。它是由心理学家Frank Rosenblatt于1957年提出的。它的结构模型如下:
  • http://1.bp.blogspot.com/-P5zuvA_ZrYk/TobOno7uRFI/AAAAAAAAAIM/tnIVcdNoWaU/s1600/perceptron.png
    http://1.bp.blogspot.com/-P5zuvA_ZrYk/TobOno7uRFI/AAAAAAAAAIM/tnIVcdNoWaU/s1600/perceptron.png
  • 它就是一个简单的输入层和输出层。输入的每个样本会有两个feature,x1和x2。x1和x2对应的权重是w1和w2。中间的f函数是一个点乘函数,就是f(X) = x1 * w1 + x2 * w2。然后接着的是一个阈值函数,也可以叫做分段函数。只要函数值大于预定的阈值,那么就会输出1,相反,就会输出-1。这就实现了一个二类分类器。
  • 感知器是一个简单的二分类的分类器,但是它只能解决线性问题。什么是线性问题呢?就是用一个条直线就能划分的问题。那么,像我们学过的“逻辑与”与“逻辑或”这样的线性问题是怎么用感知器来实现的呢?

感知器实现“逻辑与”(AND)和“逻辑或”(OR)

  • 我们先来看一下“逻辑与”的真值表和它的函数图吧:
  • http://hahack.com/images/ann2/tZUEt.png
    http://hahack.com/images/ann2/tZUEt.png
  • 然后“逻辑或”的真值表和它的函数图:
  • http://hahack.com/images/ann2/eqMxJ.png
    http://hahack.com/images/ann2/eqMxJ.png
  • 那么感知器是如何解决线性问题的呢?上面我们提到的一个阈值函数,假设我们的阈值为T,那么函数的定义可以写成:
  • 所以划分分类的直线就是: