定义:对于一个多变量的函数,求其中一个变量的偏导数就是保持其他变量恒定,然后对这个变量进行求导所得的结果即为该函数在该变量上的偏导数。
x方向的偏导
设有二元函数 z=f(x,y) ,点(x0,y0)是其定义域D 内一点。把 y 固定在 y0而让 x 在 x0 有增量 △x ,相应地函数 z=f(x,y) 有增量(称为对 x 的偏增量)△z=f(x0+△x,y0)-f(x0,y0)。
如果 △z 与 △x 之比当 △x→0 时的极限存在,那么此极限值称为函数 z=f(x,y) 在 (x0,y0)处对 x 的偏导数,记作 f'x(x0,y0)或。函数 z=f(x,y) 在(x0,y0)处对 x 的偏导数,实际上就是把 y 固定在 y0看成常数后,一元函数z=f(x,y0)在 x0处的导数。
y方向的偏导
同样,把 x 固定在 x0,让 y 有增量 △y ,如果极限存在那么此极限称为函数 z=(x,y) 在 (x0,y0)处对 y 的偏导数。记作f'y(x0,y0)。
几何意义:表示固定面上一点的切线斜率
定义:一个向量,表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大。
设二元函数 在平面区域D上具有一阶连续偏导数,则对于每一个点P(x,y)都可定出一个向量 ,该函数就称为函数 在点P(x,y)的梯度,记作gradf(x,y)或 ,即有:
gradf(x,y)= =
定义:若 和 是任意实数,则有 ≤( )( )此外,如果有某个 ,则上式中的等号当且仅当存在一个实数X使得对于每一个 都有 时成立。
通俗比喻解释:首先将我们的函数看作是一个凹形的山谷。(瞄一眼上面的插图,这种想法应该是很直观的。)好,现在让我们想象有一个小球沿着山谷的坡面向低处滚。生活经验告诉我们这个小球最终会到达谷底。或许我们可以采用类似的思路找到函数的最小值?好,首先我们将随机选取一个点作为这个(想象中的)球的起点,然后再模拟这个小球沿着坡面向谷底运动的轨迹。我们可以简单地通过计算 CC 的偏导数(可能包括某些二阶偏导数)来进行轨迹的模拟——这些偏导数蕴涵了山谷坡面局部“形状”的所有信息,因此也决定了小球应该怎样在坡面上滚动。
梯度下降算法(gradient descent algorithm)是通过不断计算梯度∇C,然后向着梯度相反的方向小步移动的方式让小球不断顺着坡面滑向谷底。这个过程可以形象地用下图表示:
随机梯度下降可以加速学习过程的办法,这个办法是通过随机选择训练输入的少量样本,并只计算这些样本的∇Cx∇Cx的平均值来估算梯度 nablaC。通过计算这些少量样本的平均值,我们可以很快估算出梯度∇C∇C的真实值,从而加速梯度下降过程,即加速神经网络的学习过程。
With语句是什么?
有一些任务,可能事先需要设置,事后做清理工作。对于这种场景,Python的with语句提供了一种非常方便的处理方式。一个很好的例子是文件处理,你需要获取一个文件句柄,从文件中读取数据,然后关闭文件句柄。 如果不用with语句,代码如下:
file = open("/tmp/foo.txt")
data = file.read()
file.close()
with如何工作?
这看起来充满魔法,但不仅仅是魔法,Python对with的处理还很聪明。基本思想是with所求值的对象必须有一个__enter__()方法,一个__exit__()方法。紧跟with后面的语句被求值后,返回对象的__enter__()方法被调用,这个方法的返回值将被赋值给as后面的变量。当with后面的代码块全部被执行完之后,将调用前面返回对象的__exit__()方法。
#!/usr/bin/env python
# with_example01.py
class Sample:
def __enter__(self):
print "In __enter__()"
return "Foo"
def __exit__(self, type, value, trace):
print "In __exit__()"
def get_sample():
return Sample()
with get_sample() as sample:
print "sample:", sample
运行代码,输出如下:
In __enter__()
sample: Foo
In __exit__()