微积分
在微分学最重要的应用是优化问题,即考虑如何把事情做到最好。
在深度学习中,我们“训练”模型,不断更新它们,使它们在看到越来越多的数据时变得越来越好。 通常情况下,变得更好意味着最小化一个损失函数(loss function), 即一个衡量“模型有多糟糕”这个问题的分数。 最终,我们真正关心的是生成一个模型,它能够在从未见过的数据上表现良好。 但“训练”模型只能将模型与我们实际能看到的数据相拟合。 因此,我们可以将拟合模型的任务分解为两个关键问题:
优化(optimization):用模型拟合观测数据的过程;
泛化(generalization):数学原理和实践者的智慧,能够指导我们生成出有效性超出用于训练的数据集本身的模型。
导数和微分
导数的基础在此不再赘述
为了更直观的展示我们先简要介绍一下绘图:
import matplotlib.pyplot as plt
def plot_and_save():
# 绘制图形
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y)
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.title('示例图形')
# 保存图形到文件
plt.savefig('example_plot.svg') # 保存为SVG格式
plt.savefig('example_plot.png') # 保存为PNG格式
# 调用函数来绘制图形并保存到文件
plot_and_save()
以上代码能绘制一个名为example_plot的图片分别为svg和png格式,在后文的学习中可以使用绘图来直观理解。
除此之外还需简要介绍一下python中函数的定义方法:
def f(x):
return 3 * x ** 2 - 4 * x
这行代码定义了f(x)=3x^2-4x
python中还可以将已经定义的函数作为参数传递给另一个函数:
def numerical_lim(f, x, h):
return (f(x + h) - f(x)) / h
如这行代码就计算了f(x)的变化率。
偏导数
梯度
链式法则
Python中求导的运算规则
计算求偏导 遵循以下图表:
标量x · | 向量X | | |
标量y · | 标量 · | 向量 — |
向量y | | 向量 | | 矩阵 □ |
注:以上表格中"·"代表标量,"|"代表列向量,"—"代表行向量,"□"代表矩阵
如:标量 y 关于列向量 x 的导数 = [
,
, ... ,
]
对于两个列向量可以看成y中的每一个标量对于列向量求偏导得到行向量,拼接在一起就是矩阵。
一些常用性质:
除此之外还有:
再继续扩展:
标量(1,) | 向量(n,1) | 矩阵(n,k) | |
标量(1,) | (1,) | (1,n) | (k,n) |
向量(m,1) | (m,1) | (m,n) | (m,k,n) |
矩阵(m,l) | (m,l) | (m,l,n) | (m,l,k,n) |
小结
- 微分和积分是微积分的两个分支,前者可以应用于深度学习中的优化问题。
- 导数可以被解释为函数相对于其变量的瞬时变化率,它也是函数曲线的切线的斜率。
- 梯度是一个向量,其分量是多变量函数相对于其所有变量的偏导数。
- 链式法则可以用来微分复合函数。