DL&ML基础学习四

深度学习中主要的三种神经网络模型:前馈式的DNN、CNN;有反馈式的RNN、LSTM、GRU;玻尔兹曼机式的RBM、DBM。三种模型各有自己的特点和优势,以及发挥作用的领域。

生成模型和判别模型:简单的看,generative model求解的是P(x,y)而discriminative model求解的是P(y|x)。

DNN中使用的激活函数:激活函数具备的数学性质有非线性、可微性保证求梯度可行、单调性保证是凸函数、输出值范围有限或无限。输出值无限时采用更小的learning rate。 使用均方差loss function和sigmoid激活函数会导致饱和问题,导致更新参数更新缓慢,所以如果参数初始值设置的很大或者很小则直接导致训练缓慢;采用交叉熵函数作为损失函数配以sigmoid函数可以避免饱和问题,因为交叉熵函数的求导形式是预测值与真实值的差而没有sigmoid函数的导数形式;DNN分类模型中,输出层使用softmax函数作为激活函数,隐藏层仍然是sigmoid函数,而loss function则使用对数似然函数;采用RELU函数作为激活函数来解决梯度消失和梯度爆炸问题,RELU是类似线性的函数,计算简单,收敛速度快,但是如果W*x+b的值小于0则导致其导数为0,导致神经元不再更新即死亡,除非设置较小的learning rate或者使用maxout函数;tanh函数与sigmoid函数的关系是tanh(z)=2*sigmoid(2z)-1;softplus函数是sigmoid函数的原函数,与RELU函数类似,是他的平滑形式;由于ReLU函数的死亡性质,出现了Leaky-ReLU/P-ReLU/R-ReLU函数,LReLU就是使x<0时函数值不再是0而是αx,α是一个很小的数值。

DNN中的正则化技术:DNN采用的正则化技术包括L1&L2,集成学习emsemble learning正则化、dropout技术、增强数据集例如旋转、缩放技术来正则化等,集成学习中Bagging技术和dropout技术的区别在于dropout模型中的W,b是一套,共享的。所有的残缺DNN迭代时,更新的是同一组W,b;而Bagging正则化时每个DNN模型有自己独有的一套W,b参数,相互之间是独立的,他们每次使用基于原始数据集得到的分批的数据集来训练模型。正则化的目标在于防止模型的过拟合,提高泛化能力。具体的正则化方法在《Dee Learning》一书中第七章详细解释。对于dropout技术,他是减少节点数量,这样导致特征信息丢失,是在“逼着”网络利用剩下的信息学习,而且每次学习的特征还是不同的因为dropout每次都是随机的,导致所有的特征都会对模型的预测有作用而不会偏向于某些特征,导致过拟合,从另一个角度看,类似于线性回归中要去拟合数据点,每次都随机去掉一些点,之后去拟合。一般使用dropout技术都是直接指定那一层以及keep_pro,但是通过noise_shape参数可以按照该张量的某一轴来进行dropout,更加灵活。

集成学习emsemble learning:对于训练集数据,我们通过训练若干个个体学习器,通过一定的结合策略,就可以最终形成一个强学习器,这是emsemble learning的思路。主要问题在于个体学习器的选择和组合策略。其中就会涉及到Adaboost、提升树、随机森林等模型。

对LSTM的理解:LSTM解决了RNN的长时依赖问题,用的是门gates的概念,门选择性地让信息通过,他的输出是值域在0~1之间的数值,表示如何调节其他数据的数级,输入是控制依据,就是凭借哪些信息实现对其他数据的控制。门从组成上来看是由一个sigmoid函数和元素乘操作组成,而sigmoid一定是有参数的所以一个门是学习出来的,或者说他是一个神经网络,通过不断的学习来控制依据这些信息应该输出哪些数值实现控制其他数据,gates 并不提供额外信息,gates 只是起到限制信息的量的作用。因为 gates 起到的是过滤器作用,所以所用的激活函数是 sigmoid 而不是 tanh。,而门的作用是去除或增加信息到细胞状态Ct。LSTM的五个计算公式中三个是在计算门的输出值,另两个是在计算此刻的细胞状态值和隐藏状态值。LSTM中的三个门:输入门 i t :控制有多少信息可以流入 memory cell。遗忘门 ft:控制有多少上一时刻的 memory cell 中的信息可以累积到当前时刻的 memory cell中。输出门 ot:控制有多少当前时刻的 memory cell 中的信息可以流入当前隐藏状态 ht 中。这三个门是累计历史信息到细胞状态Ct的控制者。此刻细胞状态值Ct的计算,一是靠遗忘门来控制上一刻Ct-1流入这个时刻的信息,以及通过输入门来控制输入信息进入的量,而输入信息包括了Xt和Ht-1,这是一种线性的自我更新,从细胞状态更新的公式看Ct是线性更新的,也就是说细胞状态的更新不存在非线性变换,而隐藏状态更新需要非线性变换的。此刻隐藏层的状态Ht的计算依赖于输出门的控制和此刻细胞状态Ct的非线性变换两者的元素乘积,而RNN中的Ht的计算是根据输入信息包括此刻的x和上一刻的h进行非线性变换得来的。LSTM的计算过程顺序是计算遗忘门数值——计算输入门并决定什么信息会加入细胞状态值——更新细胞状态值——计算输出门和输出值Ht。LSTM的变种在于数据流的来源、gate的控制方式和gate的控制依据或者整个LSTM内部结构的改变。RNN的下一个point是Attention注意力机制。

关于CNN中存在最大池化平均池化而没有最小池化的原因:1,最小池化是以某一个局部区域最小值代表一个区域,这可能导致随着pooling层值越来越小。在反向传播中使用链式法则时,各项相乘中有值的参加,值很小大致加快了梯度消失;2,如果想要用min_pooling来保持特征,那就要让卷积之后的有用特征尽量小,而卷积操作其中一步是加和操作,实际是可以实现的,但是会出现梯度消失问题。

池化层存在的作用:1,降低维度,减小计算量,提高效率;2,保持不变性,如果图片中的物体有平移、旋转、放缩等变换,通过多层池化层的作用可以得到相同的结果,但是池化层对旋转物体的识别不是很好,另有论文提出的Spatial Transformer Networks模型可以一定程度上支持旋转的识别效果。

在实现了神经网络和RNN之后,感觉从公式上看RNN相比于NN来说只是多了几个原理相同的公式,前向计算的时候计算中间层的值多了前一个时刻的状态值,大体仍然是权值乘以输入值加偏置之后非线性变换,之后往下一层传递。BPTT时仍然是计算残差之后更新,注意残差是针对于神经元节点的而不是连接的,唯一不同的是计算输出层残差和计算中间层残差的方法不同,实际可以从求导过程中看出计算中间层残差时需要考虑下一时刻的该中间层的残差和该时刻上一层的残差,单单从公式来看只有这些不同。LSTM也是多了几个类似的公式和变量。LSTM与RNN的相似之处在于每一个时刻产生一个输出,都是输入层、输出层与复杂的中间层,只是LSTM中的中间层变量更多,反向传播时需要求解的残差和梯度值更多,更加复杂,但是大的结构是类似的,当然也和一般的神经网络结构一样。实际RNN及其变种都可以归结为一个递归公式f(yt)=f(yt-1,xt),这种递归的性质导致其不能并行。此外,RNN系列模型与MDP、HMM等有着后人和前人的联系,他们都有隐藏层表示状态并且会传递到下一时刻,我感觉最基本的作用机理类似都需要基于马尔可夫假设,RNN比HMM功能强大在于它用了状态值累加和多层神经网络,它的分布式输入向量优于HMM,并且增加了非线性转换,简单地想就是RNN用层次的网络结构重构了HMM导致表达能力增强。

数据归一化Normalization处理:常用归一化方法是零均值归一化(每个特征减去其平均值导致平均值归为0)、方差归一化(每个特征除以其方差值)、x-min/(max-min)、log(x)、tanh(x)等每种有其用处和优缺点,归一化就是想把原始数据集在不失去其相对分布的前提下将每个特征的值限定在一个范围内使得更容易处理。数据归一化导致的是原始可能狭长分布的数据集成为更加圆形,这可以加速梯度下降的执行,加速收敛过程,震荡小,而且可以设置更大的lr。特别是对于不同特征取值范围差距十分大的数据集很有用。然而数据归一化可以被BN/LN/WN层取代。BN是Batch Normalization,出发点是神经网络每一层参数更新都会导致后面的每一层数据分布发生变化,所以可以在每一层前面加上一个网络层来对输入数据做归一化处理再输到该层进行处理可能会加速收敛。BN也是一层网络,而且是带有学习参数的网络,有相应开山的论文。

机器学习技术点:http://www.cnblogs.com/taojake-ML/p/6382700.html

DNN中的训练方法和激活函数:http://www.cnblogs.com/taojake-ML/p/6382930.html

DNN正则化技术:http://www.cnblogs.com/pinard/p/6472666.html

emsemble learning集成学习:http://www.cnblogs.com/pinard/p/6131423.html

猜你喜欢

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