zoukankan      html  css  js  c++  java
  • TensorFlow学习笔记6-数值计算基础

    TensorFlow学习笔记6-数值计算


    本笔记内容为“数值计算的基础知识”。内容主要参考《Deep Learning》中文版。

    • (X)表示训练集的矩阵,其大小为m行n列,m表示训练集的大小(size),n表示特征的个数;
    • (y)表示训练集对应标签,其大小为m行,m表示训练集的大小(size);
    • (y’)表示将测试向量(x)输入后得到的测试结果;

    上溢与下溢、softmax函数

    • 下溢:当某数值很接近于0时,有可能被舍去为0,这时下一步计算(被0除,取0的对数等)会导致溢出的异常。
    • 上溢:当数值接近于无穷大,进一步计算可能会导致将这些大值变为非数字。
    • softmax函数常用于数值稳定:定义(softmax(oldsymbol{x})_ {i} = frac{exp(x_ {i})}{sum_ {j=1}^n exp(x_ {j})}),利用(softmax(z))(其中(oldsymbol{z}=oldsymbol{x}-max_ {i}x_ {i}))可以解决上溢和下溢的问题。

    病态条件

    • 条件数指函数相对于输入的微小变化而变化的快慢程度。 考虑函数(f(oldsymbol{x})=A^{-1}oldsymbol{x}),当(A in R^{n imes n})有特征值分解时,
      其条件数为$$max_ {i,j} |frac{lambda_ {i}}{lambda_ {j}}|$$即最大和最小特征值的模之比。该数很大时,矩阵求逆对输入的误差特别敏感。

    基于梯度的优化方法

    • 优化指改变(x)以最大化/最小化某个函数(f(x))的任务。用最小化(f(x))指代大多数问题。最大化(f(x))就是最小化(-f(x))

      这里(f(x))为目标函数(最小化时的(f(x))也称为代价函数,损失函数或误差函数等)。当(f(x))取到最小值时,(x)的值为$$x^{*}=arg min f(x)$$

    • 梯度下降
      由于(f(x+epsilon)=f(x)+epsilon f'(x)),如求出当前(x)对应的(f'(x)),则(f(x-epsilon sign(f'(x))))是比(f(x))小的。

      (f'(x)=0)的点称为临界点(或驻点)。驻点一般是局部极大点局部极小点鞍点(同时存在更高和更低的相邻点,如(f(x)=x^3)的点(x=0))。

    • 多维的自变量(最常见的情况)

      注意:输入常是多维的(x),输出必须是一维的(f(oldsymbol{x}))(,才能最小化)。

      梯度( abla_ {oldsymbol{x}}f(oldsymbol{x}))是一个向量,驻点是梯度向量中所有元素均为0的点

      为了最小化(f),需要找到使(f)下降最快的方向:方向导数$$min_ {oldsymbol{u,uTu=1}}uT abla_ {x}f(oldsymbol{x})=min_ {oldsymbol{u,u^Tu=1}}||oldsymbol{u}||_ {2}|| abla_ {x}f(oldsymbol{x})||_ {2}cos heta =min_ {oldsymbol{u,u^Tu=1}}|| abla_ {x}f(oldsymbol{x})||_ {2}cos heta=min_ {oldsymbol{u}}cos heta$$
      这叫最速下降法,它建议(x'=x-epsilon abla_{x}f(x)),其中(epsilon)是学习率,即学习速度,决定了算法里的移动步长。

    • 多维(f)一阶导数之Jacobian矩阵:对于函数(f:R^{m} ightarrow R^{n}),其Jacobian矩阵(J in R^ {n imes m})定义为(J_ {i,j}=frac{partial f_ {i}}{partial x_ {j}}),行变y列变x。

    基于二阶导数的优化方法

    常用二阶导数去选择最优的步长(epsilon)

    • 一维(f)二阶导数之Hessian矩阵:(H(f)(x)_ {i,j}=frac{partial^2 f(x)}{partial x_i partial x_j})

      由于(frac{partial^2 f(x)}{partial x_j partial x_i}=frac{partial^2 f(x)}{partial x_i partial x_j}),即(H_ {i,j}=H_ {j,i}),Hessian矩阵是实对称矩阵。故可分解为一组实特征值和特征向量的正交基。
      (d)为特征向量时,对应特征值为(lambda = d^T Hd)
      函数f(x)的二阶泰勒级数展开为:$$f(x)=f(x_ {0})+(x-x_ {0})^ {T}g+frac{1}{2}(x-x_ {0})^{T}H(x-x_ {0})$$
      其中(g)为梯度,代入(x'=x_ {0}-epsilon g),得到(f(x_ {0}-epsilon g)=f(x_ {0})- epsilon g^{T}g+frac{1}{2}epsilon ^2 g^T Hg)

      • (g^T Hg leq 0)时,保证了(f(x_ {0}-epsilon g)<f(x_ {0})),将使(f)不断下降。
      • (g^T Hg > 0)时,最优步长为 (epsilon ^* = frac{g^T g}{g^T Hg}),最坏时,g与H的(lambda_{max})对应的特征向量方向一致时,最优步长变为(frac{1}{lambda_{max}})
        Hessian矩阵的特征值决定了学习率的量级。

      如果Hessian是正定阵,则方向二阶导数在任意方向都是正的,则该临界点是一个局部极小点。如果Hessian是负定阵,则该临界点时一个局部极大点。如果至少一个负特征值一个正特征值,则是鞍点。

      如果f是正定或近似正定的二次函数,用牛顿法可以更快地跳转到极小值点:(x^* =x_ {0}-H(f)(x_ {0})^{-1} abla_ {x} f(x_ {0}))

      优化运用最成功的是凸优化,它只对凸函数适用,即Hessian处处半正定的函数,这种函数没有鞍点且全局极小点必然是全局最小点,所以表现很好。

    约束优化

    • 这里理论较枯燥,直接查看机器学习里的支持向量机一节进行学习,效果拔群。
  • 相关阅读:
    Time Zone 【模拟时区转换】(HDU暑假2018多校第一场)
    HDU 1281 棋盘游戏 【二分图最大匹配】
    Codeforces Round #527 (Div. 3) F. Tree with Maximum Cost 【DFS换根 || 树形dp】
    Codeforces Round #527 (Div. 3) D2. Great Vova Wall (Version 2) 【思维】
    Codeforces Round #527 (Div. 3) D1. Great Vova Wall (Version 1) 【思维】
    Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) C. Connect Three 【模拟】
    Avito Cool Challenge 2018 E. Missing Numbers 【枚举】
    Avito Cool Challenge 2018 C. Colorful Bricks 【排列组合】
    005 如何分析问题框架
    004 如何定义和澄清问题
  • 原文地址:https://www.cnblogs.com/charleechan/p/11435138.html
Copyright © 2011-2022 走看看