眼下最热门的技术,绝对是 人工智能。
写在前面
人类文明的发展飞速,有时我就突发奇想:
- 人类科技为什么要不断发展?有没有尽头?尽头是什么样子的?(热寂?)
- 如果说高科技可以使人更加幸福,那么现在你幸福吗?你会不会怀念网络不发达时给远方亲人或朋友书信的感觉?
- 历史的车轮滚滚向前的动力,是不是那些逐利的“资本家”提供的?(往小里说是资本家、商人,往大里说可以是国家机器乃至地球人类)
- 如果动力是逐利的“资本家”提供的,那么对于所有“资本家”来说是不是零和博弈(范围限制在地球之内,《三体》那样的博弈除外)?举个很简单的例子,炎热的夏天富人家里开着空调,是不是街上的体力劳动者生存环境的温度被富人升高了?
这些问题太大了,就像人类为何活着…
我想说的,也是在这篇文章开头仅能说的,是:虽然你不知道科技为何发展或者将来要发展成什么样子,但是你必须紧追发展前沿,否则你就会落伍,会被淘汰,会被历史车轮碾压,消失在扬起的滚滚风尘之中…
人类利用动物的生理本能和科技 PK,一定程度上是一种自不量力的傻。
《最强大脑》水哥 VS 小度:
柯洁哭了,阿法狗没有笑:
人工智能与人类
眼下最热门的技术,绝对是人工智能。关于老百姓和人工智能的关系,可以听听他们聊天:
神经网络
现在我们进入主题来看看人工智能这种玄乎的东西。
人工智能的底层模型是“神经网络”(neural network) 。许多复杂的应用(比如模式识别、自动控制)和高级模型(比如深度学习)都基于它。学习人工智能,一定是从它开始。
先看一张图有个大概印象:
感知器
历史上,科学家一直希望模拟人的大脑,造出可以思考的机器。人为什么能够思考?科学家发现,原因在于人体的神经网络。
- 外部刺激通过神经末梢,转化为电信号,转导到神经细胞(又叫神经元)。
- 无数神经元构成神经中枢。
- 神经中枢综合各种信号,做出判断。
- 人体根据神经中枢的指令,对外部刺激做出反应。
既然思考的基础是神经元,如果能够”人造神经元”(artificial neuron),就能组成人工神经网络,模拟思考。上个世纪六十年代,提出了最早的”人造神经元”模型,叫做 “感知器”(perceptron),直到今天还在用。
上图的圆圈就代表一个感知器。它接受多个输入(x1,x2,x3…),产生一个输出(output),好比神经末梢感受各种外部环境的变化,最后产生电信号。
为了简化模型,我们约定每种输入只有两种可能:1 或 0。如果所有输入都是1,表示各种条件都成立,输出就是1;如果所有输入都是0,表示条件都不成立,输出就是0。
把抽象的感知器用个形象的例子描述:城里正在举办一年一度的游戏展览,小明拿不定主意,周末要不要去参观。
他决定考虑三个因素:
- 天气:周末是否晴天?
- 同伴:能否找到人一起去?
- 价格:门票是否可承受?
这就构成一个感知器。上面三个因素就是外部输入,最后的决定就是感知器的输出。如果三个因素都是 Yes(使用1
表示),输出就是1(去参观);如果都是 No(使用0
表示),输出就是0(不去参观)。
权重和阈值
你肯定会问:如果某些因素成立,另一些因素不成立,输出是什么?比如,周末是好天气,门票也不贵,但是小明找不到同伴,他还要不要去参观呢?
现实中,各种因素很少具有同等重要性:某些因素是决定性因素,另一些因素是次要因素。因此,可以给这些因素指定权重(weight),代表它们不同的重要性。
- 天气:权重为8
- 同伴:权重为4
- 价格:权重为4
上面的权重表示,天气是决定性因素,同伴和价格都是次要因素。
如果三个因素都为1,它们乘以权重的总和就是 8 + 4 + 4 = 16。如果天气和价格因素为1,同伴因素为0,总和就变为 8 + 0 + 4 = 12。
这时,还需要指定一个阈值(threshold)。如果总和大于阈值,感知器输出1,否则输出0。假定阈值为8,那么 12 > 8,小明决定去参观。阈值的高低代表了意愿的强烈,阈值越低就表示越想去,越高就越不想去。
上面的决策过程,使用数学表达如下:
上面公式中,x
表示各种外部因素,w
表示对应的权重。
决策模型
单个的感知器构成了一个简单的决策模型。真实世界中,实际的决策模型要复杂得多,是由多个感知器组成的多层网络:
上图中,底层感知器接收外部输入,做出判断后,再发出信号,作为上一层感知器的输入,直至得到最后的结果。(注:感知器的输出依然只有一个,但是可以发送给多个目标。)
这张图里,信号都是单向的,即下层感知器的输出总是上层感知器的输入。现实中,有可能发生循环传递,即 A 传给 B,B 传给 C,C 又传给 A,这称为 “递归神经网络”(recurrent neural network):
矢量化
为了方便后面的讨论,需要对上面的模型进行一些数学处理:
- 外部因素 x1、x2、x3 写成矢量 <x1, x2, x3>,简写为 x
- 权重 w1、w2、w3 也写成矢量 (w1, w2, w3),简写为 w
- 定义运算 w⋅x = ∑ wx,即 w 和 x 的点运算,等于因素与权重的乘积之和
- 定义 b 等于负的阈值 b = -threshold
感知器模型就变成了下面这样:
神经网络的运作过程
一个神经网络的搭建,需要满足三个条件:
- 输入和输出
- 权重(w)和阈值(b)
- 多层感知器的结构
也就是说,需要事先画出刚才出现的那张图:
其中,最困难的部分就是确定权重(w)和阈值(b)。目前为止,这两个值都是主观给出的,但现实中很难估计它们的值,必需有一种方法找出答案。
这种方法就是 试错法。其他参数都不变,w(或b)的微小变动,记作Δw(或Δb),然后观察输出有什么变化。不断重复这个过程,直至得到对应最精确输出的那组w和b,就是我们要的值。这个过程称为 模型的训练:
因此,神经网络的运作过程如下:
- 确定输入和输出
- 找到一种或多种算法,可以从输入得到输出
- 找到一组已知答案的数据集,用来训练模型,估算w和b
- 一旦新的数据产生,输入模型,就可以得到结果,同时对w和b进行校正
可以看到,整个过程需要海量计算。所以,得益于硬件的发展,神经网络直到最近这几年才有实用价值。而且一般的 CPU 还不行,要使用专门为机器学习定制的 GPU 来计算:
神经网络的例子
下面通过车牌自动识别的例子,来解释神经网络:
所谓”车牌自动识别”,就是高速公路的探头拍下车牌照片,计算机识别出照片里的数字:
这个例子里面,车牌照片就是输入,车牌号码就是输出,照片的清晰度可以设置权重(w)。然后,找到一种或多种图像比对算法,作为感知器。算法得到的结果是一个概率,比如75%的概率可以确定是数字 1。这就需要设置一个阈值(b)(比如85%的可信度),低于这个门槛结果就无效。
一组已经识别好的车牌照片,作为训练数据集,输入模型。不断调整各种参数,直至找到正确率最高的参数组合。以后拿到新照片,就可以直接给出结果了:
输出的连续性
上面的模型有一个问题没有解决,按照假设,输出只有两种结果:0和1。但是,模型要求w或b的微小变化,会引发输出的变化。如果只输出0和1,未免也太不敏感了,无法保证训练的正确性,因此必须将”输出”改造成一个连续性函数。
这就需要进行一点简单的数学改造。
首先,将感知器的计算结果 wx + b 记为 z:1
z = wx + b
然后,计算下面的式子,将结果记为σ(z):1
σ(z) = 1 / (1 + e^(-z))
这是因为:1
2如果z趋向正无穷z → +∞(表示感知器强烈匹配),那么σ(z) → 1;
如果z趋向负无穷z → -∞(表示感知器强烈不匹配),那么σ(z) → 0。
也就是说,只要使用σ(z)当作输出结果,那么输出就会变成一个连续性函数。
原来的输出曲线是下面这样:
现在变成了这样:
实际上,还可以证明 Δσ 满足下面的公式:
即 Δσ 和 Δw 和 Δb 之间是线性关系,变化率是偏导数。这就有利于精确推算出 w 和 b 的值了。
(神经网络知识整理于 阮一峰博客)