全国大学生智能汽车竞赛,顶着“智能”的帽子已经走过了14年了。如果按照2005年,当年筹办比赛时候的标准,车模在预先不知道的赛道上完成竞速比赛,看起来还仿佛应该具有“智能”。

可是做过智能比赛的人都知道,其中所有的算法和规则,都是预先设定好的。无论对于信号的处理,还是对于车模速度和方向的控制,都是基于信号处理和自动控制原理。如果美其名曰为“人工智能”,现在看起来有点牵强了。

由于“人工智能”热起,喧燥社会中,所有人都会被裹挟进人工智能浪潮。哪怕原本属于传统信息技术,现在也都言必称AI。但究竟哪些算法才能够算“人工智能”呢?

首先,“智能”的称谓是相对的。除了人之外,现在还没有其它事物被认为具有与人一样的“智能”。“人工智能”应该是指将部分原来有人来完成的信息处理工作交付于某种人类制作的系统来实现。

比如,计算机能够替代人完成加减乘除运算,从而被称为“电脑”。但这个程序是由人类总结出的规则,通过编程来实现。后来也逐渐不被人为有所谓的智能,这只是一个自动化过程而已。

现代典型的人工智能系统中,进行处理信息的规律中, 不全是由人来总结的。而是在人类定义的通用框架下,再由算法本身对数据进行学习而得。这个过程成为智能系统的训练过程。就像有各种人工神经网络组成的信息处理系统那样。因此,是否有数据重新进行训练过程,成为区分传统的信息处理和人工智能的分水岭。

下面举一个例子。

昨天讨论了带有线性霍尔传感器的电机转速测量电路。如果测速的圆形磁铁具有按照正弦波变化的磁场,两个线性传感器又恰好在空间相差90度,那么两个传感器输出的信号与角度之间就是sin,cos信号。

两个线性传感器输出sin,cos信号

因此,这两个信号之比,就是角度的正切值,这样也消除了信号输出幅值对于计算带来的影响。近而可以通过求反正切获得电机转子的角度。再根据角度的变化率,获得电机转速和转向信息。

上述过程,也包含了信号复杂的各种运算和反正切运算,但这个规则是由人工事前完全确定好了。因此不属于“人工智能”范畴。

由于前面算法假设条件与实际情况有很大的出入:

实际圆形磁铁的磁场强度不是正弦分布

(2)K1,K2两个信号之间的相位差不一定是90度;

(3)测量得到的信号中具有很大的噪声。

因此,使用传统的方法,所得到的电机转子具有很大的系统误差和随机误差。

如果想消除系统误差,需要能够更加精确描述K1,K2输出波形函数。如果想消除随机误差,就需要利用更多的测量数据。显然,如果人工来确定这些函数和处理算法,相对比较困难。那么就可以使用“人工智能”算法来处理这个问题。

实际测量信号的变形与失真

“人工智能”算法的思想认为,所需想得到的信息,蕴藏在采集到的数据中,处理这些数据获得信息的规则,不再由人工编写,而是通过一个通用的框架,由数据训练而得到。

对于电机测速问题,可以预先使用 一个精确的测速编码器,与电机输出轴相连,然后采集不同转速下K1,K2信号的波形数据以及当时编码器精确的输出速度,形成训练数据集合。

对于小型直流电机,假设其额定转速为100转/秒。使用10kHz采样速率,采集K1,K2信号10ms,每个信号得到100个数据。下图显示了使用MATLAB仿真得到的不同转速下的采集数据,电机转速从-300转/秒,到300转/秒。

采集到10毫秒两路HALL信号波形

使用MATLAB构建一个单隐层前向全连接神经网络中,中间隐层设置20个节点,输出层采用线性输出。将上面采集到的HALL信号波形连同对应的电机转速形成训练样本,送到上面的神经网络进行训练。最终有神经网络从这些数据中获得内部蕴含着的角度计算规则。

使用MATLAB的nnstart工具箱完成训练

这个实验,在开始的时候,构造的训练样本为1000个,对应的速度均匀分布在(-300,300)转/秒之间。

MATLAB训练该网络,采用其中70%作为训练集合,15%作业校验集合,15%作为测试集合。训练速度很快,15秒左右便训练结束。下图显示了训练网络进行数据回归的对比。可以看到在训练、校验、测试集合都获得了 很高的精度。

训练集合、校验集合、测试集合

网络训练结果

在实际工作中,采集到的信号都会具有噪声,为了测试网络的性能,下面将样本中增加10%~30%的噪声后重新测试网络的输出。

加收噪声的测试信号向量

结果显示,在10%,20%噪声下,网络输出的结果与实际值之间出现了很大的误差。下图中的圆点显示网络输出,与对角线之间出现了很大的误差。

在有噪声存在是,神经网络回归值

为什么在上述网络中,对于测试集合学习精度很高。但在有噪声的情况下,网络性能变差了呢?

由于网络输入节点为200,中间隐层的节点为20 ,所以这层网络的权系数的个数为4000个。但在上面训练过程中,仅仅使用了1000个采样样本进行训练。此时神经网络没有得到充分的训练,产生的过学习现象。

为了解决这个问题,重现对训练样本进行采样。在转速(-300,300)转/秒的范围内,均匀采样10000个训练样本,超过了4000个网络待定系数,然后对于上面网络进行训练。

网络训练过程

训练样本增加了10倍,网络训练时间则增加了将近100倍,经过了14分钟左右,网络训练结束。

重新使用带有噪声的采集信号对于网络进行测试。

带有随机噪声的采集信号

下图显示神经网络输出时的转速信号回归特性。显然网络输出的精度相比前面的网络大大提高了。这是由于训练样本超出了待定系数2.5倍,网络得到了充分的训练。

10000个样本训练后的网络回归特性

使用神经网络来求取电机转速的过程,虽然简单,但它则属于现在意义中的人工智能算法范畴。即整个算法实现过程中,不再由人工具体确定所有的算法过程和参数,部分是由实际数据进行后期训练而得到。

人工智能算法,虽然将人类从对算法规律总结的劳动中解脱出来,但又给人类增添了新的烦恼,也就是需要为网络的训练准备足够有代表性的训练样本。

上面的训练样本是由MATLAB仿真生成的,相对还比较方便。但对于一个实际的测试电机,则需要在实际中采集到这些不同转速下的信号值。这需要另外设计自动数据采集过程完成这项工作。

实际电机HALL输出信号

同样,为了能够是的训练得到的网络在HALL信号不同的工作电压、不同的初始相位、不同的加减速下都能够具有很好的精度,上面10000中均匀采集的训练样本是远远不够的,估计还需要增加一个数量级,至个。这会是的数据采集以及网络训练的时间大大增长了。

这里,仅仅使用人工智能算法的范式来完成速度检测算法,已经需要消耗大量的训练计算量。在实际工作中,网络每一次计算也需要4000次的乘法和加法,这些计算量已经远远超过了常规的算法。

因此,如果将智能车模其它的控制和算法都是用人工智能算法,显然其中的计算量远非一个单片机所能够完成的。

人工智能算法,不是指算法任务的复杂程度,而是指确定算法的模式上的不同。如果想在智能车竞赛中引入人工智能算法,需要有更大计算能力的处理器作为基础。

看到这儿,你是否对于“人工智能”算法的特点有了了解了呢?

注:上述使用BP网络进行速度估计并不是最优的网络,只是用于说明人工神经网络算法特点。