欢迎光临散文网 会员登陆 & 注册

sicp学习笔记: 用lisp实现一个求导程序

2023-03-17 21:07 作者:StepfenShawn  | 我要投稿

记得之前看tensorflow, numpy等库的api中提供了自动求导的函数, 觉得其中一定是用了某些高深的数值分析算法,但在 sicp书中也给了个简单的求导程序, 本质是基于求导法则的递归性质来实现的, 感觉有点意思记录一下。

我们先来看看求导法则:

可以看到最后两条求导法则满足递归的性质, 求导的运算过程通过分解后会得到越来越小的片段,最终将产生出常量和变量, 他们的导数都是0或者1.

代码实现

首先我们定义谓语(返回值为bool的函数):

然后我们需要定义出结果的构造方法:

最后实现求导函数:

接下来我们可以测试一下啦:

复杂一点的:

当然, 这个求导程序还是一个朴素的实现, 还需要对结果进行化简, 但是它已经实现了最核心的部分了...

最近在重0开始撸一个c++小型的深度学习框架, 后面我也会添加自动求导的功能:

https://github.com/StepfenShawn/tidf

sicp学习笔记: 用lisp实现一个求导程序的评论 (共 条)

分享到微博请遵守国家法律