sicp學(xué)習(xí)筆記: 用lisp實(shí)現(xiàn)一個(gè)求導(dǎo)程序
2023-03-17 21:07 作者:StepfenShawn | 我要投稿
記得之前看tensorflow, numpy等庫(kù)的api中提供了自動(dòng)求導(dǎo)的函數(shù), 覺得其中一定是用了某些高深的數(shù)值分析算法,但在 sicp書中也給了個(gè)簡(jiǎn)單的求導(dǎo)程序, 本質(zhì)是基于求導(dǎo)法則的遞歸性質(zhì)來(lái)實(shí)現(xiàn)的, 感覺有點(diǎn)意思記錄一下。
我們先來(lái)看看求導(dǎo)法則:
可以看到最后兩條求導(dǎo)法則滿足遞歸的性質(zhì), 求導(dǎo)的運(yùn)算過(guò)程通過(guò)分解后會(huì)得到越來(lái)越小的片段,最終將產(chǎn)生出常量和變量, 他們的導(dǎo)數(shù)都是0或者1.
代碼實(shí)現(xiàn)
首先我們定義謂語(yǔ)(返回值為bool的函數(shù)):
然后我們需要定義出結(jié)果的構(gòu)造方法:
最后實(shí)現(xiàn)求導(dǎo)函數(shù):
接下來(lái)我們可以測(cè)試一下啦:
復(fù)雜一點(diǎn)的:
當(dāng)然,?這個(gè)求導(dǎo)程序還是一個(gè)樸素的實(shí)現(xiàn), 還需要對(duì)結(jié)果進(jìn)行化簡(jiǎn), 但是它已經(jīng)實(shí)現(xiàn)了最核心的部分了...
最近在重0開始擼一個(gè)c++小型的深度學(xué)習(xí)框架, 后面我也會(huì)添加自動(dòng)求導(dǎo)的功能:
https://github.com/StepfenShawn/tidf
標(biāo)簽: