陆陆续续整理深度学习的知识点,资料大多数来自网上,不做盈利目的,如果侵权请告知即删!如果文章中有错误的地方还请各位同学指正,如果大家面试中遇到好的面试题也请分享,一起学习,一起进步!
一天一个深度学习知识点(一)(DNN,CNN,RNN,LSTM,GRU,GAN)
穿越---->机器学习知识点!!
目录
1.DNN(深度神经网络)
1.1神经网络
神经网络的学习就是学习如何利用矩阵的线性变换加激活函数的非线性变换,将原始输入空间投向线性可分/稀疏的空间去分类/回归。增加节点数:增加维度,即增加线性转换能力。增加层数:增加激活函数的次数,即增加非线性转换次数
1.2神经元
神经网络由大量的神经元相互连接而成。每个神经元接受线性组合的输入后,最开始只是简单的线性加权,后来给每个神经元加上了非线性的激活函数,从而进行非线性变换后输出。每两个神经元之间的连接代表加权值,称之为权重(weight)。不同的权重和激活函数,则会导致神经网络不同的输出。
1.3激活函数
参考
常用的非线性激活函数有sigmoid、tanh、relu等等,前两者sigmoid/tanh比较常见于全连接层,后者relu常见于卷积层。
1.3.1.sigmoid
函数g(z)的图形表示如下( 横轴表示定义域z,纵轴表示值域g(z) ):
- 也就是说,sigmoid函数的功能是相当于把一个实数压缩至0到1之间。当z是非常大的正数时,g(z)会趋近于1,而z是非常小的负数时,则g(z)会趋近于0。
缺点:
-
容易导致梯度消失。
问:梯度消失和梯度爆炸?改进方法。
解决梯度爆炸:
a.可以通过梯度截断。通过添加正则项。
解决梯度消失:
a.将RNN改掉,使用LSTM等自循环和门控制机制。
b.优化激活函数,如将sigmold改为relu
c.使用batchnorm
d.使用残差结构 -
Sigmoid 的输出不是0均值(即zero-centered)。
这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。
结果:那么对w求局部梯度则都为正,这样在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果,使得收敛缓慢。 -
解析式中含有幂运算。
计算机求解时相对来讲比较耗时。对于规模比较大的深度网络,这会较大地增加训练时间。
1.3.2.tanh
特点:和sigmoid差不多,但值域为[-1,1]
解决了Sigmoid函数的不是zero-centered输出问题。
梯度消失和幂运算的问题仍然存在。
1.3.3.ReLU
优点:
- 解决了梯度消失问题
- 计算速度非常快,只需要判断输入是否大于0
- 收敛速度远快于sigmoid和tanh,因为这两个梯度最大为0.25,而relu为1
缺点:
- 输出不是zero-centered
- Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生: (1) 非常不幸的参数初始化,少见 。例如w初始化全部为一些负数。(2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。(权重初始化看本篇1.7)
- 原点不可导
1.3.4.leaky relu函数
优点:
不会有Dead ReLU问题
输出的均值接近0,zero-centered
缺点:
计算量稍大
原点不可导
1.3.5为什么神经网络要引入非线性
答:如果没有激励函数,在这种情况下你每一层节点的输入都是上层输出的线性函数,无论你神经网络有多少层,输出都是输入的线性组合,相当于没有隐藏层,网络的学习能力有限。
深度学习最主要的特点就是:多层,非线性。 多层为了能够学习更多的东西;没有非线性,多层和单层没什么区别,就是简单的线性组合,连异或都解决不了
1.4神经网络
- 输入层(Input layer),众多神经元(Neuron)接受大量非线形输入讯息。输入的讯息称为输入向量。
- 输出层(Output layer),讯息在神经元链接中传输、分析、权衡,形成输出结果。输出的讯息称为输出向量。
- 隐藏层(Hidden layer),简称“隐层”,是输入层和输出层之间众多神经元和链接组成的各个层面。如果有多个隐藏层,则意味着多个激活函数。
1.4Backpropagation(要能推导)
后向传播是在求解损失函数L对参数w求导时候用到的方法,目的是通过链式法则对参数进行一层一层的求导。这里重点强调:要将参数进行随机初始化而不是全部置0,否则所有隐层的数值都会与输入相关,这称为对称失效。
1.5梯度消失、梯度爆炸
梯度消失:因为在深层网络中通常采用的激活函数是sigmoid,在该函数中最小值和最大值的梯度(也就是倒数)都趋近于0。神经网络的反向传播是逐层对函数偏导相乘,当神经网络层数非常深的时候,最后一层产生的偏差就因为乘了很多的小于1的数而越来越小,最终就会变为0,从而导致层数比较浅的权重没有更新。
梯度爆炸:同理,出现在激活函数处在激活区,而且权重W过大的情况下。但是梯度爆炸不如梯度消失出现的机会多。
1.5.1解决梯度消失或爆炸问题的方法。
- 修改激活函数
- 批量规范化(Batch Normalization)
- 梯度截断(Gradient Clipping)
- 使用长短期记忆网络
- 残差结构
- 逐层贪婪预训练
1.6overfitting
1.6.0过拟合的原因
- 训练集与测试集数据分布不一致
- 数据集噪声比较多,干扰太大,模型记住噪声信息,未拟合输入信息和标签的关系
- 模型迭代太多,拟合了样本中不具有代表性的数据和噪声数据
- 样本数据量远小于模型复杂度
1.6.1.解决方法
拟合过程中通常都**倾向于让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。**可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,专业一点的说法是『抗扰动能力强』。
- L1/L2正则化(原理奥卡姆剃刀):L1正则化在损失函数中加入所有权重参数w的绝对值之和,迫使更多的w为0,使特征变得稀疏;L2正则化也叫作权重衰减,目标函数中增加所有权重w参数的平方之和。对于线性回归模型,使用L1正则化的模型建叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归)。
- early stopping
- Dropout:在训练过程中,让神经元以超参数p的概率被激活(也就是说1-p的概率被设置为0),类似于bagging算法
- Batch Normalization(对神经网络中下一层的输入进行归一化处理,使得输入量的均值为0,方差为1,即通过特征归一化,加速模型的训练)
- shortcut-connect(使用残差网络Residual network,densenet)
- 数据增强(增加样本的数量)
1.6.2.L1/L2正则化的理解
拟合过程中通常都倾向于让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,专业一点的说法是“抗扰动能力强"。
1.6.3 Batch Normalization的理解
参考
机器学习领域有个很重要的假设:
IID独立同分布假设,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。那BatchNorm的作用是什么呢?BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。
BN的基本思想其实相当直观:
因为深层神经网络在做非线性变换前的激活输入值(就是那个x=WU+B,U是输入)随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近(对于Sigmoid函数来说,意味着激活输入值WU+B是大的负值或正值),所以这导致反向传播时低层神经网络的梯度消失,这是训练深层神经网络收敛越来越慢的本质原因,而BN就是通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布,其实就是把越来越偏的分布强制拉回比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会导致损失函数较大的变化,意思是这样让梯度变大,避免梯度消失问题产生,而且梯度变大意味着学习收敛速度快,能大大加快训练速度。
BatchNorm的好处:
BatchNorm为什么厉害呢,关键还是效果好。①不仅仅极大提升了训练速度,收敛过程大大加快;②还能增加分类效果,一种解释是这是类似于Dropout的一种防止过拟合的正则化表达方式,所以不用Dropout也能达到相当的效果;③另外调参过程也简单多了,对于初始化要求没那么高,而且可以使用大的学习率等。
1.6.4Batch Normalization的实现
参考
如上图所示,BN步骤主要分为4步:
求每一个训练批次数据的均值
求每一个训练批次数据的方差
使用求得的均值和方差对该批次的训练数据做归一化,获得0-1分布。其中ε是为了避免除数为0时所使用的微小正数。
尺度变换和偏移:将xi乘以γ调整数值大小,再加上β增加偏移后得到yi,这里的γ是尺度因子,β是平移因子。这一步是BN的精髓,由于归一化后的xi基本会被限制在正态分布下,使得网络的表达能力下降。为解决该问题,我们引入两个新的参数:γ,β。 γ和β是在训练时网络自己学习得到的。
1.6.5BN测试集预测时均值和方差怎么求?
在训练时,我们会对同一批的数据的均值和方差进行求解,进而进行归一化操作。但是对于预测时我们的均值和方差怎么求呢?比如我们预测单个样本时,那还怎么求均值和方法呀!其实是这种样子的,对于预测阶段时所使用的均值和方差,其实也是来源于训练集。比如我们在模型训练时我们就记录下每个batch下的均值和方差,待训练完毕后,我们求整个训练样本的均值和方差期望值,作为我们进行预测时进行BN的的均值和方差.
1.6.6BN滑动平均操作
滑动平均,或者叫做指数加权平均,可以用来估计变量的局部均值,使得变量的更新与一段时间内的历史取值有关。
滑动平均的好处:
占内存少,不需要保存过去10个或者100个历史 θ 值,就能够估计其均值。(当然,滑动平均不如将历史值全保存下来计算均值准确,但后者占用更多内存和计算成本更高)
训练阶段:
在训练时利用当前batch的mean和variance来进行BN处理, 同时使用滑动平均的方式不断的更新global 的mean和variance, 并将其存储起来.
测试阶段:
在预测阶段, 直接使用模型存储好的均值和方差进行计算
1.7权重初始化的几种方法
1.7.1把w初始化为0
我们在线性回归,logistics回归的时候,基本上都是把参数初始化为0,我们的模型也能够很好的工作。然后在神经网络中,把w初始化为0是不可以的。这是因为如果把w初始化0,那么每一层的神经元学到的东西都是一样的(输出是一样的),而且在bp的时候,每一层内的神经元也是相同的,因为他们的gradient相同。
1.7.2对w随机初始化
但是随机初始化也有缺点,np.random.randn()其实是一个均值为0,方差为1的高斯分布中采样。当神经网络的层数增多时,会发现越往后面的层的激活函数(使用tanH)的输出值几乎都接近于0,激活函数输出值接近于0会导致梯度非常接近于0,因此会导致梯度消失。
1.7.3Xavier初始化
Xavier initialization是 Glorot 等人为了解决随机初始化的问题提出来的另一种初始化方法,他们的思想倒也简单,就是尽可能的让输入和输出服从相同的分布,这样就能够避免后面层的激活函数的输出值趋向于0。深层的激活函数输出值还是非常漂亮的服从标准高斯分布。虽然Xavier initialization能够很好的 tanH 激活函数,但是对于目前神经网络中最常用的ReLU激活函数,还是无能能力
1.7.4He初始化
为了解决上面的问题,我们的何恺明大神(关于恺明大神的轶事有兴趣的可以八卦下,哈哈哈,蛮有意思的)提出了一种针对ReLU的初始化方法,一般称作 He initialization。现在神经网络中,隐藏层常使用ReLU,权重初始化常用He initialization这种方法。
1.8关于softmax
参考
softmax函数,又称归一化指数函数。它是二分类函数sigmoid在多分类上的推广,目的是将多分类的结果以概率的形式展现出来。
我们知道概率有两个性质:1)预测的概率为非负数;2)各种预测结果概率之和等于1。
softmax就是将在负无穷到正无穷上的预测结果按照这两步转换为概率的。
两步:
- 将预测结果转化为非负数。
- 各种预测结果概率之和等于1。
2.CNN(卷积神经网络)
卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一。
2.1什么是卷积
对图像和滤波矩阵做内积(逐个元素相乘再求和)的操作就是所谓的『卷积』操作,也是卷积神经网络的名字来源。
几个概念:
- depth:窗口个数,决定输出的depth厚度。同时代表滤波器个数。
- stride:数据窗口每次移动的步长
- zero-padding:在外围边缘补充若干圈0,方便从初始位置以步长为单位可以刚好滑倒末尾位置,通俗地讲就是为了总长能被步长整除。
2.1.1为什么用奇数卷积
主要有以下两个原因:
-
(1)奇数卷积核更容易做padding。我们假设卷积核大小为k*k,为了让卷积后的图像大小与原图一样大,根据公式可得到padding=(k-1)/2,看到这里,细心地小伙伴应该已经看到点端倪了,没错,这里的k只有在取奇数的时候,padding才能是整数,否则padding不好进行图片填充;
-
(2)更容易找到锚点。这又是什么意思呢?在CNN中,一般会以卷积核的某个基准点进行窗口滑动,通常这个基准点是卷积核的中心点,所以如果k’是偶数,就找不到中心点了。
2.1.2.1x1卷积核的作用
参考
(1)实现跨通道的交互和信息整合:使用1x1卷积核,其实就是对不同channel间的信息做线性组合的一个变换过程。
(2)增加非线性特性:1x1卷积核,利用后接的非线性激活函数可以在保持feature map尺度不变的前提下大幅增加非线性特性,把网络做的很深
(3)减少模型参数,降低计算量
2.1.3.为什么2个3x3可以代替1个5x5的卷积核
在卷积神经网络中,一般情况下,卷积核越大,感受野(receptive field)越大,看到的图片信息越多,所获得的全局特征越好。虽说如此,但是大的卷积核会导致计算量的暴增,不利于模型深度的增加,计算性能也会降低。
于是在VGG、Inception网络中,利用两个3×3卷积核的组合替换一个5×5卷积核,这样的好处是:
(1)在具有相同感知野的条件下,提升了网络的深度,在一定程度上提升了神经网络的效果;
(2)降低了参数量(从5×5×1 x channels 到 3×3×2 x channels)。
那么,假设输入是28x28:
使用5x5的卷积核对其卷积,步长(stride)为1,填充(padding)为0,得到的结果是:
(28-5 + 0x2) / 1 + 1=24
使用2层3x3的卷积核,同样步长(stride)为1,填充(padding)为0:
第一层3x3:得到的结果是(28-3 + 0x2)/ 1 + 1=26
第二层3x3:得到的结果是(26-3 + 0x2)/ 1 + 1=24
所以最终结果是2层3x3和1个5x5的卷积核得到的feature map大小是一样的。
同理也能得出三个3x3的卷积核可以替换一个7x7的卷积核。
2.2激励层
前面介绍了激活函数sigmoid,但实际梯度下降中,sigmoid容易饱和、造成终止梯度传递,且没有0中心化。在CNN中用ReLU作为激励函数。
ReLU的优点是收敛快,求梯度简单。
2.3池化层
CNN还有一个重要思想就是池化,池化层通常接在卷积层后面。其实引入它的目的就是为了简化卷积层的输出。通俗地理解,池化层也在卷积层上架了一个窗口,但这个窗口比卷积层的窗口简单许多,不需要w,b这些参数,它只是对窗口范围内的神经元做简单的操作,如求和,求最大值,把求得的值作为池化层神经元的输入值。
通常卷积层的窗口是多个的,池化层的窗口也是多个的。简单来说,卷积层用一个窗口去对输入层做卷积操作,池化层也用一个窗口去对卷积层做池化操作。
需要记住池化层一个最大的好处:经过池化后,大大减少了我们学到的特征值,也就大大减少了后面网络层的参数。
虽然通过卷积的方式可以大范围的减少输出尺寸(特征数),但是依然很难计算而且很容易过拟合,所以依然利用图片的静态特性通过池化的方式进一步减少尺寸。
2.4全连接层
池化层到输出层是全连接,这和DNN是一样的。
如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。
2.5什么是权值共享?
局部感知:即网络部分连通,每个神经元只与上一层的部分神经元相连,只感知局部,而不是整幅图像(滑窗实现)。局部像素关系紧密,较远像素相关性弱。因此只需要局部感知,在更高层将局部的信息综合起来就得到了全局的信息。
权值共享:从一个局部区域学习到的信息,应用到图像的其它地方去。即用一个相同的卷积核去卷积整幅图像,不同的特征靠多个不同的卷积核实现。
2.6CNN和密集神经网络DNN的区别?
DNN的输入是向量形式,并未考虑到平面的结构信息,在图像和NLP领域这一结构信息尤为重要,例如识别图像中的数字,同一数字与所在位置无关(换句话说任一位置的权重都应相同),CNN的输入可以是tensor,例如二维矩阵,通过filter获得局部特征,较好的保留了平面结构信息。
2.6.1在图像分类任务中,相较于使用DNN,使用CNN有哪些优势?
虽然两种模型都可以捕获彼此靠近的像素之间的关系,但CNN具有以下属性:
- 它是平移不变的:对于过滤器而言,像素的确切位置是无关的。
- 参数更少,更不容易发生过度拟合:一般而言CNN中的参数比DNN要少很多。
- 方便我们更好地理解模型:我们可以查看过滤器的权重,并可视化神经网络的学习成果。
- 分层性质:通过使用较简单的模式描述复杂的模式来学习模式。
2.7.Feature Map尺寸计算
Feature Map的尺寸等于(input_size + 2 * padding_size − filter_size)/stride+1
2.8常用的几个模型,这个最好能记住模型大致的尺寸参数.
2.9说明在图像分类任务中可视化CNN特征的两种方法
- 输入遮挡:遮挡输入图像的一部分,看看哪部分对分类的影响最大。
例如,针对某个训练好的图像分类模型,将下列图像作为输入。如果我们看到第三幅图像被分类为狗狗的概率为98%,而第二幅图像的准确率仅为65%,则说明眼睛对于对分类的影响更大。 - 激活最大化:创建一个人造的输入图像,以最大化目标响应(梯度上升)。
2.10 什么是Group Convolution
若卷积神将网络的上一层有N个卷积核,则对应的通道数也为N。设群数目为M, 在进行卷积操作的时候, 将通道分成M份, 每个group对应N/M个通道, 然后每个group卷积完成后输出叠在一起, 作为当前层的输出通道。参数减少为原来的1/M.
3.RNN(循环神经网络)
循环神经网络(Recurrent Neural Network, RNN)是一类以序列数据为输入,在序列的演进方向进行递归(recursion)且所有循环单元按链式连接的递归神经网络(recursive neural network)
3.1RNN模型
3.2RNN前向传播
W,U,V三个参数是共享的。
3.3RNN反向传播(BPTT)(手推)
BPTT(back-propagation through time)算法是常用的训练RNN的方法,其实本质还是BP算法,只不过RNN处理时间序列数据,所以要基于时间反向传播,故叫随时间反向传播。BPTT的中心思想和BP算法相同,沿着需要优化的参数的负梯度方向不断寻找更优的点直至收敛。综上所述,BPTT算法本质还是BP算法,BP算法本质还是梯度下降法,那么求各个参数的梯度便成了此算法的核心。
与BP算法不同的是,其中W和U两个参数的寻优过程需要追溯之前的历史数据,参数V相对简单只需关注目前,那么我们就来先求解参数V的偏导数。
W和U的偏导的求解由于需要涉及到历史数据,其偏导求起来相对复杂,我们先假设只有三个时刻,那么在第三个时刻 L对W的偏导数为:
相应的,L在第三个时刻对U的偏导数为:
可以观察到,在某个时刻的对W或是U的偏导数,需要追溯这个时刻之前所有时刻的信息,这还仅仅是一个时刻的偏导数,上面说过损失也是会累加的,那么整个损失函数对W和U的偏导数将会非常繁琐。虽然如此但好在规律还是有迹可循,我们根据上面两个式子可以写出L在t时刻对W和U偏导数的通式:
整体的偏导公式就是将其按时刻再一一加起来。
前面说过激活函数是嵌套在里面的,如果我们把激活函数放进去,拿出中间累乘的那部分:
我们会发现累乘会导致激活函数导数的累乘,进而会导致“梯度消失“和“梯度爆炸“现象的发生。
3.4RNN的应用场景
至少会说出三个:图片生成文字,情感分析,机器翻译
- 1对多
1、从图像生成文字,输入为图像的特征,输出为一段句子
2、根据图像生成语音或音乐,输入为图像特征,输出为一段语音或音乐 - 多对1(最典型的就是情感分析)
1、输出一段文字,判断其所属类别
2、输入一个句子,判断其情感倾向
3、输入一段视频,判断其所属类别 - 多对多
1、机器翻译,输入一种语言文本序列,输出另外一种语言的文本序列
2、文本摘要,输入文本序列,输出这段文本序列摘要
3、阅读理解,输入文章,输出问题答案
4、语音识别,输入语音序列信息,输出文字序列
3.5CNN和RNN的区别
相同点就往神经网络说,不同点空间和时间,动态和静态去解释
4.LSTM
长短期记忆网络(LSTM,Long Short-Term Memory)是一种时间循环神经网络,是为了解决一般的RNN(循环神经网络)存在的长期依赖问题而专门设计出来的
核心:细胞状态, 三个门控, 去除或增加信息到细胞状态 选择让信息有多少通过
看这里
4.1忘记门
作用:丢弃信息
4.2输入门层
作用:确定更新的信息
4.3输出门层
作用:确定要输出的值
4.4LSTM防止梯度消失梯度爆炸问题
RNN在进行BPTT计算更新参数时,深层的网络计算参数的梯度时会出现偏导数连乘的情况,这时会出现梯度消失或者梯度爆炸。当使用LSTM时,因为加入了sigmoid和tanh激活函数,求偏导时,使得连乘的偏导部分等于0或者1,这就解决了梯度消失和梯度爆炸的问题。
4.5 LSTM 为什么用sigmoid和tanh激活函数
1、在 LSTM 中,所有控制门都使用 sigmoid 作为激活函数(遗忘门、输入门、输出门);
2、在计算候选记忆或隐藏状态时,使用双曲正切函数 tanh 作为激活函数 ;
3、所谓饱和性,即输入超过一定范围后,输出几乎不再发生明显变化了,符合门控的定义,如果使用其他非饱和激活函数,则难以实现门控效果,因此不能替换为其他激活函数。
4、使用 tanh 作为计算状态时的激活函数,主要是因为其值域为 (-1, 1),tanh 比 sigmoid 在 0 附近有更大的梯度,通常会使模型收敛更快。
5.GRU
5.1原理
相比LSTM,使用GRU能够达到相当的效果,并且相比之下更容易进行训练,能够很大程度上提高训练效率,因此很多时候会更倾向于使用GRU。(一句话就是简单但效果也不差)
它将忘记门和输入门合成了一个单一的更新门。同样还混合了细胞状态和隐藏状态,和其他一些改动。最终的模型比标准的 LSTM 模型要简单,也是非常流行的变体。
5.2.GRU和LSTM的区别
GRU和LSTM的性能在很多任务上不分伯仲。
GRU 参数更少因此更容易收敛,但是数据集很大的情况下,LSTM表达性能更好。
从结构上来说,GRU只有两个门(update和reset),LSTM有三个门(forget,input,output),GRU直接将hidden state 传给下一个单元,而LSTM则用memory cell 把hidden state 包装起来。
6.GAN(生成对抗网络)
6.1GAN网络的思想
GAN用一个生成模型和一个判别模型,关于生成模型和判别模型的面试看这里。判别模型用于判断给定的图片是不是真实的图片,生成模型自己生成一张图片和想要的图片很像,开始时两个模型都没有训练,然后两个模型一起进行对抗训练,生成模型产生图片去欺骗判别模型,判别模型去判别真假,最终两个模型在训练过程中,能力越来越强最终达到稳态。
7.EM算法
EM算法是用于含有隐变量模型的极大似然估计或者极大后验估计,有两步组成:E步,求期望(expectation);M步,求极大(maxmization)。本质上EM算法还是一个迭代算法,通过不断用上一代参数对隐变量的估计来对当前变量进行计算,直到收敛。
注意:EM算法是对初值敏感的,而且EM是不断求解下界的极大化逼近求解对数似然函数的极大化的算法,也就是说EM算法不能保证找到全局最优值。对于EM的导出方法也应该掌握。
8.HMM(隐马尔科夫模型)
暂时先不写
9.CRF
暂时先不写
10.深度学习参数更新方法
11.如何解决样本类别的不均衡问题?
- 过采样/上采样:增加类别少的样本数量实现样本数量的均衡。具体是通过复制类别上的样本构成多条数据。此方法的缺点是当样本的特征很少时,容易出现过拟合。需要对过采样方法进行改进,改进的方法是:在类别少的样本中加入噪声、干扰数据或通过一定的规则产生新合成的样本,如smote算法。
- 欠采样/下采样:减少类别多的样本数量,一般的方法是随机地去掉一些类别多的样本。而下采样的缺点也比较明显,那就是最终的训练集丢失了数据,模型只学到了一部分,可能会导致欠拟合,解决办法:多次下采样(放回采样,这样产生的训练集才相互独立)产生多个不同的训练集,进而训练多个不同的分类器,利用模型融合,通过组合多个分类器的结果得到最终的结果。
- 损失函数采用不同的类别权重:对类别少的样本赋予高的权重,对类别多的样本赋予低的权重。
- 选择准确率之外的损失函数:在样本不平衡的情况下,得到的高准确率没有任何意义,此时准确率就会失效。针对机器学习中的数据不平衡问题,建议更多PR(Precision-Recall曲线),而非ROC曲线。