【Nature】颠覆传统神经网络,19个神经元实现自动驾驶


正好撞上了自己的研究,简单说两句:
1.这个项目开源了的,而且这个项目是一个系列,他的每个神经元不是普通的常规神经元(weight&bias),而是基于neural ode和ct-rnn的一种新的子结构,作者叫他LTC(liquid time constant)这个东西发的AAAI。视频里面这个是作者根据仿生定义的神经元链接方式,叫NCP(neural circuit policy)发的20年nature ml。
但是这玩意是neural ode+rnn构架,看起来很小个网络,实则需要展开进行训练和推理,还不能并行,所以作者又设计了个CFC,用一个解析解来近似推理LTC的行为,从而加速他的训练,这个也发在去年nature ml上面。

总而言之,这东西的好处是
1.表达力很强,啥意思呢,就是一层,几个ltc的模型也能媲美特别深的resnet,而且这一层里面实则模型已经拟合了目标函数很多次了(neural ode特性)所以能够用极小的网络完成复杂的task,
2.可解释性强,因为层数减少,单个神经元能力强,不管是attention还是做PCA分析都能很容易的发现每层的几个神经元在做的事情。坏处就是不好训,这也是neural ode构架的主要问题,18年nips best paper之后,n-ode构架没法取代resnet也是有这方面的因素,做不大。
很多评论都在说哎呀这没用那没用,感觉不如xxx,其实说的没错,就和免费送你3a大作和送你steam喜加一小游戏一样,肯定选3a。但是3a大作虽然香,你也不能说小游戏都是垃圾,里面的玩法,思想,说不定那天就成为了有用的东西。我觉得科研也是一样,有些东西就是力大砖飞,直接干碎了一些想法,但是这些想法可能会在未来算力,硬件足够强之后取代这块砖,让力大飞的子弹,导弹或者是星际战舰对吧
确实,人们常常会轻视一些看似小的想法或者成果,但实际上它们可能会为未来的科学研究和技术创新提供重要的启示和基础。在科研中,每一个小的成果都可能是积累的一部分,最终构建起大的体系。
自动驾驶中的拟合目标函数是一个非常重要的问题。目标函数的选择直接影响到自动驾驶算法的性能和效果。拟合目标函数的过程需要运用专业的数学知识,例如最小二乘法、梯度下降算法等。通过拟合目标函数,可以将不同的感知信息进行融合,从而得到更加准确和可靠的决策。
自动驾驶中还有许多其他的数学问题,例如轨迹规划、路径跟踪等。这些问题也都需要运用专业的数学知识进行解决。随着技术的不断进步和算力的提升,我们相信自动驾驶技术将会越来越成熟和完善,为人们的出行带来更加便利和安全的体验。
轨迹规划
在自动驾驶中,轨迹规划是指生成一条合适的车辆行驶路径。轨迹规划需要考虑许多因素,如道路规划、车辆动力学模型、障碍物等,因此通常需要采用复杂的算法进行求解。其中,最常见的方法是基于优化的方法,如基于模型预测控制的方法。
2.路径跟踪
路径跟踪是指车辆沿着预先规划的路径行驶,并保持车辆在路径上的稳定性和精度。路径跟踪需要考虑车辆的动力学特性、路面摩擦系数、传感器精度等因素。常用的方法包括基于PID控制器、模型预测控制等方法。
3.最小二乘法
最小二乘法是一种用于拟合数据点并找到最佳拟合线的方法。它通过寻找最小化数据点与拟合线之间距离平方和的方法来实现拟合。最小二乘法广泛应用于数据分析和统计学中。
在Python中,可以使用numpy库中的polyfit函数来实现最小二乘法拟合。例如,下面的代码演示如何使用polyfit函数对一组二次函数进行拟合:
import numpy as np x = np.array([1, 2, 3, 4, 5]) y = np.array([1, 4, 9, 16, 25]) p = np.polyfit(x, y, 2) # 进行二次拟合 print(p) # 输出拟合系数
4.梯度下降算法
梯度下降算法是一种常用的优化算法,它通过不断迭代来最小化目标函数。算法的核心思想是沿着目标函数的梯度方向进行迭代,以期望找到全局最优解或局部最优解。
在Python中,可以使用scikit-learn库中的GradientDescentRegressor函数来实现梯度下降算法拟合。例如,下面的代码演示如何使用GradientDescentRegressor函数对一组二次函数进行拟合:
from sklearn.linear_model import SGDRegressor import numpy as np x = np.array([1, 2, 3, 4, 5]).reshape(-1, 1) y = np.array([1, 4, 9, 16, 25]) clf = SGDRegressor(max_iter=1000, eta0=0.1) # 创建梯度下降模型 clf.fit(x, y) # 进行拟合 print(clf.coef_, clf.intercept_) # 输出拟合系数
5.目标函数拟合
在自动驾驶中,目标函数拟合可以用于将不同的感知信息进行融合,以得到更加准确和可靠的决策。目标函数通常可以表示为一个数学模型,它将不同的感知信息转化为决策所需的输入。然后,可以使用拟合算法来拟合目标函数,以最小化模型与实际观测数据之间的差距。
常用的目标函数拟合算法包括最小二乘法和梯度下降算法。最小二乘法通过寻找最小化数据点与拟合线之间距离平方和的方法来实现拟合。而梯度下降算法则通过不断迭代来最小化目标函数。这两种方法都可以用于自动驾驶中的目标函数拟合
import numpy as np import matplotlib.pyplot as plt # 创建一个带噪声的二次函数数据集 x = np.linspace(-10, 10, 100) y = 2 * x**2 + 3 * x - 5 + np.random.normal(0, 10, size=100) # 使用最小二乘法进行拟合 p = np.polyfit(x, y, 2) print(p) # 绘制数据集和拟合曲线 plt.scatter(x, y) plt.plot(x, np.polyval(p, x), color='red') plt.show()
以下是一个简单的数学模型描述自动驾驶中的路径跟踪过程:
假设当前车辆所在位置为 $(x,y)$,朝向角度为 $\theta$,目标点位置为 $(x_t, y_t)$。为了让车辆能够沿着路径正确行驶,需要计算出车辆需要执行的转向角度 $\delta$。此时可以使用古典的前馈控制方法进行计算,该方法基于车辆动力学模型和路径跟踪控制理论,可以计算出转向角度的理论值,从而控制车辆行驶方向。
具体来说,假设车辆的速度为 $v$,转弯半径为 $R$,转向角度为 $\delta$,则有:

最后,可以将计算出的转向角度 $\delta$ 送入车辆控制系统中,实现路径跟踪控制。
需要注意的是,上述模型只是一个简单的示例,实际应用中需要根据具体情况进行调整和优化。此外,还需要考虑诸如障碍物避让、动态路径规划等问题,来保证自动驾驶系统的安全性和稳定性。
障碍物避让和动态路径规划是自动驾驶系统中必不可少的两个环节。下面将分别介绍这两个环节的数学模型。
障碍物避让
在自动驾驶中,障碍物避让是指车辆需要在行驶过程中避免与其他车辆或物体碰撞。为了实现障碍物避让,可以将其建模为一个路径规划问题,即在保证车辆行驶方向不变的前提下,计算出能够避开障碍物的最优路径。
假设车辆当前所在位置为 $(x_0, y_0)$,行驶朝向角度为 $\theta_0$,需要避开的障碍物位置为 $(x_o, y_o)$,半径为 $r_o$。此时可以将车辆和障碍物建模为圆形,其数学表示分别为:
(x−x0)2+(y−y0)2=rc2
(x−xo)2+(y−yo)2≥ro2
其中 $r_c$ 为车辆半径,代表车辆外形的半径大小。可以使用数值优化算法(如梯度下降算法)求解出车辆需要行驶的最优路径,从而实现障碍物避让。
动态路径规划
动态路径规划是指车辆需要根据实时的环境信息(如车辆位置、速度、障碍物位置等)来实时计算出能够到达目标位置的最优路径。此时需要将车辆行驶的过程建模为一个最优化问题,通过求解最优解来实现动态路径规划。
假设车辆当前所在位置为 $(x_0, y_0)$,朝向角度为 $\theta_0$,需要到达的目标位置为 $(x_t, y_t)$。此时可以将车辆行驶的过程建模为一个最优化问题,其数学表示为:

其中 $p(t) = [x(t), y(t)]$ 代表车辆在时间 $t$ 时的位置,$\dot{p}(t)$ 代表车辆在时间 $t$ 时的速度,$t_0$ 和 $t_f$ 分别代表起始时间和终止时间。$L(p(t), \dot{p}(t), t)$ 为路径的代价函数,用于描述车辆行驶的质量。可以使用最优控制理论中的动态规划方法(如贝尔曼方程)来求解出最动态路径规划是指在行驶过程中根据实时的环境信息和目标位置信息,通过计算得出一条最优路径。最优路径一般指的是时间最短、路程最短、能量消耗最少等目标,因此需要建立相应的数学模型。
首先,需要定义一个状态向量,其中包含车辆的位置、速度、加速度等信息。假设状态向量为 $x=[p_x, p_y, v_x, v_y, a_x, a_y]^T$,其中 $p_x$ 和 $p_y$ 分别表示车辆在 $x$ 和 $y$ 轴上的位置,$v_x$ 和 $v_y$ 表示车辆在 $x$ 和 $y$ 轴上的速度,$a_x$ 和 $a_y$ 表示车辆在 $x$ 和 $y$ 轴上的加速度。
其次,需要建立一个代价函数 $J$,用于衡量行驶路径的优劣。代价函数通常是由两部分组成,一部分是规划路径的代价,另一部分是避免碰撞的代价。假设规划路径的代价为 $J_{path}$,避免碰撞的代价为 $J_{obs}$,则总代价函数为 $J = J_{path} + \lambda J_{obs}$,其中 $\lambda$ 是一个调节参数。
对于规划路径的代价,可以使用最小时间或最小距离等标准。最小时间标准下,代价函数可以定义为:
Jpath=T=∫t0tfdt
其中 $t_0$ 和 $t_f$ 分别表示起点和终点的时间,而 $\int_{t_0}^{t_f} dt$ 表示总行驶时间。
对于避免碰撞的代价,一种常见的方法是使用人工势场法。人工势场法是一种基于势能的算法,通过计算各个障碍物的斥力,将车辆移动到势能较低的区域,从而避免碰撞。假设有 $n$ 个障碍物,每个障碍物的位置为 $(x_i, y_i)$,斥力函数为 $F_{obs}(x, y)$,则避免碰撞的代价可以定义为:
Jobs=∑i=1nFobs(px−xi,py−yi)
动态路径规划可以用一些基本的数学模型来描述:
状态空间模型:可以使用状态空间模型来表示机器人的运动状态,即机器人在时刻 $t$ 的位置和速度 $[x(t), y(t), \theta(t), v(t)]$,其中 $\theta$ 表示机器人的朝向角度,$v$ 表示机器人的速度。
目标函数:目标函数的形式可以是一个代价函数,它包括两部分:一是机器人到目标点的距离,二是机器人到障碍物的距离,即 $J=f(d_{goal}, d_{obs})$。其中,$d_{goal}$ 表示机器人到目标点的距离,$d_{obs}$ 表示机器人到障碍物的距离。代价函数的最小化可以使用梯度下降法来实现。
约束条件:在进行路径规划时,需要考虑机器人的约束条件,例如速度、加速度、转弯半径等等。此外,还需要考虑障碍物的约束条件,例如障碍物的形状、大小、位置等等。
路径规划算法:常用的路径规划算法包括 A* 算法、Dijkstra 算法、RRT 算法等等。其中,A* 算法和Dijkstra 算法是基于图搜索的算法,RRT 算法则是一种基于树结构的随机采样算法。