献给快乐的八月!
刚刚做的决定,以82%的概率每月发一篇推送。
今天分享一些已经发表的内容,一些对机器学习的理解,一些研究过程中的经验教训。
希望能引出一些值得讨论的问题,获得一些读者的指点和批评。
先限定一下范围,我的经验主要在于用machine learning的方法做nonlinear regression这部分,属于supervised learning。
所以,只有你的问题可以建模成一个从输入到输出的映射关系,本文才可能对你有一些帮助。
在研究过程中,我感觉到几个十分相近的概念和领域:
- Machine Learning
- Statistical Learning
- Data Mining
- Pattern Recognization
- Signal Processing
- Bayesian Inference
(无法一一列举,知识太多,难以掌握)
当然,他们都各自有所侧重,但是这对于基础应用型的研究不是很重要,只要能实现目标就好。在理解到一定程度后,再返回头来琢磨区别,会更有效。
总之,不要太在乎这几个领域的区别,需要就都去学。
同样,也发现了几个相差比较大的概念:
- Artificial Intelligence
- Vision/Figure/Speech Recongnization
- 许多种NN和GAN及衍生
- Reinforcement Learning
- Complex System
(同样无法一一列举,学识有限)
这些在刚开始时可以适当避开,它们在自己的领域内突飞猛进,效果惊人,但是在regression问题上的应用不是很显著。不过在数学知识上很多同根同源,多学无妨。
以下讨论中“机器学习”基本上特指针对非线性回归问题的算法。
=============
提高轨道预报精度
=============
以一些博后期间的部分研究成果为例介绍。
刚开始想要应用机器学习在我的研究领域内时,一直在带着以下这两个疑问思考问题:
- 机器学习可以解决什么传统方法解决不了的问题【不可替代性】
- 机器学习在什么问题上可以提供比传统方法更好的结果【较优性】
如果这两个性质都没有,使用机器学习很难站得住脚,可能并不适用。
近几年很火的图像、语音、文字识别,语义、情绪分析等等,都是一些传统方法无法有效解决的问题,但是,机器学习似乎目前来看取得了很好的效果。
所以,大部分人讲到机器学习时,讲的其实是这些领域的成果。
而前面提到的相似的领域,全部可以靠到机器学习上,沾沾光。
如果这个沾来的光是为了拉funding搞科研,我是完全支持的;如果是为了赚钱,我只能说资本的属性是图利的,无可厚非。
(插一小段段题外话:我更希望我们的资本能够图更长久的大利益,像西方国家的完成原始积累的先进资本一样,乐于在前期花费时间金钱培养一个新市场,然后再去瓜分这个大蛋糕。比如:大企业大佬们可以投资自己真正了解的、长期看好的高校科研人员,不求五年十年内的回报,允许失败。)
回到卫星轨道预测,简单说,需要:
- 精确的物理模型,包含:不规则引力场、大气阻力、太阳光压、其它辐射压、地壳和潮汐运动、月球引力、其它天体引力等。
- 精确的航天器模型,包含:外形、质量、表面属性、姿态动力学相关、控制器等。
- 精确的积分器。
- 精确的初始状态,依赖于轨道观测和轨道确定。
理论和工程研究可以集中在以上的任意一个部分,来提高卫星轨道的预测精度。
机器学习也可以嵌入到以上的任意一个部分,来尝试提高预测精度。那么问题来了,应用在哪个部分,才具有【不可替代性】或者【较优性】呢?
我的思考是这样(只是一种思路):
- 既然已经列出来了,机器学习在任意一点上,都不存在【不可替代性】
- 既然我作为入门级的学者,都可以把它们罗列出来,就代表已经有成熟的研究成果,普通的机器学习怕是很难获得【较优性】
换一个思路,我们可以想一个不包含在上述的,传统方法没有涉及过的,而且有价值的问题:
即使使用最好的模型和积分器,卫星轨道预测总会有各种各样的误差,这些误差可以认为是没有办法物理建模的(因为已经使用了最好的工具),这些误差中一定包含有一些纯粹的随机误差(来自仪器误差等),这部分是无法消除的。
那么排队掉随机性误差的部分里,还可能包含一些难于用传统方法建模的信息。比如,在某一时刻的卫星状态信息,是不充分的,不足以决定未来误差信息的,但是如果有一系列的历史数据,各个时刻的信息互补,就有可能对基于当前模型和积分器的误差信息有一个部分预测。
这个可能存在的关联,是难以抽象描述的,所以难于建立解析模型。
但这恰恰是机器学习擅长的领域,只需要有足够的恰当的数据,算法就可以学习到数据之下潜在的规律。
掌握了误差的规律,就可以在实际预测中抵消掉它,从而提高轨道预测精度!
以上这个方法在我们最近发表的文献中都有深入的研究和讨论。这里不纠结于细节,只想讲一下这个方法的两个优势:
- 基于物理模型:这个方法基于已有的精确动力学模型,无论动力学模型将来如何进步,只要存在误差,就可以利用这一思路发现误差的规律,只是误差可能会越来越小,规律可能会越来越不明显。
- 基于机器学习算法:这个方法可以使用不同的机器学习算法,只要是适用于非线性回归的,所以算法的发展会提高当前的效果。
如果你对data mining的观点比较熟悉,从数据挖掘的角度想,可能会更直接,就是预先不知道有什么,然后去发现数据中的隐藏规律,其实使用的算法大部分是和机器学习领域相同的。
我们尝试了几种有代表性的算法(SVM, ANN, GPR):
效果都很一致而且很不错,说明上述的假设还是在一定程度上合理的:
当然,各种算法,对不同的问题,都有各自的优势和劣势。
=============
学习机器学习算法
=============
我不是机器学习大佬,简单分享下我的学习路径,希望读者能从中受益。
中文-->英文-->中英文
- 先读中文材料(知乎、维基、博客)入门
- 再读英文材料(书、文献、程序文档)继续入门算法、应用、代码、结果分析等
- 最终是中英文交叉阅读,因为我对两种语言的理解,往往都会有偏差。
算法的应用-->算法-->代码
--> (算法代码我的应用)
- 找个带算例的工具包,先看看算法的应用,是不是和自己的问题有类比性
- 确定一个要仔细研究的算法,深入研究,适可而止
- 看算法的代码实现,了解在数值实现中要考虑的问题,和通常的解决技巧
- 最终结合自己的应用,在算法、代码、应用之间不停迭代
如果你会MATLAB,就把MATLAB的document读一遍,比如:
- Statistics and Machine Learning Toolbox
- Deep Learning Toolbox
- Optimization Toolbox
- Parallel Computing Toolbox
如果你用python,教我!
如果你用R,教我!
如果你用Julia,教我!
如果你用Java,教我……
所以,语言不是问题,每个都有很好的开源实现,和很好的文档教程。
快速学习一门新的语言:
语法规则;学每种语言的代码规范;找一个好的IDE;……
学会用Google,或者其它有效的搜索引擎。
学会用GitHub,以及其它所有可以利用到开源代码的工具。
学会找关键字、问问题。
强调,我这不是教程,看完学不会机器学习的任何算法。
=======
The End
=======
欢迎留言交流和提问。
推广:
测试版的博客:https://astroh-peng.github.io/SPACEofPHD
信息分享,我的读书笔记,技术笔记
向公众号发送"blog"获得邀请链接
测试新玩具 Aerospace Machine Learning on Slack
用搞生活和科研的态度提供代买服务的2人
“旁友,听说你在搞机器学习?”
(https://twitter.com/startrek/status/1013497670114127872)
(https://medium.com/tubi-tv/top-10-data-moments-in-star-trek-the-next-generation-62515283646a)
领取专属 10元无门槛券
私享最新 技术干货