深度学习进阶
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的结果是有帮助的。
Task2.1 自适应学习率
Training stuck != Small Gradient
Training stuck 是因为遇到了 critical point,但事实真的如此吗?
其实多数时候在遇到 critical point 之前,loss就很难再下降,训练就已经停止了。
我们可以通过上面这个例子,得证 我们需要 更好的、定制化的 learning rate;
在上面的例子中,我们想要loss从 black point 到 叉叉 的位置;
我们可以通过图片下方两张图发现,即使learning rate到了很小的一个数值(更新了100000次参数),也很难达到 叉叉。
那我们必须要更好的 Gradient Descent 的版本
--------> learning rate 应该为每一个参数客制化
不同的参数 需要 什么样的learning rate呢?
我们比上这个 sigma t 。
最后得到这个公式:
Adagrad 梯度下降算法
蓝-坡度缓 ---> loss小 ---> gradient小 ---> sigma小 ---> update时移动量较多
绿-坡度缓 ---> loss大 ---> gradient大 ---> sigma大 ---> update时移动量较少
这样的话,learning rate 还存在什么问题呢?
Error Surface can be more complex ---> 动态调整
坡度陡峭 ---> smaller learning rat
坡度平缓 ---> larger learning rate
传奇方法 -------- RMSProp
通过设定 alpha 的值,可以实现对 sigma 以及 step 的控制。
拓展:Adam : RMSProp + Momentum
得到结果:
纵轴方向上,gradient算出来很小,所以累积了很小的sigma,累计到一个地步之后,step突然就会变很大,走到规定比较大的地方时,sigma就会变大,那么意味着它不会一直震荡,会继续向前走,直到下一个累积节点。
那么如何解决这个问题呢?
Learning Rate Scheduling (两种方式)
Warm up 在多个 network 中都有提到
“15年(上古时代)的文章已提到“ / transformer 也用一个公式提到了
拓展: Refer to RAdam
Summary of Optimization
注意:平方根只在乎大小、无方向,所以不抵消!
OK, 加油吧。
Task2.2 分类
分类与回归的关系
假设三个类本身没有特定的关系,那么我们需要引入 独热向量 来表示类。
Class as one-hot vector
Softmax的分类
softmax 就是把 y 里面可以放任何值这件事情 改成了 0到1之间。
大的更大,小得更小
总之,改变损失函数可以改变优化的难度。
Task3.1 Batch Normalization 批量归一化
Error surface 在比较崎岖的时候很难train,所以我们需要把它”铲平“。
----> 引入Batch normalization
Changing Landscape
当每一个 dimension 的 scale 值差距很大时,就会产生左图这样的 Error surface;
----> 给不同的 dimension 的 scale 值同样的数值范围,制造比较好的 Error surface,更好training。 like 右图。
Feature Normalization
做完 normalization ,means ---> 0, variances ---> 1;
----> 所有的不同的 dimension 的 scale 就都在 0 上下了。
其实在 z / a 做 feature normalization,效果差不多;如果选择 sigmoid,那么推荐在 z 做 feature normalization;
如何对 z 做 feature normalization 呢?
先算 mu / sigma;
做完 feature normalization,这个时候Example1 x1 中的 z1 变化,那么 z2,z3 也跟着变化,Example2 3也会变化。
----> 这样就变成了 一个巨大的 network 来处理一堆 examples;
----> Batch Normalization Cool!
引入 gamma / beta;初始情况下,gamma vector为 1 / beta vector为 0;
现实中的 batch normalization - Testing
Task 3.2 卷积神经网络(Convolutional Neural Networks,CNN)
专用于影像方面
第一种介绍方式
Image Classification
能辨识多少种类的东西,取决于最右侧的 y 长度有多少;
如果它的长度有2000,那么就说明它可以辨识出2000种事物。
y‘ 是 model 做判断后输出的值;与 y 作比较,得出的结果 如果是 1,则是 cat。
100(pixels) x 100 x 3channels 把 组成图片的这些数字列出来排成一排,就是一个巨大的向量。而这个向量可以作为 network的输入。每一个 pixel 有rgb 3个颜色组成,每一维的数值就代表了某一个位置的某一个颜色的强度。
Observation 1
Identifying some critical patterns ----> 抓住重要的特征(人也一样)
每一个neural都要去试图抓住它的pattern。
----> 神经网络结合这些patterns可以告诉你说,它看到了一只鸟。
Simplification 1 - 简化
neural 守备的区域可以重叠,可以有多个 neural 守备同一个 receptive field;
形成新的守备范围 所移动的距离 叫作 stride(设1 / 2就好)。超出了影像的范围叫做 padding。
Simplification 1 - Typical Setting
Observation 2
相同的特征可能出现在不同图片的不同位置----> 一定有一个 neural 能抓住这种特征。
难道每个守备区域都需要一个 “beak” detector。
Simplification 2
parameter sharing 共享参数
虽然参数(w1等)相同,但它们的守备位置不同(输入x不同),所以它们的输出不可能相同。让一部分neurons共享参数。
----> 这就意味着,守备相同区域的 neurons 不能共享参数(因为它们的输出相同)。
Simplification 2 - Typical Setting
每一个守备区域有 64个neurons;
每一个守备区域只有一组参数;第一个守备区域中第一个neuron和第二个守备区域中第一个neuron的 参数相同。(下图用颜色区分,且用 filter 标识)
Benefit of Convolutional Layer
可发现 CNN 的 model bias 比较大,虽然大,但它专为影像设计,所以不算问题。
第二种介绍方式
Convolutional Layer
Convolutional Layer中有很多 filter ;
filter就是一个一个的 tensor 组成,其中的数值就是model中的parameter(通过gradient descent来找到);下图假设这些parameter数值已找到。
当 像上图连成一条线时,值最大,为3。根据输出也可反推。
两种方式的比较
笔记很多没有记全,今后会细化总结,继续上传。