数值计算
2017-01-14 06:28:32 2 举报
AI智能生成
Deep Learning Introduction
作者其他创作
大纲/内容
迭代更新
<span style="font-size: 17px;">优化(寻找最大值最小值)</span>
<span style="font-size: 17px;">线性方程求解</span>
Overflow and Underflow
上溢和下溢会带来数值的不稳定,做算法实现时应该时刻注意
举例:softmax
常用于multinoulli分布
Theano能自动检测并稳定深度学习中常见的数值不稳定的表达式
Poor Conditioning
举例:矩阵求逆会对输入的误差特别敏感,这是求逆操作本身的特性决定的
conditioning代表函数随着输入的微小变化而变化的快慢。太大的的变化可能意味着舍入误差导致了输出的巨大变化。
Gradient-based Optimization
深度学习算法大多涉及优化问题
<b>优化问题往往以某个函数f(x)的最大化/最小化形式出现,通常用最小化来表达</b>
目标函数(objective) / 判据(criterion) / 代价函数(cost function) / 损失函数(loss function) / 误差函数(error function)
微积分与优化问题
导数表示了输入的微小变化对输出的影响
<b>梯度下降</b>:将x往导数的反方向移动一小步可以减小f(x)
f'(x)=0时,导数无法提供移动的方向信息,称为临界点或驻点。
临界点不一定是局部最大/最小点,也可能是鞍点(saddle point)
优化通常寻找的是全局最小点。但在输入是高维的情况下往往难以找到。因此实际上通常找的是f非常小的点。
偏导数:多维输入的情况下,衡量最小化需要使输出是标量。所以需要使用偏导数。
梯度:包含所有偏导数的向量。
多维输入的情况下,<b>临界点</b>是梯度中所有元素都为0的点。
方向导数(directional derivative)是函数<i>f </i>在<b style="font-style: italic;">u </b>方向的斜率
为了最小化f,需要找到使f下降最快的方向。
f下降最快的方向在<b><i>u </i></b>与梯度方向相反时取得。
梯度向量指向上坡,负梯度方向指向下坡。
<b>梯度下降</b>:在负梯度方向上移动可以减小f。
学习率:确定步长的一个标量,通常是一个小常数。
通过计算,选择使方向导数消失的步长
在线搜索:计算多个步长结果,选择其中产生最小目标函数值的学习率
梯度下降在梯度的每一个元素为0时收敛
离散空间的梯度下降:爬山算法(hill climbing)
Beyond the Gradient: Jacobian and Hessian Matrix
Jacobian Matrix
包含所有输出对于所有输入的偏导数的矩阵
斜率
Hessian Matrix
多维输入下,f的二阶导数组成的矩阵
曲率
等价于梯度的Jacobian Matrix
Hessian Matrix是对称矩阵,可以分解为一组实特征值和特征向量的正交
特定方向<b><i>d</i></b> 上的二阶导数可以写成dTHd。
当d是H的一个特征值时,这个方向的二阶导数就是对应的特征值
其他方向,方向二阶导数是所有特征值的加权平均,与d夹角越小的特征向量具有越大的权重
最大特征值确定最大二阶导数
最小特征值确定最小二阶导数
通过(方向)二阶导数可以预期一个梯度下降步骤能表现的多好
对f(x)在当前点进行二阶泰勒展开并将附近的搜索点代入
搜索点可以表示为三项之和
函数原始值
函数斜率导致的预期改善
子主题
函数曲率导致的校正
这一项如果太大,梯度下降可能是向上移动的
gTHg小于等于0时,增加学习率将永远导致f下降
但学习率大的时候泰勒展开不准确,因此需要采取更加启发式的选择
目标函数能用二次函数很好地近似的情况下,Hessian的特征值决定了学习率的量级
二阶导数还可以用于确定一个临界点是否是局部极值点,或者是鞍点
f'(x)=0, f"(x)<0 -> 局部极大值点
f'(x)=0, f"(x)>0 -> 局部极小值点
f'(x)=0, f"(x)=0 -> 无法确定,可以是一个鞍点或平坦区域的一部分
多维的情况下,需要检测函数的所有二阶导数
用牛顿法等信息指导搜索方法解决Hessian矩阵的条件数很差时梯度下降法表现差的问题
该方法适用于局部极值点附近的收敛,但是无法解决鞍点附近的跳出
深度学习的背景下,限制函数满足Lipschitz连续或其导数满足Lipschitz连续,可以获得一些保证
这个属性允许量化我们的假设 - 梯度下降算法导致的输入的微小变化将使输出只产生微小变化
深度学习中的许多优化问题经过相对较小的修改之后就能满足Lipschitz连续
深度学习中大多数问题都难以表达为凸优化问题,但是一些算法的子模块可以满足
<span class="fontstyle0">Constrained Optimization</span> <br style="line-height: normal; text-align: -webkit-auto; text-size-adjust: auto;">
在x的某些集合S中寻找f(x)的极值
方法一
将约束考虑在内后简单得对梯度下降进行修改
方法二
设计一个不同的、无约束的优化问题
通用方法
Karush-Kuhn-Tucker方法
引入广义拉格朗日函数,改写目标函数
然后用KKT条件(必要非充分)描述约束优化问题的最优点
广义拉格朗日的梯度为0
所有关于x和KKT乘子的约束都满足
不等式约束具有“互补松弛性”
0 条评论
下一页