深度学习进阶
Task1.1 局部最小值 local minima 与 鞍点 saddle point
如何得知走到critical point时,这个点是local minima / local maxima / saddle point?
泰勒展开-Tayler Series Approximation
Error Surface 在sita附近可以写成这个样子。
g 次微分; H 里面有二次微分项;
当没有g这一项时,意味着走到 critical point ,再通过红色H这项来判断状态。
这里我们可以看到,只要我们判断出 Hessian 的正负 那么我们就可以判断到底是 local minima / local maxima / saddle point 了
从图中去判断 local minima / local maxima / saddle point
原点肯定是一个 critical point
-----> 算出 Hessian(有正有负)--> saddle point
(学会去算,忘光了都!)
(以下的方式计算量很大,以后会有更好的方法)
卡在 saddle point 并不可怕
沿着eigenvector的方向更新参数,可以告诉你下一步向哪个方向移动。
local minima V.S. saddle point
谁更常见呢?
二维空间中,local minima 相当的多;但在更高维的空间中,它会有更多路可以走时,它是不是就是saddle point了呢?
维度越高,走的路就越多呢?
local minima并没有那么常见;
当你的参数不再更新,其实往往是卡在了一个saddle point上。
小悬念
卡住了,那么如何解决呢?
Task1.2 批量 batch 和 动量 Momentum
在把所有资料分成一个一个batch的时候,第一个epoch会分成一种batch,下一个epoch会分成另一种batch;
那么哪些资料在同一个batch中 ----> 每一个epoch不一样 =====> Shuffle
为什么用batch?
左边是全batch(就相当于没用batch),右边是用了一个batch。
运用Batch的话,相比较而言,冷却时间短,但噪点多(预计不准)。(不准确的说法)
GPU平行运算,对于batch size在1000以内来说,其实用不用batch,时间都是相似的;但当batch size来到1000以上时,时间会越来越长(但也不过10s)
考虑平行运算时,一个epoch中大的batch花的时间反而比较少。
走noisy的方式,反而对training的结果是有帮助的。