在整个maching learning的第三个步骤要找一个最好的function。在第二步是定义了一个 Loss function L,这个L是一个function的fuction
求完偏微分之后得到的向量就是Gradient(黄色部分)
随机找一个起始点0,它的等高线的法线方向就是gradient,是一个vector,之后把这个gradient乘上deep learning再取负号得到它更新的移动方向,1,以此类推。先算gradient再决定要走的方向。
eg可以把learning rate设置成一个依赖于次数t的function,这样再经历t次之后,分母t+1越大,得到的learning rate就会越小
自动调learning rate的方法
通常learning rate随着参数的变化,越来越小。最好的状态是不同参数给不同的learning rate
通过均方根实现对不同参数设置不同learning rate。wt这一点的微分是gt
σt是过去所有微分的root mean square(其计算方法为将平方误差求平均值,然后取平方根)
所以使用adagrad 更新参数的时候公式就长这样
斜率gt(微分gt)越大算出来的参数更新的就越快。
adagrad在分母里又具备了gt,这样的话gt越大,参数更新就越小,与之前的有冲突。但是adagrad在分母中包含这个微分,就是为了造成反差的效果。把过去所有的gradient的平方相加再相除,来看过去的gradient的反差有多大。
只有一个参数的时候才成立。以二次函数图像为例,最低点到随机点x0之间,最好的一步就是x0+2ab,简化同分得到绿色箭头右侧公式。下面的图像是对二次函数求微分得到的图像。所以在某一点的微分越大,距离原点越远。
w1的error surface(曲面误差)图像如蓝色所示,在这条图像上,如果比较a和b,那就是刚才那样的规律,斜率越大距离远点越远。w2的图像为绿色部分,值比较cd两点也是同理。但如果是跨参数比较,ac两点这个规律就不适用。
最好的一步这个公式里还有一个分母2a,这个2a就是对二次函数进行二次微分的来的。所以如果是跨参数来比较的话就需要一次微分和二次微分一起看。虽然c的斜率比a大,但是它的二次微分也比a大。谷比蓝色图像的谷要尖。
Stochastic Gradient Descent
和Gradient Descent不一样的是它只需要随机取一个点xn,只计算这个点的loss就可以而不是计算所有训练数据的损失。看一个example就更新一个参数。
Gradient一下把所有的example全部看完后更新参数,所以它是比较稳定。Stochastic Gradient Descent是看到一个example就更新一次参数。
Feature Scaling
不同的特征有相同的范围。比如x1远比x2小,所以把x2缩小使x1x2有相同的范围。
左边:w2比w1对y的影响要大,所以w2方向上会有尖锐的谷,w1方向上就会比较平滑
右边:w1,w2对y的影响差不多所以会得到接近圆形的loss图像
右边计算gradient更新参数要比左边方便
算出来微分为0的时候不一定就是loss最小的时候,也有可能在高原但是微分值为0