desc | |
梯度与斜率区别 |
斜率是数值没有方向,核心表示的是速率
梯度有方向的,核心想要表示的是某一个方向
梯度并不是简单的 y 对于每一个维度上的偏导的 拼接组合,即:
grad(f) = (df/dx·i, df/dy·j, df/dz·k)
其中 后面缀的 一定是 i j k 这三个基就可以了
因为具体的方向问题,由于前面的df/dx,df/dy,df/dz 三个数值决定的
|
为什么 梯度方向是 函数增加最快的方法 |
先建立一个概念:方向导数
方向导数的属性:是一个标量,即 标量函数 —> 标量的方向导数
含义:函数沿着这个方向的增长率
定义式:
推导式:
(第一处 等价变换)
这两个式子是等价的
确切的说,因为 方向导数的定义式可以拆成 这个框架,所以才会定义出
df/dx·i, df/dy·j, df/dz·k 是梯度
然后 再进一步等价操作发现:
fx(x0, y0) · cosα + fy(x0, y0) · cosβ
= (fx(x0, y0), fy(x0, y0)) · (cosα, cosβ) (第二处 等价变换)
相当于是两个 向量的点积
这里的 fx(x0, y0), fy(x0, y0) cosα, cosβ 都是相对于原点的方向,引入 基向量 i j,表示为:
= (fx(x0, y0)i, fy(x0, y0)j ) · (cosαi , cosβj )
再对上面的式子再 做进一步的等价操作发现:
|| fx(x0, y0)i, fy(x0, y0)j || · ||cosαi , cosβj|| · cosΘ (第三处 等价变换)
其中 Θ是 方向 l 与 (fx(x0, y0)i, fy(x0, y0)j) 的夹角,其中 对于 (fx(x0, y0)i, fy(x0, y0)j )而言,其前面的系数决定其具体方向
夹角为0,至最大,即 方向导数最大
从 点积的角度:如果 fx(x0, y0) 为负数,那么 cosα 也要为负数
如果 fy(x0, y0) 为负数,那么 cosβ 也要为负数
这样 点积之后 值一定是 大于等于 0 的
真因为是 有这个平方的关系,导致了 梯度方向的 方向导数一定是正数
因为 梯度方向的方向导数是 A^2 + B^2 的关系
summary:
· 从梯度的定义式 到 梯度的推导式发现,如果 选一个方向 与 (fx(x0, y0)i, fy(x0, y0)j ) 方向一致,那么,此时的 方向导数(标量)为正数,且是最大的
· 为正数,代表了 函数增加,由 A^2 决定(这个地方解释了为什么此时的方向导数一定是正数)
· 为最大,由 Θ=0 决定,从 ||A||·||B||·cosΘ 的角度去思考的
注意,i j 确实代表了 坐标轴的方向,但是 (fx(x0, y0)i, fy(x0,y0)j) 由于α 和 β值的不同,得到一个不同的方向
所以,
才要求 cosα, cosβ 在数值上 与fx(x0,y0 ), fy(x0,y0) 成比例,这是 方向一致的 数学等价表达【观点】
要求 某方向与梯度方向一致,等价于
要求 cosα, cosβ 在数值上 与 fx(x0,y0 ), fy(x0,y0) 成比例
此时的结论:
grad(f) = fx'·i + fy'·j,这个值的属性表示的是一个方向,i j 仅仅是基,方向由 fx' 和 fy' 决定,沿这个方向,方向导数值大于零且最大
refer
同济高数,第九章第七节
|
梯度的分类:
|
数值梯度 和 解析梯度
解析梯度 即用数学求导的方法求得
数值梯度 用数值方法计算:两点法逼近,即 f(x+σ) - f(x)/ σ
此时直接用一个 很小的值 就可以计算了,而省去了 lim 的极限操作
|
如何用两点法求数值
# 不仅仅是 数值偏导
更是数值梯度
|
数值梯度直接利用的定义公式,不需要知道函数定义,直接用两个点算就可以了
这里的代码, x 是一维度的。
所以 这个 while 循环 和 iter 迭代化,用最 naive 的方法替代就是:
for i in xrange(len(x)): 每次操作 x[i] 就可以了
|
数学优化与 机器学习中 优化的 对应关系 |
数学中的 优化问题是 y =f(x1, x2) 的形式来优化
机器学习中的优化问题: cost = f(w1, w2) 即:
目标值是 cost,而不是 pred值
自变量是 w,而不是input_data_x1, input_data_x2
找好这个对应关系就好理解了
容易产生迷惑的点就是:
机器学习中往往把 input 表示为 x,以至于你误以为 要对 x求导,其实不是啊,是对参数w 求导
这里的 x 是常量,是参数,不是变量,变量是 w
机器学习中,比如神经网络的最终值,其实就是 cost值,或者是似然值,已经是你待优化的值了,对于 ||y-cost||2 就可以当成 网络中的一个节点操作。所以 网络的输出就是 待优化函数,就像 这个图 表示的就是单纯的要 优化 sigmoid 函数一样
|
本节课 |
推导了 神经网络的 的BP 过程
给出了一个 在图形上 形式化的 链式法则的过程
|
反向传播 |
1. 本质就是一个链式法则
2. 所谓的残差传递 ,是因为目标函数就是误差值,所以导数被称为残差
3. 在链式求导过程中,前面乘的那些导数 叫做 反向系数
4. 反正从 pred 到 cost, 就是多了一 node 节点而已
|
符号说明 |
⊙是一般是指同或
在论文里面可能是 element-wise 乘法
|
引入指示函数的作用 |
可以给 分段函数 得到 解析导数
|
与导数相关的矩阵 |
一阶梯度是 vector
二阶梯度是 Hessian 矩阵
雅克比矩阵,是 从 m 维 到 n维度的映射
所以才有:m*n 的矩阵
|
关于caffe | 其实caffe不需要做什么编码工作,用起来比较简单,当然,我指的是图像。 |
docker 在 DL中的应用 |
caffe, Torch同样也可以使用Docker的镜像来安装到容器里
作用:免去搭建环境的烦恼
所以李勇 说 安装caffe 一个星期的配置时间,其实可以用 docker 来做
|
倒三角的微分算子表示 |
input 标量, output 矢量
视它为一个函数,一个指定的操作过程
而 方向导数就是 它的输出的 各个维度上的加和,对应乘方向夹角
|
你自己可以写一个深度学习的框架 |
现在的你 可以自己实现 这个过程了
2016/5/21 星期六 22:44
只要解决了 这个求导的过程
第一种是:数值梯度
第二种是:层层导数
|