TensorFlow学习笔记6-数值计算


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

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

上溢与下溢、softmax函数

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

病态条件

  • 条件数指函数相对于输入的微小变化而变化的快慢程度。 考虑函数\(f(\boldsymbol{x})=A^{-1}\boldsymbol{x}\),当\(A \in R^{n \times 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(\boldsymbol{x})\)(,才能最小化)。

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

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

  • 多维\(f\)一阶导数之Jacobian矩阵:对于函数\(f:R^{m}\rightarrow R^{n}\),其Jacobian矩阵\(J \in R^ {n \times 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} \nabla_ {x} f(x_ {0})\)

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

约束优化

  • 这里理论较枯燥,直接查看机器学习里的支持向量机一节进行学习,效果拔群。

TensorFlow学习笔记6-数值计算基础的更多相关文章

  1. tensorflow学习笔记二:入门基础 好教程 可用

    http://www.cnblogs.com/denny402/p/5852083.html tensorflow学习笔记二:入门基础   TensorFlow用张量这种数据结构来表示所有的数据.用一 ...

  2. TensorFlow学习笔记4-线性代数基础

    TensorFlow学习笔记4-线性代数基础 本笔记内容为"AI深度学习".内容主要参考<Deep Learning>中文版. \(X\)表示训练集的设计矩阵,其大小为 ...

  3. Tensorflow学习笔记2019.01.22

    tensorflow学习笔记2 edit by Strangewx 2019.01.04 4.1 机器学习基础 4.1.1 一般结构: 初始化模型参数:通常随机赋值,简单模型赋值0 训练数据:一般打乱 ...

  4. tensorflow学习笔记——使用TensorFlow操作MNIST数据(2)

    tensorflow学习笔记——使用TensorFlow操作MNIST数据(1) 一:神经网络知识点整理 1.1,多层:使用多层权重,例如多层全连接方式 以下定义了三个隐藏层的全连接方式的神经网络样例 ...

  5. tensorflow学习笔记——自编码器及多层感知器

    1,自编码器简介 传统机器学习任务很大程度上依赖于好的特征工程,比如对数值型,日期时间型,种类型等特征的提取.特征工程往往是非常耗时耗力的,在图像,语音和视频中提取到有效的特征就更难了,工程师必须在这 ...

  6. TensorFlow学习笔记——LeNet-5(训练自己的数据集)

    在之前的TensorFlow学习笔记——图像识别与卷积神经网络(链接:请点击我)中了解了一下经典的卷积神经网络模型LeNet模型.那其实之前学习了别人的代码实现了LeNet网络对MNIST数据集的训练 ...

  7. tensorflow学习笔记——使用TensorFlow操作MNIST数据(1)

    续集请点击我:tensorflow学习笔记——使用TensorFlow操作MNIST数据(2) 本节开始学习使用tensorflow教程,当然从最简单的MNIST开始.这怎么说呢,就好比编程入门有He ...

  8. TensorFlow学习笔记5-概率与信息论

    TensorFlow学习笔记5-概率与信息论 本笔记内容为"概率与信息论的基础知识".内容主要参考<Deep Learning>中文版. \(X\)表示训练集的设计矩阵 ...

  9. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

随机推荐

  1. fpga延时程序编写

    //工匠小建 延时计数 100微妙计数 50M*0.00001-1 (个人理解:1s中50M次动作.那么100us多少次动作.做完这些动作就是延时)parameter delay_100us=16'd ...

  2. poj 3352 : Road Construction 【ebcc】

    题目链接 题意:给出一个连通图,求最少加入多少条边可使图变成一个 边-双连通分量 模板题,熟悉一下边连通分量的定义.最后ans=(leaf+1)/2.leaf为原图中size为1的边-双连通分量 #i ...

  3. 【JavaScript】对象 obj.name 语法与 obj[name]语法

    obj.name ==> obj["name"]  底层的自动转化,所以直接写 obj["name"] 效率会高一些 var obj = { name: ...

  4. 第八周作业—N42-虚怀若谷

    一.显示统计占用系统内存最多的进程,并排序 [root@centos7 ~]# ps -eo uid,pid,ppid,tty,c,time,cmd,%mem --sort=-%mem UID PID ...

  5. SQL Server性能调优--优化建议(一)

    序言 当数据量小的时候,SQL优化或许无关紧要,但是当数据量达到一定量级之后,性能优化将变得至关重要,甚至决定系统成败. 定位慢查询 查询编译以来cpu耗时总量最多的前50条 --查询编译以来 cpu ...

  6. 转载--C 的回归

    转载自http://blog.codingnow.com/2007/09/c_vs_cplusplus.html 周末出差,去另一个城市给公司的一个项目解决点问题.回程去机场的路上,我用手机上 goo ...

  7. HDU 1134 Game of Connections(卡特兰数+大数模板)

    题目代号:HDU 1134 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1134 Game of Connections Time Limit: 20 ...

  8. 4.16中Montage的一些变化

    用4.16版本跟着网上的几篇Montage教程(分别是对应4.6和4.8版本)做,遇到各种各样的问题,经过各种搜索和分析,最终终于搞定了. 4.16版的Montage和之前有了不小的变化,总结如下: ...

  9. 利用Javascript解决HTML大数据列表引起的网页加载慢/卡死问题。

    在一些网页应用中,有时会碰到一个超级巨大的列表,成千上万行,这时大部份浏览器解析起来就非常痛苦了(有可能直接卡死). 也许你们会说可以分页或动态加载啊?但是有可能需求不允许分页,动态加载?网络的延迟也 ...

  10. ArrayDeque 源码分析

    ArrayDeque ArrayDeque 能解决什么问题?什么时候使用 ArrayDeque? 1)Deque 接口大小可变的循环数组实现,ArrayDeque 没有容量限制并会按需增长. 2)Ar ...