深度学习 with Python(四)数值计算

四、数值计算

4.1 上溢和下溢

下溢:接近0的数被计算机四舍五入近似为0
上溢:极大的数被计算机近似为正无穷
使用softmax函数进行数值稳定
在这里插入图片描述

4.2 病态条件

在这里插入图片描述在这里插入图片描述

4.3 基于梯度的优化方法

优化:最小化f(x)值在这里插入图片描述
在这里插入图片描述
梯度下降法,就是利用负梯度方向来决定每次迭代的新的搜索方向,使得每次迭代能使待优化的目标函数逐步减小。梯度下降法是2范数下的最速下降法。
线性搜索法确定学习率P35
在这里插入图片描述

4.3.1 Jacobian 和 Hessian 矩阵

Jacobian 矩阵:对向量求一阶导
Hessian 矩阵:在一阶导矩阵的基础上求二阶导,几乎处处都是对称的
在这里插入图片描述
在这里插入图片描述
因为Hessian 矩阵是实对称的,我们可以将其分解成一组实特征值和一组特征向量的正交基。在特定方向d上的二阶导数可以写成d⊤Hd。当
当d是H的一个特征向量时,这个方向的二阶导数就是对应的特征值。对于其他的方向d,方向二阶导数是所有特征值的加权平均,权重在0和1之间,且与d 夹角越小的特征向量的权重越大。
最大特征值确定最大二阶导数,最小特征值确定最小二阶导数。
在这里插入图片描述
当附近的临界点是最小点(Hessian 的所有特征值都是正的)时牛顿法才适用,而梯度下降不会被吸引到鞍点(除非梯度指向鞍点)。
仅使用梯度信息的优化算法被称为一阶优化算法(first-order optimization algorithms),如梯度下降。使用Hessian 矩阵的优化算法被称为二阶最优化算法(second-order optimization algorithms),如牛顿法。

4.4 约束优化

在x的某些集合中找f(x)的最大或最小值
在这里插入图片描述
在这里插入图片描述

4.5 基于梯度的优化寻找线性最小二乘

在这里插入图片描述
在这里插入图片描述
梯度计算题例子
1先对原方程f求导得到梯度方程delta,代入x0;
2将代入后得到的点(delta0)代入新的方程f(x0-t(delta))(线搜索法)
3对新方程求导,算出导数为0时t的值(t为学习率)
4计算x1=x0-t*梯度方程(x0)
在这里插入图片描述在这里插入图片描述
http://sofasofa.io/tutorials/python_gradient_descent/index.php

结果是成功了,不知道为啥添加了None
在这里插入图片描述
上面计算题的代码实现,不指定学习率,解方程最小值作为学习率。

from sympy import diff,symbols,solve
def gdddd(x0,n):
      x=symbols('x')
      y=symbols('y')
      t=symbols('t')
      allx=[]#迭代的点的列表
      allx.append(x0)
      def formu(x,y):
          f=4*x**2-4*x*y+2*y**2
          return f
      f0=formu(x,y)
      def gradfunc(x0,f0):
          diff0=(diff(f0,x),diff(f0,y))#求导数方程,也就是梯度下降方向
          delta0=(diff0[0].subs([(x,x0[0]),(y,x0[1])]),diff0[1].subs([(x,x0[0]),(y,x0[1])]))#求极值点
          fai=formu(x0[0]-t*delta0[0],x0[1]-t*delta0[1])#代入极值点后的公式
          t0=solve(diff(fai,t),t)#求学习率
          x1=(x0[0]-t0[0]*delta0[0],x0[1]-t0[0]*delta0[1])#求迭代后的生成的点
          allx.append(x1)
          print(x1)
      for i in range(n):
          if n>=0:
             xi=gradfunc(allx[i],f0)
             allx.append(xi)
      return allx
x0=(2,3)
gdddd(x0,2)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值