受大脑启发的人工智能程序的一个早期例子是感知机(Perceptron),它由心理学家弗兰克·罗森布拉特于20世纪50年代末提出。感知机是一种基于神经网络的二分类模型,它可以用于对输入数据进行分类任务。感知机的结构简单,易于实现和训练,是神经网络的基础。
大脑神经系统
大脑神经系统无论从构造和功能来讲,都称得上是一个非常复杂的巨系统。
在神经系统中,神经元通过电化学信号的传递来传递信息。
附:神经元和神经细胞是指同一种细胞类型,但是在不同的上下文中可能会使用不同的术语。在神经科学领域中,通常使用神经元来指代这种细胞类型。
神经元由四个不同形态的部分构成:细胞体(躯干, neuron cell body)、树突(dendrites)、轴突(axon)和突触前末梢(axon tips)。 这些高度特化的细胞结构使它们能够传播电信号或动作电位,是神经元之间通信的基础。
图:两个神经元组成的神经网络
神经元内部的信号传递
神经元内部的信号传递主要通过离子通道完成。
图:神经元内部电信号传递
神经元膜上有许多种离子通道,包括钠离子通道、钾离子通道、钙离子通道等。这些离子通道的开闭控制了离子的流动,从而决定了神经元膜的电位变化。
当神经元受到兴奋性刺激时,钠离子通道会打开,使得细胞内钠离子浓度增加,膜电位变得更加正向。这种电位变化称为动作电位。动作电位的传递是神经元内部信息传递的基础,也是神经元与神经元之间信息传递的起点。在神经元内部,动作电位通过轴突传递到突触处,然后通过神经递质释放完成信号传递。
钾离子通道是在神经元受到兴奋性刺激后钠离子通道打开一段时间后打开的,它会使得细胞内钾离子浓度增加,导致膜电位变得更加负向。这种电位变化被称为复极期,它是神经元恢复静息状态的过程。
钙离子通道则在神经元内部的信号传递和突触可塑性中发挥着重要的作用。钙离子在神经元内部的浓度变化可以调节神经元的活动,而在突触处的钙离子浓度变化则参与了突触可塑性的调节,包括长时程增强(LTP)和长时程抑制(LTD)等过程。
神经元之间的信号传递
神经元之间的连接被称为突触。在突触处,神经元之间会释放化学物质,称为神经递质,来传递信号。
这些信号可以是兴奋性的(刺激神经元)或抑制性的(抑制神经元)。
化学递质是兴奋性还是抑制性,并不是由物质决定的,而是取决于它所作用的突触后膜的离子通透性和细胞内的离子浓度(主要是氯离子)
小结
单个神经细胞可被视为一种只有两种状态的机器——激动时为『是』,而未激动时为『否』。神经细胞的状态取决于从其它的神经细胞收到的输入信号量,及突触的强度(抑制或加强)。当信号量总和超过了某个阈值时,细胞体就会激动,产生电脉冲。电脉冲沿着轴突并通过突触传递到其它神经元。
感知机
为了模拟神经细胞行为,与之对应的感知机基础概念被提出,如权量(突触)、偏置(阈值)及激活函数(细胞体)。
对于计算机科学家或者心理学家来说,信息在神经元中的处理过程可以通过一个有多个输入和一个输出的计算机程序(感知机)进行模拟。
图:神经细胞与感知机
神经元和感知机之间的类比如上图所示。上图左侧展示了一个神经元及其树突(为细胞带来输入信号的结构)、胞体和轴突(即输出通道);右侧展示了一个简单的感知机结构。与神经元类似,感知机将其接收到的输入信号相加,如果得到的和等于或大于感知机的阈值,则感知机输出1(被激活),否则感知机输出0(未被激活)。
为了模拟神经元的不同连接强度,罗森布拉特建议给感知机的每个输入分配一个权重,在求和时,每个输入在加进总和之前都要先乘以其权重。感知机的阈值是由程序员设置的一个数字,它也可以由感知机通过自身学习得到。
图大脑中的神经元(A)和一个简单的感知机(B)
简而言之,感知机是一个根据加权输入的总和是否满足阈值来做出是或否(输出1或0)的决策的简易程序。
在生活中,你可能会以下面这样的方式做出一些决定。例如,你会从一些朋友那里了解到他们有多喜欢某一部电影,但你相信其中几个朋友对于电影的品位比其他人更高,因此,你会给他们更高的权重。如果朋友喜爱程度的总量足够大的话(即大于某个无意识的阈值),你就会决定去看这部电影。如果感知机有朋友的话,那么它就会以这种方式来决定是否看一部电影。
学习感知机的权重和阈值
感知机中的所有“知识”都被编码在由数字组成的权重和阈值中。
我们如何为一个给定的任务准确地设定正确的权重和阈值呢?
罗森布拉特再次给出了一个受大脑启发的答案:感知机应该通过自己的学习获得这些数值。
单层感知机的局限性
单层感知机由于其简单的结构,只能解决简单的线性可分问题。
1969年,“符号主义”代表人物马文·明斯基(Marvin Minsky)的著作《感知器》提出对XOR线性不可分的问题:单层感知器无法划分XOR原数据,解决这问题需要引入更高维非线性网络(MLP, 至少需要两层),但多层网络并无有效的训练算法。这些论点给神经网络研究以沉重的打击,神经网络的研究走向长达10年的低潮时期。
图:我们无法通过一条直线分割红点和绿点(一边全是红点,一边全是绿点)。
实际出现过的感知机
上世纪 60 年代人类真的用插线的方式做过实体化的神经网络,叫做 Mark I Perceptron(感知机)
用代码模拟感知机
下面是用Python模拟的单层感知机的代码,可以帮你理解感知机。
import numpy as np
# 单层感知机
class Perceptron:
def __init__(self, input_size, lr=0.1):
self.lr = lr
self.weights = np.zeros(input_size + 1)
# 预测
def predict(self, inputs):
total = np.dot(inputs, self.weights[:-1]) + self.weights[-1]
return 1 if total > 0 else 0
# 训练
def train(self, inputs, labels):
predictions = []
for input in inputs:
predictions.append(self.predict(input))
errors = labels - predictions
for i in range(len(inputs)):
self.weights[:-1] += self.lr * errors[i] * inputs[i]
self.weights[-1] += self.lr * errors[i]
# 输入值
inputs = np.array([[1, 2, 3], [4, 5, 6]])
# 标签
labels = np.array([1, 0])
# 创建感知机
perceptron = Perceptron(3)
# 训练
perceptron.train(inputs, labels)
# 预测
predictions = []
for input in inputs:
predictions.append(perceptron.predict(input))
print(predictions)
# 输出 [1, 1]
上面代码预测结果跟我们的原始数据不一致,说明我们的训练次数、训练的数据不足。
总结
感知机是一种基于神经网络的二分类模型,它可以用于对输入数据进行分类任务。
感知机的结构简单,易于实现和训练,是神经网络的基础。