| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 基于ROS 履带车从零开始制做(2):科普人工智能,无人驾驶 -> 正文阅读 |
|
[人工智能]基于ROS 履带车从零开始制做(2):科普人工智能,无人驾驶 |
人工智能? 历史推荐电影:《模仿游戏》 --讲的是图灵机的诞生 第一次低谷1974 - 1980:
第二次AI低谷:1987 - 1993: 专家系统维护费用居高不下。它们难以升级,难以使用,脆弱(当输入异常时会出现莫名其妙的错误),成了以前已经暴露的各种各样的问题(例如资格问题(qualification problem))的牺牲品。专家系统的实用性仅仅局限于某些特定情景。[121] 里程碑1997:“深蓝”打败象棋冠军 大爆发2006:深度学习 机器学习的处理的问题监督:是否需要训练数据支撑,训练数据示例 [身高:175 , 体重:60kg , 结论:标准] , 其中身高和体重是模型的输入,结论是模型的输出,训练数据是人工标定的,模型通过多组训练数据进行参数动态调整。 常见的机器学习算法为什么机器学习执着于解决 回归 和分类问题,而且主要是分类问题?
回归问题线性回归 如下图所示,通过采集数据,得到了web网站的点击量与广告费关系图 , 根据这张图,我们能得到广告费为200w的点击量吗? ? ?回归问题:通过已经产生的数据 ,对未产生 的 数据 进行 预测 , 说白了就是通过数据求 数据之间的关系(方程),再通过方程,在已知某一个数据得情况下 , 预测另一个数据。 根据图中得点,我们大概能画出这样的一条直线 , 我们期望的是所有点尽可能均匀分布在直线两侧。那么,在已知所有的样本点的情况下,如何求这条完美直线呢? ? ? ? ? ? ? ? ? ? ? 最小二乘法 思路 :
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ?如果误差总和函数不是二次函数,而是更加复杂的函数呢?比如下面的图形,如何求最小值? 它的函数可能是: ? 它的图像可能是这种: ?显然,通过导数等于零的方法求极值变得难度极大,这个计算量也是导致神经网络第一次萧条的原因。如果通过更复杂的函数作为回归函数,比如多元多次 , 多项式 ,那么求导将变得无比复杂 , 有没有比求导更好的方法呢?梯度下降 解决了这个问题。目前只需要知道,梯度下降只是为了解决复杂的求导问题。 梯度下降 :复杂函数求极值 寻找下山的路:在任何一个地方,都寻找地势最低的地方走,假如你像孙猴子一样有无数个分身 , 从山顶不同的位置出发,当所有分身都找到个无法在下降的点时,比较所有点的地势,找出最低的点(防止你在某个山沟,却认为到了山下)就是基本确认到达山底。 ? 梯度下降的数学表示方法:
? ? ??
? ? ? ? ??
? 根据柯西-施瓦茨不等式: ?将上述结论运用到由近视公式的向量表示法 ? 要想 ? 取得最小 值 (? 越小,表明每次下降越快) , 则需要 满足 ? , 图像表示出来就是 a,b向量相反 根据上面这个公式 , 我们就知道 如何调整我们的坐标 x ,y . 举例 ,在(x =1 , y =3)点处 ,如何决定下一步往哪走?,分别求出 ????????????????y = 3 时 , f(x ,3) 对 x的偏导 ????????????????x= 1 时 , f(1,y) 对 y的偏导 ????????????????n 称为学习率 ,为常数 ????????????????后面的部分称为梯度 思考: 这种走一步看一步的方法真能找到最小值吗? 随机梯度下降法:解决局部最优解问题 局部最优解: ? ? ? ? ? ?? 重新整理一下整个过程:
拿一开始的广告费预测为例 假设? 为0 , 我们只考虑一个参数的情况 , 则代价函数 是关于 ?的 一元二次方程 , 采用梯度下降 ,初始 ?可能是下图位置,当训练完成,陷入局部最优解 。 ? ? 当上图现象出现 , 需要重新设置?的值 , 然后重新训练模型 , 直到出现下图的 ? 值 , 由于训练耗时,而且难以评估是否陷入局部最优解,因此 ,使用所有的 训练数据 形成的代价函数 不可取。 ? 将训练集分成 不同批次 , 比如训练数据由有10w个 , 将其分成100组 , 每组数据都是随机选取 , 这样得到了100个训练集 , 就相当于从100个点出发,虽然每组的数量减少了 , 但是由于有 100 个随机的出发点 , 自然找到最下值得概率 大大增加。 分类问题最简单的分类方法:分段函数 感知机
? ? ? ? ? ? 第一步,我们应该 将输入 ? 进行归一化 , ?... ,这要样不同组的 内积结果才有可比性,比如: ????????第一组输入(1,2,3 ) 归一化后 (1/6 ,1/3 , 1/2 ) ????????第二组 输入(100 ,200 ,300) 归一化之后 (1/6 ,1/3 , 1/2 ) ????????如果不做归一化 , 第二组结果 的内积 远大于 第一组 , 但其实 第一组的x 和第二组的 向量x ????????只是大小不同 ,很相似 第二步,将内积的结果转换成概率 ,即使进行了归一化 , 内积的结果仍然是个数值,不是概率, 这时就需要一个转换函数:sigmiod 函数。将内积的结果作为输入,得到0-1 之间的输出。 ? 我们做了什么? 通过将感知机的输出 , 输入到Sigmoid 函数 , 我们得到了 输入 x 向量 和 权重向量 w 的相似程度 ,若相似程度极高 ,那是不是说明了权重向量,学习到了 输入向量 x 得特征呢 ? 或者说 , 我们得到了一个用于 区分向量x 和 w 的分类器 , 如果输出概率大于 0.5 , 可以大概将 x ,w 分为一类 ,如果概率为95% , 基本可以确认 x , w 为一类。 苹果香蕉分类器 感知机的输出 到? 函数 最终得到了 一个分类器 ,但是不符合我们需求,我们要的分类应该是类似这样:输入颜色,形状 ,输出是香蕉苹果得概率,而不是输入颜色 ,形状 和 一个不明所以的权重 w 的相似程度 , w应该是用来 ‘ 学习 ’ 香蕉苹果 的颜色和外形特征的 二分类来识别苹果和香蕉: 我们可以得到以下概率: ????????P香蕉 = Sigmod (X_color * w11 + X_shape * w21) ????????P苹果 = Sigmod (X_color * w12 + X_shape * w22 ) 我们如何根据输入的 颜色 和形状 来得到 是 香蕉 还是 苹果 的概率 ? 假设 苹果和香蕉的输入如下表: ? 刚开始 , 所有的 权重 w 是随机的 ,没有记录任何 香蕉苹果的特征,所有它不能分类 让我们来训练它 : ????????使用苹果正确的参数来训练模型 (1 ,1 ,苹果99% ,香蕉1%): ????????????????P 苹果 = Sigmod (1* w12 + 1* w22 ) >=0.99 ????????????????P 香蕉 = sigmod ( 1 *w11 + 1 * w21 ) < 0.01 ????????使用香蕉正确的参数来训练模型(-1 ,2 ,苹果5% ,香蕉95%): ????????????????P 香蕉 = sigmod ( -1 *w11 + 2 * w21 ) >= 0.95 ????????????????P 苹果 = Sigmod (-1* w12 + 2* w22 ) <0.05 ????????根据4个不等式 得到 : ????????????????Sigmod (w12 + w22 ) > > Sigmod ( 2* w22 - w12 ) ????????????????sigmod ( 2 * w21 - w11 ) >> sigmod ( w11 + w21 ) 不等式 是 w21 和 w11 的关系 , 和 w12 和 w22 之间的关系 ?sigmod函数已知 , 我们通过一定手段 , 就能得到 w11 和w21 的关系 , w12 和 w22 的关系 , 它们分别记录了香蕉和苹果的颜色和外形特征。或许,用’学习‘了更合适。 推理: 香蕉和苹果的 权重向量 极其不相似 , 所以 W 记录了 苹果和香蕉 的 颜色和形状特征。如果拿一个 颜色 0.8 ( 不是那么红) ,形状(0.9)不是那么圆的水果 , 很大概率将识别为 苹果 , 而不是香蕉 , 可以看到 模型 已经具备了对未知(以前没见过) 颜色和形状的水果辨识能力。 神经网络在苹果香蕉分类器中 , 我们使用了两个感知机 搭建了系统 模型 ,如果我们有 要识别 物体的更多特征呢 , 比如果肉的颜色,味道 , 是否有外皮。这些特征对应了更多的输入。 ?在做复杂分类时 , 我们最常见 的分类方法是逐级分类,上图中的隐藏层类似于下图中的上一级大类: ?有感知机 构成的网络机构称为人工神经网络,与生物神经元的对比 神经网络的模型 训练:
误差反向传播一种通俗理解: 在输出层,我们有来自训练集的目标值 ,所以很容易得到误差,然后根据误差函数,可以求出使误差最小的输出层权重 ,但是隐藏层的误差我们没有定义,因为没有目标值。 由不同权重产生的 不同比例的误差分配: 可以认为 因为 输出结果 3/4 受节点1 影响 , 1/4 受节点2 输出影响,所以总的输出误差更可能按权重的比例来分配。 ?通过这样的误差分配规则,将误差进行反向传播,然后使用最小乘法来更新每一层的权重 ?实际的误差反向传播:神经单元误差 和 偏导 参考: 《深度学习的数学》 ? 神经网络的推理:
? 输入层是 像素点 , 这里是二值图片,像素点取值只能0和1,识别 0和1 ,输出层是 0,和 1 的概率, 中间增加一层隐藏层,至于隐藏层的层数和节点个数,需要按实际情况测试。我们同样可以通过向量的相似性来理解这里的权重 。 卷积神经网络(深度学习)神经网络存在的问题 ? ? ? ?
卷积是什么 一个很形象的例子 : 一巴掌抽在脸上 ,脸肿了 , 随着时间推移 , 脸会慢慢消肿 , 假设脸肿的程度可以叠加 , 那么在 0-t 的时间内,不停的抽 , 在t 时刻,脸肿的程度就是 0-t 时间的卷积。用图像表示 就是: ? ? ? 卷积在滤波中的使用: ????????离散: 滑动加权滤波 ? ????????连续: 高斯滤波 卷积神经网络的结构 ? 卷积层: 卷积核: 在二维图像处理中,如下图,选定的3x3 大小的 过滤器S , 看作二维向量 W , 输入图片为二维向量 X , 根据感知机中提到的向量内积表示相似性 , 让 向量 W 依次划过整张图片,与选中的区域做内积运算 , 再经过 Sigmoid 函数, 得到 图像中得部分区域 与 过滤器S 得相似程度。卷积层最终反应得是 原始图片中 , 与过滤器S 相似的概率。也就是说过滤器 提取了 原始图片得特征分布。这个过滤器S 就称为卷积核,卷积核通常为5X5 大小 , 常用得卷积核 见图像处理常用卷积核的效果。下图中 得到的卷积层,明显在中间部分的概率比较大 , 因为卷积核 更像 ‘2’ 的中间部位 , ’2‘的 头部也会有不错的概率,因为它部分相似 。 池化层: 池化层用于信息压缩 , 有最大池化 , 平均值池化等 ? ? ? ?? 全连接输出: 类似神经网络 卷积神经网络的特点:
深度学习的应用场景机器视觉 (cv) 自然语言处理 ? ? 部分地方超越 , 部分地方远远不如 3岁的小孩 让他看一次大象真实图像 , 下次任何形式的大象都认得,比如涂鸦,不同品种 ,抽象, 动画 ,或者反过来 Imagenet 数据集有1400多万幅图片,涵盖2万多个类别;其中有超过百万的图片有明确的类别标注和图像中物体位置的标注,具体信息如下: 自动驾驶地图构建2D 平面地图:激光雷达(2D) ? ? ? 3D 点云地图:深度相机 ? ? 实现:坐标变化
ROS 中的 TF 坐标变换 ? 精确定位室外定位: GPS + IMU + 里程计(编码器) 室内定位: (激光雷达)精确地图 + IMU + 里程计(编码器) 数据融合算法:
基本原理 : GPS 或者激光雷达产生的精确地图提供 绝对位置 , 由IMU 和里程计计算而得的 预测位置做数据融合 , 得到一个更精确的定位。 ? 如上图假设GPS 的定位精度 为 10m ,上图的B 。IMU 和编码器因为更精确,因此定位精度为 3m , 某次测量到上图的数据 , GPS数据为170m , IMU和编码器的数据计算出来距离在 160m , 最终的比较准确的距离在哪呢? 很显然是 重合的地方。 如果比较巧合,两个不怎么可靠的传感器可能得到非常精确的结果。 ? 路径规划解决了地图 和定位问题 , 我们已经知道了 自己的位置 和环境信息 , 接下来就是 由 出发地 怎么去目的地了。由很多成熟的路径规划算法,这里以A* 算法为例。 路径规划算法可以参考:https://github.com/AtsushiSakai/PythonRobotics 先来看看效果: 原理:
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 综合实例:基于ROS的履带车(PS:这里借用了稚辉君的机械臂模型,如有侵权,立马删除)功能描述:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/11 5:50:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |