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)刘总,小章,小乙一起出门了;4C总,小乙一起出门了;收集到了数据,你开始了神秘的EM计算:初始化,你觉得三个老总一样帅,一样有钱,三个美女一样漂亮,每个人都可能跟每个人有关系。所以,每个老总跟每个女职员“有问题”的概率都是1/3;这样,(E step)1) A总跟小甲出去过了 1/2 * 1/3 = 1/6 次,跟小乙也出去了1/6次;(所谓的fractional count)2)刘总跟小甲,小章也都出去了1/63)刘总跟小乙,小章又出去了1/64C总跟小乙出去了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 次;4C总跟小乙出去了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

这里写图片描述

这里写图片描述

原创粉丝点击