`` 从小学到大学 总是会听到有人会吐槽: “学算术干啥? 我有计算器啊! 学函数干啥? 买菜还要解二元一次方程吗?” 对于这种提问 我只想说:
“没错,买菜就是不用函数! 而且,函数也不是用来买菜的啊!”
那么 我们学的各种科目 除了能使我们脱发 能跟喜欢的学霸搭上话 还有什么用?
《高等数学》、《线性代数》、《概率论》等等 这些科目究竟是用来干嘛的?
它们当然不是用来为难你的~ 今天我们说说 如何用大学里迷之数学课程 造出厉害的机器人! 小伙伴们也可以 通过这些例子 把科目套用到自己的学习领域中
基础数学理论课程 在机器人的世界观中 任何功能的实现 都不是靠着佛系的胸怀 随缘得到的 而是由大量的实际理论 堆积起来的 有理论的地方 就有数学的身影 举几个例子:
1 “解析几何”与“线性代数”在机器人运动中
实现机器人的运动控制 我们要告诉机器人 它在哪,它要去哪 但如果我直接说: “小可爱,你现在在门口 一会你要去墙脚哦。” 它是不会理你的 因为它无法理解 门和墙角在哪 以及如何从门到墙角
扫地机器人 因为我们描述的位置 是以自己的视角得到的 所以必须和机器人有一个 彼此认可的约定 这时 就有数学知识登场了!
《解析几何》 能用代数的方法 描述空间中发生的事情
举个栗子 机器人在二维平面上的运动 我们要在平面中 选择一个开始点 画两条互成90度的、有方向的直线 来作为坐标轴 并规定一个单位的长度有多少
只要机器人或障碍物在这个平面上 就可以用(x,y)坐标 表示机器人的运动变化 也就是 它从一个坐标,到了另一个坐标
在《超能理工派》真人秀中 基地机器人做着 看似无规则的运动 其实是用了 李萨如图形的解析表达式 控制做李萨如图形的几何图形运动
李萨如
基地机器人
实际应用中 往往要建立很多坐标系 这就需要解析几何的铁哥们—— 《线性代数》 把不同的坐标系联系起来 它的作用就是“变换” 比如 机器人的眼睛(摄像头) 看到一个苹果 要指挥它的手(机械臂) 去拿苹果 那么,问题来了 “眼睛”看到的苹果 相对于“手”是哪里? 线性变换 可以将“眼睛”和“手”的坐标系 统一起来 这个过程也叫“手眼标定”
机器人手眼标定 线性变换,简单说就是 乘上一个旋转矩阵 再加上一个平移矩阵 旋转矩阵用来旋转和伸缩 平移矩阵用来平移 (怎么感觉自己说了句废话)
各种矩阵 一个坐标系总可以通过 一定的旋转、伸缩和平移 转变成另一个坐标系 实现坐标系的统一 解析几何用于描述 线性代数用于处理 它们相辅相成 相亲相爱 当然有更复杂的情况 会涉及到三维甚至更多维的情况 也可能需要黎曼几何等非欧几何进行辅助 比如 人造卫星在地球外的运动 就需要用黎曼几何来描述
黎曼几何研究曲面或非线性存在形式 还可能要用到 非线性的方法来进行坐标变换 比如 直角坐标系和极坐标系的变换 就是非线性的 感兴趣的同学 可以继续入坑
2 “数学分析”与“高等代数”在深度学习中 再来一个高级一点的例子 深度学习发展得如火如荼 它的基石是神经网络 神经网络理论 用到的很多知识就关于 “高等代数”和“数学分析” 最简单的一类神经网络 一个3层BP神经网络 是这样的:
3层bp神经网络 嘿嘿,看不懂吧 它其实就是一个 “学习”的过程 通过迭代学习 学习结果和实际结果之间的误差 会不断减少 在数学的世界里 误差是很重要的一个量 我们可以用误差来描述 计算结果和真实的结果之间的差值 差值越小 意味着 计算结果与真实结果的贴合程度越高
实际人脸与模型人脸足够相似,实现人脸识别 误差如何减小呢?
其中 《数学分析》中的求导 就能实现“误差减小” 《高等代数》中的矩阵变换 就能表示“迭代”
随着迭代次数增加,误差下降 《数学分析》有着极限思想 也就是数学书上 经常出现的“无限趋向” 描述了趋于无限时 会发生什么事情
我们希望 神经网络的误差“不断缩小” 《数学分析》就提供了完善的理论 帮助我们寻找 “不断缩小”的方向 比如 参数有等式约束限制时 可以用“拉格朗日乘子法” 来寻找梯度下降的方向 使误差迭代减小 参数有不等式约束限制时 (也叫KKT条件) 可以转换成等式限制 再利用“拉格朗日乘子法”求解
拉格朗日乘子法 这些优化方法 对于后来发展出的 融合神经网络、循环神经网络等等 能力更强的深度学习网络 有指导性的意义 另外 数学分析还有个后续课 叫做《泛函分析》 是人工智能必不可少的数学工具 深度学习领域中 “算子”、“卷积”等重要的概念 就来源于这门课
卷积神经网络识别手写数字 如果说 《数学分析》是人工智能的理论奠基 那《高等代数》就是预言家 它提供了一整套 以矩阵论为基础的演算和分析机制 看完你一定是这个表情:
其实就是 它可以表示神经网络中 复杂的演算和变换 还能提前告诉我们 这些演算和变换的性质 会造成怎样的结果 达到 “未算结果,先知性质” 用好《高等代数》 甚至可以通过演算 来预测某个 几百层的神经网络的实现效果
我真的希望有一个 真实版“高等代数” 预测我什么时候出门会捡到钱… 《高等代数》也有一门后续课程 叫做《抽象代数》 也叫《近世代数》 它将整个代数系统公理化 系统地阐释了 代数变换中的演算定律 不说客套话 直接说它最大的好处: 在涉及大规模变换的数学问题时 有事半功倍的效果 现在 计算能力的需求越来越大 《抽象代数》就能缓解这个压力 例如 SLAM系统(即时定位与地图构建系统) 需要实时处理大量的数据 它的数据处理方法就与《抽象代数》中 “李群”的概念密切相关
SLAM地图构建 类似的例子还有很多 因为数学是科学之母啊! 没了数学描述 工科理论寸步难行 基础数学应用课程 1 数学知识在算法实现中的应用 如果说 机械结构和传感器 是机器人的肉体和器官 那程序和算法 就是机器人的思想和灵魂 要让机器人会思考 无论是嵌入式控制 还是图像处理 都要大量的编程、算法知识 (也就是敲代码知识)
等等! 敲代码也和数学有关吗?!
我又来举栗子了 前面说到 机器人知道自己在哪 准备去哪 但机器人经常会遇到障碍物 如果要它智能地绕开 就要加入路径规划程序
路径规划 用数学语言来描述 就是在一定的约束下 (比如不能碰到障碍物, 要经过某些特定的地点) 求解出一条最好的路径 而且 还要考虑算法效率问题 不然算得太慢 被吐槽人工智障 机器人会不开心的 路径规划跟数学理论中的 “凸优化”理论息息相关 “凸优化问题”是一类 可以在多项式时间内 求得全局最优解的问题
凸函数 凸优化理论提供了 解决凸优化问题方法 而且,效率也蛮高的 虽然 路径规划不一定是凸优化问题 但也可以近似地化为凸优化问题 然后有效率地求得最优解 凸优化和非凸优化 另外 人工智能也离不开机器视觉 像各种人脸识别、无人驾驶 都需要视觉识别 其中的图像处理算法 其实都植根于数学理论 再吃一个栗子 背景建模问题中 赫赫有名的高斯混合模型 就是应用《概率论》知识建立的
高斯混合模型 高斯混合模型算法的核心是 运用高斯混合概率 计算每一个像素点是前景的概率 认为概率较高的像素点是前景像素点 在学《概率论》之前 你可能以为 它是用来算抽奖概率的 很难想到可以利用可能性大小 来寻找目标 opencv中背景建模的算法 学校里的课程十分重要 每个科目的设立 都有它的作用 希望大家早日战胜数学 让它成为你的宝剑 而不是苦难 以上只讲了部分课程 当一个全能的机器人工程师 要学的可不止这些 还有计算机、机械、自动化、电信工程等等 可以帮助你在 机械设计、嵌入式、算法和通信开发上 学习和提升
``
|