因为本人对神经网络比较感兴趣,打算利用神经网络强大的拟合能力实现我自己的东西,因此抽时间学了一下,纯小白入门可以此文章入门。
为什么需要神经网络?
我们来思考一个具体的问题,比如如何实现数字“5”的识别。数字5是下图所示的手写图像,我们的目标是实现能区别是否是5的程序。这个问题看起来很简单,大家能想到什么样的算法呢?
如果让我们自己来设计一个能将5正确分类的程序,就会意外地发现这是一个很难的问题。人可以简单地识别出5,但却很难明确说出是基于何种规律而识别出了5。此外,从上中也可以看到,每个人都有不同的写字习惯,要发现其中的规律是一件非常难的工作。 事实上我们如果想将声音转成文字,你会发现通过传统编程也很难实现,每个人都有不同的发音特点,不同的音色,不同的口音。 有没有什么技术能处理上面的两个难题呢? 人工智能里面的计算机视觉(CV),自然语言处理(NLP)两个分支就是专门研究处理上面两个问题。然而如今他们都有一个共同的基础,神经网络。
学习神经网络之前我们需要了解一个相对古老的算法-感知机
感知机
什么是感知机?
感知机是由美国学者Frank Rosenblatt在1957年提出来的。为何我们现在还要学习这一很久以前就有的算法呢?因为感知机也是作为神经网络(深度学习)的起源的算法。因此,学习感知机的构造也就是学习通向神经网络和深度学习的一种重要思想。
感知机长什么样子?
感知机的数学表示:
感知机接收多个输入信号,输出一个信号。x1、x2是输入信号, y是输出信号,w1、w2是权重(w是weight的首字母)。图中的○称为“神 经元”或者“节点”。输入信号被送往神经元时,会被分别乘以固定的权重(w1x1、w2x2)。神经元会计算传送过来的信号的总和,只有当这个总和超过 了某个界限值时,才会输出1。这也称为“神经元被激活”。这里将这个界 限值称为阈值,用符号θ表示。
感知机有了,那他与神经网络有什么关系呢?在解答这个问题之前我们先来看看门电路。
尝试用感知机实现门电路
门电路-与门
我们先看一下与门(&)的真值表:
小知识:
”且“ 在代码中记做 & 或者 and ,在实际电路中就是通过与门来实现的
下面尝试用感知机来表示这个与门。需要做的就是确定能满足真值表的w1、w2、θ的值。 我们在此先聪明的假设 w1 的值为 (w1, w2, θ) = (0.5, 0.5, 0.7) 感知机的数学表达: x1 和 x2 为两个输入,可以输入 0或者1 ,y表述输出。我们可以发现当权重为(w1, w2, θ) = (0.5, 0.5, 0.7)时,当前感知机实现了与与门相同的效果。 实际上,满足条件的参数的选择方法有无数多个。比如,当(w1, w2, θ)为(0.5, 0.5, 0.8)或者(1.0, 1.0, 1.0) 时。 同理通过调整 参数(w1, w2, θ) 的值可以实现 或门 和与非门。
感知机的局限性
思考:
前面已经通过调整参数使得感知机实现了几种基本的们电路,我们继续来试试调整(w1, w2, θ)的值来实现 亦或门。
异或门真值表
w1 = ? w2 = ? θ = ?
经历过大量的尝试之后,我们发现无论如何调整参数都实现不了。为什么实现不了,我们将问题通过坐标图画出来。
○和△表示异或门的输出。○ 表示false,△表示true 想要用一条直线将图中的○和△分开,无论如何都做不到。事实上,用一条直线是无法将○和△分开的。
线性与非线性
上图中的○和△无法用一条直线分开,但是如果将“直线”这个限制条 件去掉,就可以实现了。比如,我们可以像下图那样,作出分开○和△的空间。
感知机不能表示异或门让人深感遗憾,但也无需悲观。实际上,感知机的绝妙之处在于它可以“叠加层”(通过叠加层来表示异或门)。 异或门的制作方法有很多,其中之一就是组合我们前面做好的与门、与非门、或门进行配置。
小知识:实际上物理门电路的实现也是通过 或门、与门的组合实现的。
异想天开:用感知机来制作计算机?
多层感知机可以实现比之前见到的电路更复杂的电路。比如,进行加法运算的加法器也可以用感知机实现。此外,将二进制转换为十进制的编码器、满足某些条件就输出1的电路(用于等价检验的电路)等也可以用感知机表示。实际上,使用感知机甚至可以表示计算机!计算机是处理信息的机器。向计算机中输入一些信息后,它会按照某种既定的方法进行处理,然后输出结果。所谓“按照某种既定的方法进行处理”是指,计算机和感知机一样,也有输入和输出,会按照某个既定的规则进行计算。人们一般会认为计算机内部进行的处理非常复杂,而令人惊讶的是,实际上只需要通过与非门的组合,就能再现计算机进行的处理。这一令人吃惊的事实说明了什么呢?说明使用感知机也可以表示计算机。前面也介绍了,与非门可以使用感知机实现。也就是说,如果通过组合与非门可以实现计算机的话,那么通过组合感知机也可以表示计算机(感知机的组合可以通过叠加了多层的单层感知机来表示)。
总结:
感知机是具有输入和输出的算法。给定一个输入后,将输出一个既 定的值。
• 感知机将权重和偏置设定为参数。
• 使用感知机可以表示与门和或门等逻辑电路。
• 异或门无法通过单层感知机来表示。
• 使用2层感知机可以表示异或门。
• 单层感知机只能表示线性空间,而多层感知机可以表示非线性空间。
• 多层感知机(在理论上)可以表示计算机。