【问题标题】:Neural Network learning to hover. Time delay?神经网络学习悬停。时间延迟?
【发布时间】:2017-08-24 20:11:54
【问题描述】:

我正在使用神经网络进行机器学习,在阅读了一些理论并研究了 Torch 之后,我现在想使用神经网络来了解一架具有未知模型的简单直升机需要产生多少推力才能悬停放置在参考高度。

我有控制背景,我知道通常不会为此使用神经网络或机器学习,但我认为这是一个很好的第一个任务。

我认为我需要的只是一个简单的线性回归(NN 形式)来学习将测量高度映射到推力的函数(产生准确的推力以抵消参考高度处的重力)。

但这似乎已经有点复杂了。假设我有一个简单的动态模拟器,并且每隔fs Hz 进行一次高度测量。我对我的模型进行前向传递(参见下面的模型代码)来计算模型的推力。到目前为止,一切都很好。但是效果不会立即可见,因此使用当前测量同时对损失函数执行前向和后向传递似乎是错误的做法。还是这样?

所以最终的问题是:我是否可以使用我提出的简单线性回归来解决所述问题,或者我是否需要更复杂的东西来捕捉模型的“响应时间”。

require 'torch'
require 'nn'

local model = nn.Sequential()
model:add(nn.Linear(1, 1)) -- Simple linear regression with one input (measured height) and one output (thrust)

local criterion = nn.MSECriterion -- Simple mean squared error loss function.

heigh_ref = 1

function height_measurement_callback(height_meas)
    local thrust = model:forward(height_meas)

    criterion:forward(height_meas, heigh_ref) -- ??
    local grad = criterion:backward(height_meas, heigh_ref) -- ??
    model:backward(height_meas, grad) -- ??

    return thrust
end

【问题讨论】:

  • 你能把问题说清楚吗?请减少 torch api 调用以及有关输入内容和获取方式的更多信息。
  • 我不确定我是否明白你想要什么。没有太多要澄清的。对主机模拟环境以给定频率调用的回调进行成像,提供直升机高度的标量测量,并将返回值用作推力。编辑:也许您对缺少训练数据集感到困惑。我希望神经网络直接从模拟的输出中学习。
  • 这里的问题不是关于神经网络,而是关于理解你期望它做什么。您是否为模型指定了特定的推力值,然后运行模拟跟踪车辆高度?或者你是否设置了一个特定的高度并希望程序改变推力直到它悬停在指定的高度?
  • 第二个版本。我希望它在模拟持续运行时学习。

标签: machine-learning lua neural-network torch


【解决方案1】:

问题:设置一个特定的高度h_desired 并让程序找到相应的推力值。假设推力和高度一一对应。


合理的解决方案:通过根据当前高度差调整推力来最小化h_desired - h_current


机器学习解决方案:有一堆测量值,对它们进行回归,尝试使用获得的模型来预测新值,验证预测,将实际值添加到训练集。

假设“NN的前向路径”是计算预测值与实际值的偏差:delta_i=(y_predicted_i - y_observed_i),后向传播是计算y_predicted_i = k * x_i + b中的kb,没有必要将它们分开。在这些操作之间,我实际上很难想出任何合理的做法。

现在使用更新后的模型,您可以预测新的推力值,这应该会使您达到所需的高度,然后您进行新的测量,设置新的推力值并查看它对应的高度值。显然,您必须等到直升机停止移动,然后才能将新的推力-高度对放入训练数据并进行下一次线性回归迭代。这不是关于“神经网络模型”,而是关于数据采集过程。您不应该将它们混淆在一起。在将数据添加到模型体验之前,您必须始终完成测量。

【讨论】:

  • 好的,感谢您澄清这一点,但是我认为这个答案并不能完全反映我的情况,也许我毕竟还不够详细。主要问题是您假设高度和推力之间存在一对一的关系,但是认为推力 x 独立于当前高度产生高度 y 在物理上并不准确。对于每个模型,都会有一个推力使模型悬停在稳定的高度,任何高于或低于该推力的推力都会产生加速度,而不是新的固定高度。
  • 所以从技术上讲,如果说直升机在高度 a 推力为 x,有许多可能的方法可以从 a 到达目标高度 b。我想我需要另一个约束,比如尽量减少达到目标高度的时间?
  • 好吧,那么你到底打算线性回归什么?然后是我回答中的第二段是要走的路。如果你想要一些花哨的约束,有很多关于轨迹优化的文章。然而,没有人想过将它们称为机器学习。
  • 而且,如果你使用this definition(类似于发动机扭矩或功率),推力和直升机可以达到的最大高度之间确实存在对应关系。
  • 我喜欢将推力定义为转子产生的力矢量的 z 分量。即使您使用您发布的定义,该定义也仅对发动机可以达到多少推力施加限制(即克服阻力)。然而,升力只是叶片速度(线性或角度)的函数,因此不仅限制了向上加速度的量,还限制了高度(假设气压恒定)。
猜你喜欢
  • 2014-06-07
  • 2016-07-11
  • 1970-01-01
  • 2016-05-25
  • 2019-03-15
  • 2011-08-17
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多