《Machine Learning - 李宏毅》视频笔记(完结)
https://www.bilibili.com/video/av65521101
因为之前有些基础,对于本视频课程的学习仅仅记录一些要点.目前只学习涉及深度学习和对抗攻击的部分.
1 Regression
-
通过Gradient Descent找到Loss Function的局部最优点.Gradient就是Loss Function对每个参数的偏导数排成的向量.
-
如果Loss Function是Convex的,即凸函数,那么Gradient Descent一定可以找到全局最优点.
-
过于复杂的model就会Overfitting.
-
类别型特征可以通过δ函数变成Linear Model.
-
对于特征的处理,可以通过Domain Knowledge或者Regularization.
-
Regularization的一种简单方式是在Loss Function中加入λΣ(wi)2,因为越小的w越平滑,即对变化越不敏感.
-
Regularization一般不考虑bias,因为它只影响Loss Function的上下移动,而与是否平滑无关.
-
可以给w和b设定不同的Learning Rate来加强拟合效果.
2 Where does the error come from?
-
Error = Bias + Variance
-
Bias即偏差,反映模型的输出与真实值之间的误差.模型复杂度越低,Bias越高.
-
Bias高导致的Error即Underfitting,一般需要优化模型.
-
Variance即方差,反映模型的输出结果与输出期望之间的误差,即模型稳定性.模型复杂度越高,Variance越高.
-
Variance高导致的Error即Overfitting,一般可以增加更多训练数据或者Regularization.
-
Cross Validation就是将Training Set分为Training Set和Validation Set.
-
K-fold Cross Validation就是把Training Set分成K份,每次用其中一份做Validation Set,共做K次,取平均值作为某个模型的最终Error.
3 Gradient Descent
-
Learning Rate太小会导致参数下降太慢,太大会导致可能无法到达最优点.一般会将Learning Rate设为随迭代次数越来越小.
-
AdaGrad:
-
给予每个参数一个独立的Learning Rate.每次更新wnew = wold - η/σ*g, 其中η是时间函数, σ是w的过去所有偏导数的均方根Root Mean Square(包含本次).
-
AdaGrad可以直观地理解为突出Gradient的反差,例如一个之前数值较大的Gradient突然变小,AdaGrad会使这个小的数字更小.
-
Gradient Descent的原理可以理解为:函数图像上某个点到该函数最小值的距离正比于它的一次微分,反比于它的二次微分.AdaGrad就是利用了这个原理,用之前微分值的RMS近似二次微分值.
-
-
Stochastic Gradient Descent每次只考虑一个example的loss funciton,对它进行Gradient Descent.
-
Feature Scaling即将不同Features的数值缩放到同一尺度.这样每次迭代都有更大可能性最优点的方向移动.
-
用泰勒级数的思想来看Graident Descent,当learning rate足够小时才能保证迭代都会使Loss变小.
-
Graident Descent会在微分值接近0的地方停止,但这个点可能只是一个局部最优值或是一个鞍点.
4 Classification
-
Generative Model对x和y的分布进行建模,因此可以生成数据.
-
使用Maximum Likelihood极大似然估计去拟合出一个高斯分布的μ和Σ,就可以对数据集中不存在的分类进行预测.
-
最常见的Loss Function是Cross Entropy.
5 Logistic Regression
-
Sigmoid Function:σ(z) = 1 / (1 + exp(-z), z=wx+b.
-
Logistic Regression即找出使得L(w,b)最大的w和b,其中L是Training Data的数据分布,方法同样是Gradient Descent.
-
这种方法称为Discriminative Model,不直接去对分布进行建模.它的表现常常比Generative Model更好.但在Training Data很少的情况下Generative Models更好.
-
Multi-class Classification的一种基本方法是Softmax函数,它计算每个类别的ez(z=wx+b), 并且将这个值除以Σez作为输出概率y.
-
Logistic Regression在二分类问题上就是一条直线,因此无法划分某些情况,此时可以做Feature Transformation,或者将多个Logistics Regression级联起来,也就是深度学习,此时的一个单元也称为Perceptron或者Neuron.
6 Brief Introduction of Deep Learning
-
Neuron Network可以分为Input Layer, Hidden Layer, Output Layer,其中Hidden Layer就做了Feature Transformation的工作,Output Layer一般需要加一个Softmax.
-
每层Layer之间的每个Neuron都两两连接的网络叫做Fully Connect Network.
-
每层Layer的运算可以看作是σ(Wx+b)的矩阵运算,因此可以使用GPU加速.
-
Deep Learning需要做的主要工作就是设计网络的结构,如Layer的数量和Neuron的数量.
7 Backpropagation
-
Backpropagation通过Chain Rule链式法则将偏导数分为Forward Pass和Backward Pass两部分.Forward Pass就等于对于该Neuron的Input.Backward Pass通过从最后的Output Layer向前计算得到,即反向传播.
8 “Hello World” of Deep Learning
-
一般使用库时,只需设置每层的Neuron数量和层数即可.
-
训练时会将Training Data分为多个Batch,其中的数据随机挑选,直到将所有Batch训练完为止.这个流程叫做一个Epoch.Batch_size和Epoch次数也是重要的参数.
-
Mini-Batch GD避免了SGD所需训练时间过长的缺点(因为使用了并行运算),又避免Large Batch Size训练效果差的缺点.
9 Tips for Training DNN
-
DL不同于SVM等凸优化机器学习方法,它在Training Data上的结果就可能不好,因此需要特别关注.
-
Vanishing Gradient梯度消失是指Network 很深的时候,越深的Neuron的梯度越大,因此学习越快,而此时靠近Input Layer的Neuron还远远没有拟合,就导致后面的Neuron的拟合是基于前面的Neuron的接近于随机值的Input去拟合,因此准确率很低.这是因为Sigmoid Function的变化传递是会衰减的.
-
DL的常见步骤:
-
构建模型
-
若在Training Data上的表现不好,修改激活函数或者Learning Rate迭代方法.
-
若在Testing Data上的表现不好,解决过拟合.
-
-
激活函数:
-
ReLU可用于解决Vanishing Gradient,因为它的输出值是0或线形的,前者不会对输出造成影响,后者不会衰减.
-
Leaky ReLU将左端改为a=0.01z.
-
Maxout Network可以自己学习激活函数,它每层的激活函数是对事先分组的一个Max Function.假如该组中存在一个w=0、b=0的Neuron,那么该组的激活函数就相当于ReLU.
-
-
Learning Rate迭代方法:
-
AdaGrad:wnew = wold - η/σ*g
-
RMSProp:AdaGrad的改进版,wnew = wold - η/σ*g, 其中η是时间函数, σ=√(α(σ)2+(1-α)g2).
-
Momentum:给Gradient加上惯性的启发式方法.每次移动的方向都是本次的负Gradien方向与前一次移动的Gradient方向的加权和.
-
Adam:RMSProp + Momentum.
-
-
解决过拟合:
-
Early Stopping:理想的模型迭代情况应该是Training Loss一直变小, Testing Loss先变小后变大.因此利用Validation Set来模拟Testing Set,当Testing Loss重新变大后就停止训练.
-
Regularization:在Loss Function中加入Regularization term.因为目的是使模型平滑,所以一般只考虑w而不考虑b.L2 Regularization会使Gradient中新增一项,每次迭代都使得w=(1-ηλ),所以所有w都会是一个较小值.L1 Regularization会使w较稀疏,但其中会有较大值.
-
Dropout:每次在更新参数前对Neuron做一个Sampling,每个Neuron有p%的概率被Dropout.Testing的时候不做Dropout,并且将所有权重乘上(1-p)%.Dropout会导致Training Data上的表现变差,但能解决过拟合问题.Dropout在线形激活函数上的表现很好.解决过拟合
-
10 Convolutional Neural Network
-
NN用于图像识别的原因是每个Hidden Layer都可以从图像特征的维度来提取特征.
-
为什么CNN可以拿掉某些参数:
-
图像中的Pattern特征一般比整张Image要小.
-
同样的Pattern可能出现在Image的不同部分.
-
整张图像变小理论上不会影响物体的识别.
-
-
CNN的结构一般是Convolution+Max Pooling+Flatten+FNN.
-
Convolution卷积:
-
有一组Filter,每个Filter是一组Matrix,它的高等于Image的Channel颜色通道数.Filter中每个值都是学习得到的参数.
-
Filter的尺寸小于Image,每个FIlter从Image的左上角开始做内积,从右往左、从上往下挪动Stride,得到一组新的Matrix.
-
将所有Filter得到的Matrix叠在一起,称为Feature Map.深度取决于Filter的数量.所有Feature Map会一起被传入下一层Convolution,此时深度就相当于是Input Image的Channel.
-
Shared Weights:Convolution可以看作减少了参数数量,因为新的Matrix中的每个Neuron只由前一层中的部分值计算得到,并且这个Matrix中的所有Neuron是共用一个FIlter的.
-
-
Max Pooling池化:将Filter得到的Matrix做一个分组,每组只保留其中的最大值(或平均值等).
-
Flatten+FNN:将最后的Feature Map拉直后传入一个FNN即可.
-
分析CNN学习到了什么:把某层Filter Convolution后的结果做Σ,用Graident Ascent求得使这个Σ值最大的Input X,得到的结果就是该Filter学习到的特征.同理也可以用于FNN的Neuron或Output.
-
Deep Dream或Deep Style就使用了上述思路,让CNN夸大它看到的结果.
11 Why Deep?
-
在总Neuron数相同的情况下,较深的网络的效果远优于较浅的网络.
-
Deep Learning可以看作一个Modularization模块化的过程,每个Neuron的学习结果可以被后面的网络复用.而且Deep Learning其实并不需要很大的数据量.
-
Deep Learning在Universality Theorem上的表现更有效率.类别逻辑电路,2层就可以表示所有Bool Function,但多层所需的逻辑元更少.
-
Deep Learning可以取代传统方式中人工提取的Feature.
12 Semi-supervised Learning
-
半监督学习是指在一组Labeled Data外,还有一组Unlabeled Data,且后者数量一般远大于前者.
-
一般分为Transductive Learning和Inductive Learning,前者将Testing Data作为Unlabeled Data,后者不考虑Testing Data.
-
半监督学习会基于一些假设,此时Unlabeled Data的分布可能会给学习带来帮助.
19 Transfer Learning
-
如果没有与目标任务直接相关的Data,就可以用Transfer Learning迁移学习.
-
Transfer Learning的Data可以根据有无Label、是否为Target Data分为四类.
-
Target Data和Source Data都有Label:
-
只关心Target Data的预测,称为Fine-tuning.先用Source Data训练出一个Model,作为下一阶段的初始值,再用Target Data来Fine-tune它.具体技巧有Conservative Training、Layer Transfer等.
-
同时关心两种Data等预测,就称为Multitask Learning,例如多语言辨认就会共用前面的某几层.
-
-
Target Data是Unlabeled,Source Data是Labeled:
-
-
Zero-shot Learning:Target data的数据在Source data中没有出现过.具体方法是建立一个Database,每个Class用互不相同的Attribute表示.在训练时针对Attribute进行学习.如果通过降维将Image和Atrribute变成同样的维度,就可以通过相似度进行匹配.这个Database还可以使用Word Vector.
-
Slot Filling是指匹配出一段自然语言中的关键词属于哪个Slot.首先需要将词汇表示成Vector,例如Word Vector, 1-of-N encoding等等.
-
同一个词在不同语境中会属于不同的Slot,因此需要神经网络具有记忆性.
-
Elman Network:Hidden Layer的Output会被存储在Memory中,当下一次计算该Hidden Layer的值时就需要考虑这些Memory.
-
Jordan Network:存储的是output的值.
-
-
Bidirectional RNN:同时Train一个正向的RNN和一个逆向的RNN,把它们的Hidden Layer接给同一个Output Layer.
-
LSTM:
-
外界的值通过Input Gate才能传入Memory.Memory的输出通过Output Gate才能传入Neuron.Memory还有一个Forget Gate,决定是否要将之前记录的内容Forget掉.
-
Gate的开关状态由学习得到,通常选择Sigmoid作为Gate的激活函数.
-
c‘=g(z)f(zi)+cf(zf),α=h(c‘)f(zo),其中c是Memory的当前值,c‘是更新以后的值,g(z)是输入值,f(zi)是Input Gate的值,f(zf)是Forget Gate的值,h(c‘)是输出的激活函数,f(zo)是Output Gate的值.
-
LSTM一个cell的结构相当于普通神经网络的一个Neuron.是RNN的一个比较通用的模型.
-
-
RNN使用的优化算法是Backpropagation through time(BPTT).它的Training比较困难,会有类似“悬崖”的情况,因为从Memory到Neuron的那部分权重会被反复使用:
-
可以使用一个叫Clipping的技巧控制Gradient不超过某个常数值.
-
LSTM可以解决Gradient Vanishing的问题.因为它的Neuron对Memory的影响是一直存在的,除非Forget Gate全部关闭.
-