记得之前看tensorflow, numpy等库的api中提供了自动求导的函数, 觉得其中一定是用了某些高深的数值分析算法,但在 sicp书中也给了个简单的求导程序, 本质是基于求导法则的递归性质来实现的, 感觉有点意思记录一下。
我们先来看看求导法则:
可以看到最后两条求导法则满足递归的性质, 求导的运算过程通过分解后会得到越来越小的片段,最终将产生出常量和变量, 他们的导数都是0或者1.
(相关资料图)
代码实现
首先我们定义谓语(返回值为bool的函数):
然后我们需要定义出结果的构造方法:
最后实现求导函数:
接下来我们可以测试一下啦:
复杂一点的:
当然, 这个求导程序还是一个朴素的实现, 还需要对结果进行化简, 但是它已经实现了最核心的部分了...
最近在重0开始撸一个c++小型的深度学习框架, 后面我也会添加自动求导的功能:
https://github.com/StepfenShawn/tidf
X 关闭
Copyright © 2015-2022 亚洲建筑网版权所有 备案号:豫ICP备20022870号-9 联系邮箱:553 138 779@qq.com