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处处半正定的函数,这种函数没有鞍点且全局极小点必然是全局最小点,所以表现很好。
约束优化
- 这里理论较枯燥,直接查看机器学习里的支持向量机一节进行学习,效果拔群。