2.1)深度学习笔记:深度学习的实践层面

目录

1)Train/Dev/Test sets

2)Bias/Variance

3)Regularization(重点)

4)Why regularization reduces overfitting(理解)

5)Dropout Regularization(重点)

6)Understanding Dropout

7)Other regularization methods(了解)

8)Normalizing inputs

9) Vanishing and Exploding gradients

10)Weight Initialization for Deep Networks(重点)

11)Numerical approximation of gradients

12)Gradient checking

13)Gradient Checking Implementation Notes

14)Summary


以下笔记是吴恩达老师深度学习课程第二门课第一周的的学习笔记:Practical aspects of Deep Learning。笔记参考了黄海广博士的内容,在此表示感谢。 


1)Train/Dev/Test sets

今天我们可能已经知道:应用深度学习是一个典型的迭代过程。 在建立训练模型的过程中,数据集会被划分为以下几个部分:

  • 训练集(train set):用训练集对算法或模型进行训练;
  • 验证集(development set):利用验证集(又称为交叉验证集)进行交叉验证选择出最好的模型
  • 测试集(test set):最后利用测试集对模型进行测试,获取模型运行的无偏估计。

在数据量比较少的时候,如 100、1000、10000 的数据量大小,可以将数据集按照以下比例进行划分:

  • 无验证集的情况:70% / 30%;
  • 有验证集的情况:60% / 20% / 20%;

而在如今的大数据时代,对于一个问题,我们拥有的数据集的规模可能是百万级别的,所以验证集和测试集所占的比重会趋向于变得更小。验证集的目的是为了验证不同的算法哪种更加有效,所以验证集只要足够大到能够验证大约 10 种算法哪种更好时,就不需要使用 20% 的数据作为验证集。在百万数据中抽取 1 万的数据作为验证集就可以了。

测试集的主要目的是评估模型的效果,如在单个分类器中,往往在百万级别的数据中,我们选择其中 1000 条数据足以评估单个模型的效果。

100 万数据量:98% / 1% / 1%;

超百万数据量:99.5% / 0.25% / 0.25%(或者99.5% / 0.4% / 0.1%)

吴恩达老师在视频中补充到:建议验证集要和训练集来自于同一个分布(数据来源一致),可以使得机器学习算法训练得更快并获得更好的效果。如果不需要用无偏估计来评估模型的性能,则可以不需要测试集。


2)Bias/Variance

偏差(Bias)和方差(Variance)是机器学习领域非常重要的两个概念和需要解决的问题。在传统的机器学习算法中,Bias和Variance是对立的,分别对应着欠拟合和过拟合,我们常常需要在Bias和Variance之间进行权衡。而在深度学习中,我们可以同时减小Bias和Variance,构建最佳神经网络模型。

欠拟合(underfitting)的情况下,即出现高偏差(high bias)的情况,不能很好地对数据进行分类。

当模型设置的太复杂时,使得模型出现过拟合(overfitting)的情况,在验证集上出现高方差(high variance)现象。

当训练出一个模型以后,如果:

  • 训练集的错误率较小,而验证集的错误率却较大,说明模型存在较大方差,可能出现了过拟合;
  • 训练集和开发集的错误率都较大,且两者相当,说明模型存在较大偏差,可能出现了欠拟合;
  • 训练集错误率较大,且开发集的错误率远较训练集大,说明方差和偏差都较大,模型很差;
  • 训练集和开发集的错误率都较小,且两者的相差也较小,说明方差和偏差都较小,这个模型效果比较好。

吴恩达老师在视频中针对偏差和方差问题给出了一些建议:

对于高偏差问题:

  • 扩大神经网络规模,如添加隐藏层或隐藏单元数目;
  • 寻找合适的网络架构,使用更大的 NN 结构;
  • 花费更长时间训练。

对于高方差问题:

  • 获取更多的数据;
  • 正则化(regularization);
  • 寻找更合适的网络结构。

3)Regularization(重点)

正则化是在cost函数中加入一个正则化项,惩罚模型。正则化可以用于解决高方差的问题。

我们先回顾一下之前介绍的Logistic Regression。我们采用的是L2正则化,加入正则化后的cost函数为:

J(w,b) = \frac{1}{m}\sum_{i=1}^mL(\hat{y}^{(i)},y^{(i)})+\frac{\lambda}{2m}{||w||}^2_2

\|w\|_{2}^{2}=\sum_{j=1}^{n_{x}} w_{j}^{2}=w^{T} w

这里我们只对参数w进行了正则化处理而不对b处理。因为b为一个常数,相对来说w的维度很大,对模型泛化能力的影响很大。

除了L2正则化之外,还有另一张正则化方法,L1正则化,表达式为:

J(w, b)=\frac{1}{m} \sum_{i=1}^{m} L\left(\hat{y}^{(i)}, y^{(i)}\right)+\frac{\lambda}{2 m}\|w\|_{1}

\|w\|_{1}=\sum_{j=1}^{n_{x}}\left|w_{j}\right|

由于 L1 正则化最后得到 w 向量中将存在大量的 0,使模型变得稀疏化,因此 L2 正则化更加常用 。注意lambda在 Python 中属于保留字,所以在编程的时候,用lambd代替这里的正则化因子。

在深度学习模型中,L2正则化的表达式为:        

J(w^{[1]}, b^{[1]}, ..., w^{[L]}, b^{[L]}) = \frac{1}{m}\sum_{i=1}^mL(\hat{y}^{(i)},y^{(i)})+\frac{\lambda}{2m}\sum_{l=1}^L{​{||w^{[l]}||}}^2

$${​{||w^{[l]}||}}^2 = \sum^{n^{[l-1]}}_{i=1}\sum^{n^{[l]}}_{j=1}(w^{[l]}_{ij})^2

{​{||w^{[l]}||}}^2被称为弗罗贝尼乌斯范数(Frobenius Norm),所以神经网络中的正则化项被称为弗罗贝尼乌斯范数矩阵。

加入正则化之后,我们的梯度下降计算变为:

dw^{[l]}= \frac{\partial L}{\partial w^{[l]}} +\frac{\lambda}{m}w^{[l]}

w^{[l]} :=w^{[l]}-\alpha \cdot d w^{[l]}

加入正则化之后新的梯度下降公式变为:

w^{[l]}:= (1 - \frac{\alpha\lambda}{m})w^{[l]} - \alpha \frac{\partial L}{\partial w^{[l]}}

可以看见,权重w衰减,所以L2正则化项也被称为权重衰减。


4)Why regularization reduces overfitting(理解)

我们都知道正则化可以有效避免过拟合,但为什么可以避免过拟合呢?我们举例来说明:下面是欠拟合、刚好拟合和过拟合的情况。

假如我们选择了非常复杂的神经网络模型,如上图左上角所示。在未使用正则化的情况下,我们得到的分类超平面可能是类似上图右侧的过拟合。但是,如果使用L2 正则化,当λ很大时,w[l]≈0。w[l]近似为零,意味着该神经网络模型中的某些神经元实际的作用很小,可以忽略。从效果上来看,其实是将某些神经元给忽略掉了。这样原本过于复杂的神经网络模型就变得不那么复杂了,而变得非常简单化了。如下图所示,整个简化的神经网络模型变成了一个逻辑回归模型。问题就从high variance变成了high bias了。

因此,选择合适大小的λ值,就能够同时避免high bias和high variance,得到最佳模型。

数学解释:

假设神经元中使用的激活函数为tanh函数。

在加入正则化项后,当 λ 增大,导致 w^{[l]} 减小,z^{[l]} = w^{[l]}a^{[l-1]} + b^{[l]} 便会减小。由上图可知,在 z 较小(接近于 0)的区域里,tanh(z)函数近似线性,所以每层的函数就近似线性函数,整个网络就成为一个简单的近似线性的网络,因此不会发生过拟合。


5)Dropout Regularization(重点)

除了L2正则化,还有一种防止过拟合的有效方法:Dropout。dropout(随机失活是在神经网络的隐藏层为每个神经元结点设置一个随机消失的概率,保留下来的神经元形成一个结点较少、规模较小的网络用于训练。dropout 正则化较多地被使用在计算机视觉(Computer Vision)领域。下图为概率为0.5的Dropout的正则化例子。

Dropout有不同的实现方法,接下来介绍一种常用的方法:Inverted dropout。假设对于第ll层神经元,设定保留神经元比例概率keep_prob=0.8,即该层有20%的神经元停止工作。dl为dropout向量,设置dl为随机vector,其中80%的元素为1,20%的元素为0。在python中可以使用如下语句生成dropout vector:

keep_prob = 0.8    # 设置神经元保留概率
dl = np.random.rand(al.shape[0], al.shape[1]) < keep_prob
al = np.multiply(al, dl)
al /= keep_prob

最后一步al /= keep_prob 是因为 a^{[l]}中的一部分元素失活(相当于被归零),为了在下一层计算时不影响 z^{[l+1]} = w^{[l+1]}a^{[l]} + b^{[l+1]}的期望值,因此除以一个keep_prob注意,在测试阶段不要使用 dropout,因为那样会使得预测结果变得随机。


6)Understanding Dropout

Dropout通过每次迭代训练时,随机选择不同的神经元,相当于每次都在不同的神经网络上进行训练,类似机器学习中Bagging的方法,能够防止过拟合。

对于单个神经元,其接收输入特征并输出。但是加入了 dropout 后,输入的特征都存在被随机消失的可能,所以该神经元不会再特别依赖于任何一个输入特征,即不会给任何一个输入特征设置太大的权重。 因此,通过传播过程,dropout 将产生和 L2 正则化相同的收缩权重的效果。

对于不同的层,设置的keep_prob也不同。一般来说,神经元较少的层,会设keep_prob为 1.0,而神经元多的层则会设置比较小的keep_prob

dropout 的一大缺点是成本函数无法被明确定义。因为每次迭代都会随机消除一些神经元结点的影响,因此无法确保成本函数单调递减。因此,使用 dropout 时,先将keep_prob全部设置为 1.0 后运行代码,确保 J(w, b)函数单调递减,再打开 dropout。


7)Other regularization methods(了解)

除了L2 正则化和dropout 正则化之外,还有其它减少过拟合的方法。

一种方法是增加训练样本数量。但是通常成本较高,难以获得额外的训练样本。但是,我们可以对已有的训练样本进行一些处理来“制造”出更多的样本,称为data augmentation。例如图片识别问题中,可以对已有的图片进行水平翻转、垂直翻转、任意角度旋转、缩放或扩大等等。如下图所示,这些处理都能“制造”出新的训练样本。虽然这些是基于原有样本的,但是对增大训练样本数量还是有很有帮助的,不需要增加额外成本,却能起到防止过拟合的效果。

还有另外一种防止过拟合的方法:early stopping。将训练集和验证集进行梯度下降时的成本变化曲线画在同一个坐标轴内,当训练集误差降低但验证集误差升高,两者开始发生较大偏差时及时停止迭代,并返回具有最小验证集误差的连接权和阈值,以避免过拟合。这种方法的缺点是无法同时达成偏差和方差的最优。


8)Normalizing inputs

在训练神经网络时,标准化输入可以提高训练的速度。标准化输入就是对训练数据集进行归一化的操作,即将原始数据减去其均值μ后,再除以其方差\sigma^2

x = \frac{x - \mu}{\sigma}

\mu = \frac{1}{m}\sum^m_{i=1}x^{(i)}

\sigma^2 = \frac{1}{m}\sum^{m}_{i=1}(x^{(i)})^2

为什么使用标准化输入呢?我们来看下面这幅图:

有图可知,使用标准化输入前后,成本函数的形状有较大改变。

在不使用标准化的成本函数中,如果设置一个较小的学习率,可能需要很多次迭代才能到达全局最优解;而如果使用了标准化,那么无论从哪个位置开始迭代,都能以相对较少的迭代次数找到全局最优解。


9) Vanishing and Exploding gradients

在神经网络尤其是深度神经网络中存在这样一个问题:梯度消失和梯度爆炸。意思是当训练一个层数非常多的神经网络时,计算得到的梯度可能非常小或非常大,甚至是指数级别的减小或增大。这样会让训练过程变得非常困难。假设存在下面这个每层包含两个神经元的深度神经网络:

假定 g(z) = z, b^{[l]} = 0,对于目标输出有: \hat{y} = W^{[L]}W^{[L-1]}...W^{[2]}W^{[1]}X

  • 对于 W^{[l]}的值>1 的情况,激活函数的值将以指数级递增;
  • 对于W^{[l]}的值< 1 的情况,激活函数的值将以指数级递减。

对于梯度计算同样。因此,在计算梯度时,根据不同情况梯度函数会以指数级递增或递减,导致训练梯度难度上升,梯度下降算法的步长会变得非常小,需要训练的时间将会非常长。


10)Weight Initialization for Deep Networks(重点)

下面介绍如何改善梯度消失和梯度爆炸这类问题,方法是对权重w进行一些初始化处理。、

深度神经网络模型中,以单个神经元为例,该层l的输入个数为n,其输出为:

z={w}_1{x}_1+{w}_2{x}_2 + ... + {w}_n{x}_n + b

可知,当输入的数量 n 较大时,我们希望每个 w_i的值都小一些,这样它们的和得到的 z也较小。

一种方法是在初始化w时,令其方差为\frac{1}{n}。相应的python伪代码为:

w[l] = np.random.randn(n[l],n[l-1])*np.sqrt(1/n[l-1]) 

如果激活函数是tanh,一般选择上面的初始化方法。

如果激活函数是ReLU,权重w的初始化一般令其方差为\frac{2}{n}

w[l] = np.random.randn(n[l],n[l-1])*np.sqrt(2/n[l-1]) 

至于选择哪种初始化方法因人而异,可以根据不同的激活函数选择不同方法。另外,我们可以对这些初始化方法中设置某些参数,作为超参数,通过验证集进行验证,得到最优参数,来优化神经网络。


11)Numerical approximation of gradients

Back Propagation神经网络有一项重要的测试是梯度检查(gradient checking)。其目的是检查验证反向传播过程中梯度下降算法是否正确。

双边误差求导(即导数的定义): 

 f'(\theta) = {\lim_{\varepsilon\to 0}} \frac{f(\theta + \varepsilon) - (\theta - \varepsilon)}{2\varepsilon}

当 ε 越小时,结果越接近真实的导数,也就是梯度值。可以使用这种方法来判断反向传播进行梯度下降时,是否出现了错误。


12)Gradient checking

介绍完如何近似求出梯度值后,我们将介绍如何进行梯度检查,来验证训练过程中是否出现bugs。

梯度检查首先要做的是分别将W^{[1]},b^{[1]},...,W^{[L]},b^{[L]}全部连接起来,构成一个一维向量\theta。 这样成本函数就成为J(\theta)

同时,对 dW^{[1]},db^{[1]},...,dW^{[L]},db^{[L]}执行同样的操作得到一维向量 d\theta,它和 \theta 有同样的维度。

接着利用J(\theta)对每个\theta_i计算近似梯度,其值与反向传播算法得到的d\theta_i相比较,检查是否一致。例如,对于第i个元素,近似梯度为:

d \theta_{a p p r o x}[i]=\frac{J\left(\theta_{1}, \theta_{2}, \cdots, \theta_{i}+\varepsilon, \cdots\right)-J\left(\theta_{1}, \theta_{2}, \cdots, \theta_{i}-\varepsilon, \cdots\right)}{2 \varepsilon}

计算完所有\theta_i的近似梯度后,计算d\theta_{approx}d\theta的欧氏距离,公式如下:

\frac{​{||d\theta_{approx} - d\theta||}_2}{​{||d\theta_{approx}||}_2+{||d\theta||}_2}

一般来说,如果欧氏距离越小,例如10^{-7},甚至更小,则表明反向梯度计算是正确的,没有bugs。

如果欧氏距离较大,例如10^{-5},则表明梯度计算可能出现问题,需要再次检查是否有bugs存在。

如果欧氏距离很大,例如10^{-3},甚至更大,则表明梯度下降计算过程有bugs,需要仔细检查。


13)Gradient Checking Implementation Notes

在进行梯度检查的过程中有几点需要注意的地方:

  • 不要在训练中使用梯度检验,它只用于debug;
  • 如果算法的梯度检验失败,要检查所有项,并试着找出 bug;
  • 当成本函数包含正则项时,也需要带上正则项进行检验;
  • 梯度检验不能与 dropout 同时使用。因为每次迭代过程中,dropout 会随机消除隐藏层单元的不同子集,难以计算 dropout 在梯度下降上的成本函数 J。建议关闭 dropout,用梯度检验进行双重检查,确定在没有 dropout 的情况下算法正确,然后打开 dropout;

14)Summary

本节课主要介绍了深度学习的实践层面

首先我们讲了如何配置训练集,验证集和测试集,并如何分析偏差、方差,如何处理欠拟合过拟合问题

然后我们介绍了如何在深度神经网络模型中应用不同形式的正则化,如L2正则化和dropout正则化

最后我们介绍了归一化输入,这可以加快神经网络的训练速度,以及梯度检验

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439904.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一步步编写操作系统 12 代码段、数据段、栈和cpu寄存器的关系

先说下什么是寄存器。 寄存器是一种物理存储元件&#xff0c;只不过它是比一般的存储介质要快&#xff0c;能够跟上cpu的步伐&#xff0c;所以在cpu内部有好多这样的寄存器用来给cpu存取数据。 先简短说这一两句&#xff0c;暂时离开一下主题&#xff0c;咱们先看看相对熟悉一…

【2019牛客暑期多校训练营(第三场)- F】Planting Trees(单调队列,尺取)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/883/F 来源&#xff1a;牛客网 The semester is finally over and the summer holiday is coming. However, as part of your universitys graduation requirement, you have to take part in some …

Apollo进阶课程⑯丨Apollo感知之旅——感知概貌

原文链接&#xff1a;进阶课程⑯丨Apollo感知之旅——感知概貌 上周阿波君为大家详细介绍了「进阶课程⑮| Apollo无人车自定位技术入门」。 我们人类天生就配备多种传感器&#xff0c;眼睛可以看到周围的环境&#xff0c;耳朵可以用来听&#xff0c;鼻子可以用来嗅&#xff0c;…

一步步编写操作系统 13 栈

栈到底是什么玩意 cpu中有栈段SS寄存器和栈指针SP寄存器&#xff0c;它们是用来指定当前使用的栈的物理地址。换句话说&#xff0c;要想让cpu运行&#xff0c;必须得有栈。栈是什么?干吗用的&#xff1f;本节将给大家一个交待。 还记得数据结构中的栈吗&#xff1f;那是逻辑…

【2019牛客暑期多校训练营(第二场)- E】MAZE(线段树优化dp,dp转矩阵乘法,线段树维护矩阵乘法)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/882/E?&headNavacm 来源&#xff1a;牛客网 Given a maze with N rows and M columns, where bijb_{ij}bij​ represents the cell on the i-row, j-th column. If bi,j"1"b_{i, j} …

Apollo进阶课程⑰丨Apollo感知之旅——传感器选择和安装

目录 1.激光雷达 2.相机 3.Radar毫米波 4.安装传感器 原文链接&#xff1a;进阶课程⑰丨Apollo感知之旅——传感器选择和安装 上周阿波君为大家详细介绍了「进阶课程⑯ Apollo感知之旅——感知概况」。 传感器是一种检测装置&#xff0c;能感受到被测量的信息&#xff0c;…

2.2)深度学习笔记:优化算法

目录 1&#xff09;Mini-batch gradient descent&#xff08;重点&#xff09; 2&#xff09;Understanding mini-batch gradient descent 3&#xff09;Exponentially weighted averages 4&#xff09;Understanding exponetially weighted averages 5&#xff09;Bias c…

Apollo进阶课程⑱丨Apollo感知之旅——传感器标定

目录 传感器标定 标定的目的 传感器标定算法 标定案例解析 3D标定间制作 Cmaera-to-Camera外参标定 Lidar-to-Camera外参标定 Lidar-to-Lidar外参标定 Lidar内参标定 Lidar-to-GPS外参标定 自然场景的Lidar-to-Camera外参标定 自然场景的Bifocal Camera外参标定 C…

一步步编写操作系统 15 CPU与外设通信——IO接口,下

既然都说到IO接口了&#xff0c;不知道各位有没有疑问&#xff0c;cpu是怎样访问到IO接口呢&#xff1f;肯定得有个链路吧&#xff1f;什么&#xff1f;有隐约听到有同学开玩笑说&#xff1a;cpu用无线访问其它设备。哈哈&#xff0c;不知道各位听说过没有&#xff0c;无线的终…

Telnet端口连接Linux服务器失败

在ubuntu写了个服务器端口号是666 &#xff0c;ip地址是192.168.96.129 在windows用telnet无法连接上 首先检查windows telnet服务是否打开 Windows 10操作系统上使用telnet命令&#xff08;图文&#xff09;_时间-CSDN博客_windows使用telnet命令 测试网络是否通&#xff1a;…

重磅 | 完备的 AI 学习路线,最详细的资源整理!

本文转自微信公众号&#xff1a;Datawhale&#xff08;强烈推荐&#xff09; 原创&#xff1a; AIUnion Datawhale 今天 【导读】 本文由知名开源平台&#xff0c;AI技术平台以及领域专家&#xff1a;Datawhale&#xff0c;ApacheCN&#xff0c;AI有道和黄海广博士联合整理贡献…

Windows/Linux 下使用telnet发送消息

Windows下使用telnet 1.首先打开cmd命令行连接上服务器端口 连不上可以参考这篇 Telnet端口连接Linux服务器失败_m0_46480482的博客-CSDN博客 telnnt <ip地址> <端口号> 2. 连接成功后&#xff0c;会发现是一片黑的 按住 ctrl ] 可以招出提示 输入 &#x…

Apollo进阶课程⑲丨Apollo感知之旅——感知算法

目录 点云感知 启发式方法&#xff1a;NCut 深度学习方法&#xff1a;CNNSeg 视觉感知 CNN检测 CNN分割 后处理 红绿灯感知 基于深度学习的红绿灯感知模块 Radar感知 超声波感知 原文链接&#xff1a;进阶课程⑲丨Apollo感知之旅——感知算法 感知是自动驾驶的第一环…

动手学PaddlePaddle(0):新版本PaddlePaddle安装

目录 0.引言 1.环境 2.Windows下安装 安装Python 安装PaddlePaddle 0.引言 今天介绍如何安装新版本的PaddlePaddle&#xff0c;现在最新版的PaddlePaddle是指Fluid版&#xff0c;Fluid可以让用户像Pytorch和TensorFlow Eager Execution一样执行程序&#xff0c;也就是说P…

一步步编写操作系统 18 操作显卡,显存,显示器 下

接上回&#xff0c;大家看下显卡各种模式的内存分布。 各外部设备都是通过软件指令的形式与上层接口通信的&#xff0c;显卡&#xff08;显示适配器&#xff09;也不例外&#xff0c;所以它也有自己的bios。位置是0xC0000到0xC7FFF。显卡支持三种模式&#xff0c;文本模式、黑白…

VMware 安装VMware Tools

想要在linux和windows之间复制粘贴&#xff0c;把之前一直没有下的vmwaretools的下载过程记录一下。 1.左上角菜单 ->虚拟机 ->安装 vmware tools (我已经点过了所以是取消安装) 2.桌面多了一个VMware tools &#xff0c;点进去看一下位置&#xff0c;复制一下tar.gz的文…

Apollo进阶课程⑳丨Apollo感知之旅——机器学习与感知的未来

目录 1机器学习 可解释性是否需要 其它算法 2感知的未来 Sensor迭代 深度学习仿真数据AI芯片 智能交通设施 3思考 原文链接&#xff1a;进阶课程⑳丨Apollo感知之旅——机器学习与感知的未来 自动驾驶感知中的机器学习最大问题在于系统对模块的要求与普通的机器学习不同…

一步步编写操作系统 19 改进MBR,直接操作显卡

到目前为止&#xff0c;说了一部分有关显存的内容&#xff0c;这对于一般的输出来说已经足够了&#xff0c;下面咱们可以尝试写显存啦。我们将之前MBR改造一下&#xff0c;保留滚屏的操作&#xff0c;只修改有关输出的部分。即把通过bios的输出改为通过显存&#xff0c;你会发现…

Apollo进阶课程㉑丨Apollo规划技术详解——Basic Motion Planning and Overview

原文链接&#xff1a;进阶课程㉑丨Apollo规划技术详解——Basic Motion Planning and Overview 运动规划&#xff08;Motion Planning&#xff09;就是在给定的位置A与位置B之间为机器人找到一条符合约束条件的路径。这个约束可以是无碰撞、路径最短、机械功最小等。具体的案例…

ROS机器人导航仿真(kinetic版本)

准备工作&#xff1a; ubuntu 16.04系统;ROS kinetic版本;ROS包turtlebot,导航包rbx1,模拟器arbotix&#xff0c;可视化rviz 1、安装ubuntu 16.04系统与安装ROS kinetic版本自行百度安装。一下链接可作为参考。 http://blog.csdn.net/weicao1990/article/details/52575314 2…