《Machine Learning - 李宏毅》视频笔记(完结)

https://www.youtube.com/watch?v=CXgbekl66jc&list=PLJV_el3uVTsPy9oCRY30oBPNLCo89yu49

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:

    1. 给予每个参数一个独立的Learning Rate.每次更新wnew = wold - η/σ*g, 其中η是时间函数, σ是w的过去所有偏导数的均方根Root Mean Square(包含本次).

    2. AdaGrad可以直观地理解为突出Gradient的反差,例如一个之前数值较大的Gradient突然变小,AdaGrad会使这个小的数字更小.

    3. 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的常见步骤:

    1. 构建模型

    2. 若在Training Data上的表现不好,修改激活函数或者Learning Rate迭代方法.

    3. 若在Testing Data上的表现不好,解决过拟合.

  • 激活函数:

    1. ReLU可用于解决Vanishing Gradient,因为它的输出值是0或线形的,前者不会对输出造成影响,后者不会衰减.

    2. Leaky ReLU将左端改为a=0.01z.

    3. Maxout Network可以自己学习激活函数,它每层的激活函数是对事先分组的一个Max Function.假如该组中存在一个w=0、b=0的Neuron,那么该组的激活函数就相当于ReLU.

  • Learning Rate迭代方法:

    1. AdaGrad:wnew = wold - η/σ*g

    2. RMSProp:AdaGrad的改进版,wnew = wold - η/σ*g, 其中η是时间函数, σ=√(α(σ)2+(1-α)g2).

    3. Momentum:给Gradient加上惯性的启发式方法.每次移动的方向都是本次的负Gradien方向与前一次移动的Gradient方向的加权和.

    4. Adam:RMSProp + Momentum.

  • 解决过拟合:

    1. Early Stopping:理想的模型迭代情况应该是Training Loss一直变小, Testing Loss先变小后变大.因此利用Validation Set来模拟Testing Set,当Testing Loss重新变大后就停止训练.

    2. Regularization:在Loss Function中加入Regularization term.因为目的是使模型平滑,所以一般只考虑w而不考虑b.L2 Regularization会使Gradient中新增一项,每次迭代都使得w=(1-ηλ),所以所有w都会是一个较小值.L1 Regularization会使w较稀疏,但其中会有较大值.

    3. Dropout:每次在更新参数前对Neuron做一个Sampling,每个Neuron有p%的概率被Dropout.Testing的时候不做Dropout,并且将所有权重乘上(1-p)%.Dropout会导致Training Data上的表现变差,但能解决过拟合问题.Dropout在线形激活函数上的表现很好.解决过拟合

10 Convolutional Neural Network

  • NN用于图像识别的原因是每个Hidden Layer都可以从图像特征的维度来提取特征.

  • 为什么CNN可以拿掉某些参数:

    1. 图像中的Pattern特征一般比整张Image要小.

    2. 同样的Pattern可能出现在Image的不同部分.

    3. 整张图像变小理论上不会影响物体的识别.

  • CNN的结构一般是Convolution+Max Pooling+Flatten+FNN.

  • Convolution卷积:

    1. 有一组Filter,每个Filter是一组Matrix,它的高等于Image的Channel颜色通道数.Filter中每个值都是学习得到的参数.

    2. Filter的尺寸小于Image,每个FIlter从Image的左上角开始做内积,从右往左、从上往下挪动Stride,得到一组新的Matrix.

    3. 将所有Filter得到的Matrix叠在一起,称为Feature Map.深度取决于Filter的数量.所有Feature Map会一起被传入下一层Convolution,此时深度就相当于是Input Image的Channel.

    4. 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:

    1. 只关心Target Data的预测,称为Fine-tuning.先用Source Data训练出一个Model,作为下一阶段的初始值,再用Target Data来Fine-tune它.具体技巧有Conservative Training、Layer Transfer等.

    2. 同时关心两种Data等预测,就称为Multitask Learning,例如多语言辨认就会共用前面的某几层.

  • Target Data是Unlabeled,Source Data是Labeled:

    1. 两类数据比较接近,例如有背景的数字和无背景的数字.不同目标所抽取的特征不一定相同,因此需要Domain-adversarial Training,在Feature Extractor后面加入一个Domain Classifier和一个Label Predictor.

    2. Zero-shot Learning:Target data的数据在Source data中没有出现过.具体方法是建立一个Database,每个Class用互不相同的Attribute表示.在训练时针对Attribute进行学习.如果通过降维将Image和Atrribute变成同样的维度,就可以通过相似度进行匹配.这个Database还可以使用Word Vector.

21 Recurrent Neural Network

  • Slot Filling是指匹配出一段自然语言中的关键词属于哪个Slot.首先需要将词汇表示成Vector,例如Word Vector, 1-of-N encoding等等.

  • 同一个词在不同语境中会属于不同的Slot,因此需要神经网络具有记忆性.

    1. Elman Network:Hidden Layer的Output会被存储在Memory中,当下一次计算该Hidden Layer的值时就需要考虑这些Memory.

    2. Jordan Network:存储的是output的值.

  • Bidirectional RNN:同时Train一个正向的RNN和一个逆向的RNN,把它们的Hidden Layer接给同一个Output Layer.

  • LSTM:

    1. 外界的值通过Input Gate才能传入Memory.Memory的输出通过Output Gate才能传入Neuron.Memory还有一个Forget Gate,决定是否要将之前记录的内容Forget掉.

    2. Gate的开关状态由学习得到,通常选择Sigmoid作为Gate的激活函数.

    3. 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的值.

    4. LSTM一个cell的结构相当于普通神经网络的一个Neuron.是RNN的一个比较通用的模型.

  • RNN使用的优化算法是Backpropagation through time(BPTT).它的Training比较困难,会有类似“悬崖”的情况,因为从Memory到Neuron的那部分权重会被反复使用:

    1. 可以使用一个叫Clipping的技巧控制Gradient不超过某个常数值.

    2. LSTM可以解决Gradient Vanishing的问题.因为它的Neuron对Memory的影响是一直存在的,除非Forget Gate全部关闭.

posted @ 2019-10-15 20:58  Limitlessun  阅读(739)  评论(2编辑  收藏  举报