MLDS Lecture Notes
来源:互联网 发布:8月经济数据不及预期 编辑:程序博客网 时间:2024/05/17 00:49
一、文章来由
原博客来自:http://blog.csdn.net/scythe666/article/details/75265338
因为篇幅太长,不宜阅读与编辑,分篇如下
二、《一天搞懂深度学习》
300多页的PPT,台大教授写的好文章。
对应的视频地址
1、Lecture I: Introduction of Deep Learning
(1)machine learning≈找函数
training和testing过程
(2)单个神经网络
神经元连接起来构成网络
(3)deep 神经网络
Softmax层作为最后的output层,
找function的过程就是找一个函数让total loss最小
(4)deep比fat好
模块化 –>更少训练数据
2、Lecture II: Tips for Training DNN
如何在训练数据上效果更好
如何在test数据上效果更好
loss函数:Cross Entropy比Square Error要陡峭
(1)另一个激活函数,ReLU
因为多层的时候,激励函数算出来的值会越来越小,所以用ReLU把已经为0的值去掉
ReLU is a special cases of Maxout
(2)Learning Rates
If learning rate is too large, Total loss may not decrease
after each update
If learning rate is too small, Training would be too slow
一个更popular的做法是,开始大一点learning rate,之后减少
(3)动量
如果达到局部最优解,任然给一定机会向前探索(类似还给一定动量向前冲)
前馈控制(Feedforward Control) 就一般而言,管理中采取的 控制 可以在行动开始之前、 进行之中或结束之后进行,称为三种控制模型。第一种称为 前馈控制 或预先控制;第二种称为 同期控制 或过程控制;第三种称为 反馈控制 或事后控制。
Softmax
三、MLDS Lecture
李老师很棒的课,课程地址:http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS17.html
0x01 Machine Learning and having it deep and structured (2017,Spring)
(1)全联通的神经网络,通常很多不必要的参数,可以剪枝
(2)RNN用于处理sequence很好用,因为就是同一个神经元的重复。
特点:不好train,一旦train好了,在test上面效果不错,不易过拟合
(3)LSTM有一个变化很慢的部分,用于模拟记忆
还有金字塔型神经网络,对于不收敛的data效果很好,可并行
另一个现在也比较常用的方法 GRU,运算量较LSTM要小,且参数少不易过拟合
LSTM的各种架构的表现
(4)share参数的情况,称之为filter或kernel,卷积特性
通常receiptive filed 只在一个轴上滑动,且是包含完整的这个轴信息,通常是时间轴
0x02 Regression
loss function 是用来评判一个映射函数好不好的
将一个函数放入 loss function 即可算出这个函数的好坏,即w和b的好坏
梯度下降:如果梯度为负,则右移;梯度为正,则左移
如果将b和w对L的偏微分做方向,是等高线的法线方向
overfitting
更复杂的模型是简单模型的父集合,必然得到的loss会更低
如何解决over fitting的问题:
(1)拿到更多数据
(2)正则化
如果线性分类器的组合,也是线性分类器
正则化
正则化是希望一个更小的w,也就是一个“更平滑”的w,所谓的更平滑就是输入变化,但是output变化不是那么剧烈
0x03 Error来自何处
分别来自bias和variance
如果训练多次会出现完全不同的model参数,评估一个model的好坏—相当于交叉检验
bias是所有的f*的平均值,看是否接近靶心
简单model有较大的bias,复杂的model有较小的bias
直观解释起来,其实是一个简单的f,有较小的function space,复杂的f相反
回到问题
这两种作用同时对结果产生影响,决定了你的网络是否表现能力过于强或不够
这点很重要,对于model的改进的方向性问题
— Hung-yi Lee
对于不同的问题有不同的处理方法:
(1)如果underfitting(不能很好拟合样本点),就要换模型,加多参数,找再多数据都是没用的
(2)如果overfitting,应该加data(万能药),正则化(可能会伤害 bias)
有的时候不方便collect data,就自己generate假的,比如左转、右转角度,反转 — data augmentation
通常在bias和variance中做trade off
交叉验证
有可能自己测试的时候很好,但是真正测得时候很差
往往在private的data表现是差一些的,imagenet刷到3%真实生活中也不可能
正确的做法是:
(1)用training set先确定一个
(2)然后用所有的training set训练
(3)然后就确定用这个了,通常public的set会结果差一点
不建议会过去调model,但是发论文的时候几乎不可避免
N-ford Cross Validation
如果不相信某一次train与test的结果,就分很多种不同的forder
不去太care在public set上的结果,就算差也不去改,private set的结果往往比较像
0x04 Gradient Descent
Loss function 是一个function的function
把待测的function代入loss function,或者是决定待测function的参数带入
终极目标:找到特定参数,使得loss function最小 — 于是用梯度下降
将不同参数的偏微分串在一起,就叫作gradient
注:梯度是正的—代表x变大,loss变大,现在x就需要向负向移动;梯度是负的反之—所以红色方向和蓝色方向相反。
Tip1: Tuning your learning rate
adagrad
希望对不同参数,有不同的learning rate
每一个learning rate都除以一个σ,即过去所有微分值的root mean square
η是一个t相关参数
g是梯度
σ就是跟前面所有g相关的参数(参数depend参数)
adagrad可以简化最终公式,约分t的平均项
会越来越慢,因为有time decay
Adam比较稳定
在adagrad里面有个矛盾点,这里貌似梯度越大,会使得结果不是很正常的变大
原因如下:
直观解释是,造成反差
真正原因
是因为,对于单参数来说,的确gradient越大,结果距离最低点越大,但是如果多参数情况下,跨参数就不一定了
比如下图的a与c点比较的话,c比a梯度大,但是距离最低点小
best step这是因为,不仅仅与一次微分有关系,还与二次微分有关,且与二次微分成反比—二次微分小的话,update量应该大;否则应该小
如果要计算二次微分,过分耗时,adagrad就使用过去的mean来代替二次微分的作用,只用到一次微分,没有多增加多少计算量
tip2:Stochastic Gradient Descent 随机梯度下降
用一个example代替所有的example
tip3: Feature Scaling
对feature做统一的scaling
如果不做scaling,那在各个方向上的Learing rate很大不同(必须要adaptive的lr),而且不是指着最低点走,需要更多迭代次数才能搞定,没有那么有效率
如何做scaling
gradient decent 背后的原理
不一定每次更新θ,都会使loss变更小
那么如何找到每一步的最低点呢(每次更新θ应该如何更新呢)
多个参数的时候
发现这么理论上推导,得到的就是梯度下降
η与红圈半径成比例,也就是说learning rate要足够小才可以使loss每次都更低,但是实作是不可能的
当然也可以考虑泰勒二次项,比如:牛顿法,但是dl的时候几乎不用这些方法,因为计算量太大
0x05 Classification: Probabilistic Generative Model
通过样本估测分布—用于预测
这里的∑就是协方差矩阵
分类估计高斯分布—几率模型,也不一定高斯分布
模型参数不能太多,多了就容易overfitting
修改模型如下
如果进行修改,boundary是线性的(因为share了covariance matrix),所以也可称为 linear model
如果选择简单的几率模型,参数少的—bias大,variance小;否则反之
朴素贝叶斯
如果将每一个样本的选取都看作是独立的—协方差矩阵是对角矩阵
sigmoid的由来
为什么2个类∑相等的时候,他们的boundary会是linear
可以直接用ml的方法找到W与b的原因!
0x06 Classification: Logistic Regression
不同的w与b集合成为function set,后面P w,b(C1|x)指的是x属于C1的概率
logistic回归 VS linear回归
sigmoid是在0~1
目标:要找一组w与b,最大化描述training data的可能性
cross entropy
交叉熵见:http://blog.csdn.net/rtygbwwwerr/article/details/50778098
代表两个distribution有多接近,如果一摸一样的算出来是0,我们在logistics回归就是要找一个分布与真实分布差别最小的分布
为什么要用cross entropy,因为square error的时候,距离目标很远loss也很缓慢
Generative VS Discriminative
Generative — 用各种分布来假设,比如高斯分布
Discriminative — 直接使用logistics,用梯度计算
多分类
用softmax分类
其实二分类问题,用logistics做推导,也会得到softmax公式
但是logistics的线性特征,不能分类复杂的情况
当然这可以转到其他维度===>其实这个可以看成层叠的logistics回归
0x07 Introduction of Deep Learning
全链接网络
如果只是网络结构,只是定义了一个function set
- 做矩阵运算 — 就可以gpu加速
- 现在甚至有可学习的network structure
- 理论上,其实一个hiden layer就可以描述任意一个function
0x08 Backpropagation
链式法则
forward pass 和 backward pass
forward pass
backward pass
这里感觉很像放大器
关于前馈与反馈总结如图,很好的总结
0x09 dl Hello World
不是真正做total loss,而是对一个batch做total loss,将所有batch全部看一遍就是一个epoch,一般都要过几十个epoch
如果batch size为1,就等效于sgd —> 别人更新参数一次,他已经更新了100次了
但是实际上,batchsize越大,速度越快,因为用了gpu
有两种test,一种是带类标的,能算准确率,第二种是predict,不带类标,直接输出结果
0x0A tips for dl
如果train出来结果不好,应该
- 先在training data测试
- 再在testing data测试
- dropout 为了让test set变好
有哪些方法呢:
梯度弥散问题
- 靠近input,梯度很小,学习速度很慢
- 如果前面都不更新,output给后面的,后面更新也没用
- sigmoid导致,被压缩,信号被衰减
- 可以每个参数不同的learning rate — 类似adagrad
- 直接改active function — relu
- 整个变成一个更瘦小的linear function
- 因为output == input,就不会有梯度弥散问题
线性?这样不是又还原了吗?
事实上,只是小范围的线性,如果比较大的变化,就不是线性
Maxout
可以自己learn到那个activate function
比relu更强大
也不是可以学出所有的activation function,只能是piecewise linear(分段线性),这个取决于多少element
但是没办法微分,怎么train?
能够算参数的变化—> 对loss的变化 —> bp+gd
对于不同的train data,每个参数都可能被更新
对于rmsprop与adagrad
adagrad:将所有gradient的平方加起来
rmsprop:将新的gradient,加上所有旧的gradient平方和
L2 —> weight decay
L1
L2与L1有一定差别
- L1是减去(或加上)一个固定的值
- L2是乘以一个小于1的值,通常是0.99
目的都是为了让w趋向于0
- L2对于大参数的惩罚比较强,因为是乘法
- L1一视同仁
regularization对于神经网络用处没有那么大,对于svm很重要
因为initial的时候就很接近于0,那early stop就可以完成了,这么说regularization就多余了
dropout
每一次update参数前做 —> 更少的参数update,就会变化更大,也会朝更正确的方向update的更好
- 只在train
- test的时候weight与train不同
dropout类似严格的训练
dropout是一种终极版本的ensemble
- 相当于是每次都train的不同的network,然后融合起来
1-p% 只在linear才可以
0x0B CNN
FC就好比是圈了很大一块地(function set),但是范围大不好找
CNN是FC的一个子集,简化版
CNN的motivation(参数变少)
1、 通常前几个hidden layer只是找很简单的feature,不用看整个image —> 只是看小范围
2、相同的东西可以出现在图片的不同位置,比如鸟嘴,但是可以用同一个detector搞出来,可以用同一组参数
3、缩小图片,还是可以识别
filter的参数是被学出来的
决定到底用多大的卷积核,是依照dataset的构成,如果觉得feature可以被3*3的filter学出来,就用这么大
为什么filter可以做模式识别,因为如果跟它本身很契合,那output的值就更大,识别pattern
feature map
彩色图片的话,filter是一个立方体
为什么CNN是FC的一个子集,因为filter相当于只是部分连接了原图像
- 并且参数与FC相比,减少了很多,共用了很多参数
max pooling 与 maxout 类似
conv+maxpooling —> 足够小了,就拉平
通常越靠近output的layer,filter越多
对于high layer,不能直接可视化,但是可以通过看他什么时候被激活
两种可视化分析手段
(1)提出每个neuron的可视化图,用梯度上升求什么样的图片使neuron最兴奋
(2)计算每张图对最后predict分数的影响
采用遮挡的方法(相比于上图中的求微分方法)会更容易实现
deep dream
是将cnn看到的东西更夸张化,让更正的地方更正,更负的地方更负
分成两个输出,照一张图,从content像左图,从style像右图
alpha go,没有使用max pooling
语音辨识可以把图像,当作image输入
0x0C Why deep
其实如果deep和不deep的直接比较,是不公平的,因为参数不同 —> 所以需要将deep拉成矮胖的,参数变成一样多
那为什么deep好
类似于编程模组化,有一些可以重用
比如长发男生data不多,但是长发人多,所以basic的feature可以学的很好
deep learning —> 可以用少量的data来做train,跟big data是相反的
只有一层hidden layer就可以拟合所有的函数,但是没有效率
多层类似剪窗花
End to End training
不告诉model里面长什么样,完全自己学习
不用什么流水线都要人来定义了
0x0D Transfer Learning
如果数据量够多,尽量 fine-tune 所有层
将data**不是直接**与task相关的,比如老虎VS大象,与猫VS狗,可能没有足够的data
source data:量大,但是不直接相关
target data:量小
都有label
conservative training 保守训练
使新旧model尽可能接近 —> 旧的model是新的regularization
layer transfer 只train某些层的参数
但是应该transfer哪一个?
语音:第一层,后面的可以转化为差不多
image:前面固定
multitask learning
progressive neuron networks
将网络A的output也当作另一个网络的input
防止network忘记前一个task
如果source有label,target没有
domain-adversarial traning
gan的一种,将source和target转到同一个domain
为了让两种domain的feature有交集
- 绿色只支持蓝色,不支持红色(每次都在gradient上乘上一个负号)
- 红色网络需要挣扎
zero-shot learning
如果task都不同
- 找出比动物更小的单位
- 用这些特征作为input
不仅要f与g越近越好,还要与其他类越远要好
如果没有k这个margin,machine就会花很多力气去将不同类的拉远
0x0E RNN
有记忆力,每一次hidden layer都会存到内存,也会被考虑进去
input 顺序不同,结果也会不一样
语音识别,filling slot的问题如下
不同种的rnn
也可以bidirectional,比如正向读,然后反向读
这样会有更大的视野,信息会更多
会使用sigmoid方法
现在做RNN,基本就是LSTM
RNN 的 error surface 很崎岖,不是很平,就是很陡峭,很容易跑飞,所以用clipping — 大于某个值,就截断到这个值
LSTM 相对于传统 RNN,可以解决梯度弥散的问题,但是不能解决梯度爆炸
因为,LSTM是过去的值一直对内存产生影响,而不是format,但是RNN是直接format
GRU比LSTM简单,思想是“旧的不去,新的不来”,如果input gate打开,forget gate就关闭,这样就会format
RNN 处理声音讯号的encoder与decoder:
attention-based model
0x0F Semi-supervised learning
semi-supervised learning 通常情况是 unlabelled data 更多,分为2种:
(1)transductive learning,unlabelled data就是testing set(因为没有label,用feature没问题)
(2)inductive learning:unlabelled data不是testing set
unlable data的出现,会影响之前的决策
semi-supervised 的 generative model
不断通过unlabelled data来更新模型
核心想法:相当于unlabelled data不是hard属于c1还是c2,而是看概率
u是mean,∑是co-variance
EM algorithm,step1是E,step2是M
EM算法:
作者:史兴链接:https://www.zhihu.com/question/27976634/answer/39132183来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。理论:简版:猜(E-step),反思(M-step),重复;啰嗦版:你知道一些东西(观察的到的数据), 你不知道一些东西(观察不到的),你很好奇,想知道点那些不了解的东西。怎么办呢,你就根据一些假设(parameter)先猜(E-step),把那些不知道的东西都猜出来,假装你全都知道了; 然后有了这些猜出来的数据,你反思一下,更新一下你的假设(parameter), 让你观察到的数据更加可能(Maximize likelihood; M-stemp); 然后再猜,在反思,最后,你就得到了一个可以解释整个数据的假设了。1. 注意,你猜的时候,要尽可能的猜遍所有情况,然后求期望(Expected);就是你不能仅仅猜一个个例,而是要猜出来整个宇宙;2. 为什么要猜,因为反思的时候,知道全部的东西比较好。(就是P(X,Z)要比P(X)好优化一些。Z是hidden states)3. 最后你得到什么了?你得到了一个可以解释数据的假设,可能有好多假设都能解释数据,可能别的假设更好。不过没关系,有总比没有强,知足吧。(你陷入到local minimum了)====实践:背景:公司有很多领导=[A总,刘总,C总],同时有很多漂亮的女职员=[小甲,小章,小乙]。(请勿对号入座)你迫切的怀疑这些老总跟这些女职员有问题。为了科学的验证你的猜想,你进行了细致的观察。于是,观察数据:1)A总,小甲,小乙一起出门了;2)刘总,小甲,小章一起出门了;3)刘总,小章,小乙一起出门了;4)C总,小乙一起出门了;收集到了数据,你开始了神秘的EM计算:初始化,你觉得三个老总一样帅,一样有钱,三个美女一样漂亮,每个人都可能跟每个人有关系。所以,每个老总跟每个女职员“有问题”的概率都是1/3;这样,(E step)1) A总跟小甲出去过了 1/2 * 1/3 = 1/6 次,跟小乙也出去了1/6次;(所谓的fractional count)2)刘总跟小甲,小章也都出去了1/6次3)刘总跟小乙,小章又出去了1/6次4)C总跟小乙出去了1/3次总计,A总跟小甲出去了1/6次,跟小乙也出去了1/6次 ; 刘总跟小甲,小乙出去了1/6次,跟小章出去了1/3次;C总跟小章出去了1/3次;你开始跟新你的八卦了(M step), A总跟小甲,小乙有问题的概率都是1/6 / (1/6 + 1/6) = 1/2; 刘总跟小甲,小乙有问题的概率是1/6 / (1/6+1/6+1/6+1/6) = 1/4; 跟小章有问题的概率是(1/6+1/6)/(1/6 * 4) = 1/2;C总跟小乙有问题的概率是 1。然后,你有开始根据最新的概率计算了;(E-step)1)A总跟小甲出去了 1/2 * 1/2 = 1/4 次,跟小乙也出去 1/4 次;2)刘总跟小甲出去了1/2 * 1/4 = 1/12 次, 跟小章出去了 1/2 * 1/2 = 1/4 次;3)刘总跟小乙出去了1/2 * 1/4 = 1/12 次, 跟小章又出去了 1/2 * 1/2 = 1/4 次;4)C总跟小乙出去了1次;重新反思你的八卦(M-step):A总跟小甲,小乙有问题的概率都是1/4/ (1/4 + 1/4) = 1/2; B总跟小甲,小乙是 1/12 / (1/12 + 1/4 + 1/4 + 1/12) = 1/8 ; 跟小章是 3/4 ;C总跟小乙的概率是1。你继续计算,反思,总之,最后,你得到了真相!(马总表示我早就知道真相了)你知道了这些老总的真相,可以开始学习机器翻译了。
那么为什么要这么做呢,目标是likely hood最大,因为加入了unlabelled data
low density separation 非黑即白(class之间有明显的界限,说白了通过unlabelled data来分界)
self-training
将unlabelled data加入进来,其实Jianming老师那篇文章就是这种思想
regretion不能用这招,因为如果是soft label概率不会迭代
类似与generative model方法,只是变成了hard label
那如果用deep learning的方法,到底应该用soft label还是hard label呢?
答:一定要hard,因为soft本来就是算出来的,还是原封不动放进去,就不会有贡献
self-training进阶版:entropy-based regularization(假设output很集中)
entropy衡量的是是否集中,越小越好
其实就是在loss后加一个entropy的正则项,给出来的几率越集中,就entropy就越小
self-supervised SVM
穷举所有unlabelled data的可能性,要最大的margin但是最小的 error
也不是完全穷举,看看哪一种会使几率变大,变大就改
smoothness assumption 近朱者赤近墨者黑
如果x像(在high density),他们的label也像,如下图
图片信息可以cluster,但是图片信息一般很难cluster,要用到其他encoder方法,先抽feature,然后cluster
在文件分类里面有大用
graph-based 方法来表达 high density
graph-based的图构建方法
一张图内部的所有点,会传染
但是data要够多
如何定量分析有多smooth?
用graph Laplacian的方法来简化计算
better representation 去芜存菁化繁为简
0x10 unsupervised learning1 PCA
分为两种,一种是有unlabelled data,要得到抽象的输出
另一种是通过code来generate输出
clustering 聚类
k means
在train data里面随机挑k个中心
HAC
dimension reduction
用数字表示,而不只是粗分类
能在2d做,就不必在3d空间做
很多时候根本用不到高维空间
如何做降维
那么如何做呢
多维度映射
pca如何找w呢(warning of math)
pca的直观理解
通过pca找出来的,就可以让error最小
跟svd分解相关,参考线代
auto encoder
其实可以用nn来表示,但是通过nn的方式找出来的解,和pca找出来的不一样,因为不可能是正交的,但是可以deep
pca也是有问题的
1、可能投影的方向不对,因为只是让范围最大,lda是supervised
2、另外是线性的
应用
在mnist数据集
face数据集
但是为什么不是部分呢,看起来像完整的脸
因为pca允许负值,也就是说可以先复杂的图片,然后把多余的部分删除
NMF
Matrix Factorization
但是通常背后的属性是不可知的
所以,需要近似来求,可以用svd分解
但是,通常情况下,会有一些missing的数据,可以把问好数据当0,但是这么做不太好
这个时候就直接用gradient decent来求,避开问好的数据
算出来以后,就可以预测 —> 推荐系统
可以更精确的描述,比如,加多参数
加正则项 —> 如果想要一个人非黑即白,就加L1正则
在领域中的应用
0x11 Neighbor Embedding
Locally Linear Embedding (LLE)
高维空间,neighbor关系,在低维空间中保存不变
Laplacian Eigenmaps
根据图中来决定距离
还有一个constraint是需要降维后,data point需要填满整个空间
以上两种方法都是,在高维空间中如何两个data point相近,那么在低维空间中也需要相近,但是没有说如果原来就相聚很远的点现在怎么样了,这样容易导致本来不相干的点,现在叠在一起
所以对于lle可能可以把像的东西放在一起,但是不能把不同的东西很好的区分开
t-SNE
解决了上面提到的问题
夸张化距离远的点
延伸阅读
0x12 Auto-encoder
- MLDS Lecture Notes
- MLDS Lecture Notes Ⅱ
- CS229 Lecture notes 1
- Lecture Notes: Macros
- Scipy Lecture Notes
- CS229 Lecture notes
- Week 9 Lecture Notes
- Lecture Notes on Static Analysis
- MIT Computer Graphics Lecture Notes
- Lecture Notes in Computer Science
- R1 Lecture 02 Class Notes
- R1 Lecture 04 Class Notes
- R1 Lecture 05 Class Notes
- R1 Lecture 06 Class Notes
- R1 Lecture 07 Class Notes
- R1 Lecture 08 Class Notes
- R1 Lecture 09 Class Notes
- R1 Lecture 10 Class Notes
- Mac 下 PostgreSQL 的安装与使用
- 锁优化(5种方法)
- [置顶] 微信小程序自定义对话框+弹出和隐藏动画详解
- Codeforces 385C Bear and Prime Numbers【巧妙用埃筛】
- G1垃圾收集器入门
- MLDS Lecture Notes
- 自定义SeekBar
- mysql(八)函数
- HDU 2017 多校联合训练赛6 1008 6103 Kirinriki 优美的暴力
- io流面试题简单实现的一些方法
- selenium环境配置报错2则
- Android开发之Android Studio在debian上的安装
- spring 各个jar详解以及在maven中的配置
- 与海康8200平台进行GB28181对接时的一些注意事项