查看DL roam的源代码
←
DL roam
跳转到:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
== 如何找到最小值:gradient descent == 目的很明确, 我们可以通过找到Cost函数的极值(最小值)优化网络, 达到目的. 一般情况下 Cost函数会很复杂, 不过还是假设Cost函数很简单, 只有两个变量, 二维情况来看看. [[文件:Dl-good-cost.png]] 通过函数导数(函数)可以知道哪个点的导数为0, 即可知道极值位置. 不幸的是, 这个方法对一个变量有用, 但是对于拥有如此大量的变量的函数,毫无作用( (第一个hidenlayer就有768*5个weight变量). 但是, 有个物理学非常常用的刻画场性质的数学量, 梯度,非常适合渐近的解决这个问题. 梯度是对函数每个变量求偏导数, 最后得到一个向量,在这个向量方向上,函数变化率最大. 梯度的作用是可以求得Cost函数 C(v) 在某点处的变化量 ΔC(v) 这里用v来代Cost函数的向量(对任意函数适用), v=[v1,v2,....], 用偏导数计算某点处的函数变化率如下: [[文件:Dl-cost-delta.jpg]] 这个式子用梯度来写就是如下形式: ΔC≈∇C⋅Δv * ∇:梯度计算符号. 含义如下, 左上角的T是转置运算, 把向量变成矩阵(就是横向变成垂直) [[文件:Dl-grident.jpg]] * Δv 是变量的变化量, Δv≡(Δv1,Δv2)<sup>T</sup> 这不仅是能计算某点处的函数变化量ΔC, 同时是矩阵运算, 契合计算机. 有了这个工具, 就能够从任意一点开始(将所有w,b置为非零随机数), 通过下面方法逐步降低C(w,b)的取值. 既然 ΔC≈∇C⋅Δv 那么可以取一个Δv, 注意这里的Δv内含有所有维度上的一个值,对应各个w,b的调整量, 同时作为向量,在我们的简单的例子里, 即在三维表面上指明了一个方向. Δv=−η∇C 则在Δv这个变化方向上 ΔC≈−η∇C⋅∇C=−η‖∇C‖2 因为‖∇C‖<sup>2</sup>≥0 保证了 ΔC≤0, 即 Cost函数永不升高. 既然数学保证了Cost永不上升, 就可以把随机点 v挪动到如下位置: v→v′=v−η∇C 这个过程就是基于梯度的下降过程. η是比较小的一个正数, 叫做 learning rate (学习速率). 不断重复这个过程, 就有可能走到一个Cost的最小值区域. 第一个难题出来了. cost函数是定义在所有样本空间的一个平均值, 数量极大, 计算一个Δv估计就爆了. 数学又来救场子了. 可以在样本中任取m个, 来估算∇C. 叫做 随机梯度下降 法. 这随机的m个样本叫做mini-batch. 如果m足够大, 可以期望在这m个样本上的梯度基本上等于在所有样本上的∇C: [[文件:Dl-minibach-1.jpg]] 即: [[文件:Mini-bach-grident.jpg]] 如果Cost函数放大m倍, 可以忽略梯度的 1/m, 这样就可以对未知数量样本进行计算, 亦或这只是等价于η的调整.
返回到
DL roam
。
个人工具
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面