机器学习训练算法一(计算机求任意连续函数的导数计算方法)

您所在的位置:网站首页 求函数导数的方法 机器学习训练算法一(计算机求任意连续函数的导数计算方法)

机器学习训练算法一(计算机求任意连续函数的导数计算方法)

2024-07-11 06:01| 来源: 网络整理| 查看: 265

文章目录 1、简单函数1.1、案例1.2、定义法(数值法求导)1.3、公式法(符号法求导)1.4、实验1.4.1、定义法(数值法求导)1.4.2、公式法(符号法求导) 2、复合函数2.1、案例2.2、链式法求导2.3、实验验证 3、求导思路(自动求导) 最近几年人工智能正在如火如荼的飞速发展,用计算机完成机器学习变成了很多朋友的一种强烈需求;同时,在机器学习的训练方法中会用到很多的导数和偏导数,本人推荐一种用计算机CPU和GPU的强大的计算能力来求导数和偏导数的的近似的方法,同时使用Matlab/Python程序做实验来验证导数的近似结果的准确性。

1、简单函数 1.1、案例

若函数 f ( x ) = 2 x 2 + 3 f(x)=2x^2+3 f(x)=2x2+3,求 f ′ ( 3 ) f'(3) f′(3)的值。

1.2、定义法(数值法求导)

由定义可知 f ′ ( x ) = lim ⁡ Δ x → 0 f ( x + Δ x ) − f ( x ) Δ x f'(x)=\displaystyle \lim_{\Delta x \to 0}{\frac{f(x+\Delta x)-f(x)}{\Delta x}} f′(x)=Δx→0lim​Δxf(x+Δx)−f(x)​,若 Δ x = 0.0001 \Delta x=0.0001 Δx=0.0001,那么 f ′ ( 3 ) = f ( 3 + 0.0001 ) − f ( 3 ) 0.0001 = 12.0002 f'(3)={\frac{f(3+0.0001)-f(3)}{0.0001}}=12.0002 f′(3)=0.0001f(3+0.0001)−f(3)​=12.0002。该方法适用于所有场景下的连续的复杂函数,且可以通过调整 Δ x \Delta x Δx的值大小来获取到指定精度下的导数值(由于计算机的强大的计算能力,可以使用该方法计算任意函数的导数);

1.3、公式法(符号法求导)

由公式可知 f ′ ( x ) = 4 × x f'(x)=4 \times x f′(x)=4×x,那么 f ′ ( 3 ) = 4 × 3 = 12 f'(3)=4 \times 3=12 f′(3)=4×3=12。该方法只适用于具有固定的数学表达形式的函数;

1.4、实验 1.4.1、定义法(数值法求导)

matlab程序

>> syms x delta; >> f(x)=2*x*x+3; >> j(x,delta)=(f(x+delta)-f(x))/delta; >> double(j(3,0.0001))

python程序

def f(x): return 2*x*x + 3 def j(x, delta): return (f(x + delta) - f(x)) / delta result = j(3, 0.0001) print(float(result)) 1.4.2、公式法(符号法求导)

matlab程序

>> syms x >> j(x)=diff(2*x*x+3,x); >> j(3)

python程序

from sympy import symbols, diff x = symbols('x') j = diff(2*x*x + 3, x) result = j.subs(x, 3) print(result) 2、复合函数 2.1、案例

若复合函数如下,求导数 d a d g \frac{da}{dg} dgda​的值,以及当 g = 2 g=2 g=2的时候的导数的值。 在这里插入图片描述

2.2、链式法求导

在这里插入图片描述 通过上图可知,以 a a a到 g g g 的链路存在如下 4 条: 在这里插入图片描述 由上表可推得: 在这里插入图片描述 若 g = 2 g=2 g=2,那么: 在这里插入图片描述

2.3、实验验证

matlab程序

>> syms a b c d e f g >> f=g*g*g; >> e=2*g; >> c=2+f; >> d=c*c; >> b=e*f; >> a=2*b+3*c+4*d; >> k(g)=diff(a,g); >> k(2)

python程序

from sympy import symbols, diff # 定义变量 a, b, c, d, e, f, g = symbols('a b c d e f g') # 定义函数 f = g*g*g e = 2*g c = 2 + f d = c*c b = e*f a = 2*b + 3*c + 4*d # 求导 k = diff(a, g) result = k.subs(g, 2) print(result) 3、求导思路(自动求导)

如果某个函数是“黑盒函数”,那么建议使用“定义法求导”;如果某个函数是“白盒函数”,那么建议使用“公式法求导”;如果“复合函数”中包含“黑盒函数”与“白盒函数”,那么要“定义法求导”+“公式法求导”+“链式法求导”相结合的方式求导。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3