可微编程(Differentiable Programming)-Yann LeCun
1. 什么是可微编程?
传统的编程是程序员写出的一行行代码,然后机器按照代码运行指令,输入根据这个代码得到输出。可微编程相当于是用神经网络代替程序员的工作,自己生成编程语言,或者程序员只提供少量的high-level的代码。因此可微编程可以简单理解成是把神经网络看作一门语言,而不是一个机器学习方法,从而描述我们客观世界的概念以及概念之间的关系。
完全不写代码的paper:
Neural Turing Machines
Neural Symbolic Machines/Neural Programmer
DeepCoder: Learning to Write Programs
程序员给出少量代码,用神经网络拟合得到中间缺失的函数的paper:
Programming with a Differentiable Forth Interpreter
Differentiable Programs with Neural Libraries相关工作–如何利用人工写的程序来提高神经网络『写代码』的能力:Coupling Distributed and Symbolic Execution for Natural Language Queries
2. 可微编程、深度学习,机器学习,数据集之间的关系
我们将数据集经过预处理之后输入到深度学习框架中提取特征,最后结合机器学习的算法解决实际的过程。深度学习也可以通过对抗生成式网络(GAN)生成数据。那么机器学习能否反推到深度学习呢?–可微分编程。
可微分编程可以将先用的机器学习方法转化成等价的神经网络。
传统的机器学习的方法:基于假设或先验知识→目标函数→优化求解。当得到一个新的目标函数时,还需要研究目标函数数学上的性质对其进行优化,如凸优划等。