DL&ML基础学习三

机器学习中泛化误差等于偏差的平方+方差+噪声。传统的机器学习方法难点在于一个是解决过拟合和欠拟合问题,另一个所有的传统机器学习方法都需要提供数据的特征,而特征需要人为定义,特征定义的好坏直接决定模型的性能。以神经网络为代表深度学习技术一大特点就在于不用事先定义特征,因为神经网络可以自己抽取特征,而且效果很好,但是仍然具有不可解释性,而且也是面临过拟合欠拟合的问题。另外统计学习学习的必须是有规律的事件,是有偏的发生的事件而非均匀概率分布的事件,这是应用统计学知识的前提和核心。

朴素贝叶斯分类:基础在于贝叶斯定理。对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。朴素贝叶斯模型构建和测试分为三个阶段:根据具体情况确定特征属性,并对每个特征属性进行适当划分,然后由人工对一部分待分类项进行分类,形成训练样本集合;计算每个类别在训练样本中的出现频率P(yi)及每个特征属性划分对每个类别的条件概率估计P(x|yi),并将结果记录。这是一个纯统计的过程;这个阶段的任务是使用分类器对待分类项进行分类,实际是计算P(x|yi)*P(yi),贝叶斯公式中这是分子,让分子最大且分母相同则得到的P(yi|x)最大,就得到了属于那个类了,这是纯计算的过程。但是其中涉及到的问题:如果特征属性为离散值,则直接加和统计就可以,如果是连续值,就又要假设特征属性服从高斯分布了,求其均值和方差,才能求得P(x|y);如果出现P(x|y)为0则laplace平滑处理。当有很多特征时实际是求P(C|F1F2...Fn) = P(F1F2...Fn|C)P(C) / P(F1F2...Fn),而朴素贝叶斯假设各个特征之间条件独立,即P(F1F2...Fn|C)=P(F1|C)*P(F2|C)*P(F3|C)...由此计算出P(C|F1F2...Fn) 。

条件独立和相互独立:两个事件相互独立说明互不影响,但是事件一般相互影响,通常这种影响又往往依赖于其他变量而不是直接产生。。但是条件独立是三个事件之间,给定 Z 下,X 与 Y 是条件独立的当且仅当:P(X,Y|Z)=P(X|Z)⋅P(Y|Z)说明X于Y之间关于Z条件独立。朴素贝叶斯基本思想就在于此,起到简化的作用,简化分析也是简化了计算。但是条件独立一般也不存在,所以有了贝叶斯网络来进行分类工作,他们都叫做“贝叶斯分类”。

贝叶斯网络:一个贝叶斯网络定义包括一个有向无环图(DAG)和一个条件概率表集合。DAG中每一个节点表示一个随机变量,可以是可直接观测变量或隐藏变量,而有向边表示随机变量间的条件依赖;条件概率表中的每一个元素对应DAG中唯一的节点,存储此节点对于其所有直接前驱节点的联合条件概率。贝叶斯网络有一条极为重要的性质,就是我们断言每一个节点在其直接前驱节点的值制定后,这个节点条件独立于其所有非直接前驱前辈节点。这个性质很类似Markov过程。其实,贝叶斯网络可以看做是Markov链的非线性扩展。这条特性的重要意义在于明确了贝叶斯网络可以方便计算联合概率分布。 构造与训练贝叶斯网络分为以下两步:1、确定随机变量间的拓扑关系,形成DAG。这一步通常需要领域专家完成,而想要建立一个好的拓扑结构,通常需要不断迭代和改进才可以。2、训练贝叶斯网络。这一步也就是要完成条件概率表的构造,如果每个随机变量的值都是可以直接观察的,像我们上面的例子,那么这一步的训练是直观的,方法类似于朴素贝叶斯分类。但是通常贝叶斯网络的中存在隐藏变量节点,那么训练方法就是比较复杂,例如使用梯度下降法。

正规方程则是源于loss function对待求参数求倒数等于0,而不是使用GD训练,只适用于线性模型,直接一次性求出,但是样本数据矩阵不可逆或样本数小于特征数时不可用。

向量空间模型 (VSMs)将词汇表达(嵌套)于一个连续的向量空间中,语义近似的词汇被映射为相邻的数据点。向量空间模型在自然语言处理领域中有着漫长且丰富的历史,不过几乎所有利用这一模型的方法都依赖于 分布式假设,其核心思想为出现于上下文情景中的词汇都有相类似的语义。采用这一假设的研究方法大致分为以下两类:基于计数的方法 (e.g. 潜在语义分析), 和 预测方法 (e.g. 神经概率化语言模型).其中它们的区别:基于计数的方法计算某词汇与其邻近词汇在一个大型语料库中共同出现的频率及其他统计量,然后将这些统计量映射到一个小型且稠密的向量中。预测方法则试图直接从某词汇的邻近词汇对其进行预测,在此过程中利用已经学习到的小型且稠密的嵌套向量。

CNN各层所进行的计算以及各层之间的数量关系:CNN的三大特点在于局部感知、权值共享和池化即下采样。input层没有计算,不包含weight和bias;C1卷积层1中包括了权重和偏置和非线性函数,因为每一个卷积层都是由多个特征提取层组成,每个子特征提取层是为了提取不同的特征而存在的,同一个子层权值共享,就是同一层的weight和bias都相同,C1所进行的计算只需要关注一个子层就可以,其他子层的计算效果一样,他所进行的计算也就是卷积,具体其实是离散型的卷积,除了卷积还要在结果中加上bias,使用激活函数一般通过ReLU来引入非线性,得到的结果个数取决于该层有多少个神经元,而具体的参数个数就取决于该层神经元个数、recptive field,总的链接数也可以通过参数个数与recptive field得到,结果给到下一层S1;子抽样层S1包含的子层数与C1相同,其他的组合C2/S2等也一样,具体的计算取决于要采用的计算方法,例如S1的每一层的recptive field都是2X2,则可以进行相加,具体取决于采用的池化策略max_pool(纹理提取)或者avg_pool(保留背景)或者stochastic_pool。该层一个是对C1层进行缩减,一个hi非线性变换。C2层的层数与S1层不一定相同,具体怎么设定需要按照想达到的不完全链接的数量设定,不完全可以打破网络的对称性,对称的网络学习能力低,而所有参数都相同的网络没有学习能力。可能C2层中的神经元“聚焦于”S1层中的多层特征,所以该层的链接即C2/S1比较特殊,源于特殊的作用;以此类推Ci/Si+1层,直到末尾,会有某一层T将包含n个子层,也就是抽取n个特征,每一个子层都会与前一层的所有子层链接,进行全连接,之后的层都会i进行的是全连接,并且包含了权值、偏置和激活函数。卷积神经网络的训练方式也是采用类似BP算法的手法进行。CNN中随着层的提高,能能够抽取观察到的特征也在随之变化,从颜色到边缘到形状到物体,一步步升级。

历史时期(虽然并不久远)的各种CNN架构都在增加深度,同时通过改变网络结构来抑制过拟合,提高精确度,并且最重要的是减小参数数量,因为深度一旦增加意味着参数巨量的增加,内存问题和训练时间问题就会出现。VGG16层和CGG19层,该架构仅仅使用堆放在彼此顶部、深度不断增加的3×3卷积层,并通过max pooling来减小volume规格;然后是两个4096节点的全连接层,最后是一个softmax分类器。“16”和“19”代表网络中权重层的数量。之后的残差神经网络Resnet借用了Network In Network的思想,更深但参数更少。NIN的思想主要是mlpconv+global average,mlpconv是在原始CNN的线性卷积层之后又增加mlp多层感知机神经网络层来增加非线性程度从而更好的拟合现实特征(mlpconv就是在传统的卷积核之后增加多层的1*1的卷积核),由此构成一个微型网络结构,多个这种微型网络结构组合起来,最后采用全局均值池化层来从每一张图片中提取一个特征替代CNN最后的多层的全连接层进而巨大的减少参数和运算量减小过拟合。Inception v_i原始是Google Net网络,创新点在于Inception结构,每个Inception结构采用不同尺度的卷积核并联起来对原始数据处理,并采用2个3*3的filter代替5*5的filter来减少计算量,采用n*1_1*n来代替n*n的卷积核。


对于作为复杂函数拟合器的神经网络来说,包括CNN在内的,优化泛化性能的方法主要有增加层数、正则化、改变代价函数、改变权重初始化方法、数据增强技术和dropout技术,LRN局部响应归一化来提高准确率等。局部响应归一化LRN:为了提高识别精度进而模仿生物机理实施的方法,在池化之后。模仿侧抑制机制,对局部神经元的活动创建竞争机制,使得响应大的值更大,增加泛化能力。实现就是一个公式。同时tensorflow也通过tf.nn.lrn()进行支持/dropout技术:对于某些神经网络单元,按照一定的概率将其暂时从网络中丢弃,选择时随机的,目的在于防止过拟合。每一个神经元出现在神经网络中的概率服从伯努利分布的,训练的时候每一batch的神经网络都不同,所以有的神经元不会出现在该次神经网络的训练中,但是测试的时候需要都出现。隐含节点dropout率等于0.5的时候效果最好,就是说在训练的时候节点出现的概率是1/2,测试的时候是1.0。或者是dropout率服从高斯分布而非简单的伯努利分布。dropout技术的解释来源于生物学或者数学。
神经网络中的EncoderDecoder机制和Attention机制:在论文中常常进到encoder-decoder模型和seq-to-seq问题,s2s问题就是根据一个输入序列x,来生成另一个输出序列y。而所谓编码,就是将输入序列转化成一个固定长度的向量;解码,就是将之前生成的固定向量再转化成输出序列。 实际的encoder和decoder都是神经网络,类型不确定是哪种。这个固定长度的向量带来了encoder和decoder数据传递的方便性,但是也是由于固定的问题带来难以包含整个序列的信息,后面覆盖前面的序列,准确率降低。Attention机制有注意力范围的表示,attention模型最大的区别就在于它不在要求编码器将所有输入信息都编码进一个固定长度的向量之中。相反,此时编码器需要将输入编码成一个向量的序列,而在解码的时候,每一步都会选择性的从向量序列中挑选一个子集进行进一步处理。这样,在产生每一个输出的时候,都能够做到充分利用输入序列携带的信息。colah在14年写的博客上写下了他认为的为什么神经网络可以发挥如此大的作用:why are neural networks effective? Because better ways of representing data can pop out of optimizing layered models。

增强学习见解:http://www.cnblogs.com/Leo_wl/p/5852010.html

http://www.cnblogs.com/jinxulin/p/3517377.html

Must Know Tips/Tricks in Deep Neural Networks :http://lamda.nju.edu.cn/weixs/project/CNNTricks/CNNTricks.html

papers实时更新:https://amds123.github.io/tag/  https://amds123.github.io/

猜你喜欢

转载自blog.csdn.net/ingwfj/article/details/78057238