《深度学习》学习笔记三——数值计算

原文博客:Doi技术团队
链接地址:https://blog.doiduoyi.com/authors/1584446358138
初心:记录优秀的Doi技术团队学习经历

目录

上溢和下溢

  • 下溢(underflow)是一种极具毁灭性的舍入误差.当接近零的数被四舍五入为零时发生下溢
  • 上溢(overflow)是一种极具破坏力的数值错误形式.当大量级的数被近似为 ∞ \infty 或者 − ∞ -\infty 时发生上溢,进一步的运算通常会导致这些无限值变成非数字.
  • softmax 函数(softmax function)可以对上溢和下溢进行数值稳定的一个函数,softmax函数经常用于预测与Multinoulli分布相关联的概率,定义为:

基于梯度的优化方法

大多数深度学习算法都涉及某种形式的优化.优化指的是改变 x x x以最小化或最大化某个函数 f ( x ) f(x) f(x)的任务.我们通常以最小化 f ( x ) f(x) f(x)指代大多数最优化问题,最大化可以经由最小化算法最小化 − f ( x ) -f(x) f(x)来实现
我们把要最小化或最大化的函数称为目标函数(objective function)或者准则(criterion).当我们对其进行最小化时,也把它称为代价函数(cost function),损失函数(loss function)或者误差函数(error function)

导数

导数(derivative):设函数 y = f ( x ) y=f(x) y=f(x)在点 x 0 x_0 x0的某邻域 U ( x 0 ) U(x_0) U(x0)内有定义,当自变量 x x x在点 x 0 x_0 x0处取得增量 △ x \triangle x x( △ x ≠ 0 \triangle x \neq 0 x=0 x 0 + △ x ∈ U ( x 0 ) x_0+\triangle x \in U(x_0) x0+xU(x0))时,相应的函数 y y y取得增量:
△ y = f ( x 0 + △ x ) − f ( x 0 ) (1) \triangle y = f(x_0 + \triangle x)-f(x_0)\tag{1} y=f(x0+x)f(x0)(1)
若极限
lim ⁡ △ x → 0 △ y △ x = lim ⁡ △ x → 0 f ( x 0 + △ x ) − f ( x 0 ) △ x (2) \lim_{\triangle x \rightarrow0}\frac{\triangle y}{\triangle x} = \lim_{\triangle x \rightarrow0}\frac{f(x_0 + \triangle x)-f(x_0)}{\triangle x}\tag{2} x0limxy=x0limxf(x0+x)f(x0)(2)
存在,则称函数 y = f ( x ) y=f(x) y=f(x)在点 x 0 x_0 x0可导,并称此极限值为函数 y = f ( x ) y=f(x) y=f(x)在点 x 0 x_0 x0的导数,记作 f ′ ( x 0 ) f^\prime(x_0) f(x0)或者 d y d x ∣ x = x 0 \left.\frac{dy}{dx}\right | _{x=x_0} dxdyx=x0
由上面的定义可得若曲线 y = f ( x ) y=f(x) y=f(x)存在一点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0),并且在这点上可导,导数为 f ′ ( x 0 ) f^\prime(x_0) f(x0),那么导数 f ′ ( x 0 ) f^\prime(x_0) f(x0)就是该点的斜率.
梯度下降(gradient descent)导数对最小化一个函数很有用,当 △ x \triangle x x足够小时, f ( x − △ x s i g n ( f ′ ( x ) ) ) f(x-\triangle x{\rm sign}(f^\prime(x))) f(xxsign(f(x)))是比 f ( x ) f(x) f(x)小的,因此我们可以将 x x x往导数的反方向移动一小步来减小 f ( x ) f(x) f(x).这种技术称为梯度下降
梯度下降
在不断重复上面操作后,最终可以得到 f ′ ( x ) = 0 f^\prime(x)=0 f(x)=0,改点称为临界点(critical point)或驻点(stationary),这个驻点可能是极大点(maximum),或者是极小点(minimum),还有可能是鞍点(saddle point),还要进一步计算.

  1. 当驻点的左边的 △ x \triangle x x距离的 f ′ ( x ) f^\prime(x) f(x)小于0,而驻点的右边边的 △ x \triangle x x距离的 f ′ ( x ) f^\prime(x) f(x)大于0,则该驻点是极小值
  2. 当驻点的左边的 △ x \triangle x x距离的 f ′ ( x ) f^\prime(x) f(x)大于0,而驻点的右边边的 △ x \triangle x x距离的 f ′ ( x ) f^\prime(x) f(x)小于0,则该驻点是极大值
  3. 当驻点的距离左右两边的 △ x \triangle x x距离的 f ′ ( x ) = f^\prime(x)= f(x)=都小于0或都大于0,则该驻点是鞍点
    极小点,极大点,鞍点
    在上面用到了 s i g n {\rm sign} sign函数,下面的就是 s i g n {\rm sign} sign定义:
    s i g n ( x ) = { 1 , x > 0 0 , x = 0 − 1 , x < 0 (3) {\rm sign}(x) = \left\{ \begin{matrix} 1,x>0 \\ 0,x=0 \\ -1,x<0 \end{matrix} \right. \tag{3} sign(x)=1,x>00,x=01,x<0(3)
    s i g n {\rm sign} sign函数的坐标图:
    sign(x)函数

偏导数

当函数只有二维输入时,其只有一个驻点,所以这个驻点就是它的最小点或者最大点。但是通常遇到更多的是多维输入的函数,它具有多个驻点,所以它有多个极小点和极大点,如下图。所以通过上面的方法很难找到最大点或者最小点。
多维输入函数
针对具有多维输入的函数,我们就需要用到偏导数(partial derivative)的概念了。
设函数 z = f ( x , y ) z=f(x,y) z=f(x,y)在点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)的某个领域内有定义,当 y y y固定在 y 0 y_0 y0 x x x x 0 x_0 x0处有增量 △ x \triangle x x时,相应地函数有增量
f ( x 0 + △ x , y 0 ) − f ( x 0 , y 0 ) (4) f(x_0+\triangle x,y_0)-f(x_0,y_0)\tag{4} f(x0+x,y0)f(x0,y0)(4)
如果有极限
lim ⁡ △ x → 0 f ( x 0 + △ x , y 0 ) − f ( x 0 , y 0 ) △ x (5) \lim_{\triangle x \rightarrow 0}\frac{f(x_0+\triangle x,y_0)-f(x_0,y_0)}{\triangle x}\tag{5} x0limxf(x0+x,y0)f(x0,y0)(5)
存在,则称此极限为函数 z = f ( x , y ) z=f(x,y) z=f(x,y)在点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0) x x x的偏导数,记作:
∂ f ∂ x ∣ x = x 0 , y = y 0 或 f x ′ ( x 0 , y 0 ) (6) \left.\frac{\partial f}{\partial x}\right|_{x=x_0,y=y0}\quad 或\quad f^\prime_x(x_0,y_0)\tag{6} xfx=x0,y=y0fx(x0,y0)(6)
同理,函数 z = f ( x , y ) z=f(x,y) z=f(x,y)在点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0) y y y的偏导数为:
f y ′ ( x 0 , y 0 ) = lim ⁡ △ y → 0 f ( x 0 , y 0 + △ y ) − f ( x 0 , y 0 ) △ y (7) f^\prime _y(x_0,y_0) = \lim_{\triangle y \rightarrow 0}\frac{f(x_0,y_0+\triangle y)-f(x_0,y_0)}{\triangle y}\tag{7} fy(x0,y0)=y0limyf(x0,y0+y)f(x0,y0)(7)
例求 f ( x , y ) = x 2 + 3 x y + y 2 f(x,y)=x^2+3xy+y^2 f(x,y)=x2+3xy+y2在点(2,1)处的偏导数 f x ( 2 , 1 ) , f y ( 2 , 1 ) f_x(2,1),f_y(2,1) fx(2,1),fy(2,1).
:把 y y y看作常数,对 x x x求导得到
f x ( x , y ) = 2 x + 3 y (8) f_x(x,y)=2x+3y\tag{8} fx(x,y)=2x+3y(8)
x x x看作常数,对 y y y求导得到
f y ( x , y ) = 3 x − 2 y (9) f_y(x,y)=3x-2y\tag{9} fy(x,y)=3x2y(9)
代入 x = 2 , y = 1 x=2,y=1 x=2,y=1,故所求偏导数为:
f x ( 2 , 1 ) = 7 , f y ( 2 , 1 ) = 4 (10) f_x(2,1) = 7,f_y(2,1)=4\tag{10} fx(2,1)=7,fy(2,1)=4(10)
梯度(gradient)是相对一个向量求导的导数: f f f的导数是包含所有偏导数的向量,记作 ∇ x f ( x ) \nabla_xf(x) xf(x)。梯度的第 i i i个元素是 f f f关于 x i x_i xi的偏导数。在多维情况下,临界点是梯度中所有元素都为零的点。


约束优化

有时候,在 x x x的所有可能值下最大化或者最小化一个函数 f ( x ) f(x) f(x)不是我们所希望的,相反,我们可能希望在 x x x的某些集合 S {\Bbb S} S中找到 f ( x ) f(x) f(x)的最大值或者最小值,这个称为约束优化(constrained optimization)
Karush-Kuhu-Tucker(KKT)方法是针对约束优化非常通用的解决方案,KKT方法是Lagrange乘子法(只允许等式约束)的推广


参考资料

  1. lan Goodfellow,Yoshua Bengio,Aaron Courville.深度学习(中文版).赵申剑,黎彧君,符天凡,李凯,译.北京:人民邮电出版社
  2. 郭游瑞,徐应祥,任阿娟,赵志琴.高等数学简明教程.上海:复旦大学出版社
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜雨飘零1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值