采样

作用

定义

从特定的概率分布中抽取相应样本点的过程。

作用:
    复杂的分布简化为离散的样本点。
    
    可视化的作用,帮助人们快速、直观地了解数据的结构和特性。
    
    
重采样(resampling):
    对样本集进行调整以更好地适应后期的模型学习。
    
    例如利用重采样来处理分类模型的训练样本不均衡问题。


随机模拟:
    进行复杂模型的近似求解或推理。

简单分布的采样:
    虽然有直接的采样函数,
    其采样过程也并不是显而易见的,仍需要精心设计。

复杂分布的采样:
    没有直接的采样函数用,
    需要更加复杂的方法。
    

采样的作用

采样本质上是对随机现象的模拟,

根据给定的概率分布,来模拟产生一个对应的随机事件。

另一方面,可以通过减少信息量来减少计算量。

采样的方法:
    自助法:
        (Bootstrap Method,Bootstrapping或自助抽样法)
        是一种从给定训练集中有放回的均匀抽样
    
    刀切法:
        (jackknife method)
        
        其原始动机是降低估计的偏差


模型复杂近似求解或者推理:
    复杂模型结构复杂、含有隐变量。
    
    求解公式没有有显式解析解,难以进行精确求解或推理。
    
    使用采样随机模拟:
        对这些复杂模型进行近似求解或推理。
        
    问题转化:    
        转化为某些函数在特定分布下的积分或期望。
        
        求某些随机变量或参数在给定数据下的后验分布等。
        
复杂模型举例:
    隐狄利克雷模型
    深度玻尔兹曼机(DeepBoltzmannMachines,DBM):
    
            含有隐变量,直接计算比较困难。
            用吉布斯采样对隐变量的分布进行采样。
    
    贝叶斯模型:
        把隐变量和参数变量放在一起,对它们的联合分布进行采样。
    
确定性的近似求解 VS 基于采样的随机模拟方法:
    前者举例包括:变分贝叶斯方法、期望传播
        
    后者是数值型的近似求解方法。
        

采样的几个应用

如何用自助法或刀切法来估计偏差、方差等?

隐狄利克雷模型和深度玻尔兹曼机具体是怎么用吉布斯采样进行求解的?

进行模型求解时,马尔可夫蒙特卡洛采样法与常见的最大期望算法、变分推断方法有什么联系和区别?

均匀分布随机数

均匀分布定义

指整个样本空间中的每一个样本点对应的概率(密度)都是相等的

从均匀分布中进行采样的含义:
    生成均匀分布随机数

编程实现

计算机的特性:
    计算机只能产生确定性的值
    
    计算机的存储计算单元只能处理离散状态值,计算单元只能处理离散状态值。
    
    可以通过通过离散分布来逼近连续分布

线性同余法:
    (Linear Congruential Generator)
    
    生成离散均匀分布伪随机数。

image.png

        
        (线性公式部分需要加括号)
        
        a:
            称为乘数
        
        c:
            称为增量
        m:
            称为模数
        
        x0:
            初始值x0称为随机种子。
        
        过程:
            对当前随机数xt进行变换,产生下一次随机数x t+1
        
            首先得到的是区间[0,m−1]上的随机整数。
            
            如果想要得到区间[0,1]上的连续均匀分布随机数,用xt除以m即可。
        
 
 特点:
    产生的随机数不是相互独立。
    
    最多只能产生m个不同的随机数(种子决定了循环周期基本达到不到m)。
        
 
 其它问题:
    线性同余法中的随机种子一般如何选定?
    
    
    如果需要产生高维样本或大量样本,线性同余法会存在什么问题?
    
    如何证明上述线性同余发生器得到的序列可以近似为均匀分布(伪随机数)?

常见的采样方法

采样是根据概率密度函数生成样本数据的过程。

采样的基础:
    采样方法都是以均匀分布随机数作为基本操作。

采样的方法:
    1、轮盘赌算法
    
    2、函数变换法
        适用于不能直接采样的分布
        
        先构造一个容易采样的分布u,然后通过反函数来间接得到原始随机变量。
    
        此处需要确认这个方法用于拒绝/重要性采样
    3、拒绝采样/重要性采样
    

高斯分布的采样

函数变换,拒绝采样/重要性采样都可以使用。

此处需要确认

马尔可夫蒙特卡洛采样法

MCMC采样法主要包括两个MC,
即蒙特卡洛法(MonteCarlo)和马尔可夫链(MarkovChain)

重点在于如何构造马尔科夫链,核心是确定马尔可夫链的状态转移概率,

Metropolis Hastings采样法:

吉布斯采样法:
    每次只对样本的一个维度进行采样和更新。
    
如何保证样本间相互独立:
    使用多条马尔科夫链,或者在同一条链上每隔若干样本才取一个。

贝叶斯网络的采样

没有观测变量时:
    祖先采样(AncestralSampling):
        先对祖先节点进行采样,
        只有当某个节点的所有父节点都已完成采样,才对该节点进行采样。
    
边缘分布采样:
    也就是对部分的随机变量采样。
    
    祖先采样+忽视不需要的变量:

有观测变量时:
    1、逻辑采样
        从祖先开始,采样。
        直到出现与观测变量重合的一次采样。
        
        效率可能非常低(随着结点个数增多)
    2、重要性采样
        观测变量不采样,非观测变量采样。
        
        重要性权值:

image.png

            
            E是观测变量集合。
            权值只在观测变量上有。
            
            又称为似然加权采样(Likelihood Weighted Sampling)。
            
         此处需要确认,重要性权值用来做什么?
    
3、MCMC采样
        Metropolis Hastings采样法:
            在需要采样的随机向量(可能是多个)上选择一个概率转移矩阵。
            
            每次转移有一定的接受或拒绝(此处需要确认具体例子,深入理解。)
        
        吉布斯采样法:
            每次对一个变量进行采样,交替进行。
            

不均衡样本集的重采样

    正负样本不均衡的问题。
    
    举个极端例子:
        正负样本比例达到1:99,分类器把所有样本判断为负类,准确率就可以达到99%。
        
    训练数据不均衡,分类模型出现问题的原因:
        模型目标函数与测试评价标准“不一致”:
            1、训练样本与测试样本的样本分布不一致
                测试集正负样本比例希望能达到1:1
            
            2、此处需要确认不明白
    

如何处理不均衡问题:

    1、基于数据
        重采样,不均衡变为均衡。

        过采样:
            (Over-sampling)
             从少数类别样本随机抽取增加更多样本。

             缺点:
                增加一些重复样本,
                增加模型复杂度,容易造成过拟合。

        欠采样:
            (Under-sampling)
            从多数类别样本随机抽取增加更少样本

            缺点:
              减少一些样本,
              损失部分有用信息,模型只学习到数据的一部分特点。


        生成新样本:
            为了解决过采样过拟合的风险。

            SMOTE算法:
                对少数样本的每个样本自变量,选择分别近邻的y组成新的样本。

                缺点:
                   会增加类间的重叠度,不能提供有益的信息。

            Borderline-SMOTE:
                在分类边界上的少数类样本合成新样本

            ADASYN:
                给不同的少数类样本合成不同个数的新样本。

       解决数据丢失:
            Informed-Undersampling
                1、EasyEnsemble
                        在多数类样本中随机抽取子集,训练分类器。

                        重复以上过程,得到多个分类器,并融合出最终分类器。
                        (此处需要确认分类器如何融合)
                2、Balance Cascade    
                      级联结构。

                      随机抽取子集,得到分类器。

                      用分类器剔除剩余可以被正确分类的样本。

                      用剩余样本继续抽取子集得到分类器。

                      最终融合。
                3、其它
                    NearMiss(利用K近邻信息挑选具有代表性的样本)
                    One-sided Selection(采用数据清理技术)

                    思路一致:
                        聚类来指导数据,

                        对少数样本进行噪声扰动或者变换以构造新样本,
    
    2、基于算法
        通过改变模型训练时的目标函数(如代价敏感学习中不同类别有不同的权重)
        
        当样本数据极其不均衡时,可以将问题转换为单类学习,异常检测。
        

集成学习

将多个分类器的结果统一成一个最终的决策,这种机器学习方法称为集成学习。

每个单独的分类器称为基分类器。

集成学习是一大类模型融合策略和方法的统称。    

集成学习的种类

Boosting

训练基分类器采用串行,基分类器之间有依赖。

训练时:
    层层叠加,训练的时候对前一层分错的样本给予更高的权重。

测试时:
    各层分类器的结果的加权得到最终结果

比喻成人类学习:
    迭代式,
    
    第一遍记住一些,但是会犯错。
    
    第二遍复习错误,又记住一些。
    
    重复以上方式,直到错误减少到很低的程度。

Bagging

基分类器之间相互独立,可以进行并行训练。

将训练集分为若干子集。

最终决策时:
    每个基分类器单独做出判断,再通过**投票**的方式做出最后的集体决策。

boosting bagging二者差异

从偏差和方差角度:
    Boosting聚焦于**分错**的样本,以减少总体偏差。
    
    Bagging多个模型单独训练,最后综合,以减少总体方差。
    
    Bagging加权直观:
        各个过拟合的曲线加权之后更加平滑。
        
        此处需要确认Bagging使用的模型是否一样(训练数据是独立的)。
        

集成学习的步骤和例子

集成学习的步骤:
    1、基分类器确定
        要求误差相互独立
    2、训练基分类器
    
    3、合并基分类器结果
        合并方法:
            voting投票:
                
            stacking串行:

Adaboost:
    1、选取ID3决策树作为基分类器
    
    2、训练基分类器
        T个基分类器
        
            初始化采样分布,
            从其中一个采样分布提取出训练数据集,
            训练模型,
            计算错误率,
            计算基分类器权重(误差越小权重大)
            设置下一次采样:
                分错的更高概率被采样到。
                上次分对的更少概率被采样到。
    
    3、合并结果
        输出分类结果为加权投票的结果。
        
        错误率越小的基分类器权重越大。
    
梯度提升决策树:
    梯度提升思想。
    
    每一个棵树学习的是所有树结果的残差。
    
    残差指预测值与真实值的误差。

基分类器

选择的基分类器要具备”不稳定“,随机性强的特点。

否则出来的结果具有明显倾向性。

CART决策树、神经网络是常见的选择,所以不是所有模型都能作为基分类器。[引用](http://ai.baidu.com/forum/topic/show/942682)

决策树作为常见基分类器的原因:
    1、方便将样本的权重整合到训练过程(需要确认如何整合),
    2、决策树的表达能力和泛化能力可以通过树的层数来做折中,比较灵活方便,
    3、样本扰动对于模型生成具有影响大。(不同集合对应的不同分裂特征)

神经元作为基分类器原因:
    灵活调整神经元数量,连接方式,网络层数,初始权值。
    
    随机性调节比较方便。
    

随机森林基分类器,决策树替换为线性分类器或K近邻?
    随机森林属于bagging类的集成学习。
    
    bagging最大的好处是降低总体方差。
    
    线性分类器或者K近邻都是较为稳定的分类器,本身方差就不大。
    
    集成学习后很难有更好的表现,反而可能会因为采样导致训练结果很难收敛,偏差增大,所以不适合替换。

偏差与方差

有监督学习中的误差主要来源于两个方面----偏差和误差。

偏差:
    训练模型与真实模型对比
    
    对比的什么:
        输出平均值(训练模型)与输出值(真实模型)
         
    原因:
        算法错误的假设。
    
    何处体现: 
        训练误差就能体现。 
        
    此处需要确认真实模型的概念,是不是只在集成学习中存在。
        

方差:
   模型内部输出的一种分布。
   
   原因:模型相对于数据太过复杂。
   
   何处体现:    
        测试误差相对于训练误差的增量。
   

Bagging:
    降低方差。
    
    使用的放回抽样方法:
        分成n份样本,方差会降低为原来的1/n。
    
    随机森林如何追求模型相互独立:
        体现在选择分裂属性的时候,不是一直选择最优的,而是随机选取一些属性子集。
    
    
Boosting:
    降低偏差。
    
    采用串行的方式,把上一个分类器的残差作为下一个分类器的输入。
    这个过程是不断降低损失函数,使得模型更加靠近”靶心“。
    
    由于模型之间缺乏独立性,所以boosting不会降低方差。
    

模型复杂度与误差:
    模型复杂度与方差:
       正相关
    
    模型复杂度与偏差:
       负相关
       
    模型复杂度与泛化误差:
       V型曲线,有一个最佳的复杂度。

梯度提升决策树GBDT

(Gradient Boosting Decision Tree,GBDT)

 “从错误中学习”的理念:
    基于决策树预测的残差进行迭代的学习。
    
    新的弱分类器会重点关注还没有被正确预测的样本。
    
    基本思想:
        根据当前模型**损失函数的负梯度信息**来训练新加入的弱分类器。
        
        将弱分类器累加现有模型。
        
    
  过程:
    todo
  
  
  梯度提升和梯度下降:
    todo
    

前向神经网络

深度前馈网络(Deep Feedforward Networks)。

FNN

模型定义:
    映射 y = f(x;theta)
    学习 theta 参数。
    
    函数的复合方式。
    
    复合函数可以表示有向图的链式结构。
    
    输出层表示标签。
        

称为前馈的原因:
    从输入到输出的过程中不存在与模型自身的反馈连接。
    
    单向无反馈,即单向无环图。
    
深度前馈网络包含哪些?
    多层感知机、
    
    自编码器、
    
    限制玻尔兹曼机,
    
    卷积神经网络等

多层感知机与布尔函数

(Multi Layer Perceptron,MLP)

生物神经科学的多层结构:
    视觉图像->V1初级视觉皮层->V2 V4纹外外皮层-


深度神经网络:
    模拟人脑多层结构
    
    与浅层网络相比:
        深度神经网络的隐层单元的数目与输入单元的数目呈多项式关系。
    

多层感知机表示异或逻辑(仅考虑二元输入)

问题:
    最少需要几个隐含层?

不带隐藏层的感知机:    

image.png

    
    此处的X Y分别表示输入,Y并不是表示Label。
    
    Z 正相关于 AX + BY + C。
    
    
    通过输入的”假设“会得出矛盾的结果,
    可以反证出不带隐藏层的感知机)无法精确学习出一个输出为异或的模型表示。

一个隐藏层的感知机:
    
    通用近似定理(universal approximation theorrm):
        [参考](https://blog.csdn.net/guoyunfei20/article/details/78288271)        
        一个前馈神经网络如果具有线性输出层和至少一层具有任何一种“挤压”性质的激活函数的隐藏层,
        当给予网络足够数量的隐藏单元时,可以以任意精度近似任何从一个有限维空间到另一个有限维空间的波莱尔可测函数。
        
        此处需要确认“线性输出层”的位置。
        
    包含一个隐层:

image.png

            
            Z1 通过ReLU激活:
                Z1 = max(0, X + Y -1)
            
            
            Z = -Z1 - Z2 +1 
            
            棕色里面的值是偏执单元。
            

一个隐层,n元输入需要多少隐节点表示任意布尔函数

析取范式:
    (Disjunctive Normal Form,DNF)
     
     由有限个简单合取式构成的析取式。
     
     例子:

image.png

            
            X1上的“-” 表示非。
            
            输出表示为由6个合取范式所组成的析取范式。
            

image.png

            
            6个隐节点
            
            3层感知机。
            
     例子证明:
        单个隐结点可以表示任意合取范式:
            对于任意变量Xi:
                范式中为Xi,权重为1.
                范式中为Xi-,权重为-1.
                范式中没有出现,权重为0.
                
            偏置:
                设为合区范式中变量的总数取负之后再加1
            
            隐藏单元激活(输出1):
                采用RelU激活函数,需要每一个合取范式中的每个输入变量(5个)满足条件。           
            用线性输出表示析取:
                隐藏单元到输出层参数为1,偏置为0.
                
                输出0:
                    所有隐藏单元未被激活
                    
                输出正数:
                    至少有一个激活
                    
     卡诺图:
        表示什么:
            表示析取。
            
            网格表示真值表:合取式为1,填充。否则不填充。
            
        规约:
            相邻的区域进行规约,以简化布尔函数。
        
        3层感知机3个隐节点:

image.png

    
    回顾原始问题:
        todo
        此处需要确认布尔函数的含义,以及规约的含义,析取的含义。

多隐层,n元输入的布尔函数最少需要多少隐层,隐节点

todo ,此处需要确认上面的两个问题

深度神经网络激活函数

激活函数解决的问题:
    解决样本数据线性不可分的情况(比如XOR异或函数)。
    
    这种情况需要对非线性数据的分布进行重新映射。
    
激活函数使用:
    每一层的线性变换之后叠加一个非线性的激活函数。

激活函数

写出常用激活函数以及导数

sigmod生长曲线:

image.png

    
    导数:f’(z) = f(z) ( 1-f(z) )
                

Tanh双曲正切:

image.png

    
    导数:f'(z) = 1- (f(z)) 2

ReLU:

image.png

    
    导数:
       f'(z) = 1   z>0
       f'(z) = 0   z<=0

激活函数梯度消失

为什么Sigmoid和Tanh激活函数会导致梯度消失的现象?
    他们的导数在z趋近于很大或者很小的时候都会趋近于0,就会出现“梯度消失”
    

ReLU特点以及改进

 ReLU系列的激活函数相对于Sigmoid和Tanh激活函数的优点是什么?它们有什么局限性以及如何改进?
  优点:
      1、计算复杂度更低:
         一个是指数计算,另外一个是阈值计算

         Sigmoid和Tanh激活函数均需要计算指数,复杂度高。

         而ReLU只需要一个阈值即可得到激活值。

      2、有效解决梯度消失
         非饱和性的激活边界更宽
         (激活边界意思是,数据压缩的范围,例如sigmoid是压缩为0-1) 
      3、网络稀疏表达能力
         relu是单侧抑制的,也就是选择性激活。
         生物学研究表明这种优势更大。
         
   局限性:
      神经元死亡问题。
      
      负梯度会被设置成0。
      
      实际训练会导致很多神经元不可逆死亡,参数梯度无法更新,
      最终训练过程失败。
     (此处需要确认为什么学习率过大会导致该问题)

 
 Leaky ReLU(LReLU):
    定义:
        大于0的部分与ReLU一样,
        小于0的部分是一个斜率为a的线性函数。
        a是很小的正常数。
    
    特点:
        保留了单侧抑制(a很小)。
        
        负梯度信息不至于完全丢失。
        
        增加了a选择的难度:
            需要较强的人工先验或者多次训练以确定合适的参数值。         
 
 PReLU(Parametric ReLU):
     参数化a,将a作为可学习的参数,进行反向传播训练。
     
 Random ReLU(RReLU):
     训练的时候,a满足随机采样。
     测试时再固定下来。
     

多层感知机的反向传播算法

前向传播:
    输入信号通过网络层的隐节点到产生输出的过程称为前向传播。
    
    从输入到输出的方向称为前向。
    
    前向传播产生一个标量**损失函数**。

反向传播:
    (Back Propagation)
     
     沿网络层向后传播用以**计算梯度**。
     
     以**优化网络参数**。

多层感知机损失函数

平方误差:
    样本集合 {(x(1), y(1)),...(x(m),y(m))
    
    平方误差项:

image.png

        关于权重W,偏置项b,特征x,标签y的函数。
        
        标签值与W、b、x组成的激活函数做差。
        
        对所有样本取平均。
    
    L2正则化项:            

image.png

        
        最内侧的Σ是第l-1层的第j个输入(相对于下面的i)神经元;
        中间的Σ是第l层的第i个输出(相对于上面的j)神经元。
        最外侧的Σ是所有层的累加。
        (此处需要确认公式中的sl+1是否应该是-1)
        
        又叫权重衰减项,以减少权重的幅度,防止过拟合。
        
        λ 是权重衰减参数,控制该项相对于平方误差项的权重。
        
多分类损失函数:

image.png

        
        ok(i)代表第i个样本的预测属于类别k的概率。
        
        yk(i)代表第i个样本的实际的概率(1或者0)。
        
        先读右上角的数,再度右下角的数(右上角包含右下角的数)。
        求和的时候先求右下角的,再求右上角的(先求被包含的,再求包含的)

参数更新的梯度公式

todo

不同损失函数适用的场景

平方损失函数更适合输出为连续,最后一层不含Sigmoid或Softmax激活函数的神经网络;

交叉熵损失则更适合二分类或多分类的场景。

原理:
    跟推导过程有关
    todo

神经网络训练技巧

问题:
    大规模神经网络的过拟合问题。
    
    过你和是一种现象:
        参数多,训练数据短缺,导致在训练集上损失小,测试集上损失大(泛化差)。
        
解决过拟合:
    数据集增强(Data Augmentation)。
    
    参数范数惩罚/正则化(Regularization)、
    
    模型集成(ModelEnsemble)等;
    
        Dropout:
            手调参数:
                如学习率、权重衰减系数、Dropout比例等
            
    批量归一化(Batch Normalization,BN):
        用于加速收敛训练,
        
        提升网络泛化能力(此处需要确认原理)

全部参数初始化为0

对于全连接的深度神经网络:
    同一层神经元是同构的(相同的输入和输出)。
    
    无法打破对称性。
    
    此处需要确认对称性是作用在哪方面?
    
如何设置:
    随机化设置参数值。
    
    偏置可以简单的设置为0.
    

Dropout抑制过拟合

Dropout是指在深度网络的训练中,以一定的概率随机地“临时丢弃”一部分神经元节点。

原理:
    可以简单类比于集成学习中的Bgging方法(数据更轻量)
    
    每次迭代都在训练不同结构的神经网络(随机丢弃部分神经元)。
    
    作用于每份小批量训练数据。
    此处需要确认为何是下批量数据
    
    “多个模型”共享部分权值简化运算。
    
    减弱全体神经元联合适应性:
        每次训练随机挑选的不同的神经元集合共同进行优化
    
 实现:
    

image.png

    概率系数增加到神经元前。    

image.png

    
    r属于伯努利分布。
    
    前一个输出需要乘以伯努利分布。

批量归一化

对输入数据归一化。

问题:
    训练进行的时候,隐层的参数在变化,每一层的输入也在变化,
    所以每一批训练数据的分布也在改变。
    
    网络每次迭代都要拟合不同的数据分布,增大训练的复杂度以及过拟合的风险。


解决:
    每一批数据,在网络的每一层输入前进行归一化(均值0,标准差1)。
    

image.png

    
        处理是在该层输入前。
        
        该层是K维的,即有K个神经元。
        
        该公式是在某个层的某个神经(标号k)进行的处理。
    

如何解决引入归一化后破坏原始数据分布:
    引入学习参数γ和β。
    todo

深度卷积神经网络

卷积神经网络(ConvolutionalNeuralNetworks,CNN)

不是全连接的结构,即每层的神经元只响应前一层局部的神经元。

擅长时间序列以及图像数据的分析与识别图。(此处需要确认时间序列问题具体是什么)

概念:
    卷积层:
        处理类网格结构的数据。

    池化操作:

    参数共享:
        使得需要优化的参数数目大大缩减。

        提高效率。

        扩展性提高。
        
    卷积核:
        尺度小于输入的维度。

过程:
    输入-->几次卷积和池化层-->重复上一步-->几个全连通层-->输出
    

稀疏交互和参数共享

稀疏交互(Sparse Interaction):
    每层的神经元只响应前一层局部的神经元。
    
    又称局部连接。
    
    过拟合得到改善。
    
    时间复杂度明显减少。
    
    现实意义:
        现实世界中的图像、文本、语音数据具有局部的特征结构。
        
        先学习局部的特征,再组合成整体复杂特征。
        
        比如人脸识别:
            底部,中层,上层神经元学习到的特征是逐步积累的。

参数共享(Parameter Sharing):
    又称权值共享。
    
    同一个模型的不同模块中使用相同的参数。
    
    是卷积运算的固有属性
    
    
    现实意义:
        使得卷积层具有平移等变性。
        
        过程:
            以图片为例,
            先移动再卷积,与先卷积再右移的输出是一样的。
            

池化操作

常见的池化:
    均值池化(mean pooling)、最大池化(max pooling)。
    
作用:
    显著降低参数量。
    
    保持对平移、伸缩、旋转操作的不变性:
        平移不变性是指输出结果对输入的小量平移基本保持不变。
        
        对伸缩的不变性(一般称为尺度不变性):
            神经元感受的是邻域输入的最大值,而并非某一个确定的值
        
        旋转不变性:
            无论进行何种方向的旋转,都会有一个对应的过滤器与之匹配并在对应的神经元中引起大的激活。
        
    
均值池化:
    通过对邻域内特征数值求平均来实现
    
    作用: 
        抑制估计值方差增大(由于邻域大小受限造成)
        
        对背景的保留效果更好。

最大池化:
    通过取邻域内特征的最大值来实现,
    
    作用:
        能够抑制估计均值偏移(网络参数误差造成)
        
        更好地提取纹理信息。



过程:
    采样参数:
        通过池化操作窗口和步长采样。
    
    相邻重叠区域的池化:
        采用比窗口宽度更小的步长

文本分类

文本来说局部特征就是由若干单词组成的滑动窗口。

自动地对N-gram特征进行组合和筛选,获得不同抽象层次的语义信息。

todo 

深度残差网络

(Deep Residual Network,ResNet)

问题:
    神经网络层数的加深,优化函数越来越陷入局部最优解,
    梯度消失的问题更加严重(反向传播梯度衰减越来越严重)

理论:
    解决实际中网络层数越多误差越大问题(梯度消失问题引起)。

    当误差由第L层传播到第一个隐层的时候,会有很多参数和导数的连乘。
    
    输入近的神经网络层较难训练,那么我们可以将它短接到更靠近输出的层。
    
    假设输入x经过两个神经元变化得到F(x),输出为H(x) = x+F(x)。
    F(x) 被设计为残差,目标输出H(x~)-x。
    
此处需要确认短接的是层还是神经元,如果短接的部分不发挥作用,那么与原来有什么区别呢?        

循环神经网络

(RecurrentNeuralNetwork,RNN)
 
 用来建模序列化数据。
 
 前馈神经网络的缺点:
    输入都是一个定长的向量,无法处理变长的序列信息。
    
    很难捕捉序列中的长距离依赖关系。
    
 应用领域:
    机器翻译、序列标注、图像描述、推荐系统、智能聊天机器人、自动作词作曲等。
 
 

循环神经网络和卷积神经网络

传统文本分类任务:
    将一篇文章所对应的TFIDF向量作为输入,其中TFIDF向量的维度是词汇表的大小。
    
    缺点:
        丢失单词的顺序信息

前馈神经网络(卷积神经网络):
    定长的向量作为输入。
    
卷积神经网络:
    滑动窗口变长输入变定长向量
    
    优点:
        捕捉到原文本中的一些局部特征
        
    缺点:
        但是两个单词之间的长距离依赖关系还是很难被学习到。

循环神经网络:
    初衷:
       捕获长距离输入之间的依赖

    优点:
        对序列顺序的刻画能力
    
    核心原理:
        当前隐含状态ht,是当前输入xt和上一个隐含状态h t-1计算得到。      
        ht编码了整个序列的信息。
        
        最后一个隐含状态通过softmax直接输出分类。
    
    公式:

image.png

        
        U为输入层到隐含层的权重矩阵
        
        W为隐含层从上一时刻到下一时刻的状态转义矩阵
        
        然后经过f和g激活函数作用(f=Tanh或者ReLu, g=softmax)   
        
 
 二者联系:
    循环神经网络按时间展开成T层的前馈神经网络来理解

    

循环神经网络的梯度消失问题

算法:
    BPTT  基于时间的反向传播
    
    缺点:
        不能成功捕捉到长距离的依赖关系,
        这一现象主要源于深度神经网络中的梯度消失。
    
    过程:
        最终导数可以推导成雅克比矩阵。
        此处需要确认推导过程。
        雅克比矩阵最大特征值决定每层的梯度大小是指数增长还是指数缩小。
        
        梯度爆炸的解决:
            梯度裁剪来缓解(梯度等比收缩)。
         
        梯度消失:
            改进模型(长短期记忆模型或门控循环单元(GRU))

循环神经网络的激活函数、初值

是否可以用ReLU?
    可以,
    有效地改善梯度消失,取得更快的收敛速度和更好的收敛结果。

    注意点:
        矩阵初值限制。
        
        解决数值问题(连乘的W引起的无穷大或者趋近于0问题):
            W设置成单位矩阵(或者附近)。
            
            解决之后有点类似LSTM的效果

长短期记忆网络

(Long Short Term Memory,LSTM)

 解决循环神经网络的梯度消失梯度爆炸问题。
 
 对有价值的信息进行长期记忆,减小循环神经网络的学习难度。
 
 用处:
    语音识别、语言建模、机器翻译、命名实体识别、图像描述文本生成

长短期记忆的实现

结构与循环神经网络一样:
    基于输入x与隐含状态h

精心设计的内部结构:
    
    输入门:
        控制当前计算的新状态以多大程度更新到记忆单元中;
    遗忘门:
        控制前一步记忆单元中的信息有多大程度被遗忘掉;
    输出门:
        控制当前的输出有多大程度上取决于当前的记忆单元
    
几个概念:
    记忆单元:
        
    新状态:
    
    遗忘程度:
    
    记忆程度:
    
    输出程度:
    
参考[图片来源](https://www.51cto.com/art/201802/566177.htm):
    门及记忆单元组合起来大大提升了RNN处理远距离依赖问题的能力。     

image.png

    
    输入数据有三个门作为入口
    

### 每个模块的激活函数

 todo

Seq2Seq模型

称Sequence to Sequence模型

将一个序列信号,通过编码和解码生成一个新的序列信号

应用:
    机器翻译、语音识别、自动对话

输入输出固定长度向量问题:
    长度变化,补0操作。
    

介绍

核心思想:
    通过深度神经网络将一个作为输入的序列映射为一个作为输出的序列
    
    编码输入,解码输出两个部分
    
    编码解码器分别对应一个循环神经网络。
    
    共同训练两个循环神经网络。
    

解码的办法

todo
贪心算法,
启发式算法

注意力机制

类似于人类的注意力,聚焦于某一点,忽略其他点。

todo
解决了当前词及对应的源语言词的上下文信息和位置信息在编解码过程中丢失了。

技巧:
    将源语言句子逆序输入,或者重复输入两遍来训练模型



肖圣贤
31 声望5 粉丝

学习让我充实