购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.2 导数

像函数一样,导数也是深度学习的一个非常重要的概念,大多数人可能很熟悉。同样,导数也可以用多种方式进行描述。总体来说,函数在某一点上的导数,可以简单地看作函数输出相对于该点输入的“变化率”。接下来基于前面介绍的 3 个维度来了解导数,从而更好地理解导数的原理。

数学

首先来从数学角度精确地定义导数:可以使用一个数字来描述极限,即当改变某个特定的输入值 时,函数 输出的变化:

通过为 设置非常小的值(例如 0.001),可以在数值上近似此极限。因此,可以将导数计算为:

虽然近似准确,但这只是完整导数思维模型的一部分,下面来从示意图的维度认识导数。

示意图

采用一种熟悉的方式:在含有函数 图像的笛卡儿坐标系上,简单地画出该函数的一条切线,则函数 在点 处的导数就是该线在点 处的斜率。正如本节中的数学描述一样,这里也可以通过两种方式实际计算这条线的斜率。第一种方式是使用微积分来实际计算极限,第二种方式是在 处和 处取连线 的斜率。后者如图 1-4 所示,如果学过微积分,应该会很熟悉。

图 1-4:导数即为斜率

正如 1.1 节所述,可以把函数想象成小型工厂。现在想象那些工厂的输入通过一根线连接到输出。求解导数相当于回答这样一个问题:如果将函数的输入 拉高一点,或者如果函数在 处可能不对称,因此把 拉低一点,那么根据工厂的内部运作机制,输出量将以这个小数值的多少倍进行变化呢?如图 1-5 所示。

图 1-5:导数可视化的另一种方法

对理解深度学习而言,第二种表示形式比第一种更为重要。

代码

可以通过编码来求解前面看到的导数的近似值:

from typing import Callable

def deriv(func: Callable[[ndarray], ndarray],
          input_: ndarray,
          delta: float = 0.001) -> ndarray:
    '''
    计算函数func在input_数组中每个元素处的导数。
    '''
    return (func(input_ + delta) - func(input_ - delta)) / (2 * delta)

当说 (随机选的字母)的函数时,其实是指存在某个函数 ,使得 。或者说,有一个函数 ,它接受对象 并产生对象 。也可以说, 是函数 应用于 时产生的任意函数值:

可以将其编码为下面这种形式。 /35UT8OsIkMQFyT3KzD0ZKGqj+QCgIA9pEP8Vc2kn8XcHuCP+1pgGMT8qRbbRCMz

def f(input_: ndarray) -> ndarray:
    # 一些转换
    return output

P = f(E)
点击中间区域
呼出菜单
上一章
目录
下一章
×