1.梯度下降算法的一般步骤
答:用随机值初始化权重和偏差—->>将输入传入网络,得到输出—->>计算预测值与真实值之间的误差—->>对每一个产生误差的神经元,调整相应的(权重)值以减小误差—->>重复迭代,直至得到网络权重的最佳值
2.CNN卷积核是单层的还是多层的?
答:一般而言,深度卷积网络是一层又一层的。层的本质是特征图, 存贮输入数据或其中间表示值。一组卷积核则是联系前后两层的网络参数表达体,
训练的目标就是每个卷积核的权重参数组。
描述网络模型中某层的厚度,通常用名词通道channel数或者特征图feature map数。不过人们更习惯把作为数据输入的前层的厚度称之为通道数
(比如RGB三色图层称为输入通道数为3),把作为卷积输出的后层的厚度称之为特征图数。
卷积核(filter)一般是3D多层的,除了面积参数, 比如3x3之外, 还有厚度参数H(2D的视为厚度1). 还有一个属性是卷积核的个数N。
卷积核的厚度H, 一般等于前层厚度M(输入通道数或featuremap数). 特殊情况M > H。
卷积核的个数N, 一般等于后层厚度(后层featuremaps数,因为相等所以也用N表示)。
卷积核通常从属于后层,为后层提供了各种查看前层特征的视角,这个视角是自动形成的。
卷积核厚度等于1时为2D卷积,对应平面点相乘然后把结果加起来,相当于点积运算;
卷积核厚度大于1时为3D卷积,每片分别平面点求卷积,然后把每片结果加起来,作为3D卷积结果;1x1卷积属于3D卷积的一个特例,有厚度无面积
直接把每片单个点乘以权重再相加。
归纳之,卷积的意思就是把一个区域,不管是一维线段,二维方阵,还是三维长方块,全部按照卷积核的维度形状,对应逐点相乘再求和,浓缩成一
个标量值也就是降到零维度,作为下一层的一个feature map的一个点的值
2D卷积表示渔夫的网就是带一圈浮标的渔网,只打上面一层水体的鱼;
3D卷积表示渔夫的网是多层嵌套的渔网,上中下层水体的鱼儿都跑不掉;
1x1卷积可以视为每次移位stride,甩钩钓鱼代替了撒网;
下面解释一下特殊情况的 M> H:
实际上,除了输入数据的通道数比较少之外,中间层的feature map数很多,这样中间层算卷积会累死计算机(鱼塘太深,每层鱼都打,需要的鱼网太重).所以很多深度卷积网络把全部通道/特征图划分一下,每个卷积核只看其中一部分(渔夫A的渔网只打捞深水段,渔夫B的渔网只打捞浅水段)。
这样整个深度网络架构是横向开始分道扬镳了,到最后才又融合。这样看来,很多网络模型的架构不完全是突发奇想,而是是被参数计算量逼得。特
别是现在需要在移动设备上进行AI应用计算(也叫推断), 模型参数规模必须更小, 所以出现很多减少握手规模的卷积形式, 现在主流网络架构大都如此
3.全连接层的作用:
答:在CNN结构中,经多个卷积层和池化层后,连接着1个或1个以上的全连接层.与MLP类似,全连接层中的每个神经元与其前一层的所有神经元进行中全连接.全连接层可以整合卷积层或者池化层中具有类别区分性的局部信息.为了提升 CNN网络性能,全连接层每个神经元的激励函数一般采用ReLU函数。最后一层全连接层的输出值被传递给一个输出,可以采用softmax逻辑回归(softmax regression)进行 分 类,该层也可 称为 softmax层(softmax layer).
对于一个具体的分类任务,选择一个合适的损失函数是十分重要的,CNN几种常用的损失函数并分析了它们各自的特点.通 常,CNN的全连接层与MLP 结构一样,CNN的训练算法也多采用BP算法。
4.卷积神经网络的卷积是什么意思?
答:对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重:因为每个神经元的多个权重固定,所以又可以看做一个恒定的滤波器filter)做内积(逐个元素相乘再求和)的操作就是所谓的『卷积』操作,也是卷积神经网络的名字来源
5.简单介绍一下tensorflow的计算流图?
答:Tensorflow是一个通过计算图的形式来表述计算的编程系统,计算图也叫数据流图,可以把计算图看做是一种有向图,Tensorflow中的每一个节点都是计算图上的一个Tensor, 也就是张量,而节点之间的边描述了计算之间的依赖关系(定义时)和数学操作(运算时)
6.你有哪些deep learning(rnn、cnn)调参的经验?
答:1.参数初始化; 2.参数预处理方式; 3.训练技巧; 4.尽量对数据进行shuffle; 5.Ensemble
7.CNN最成功的应用是在CV,那为什么NLP和Speech的很多问题也可以用CNN解出来?为什么AlphaGo里也用了CNN?这几个不相关的问题的相似性在哪里?CNN通过什么手段抓住了这个共性?
答:以上几个不相关的问题的相关性在于,都是存在局部与整体的关系,由低层次的特征经过组合,组成高层次的特征,并且得到不同特征之间的空间相关性
CNN抓住共性的手段有四个:局部连接、权值共享、池化操作、多层次结构
局部连接:使网络可以提取数据的局部特征;
权值共享:大大降低了网络的训练难度,一个filter只提取一个特征,在整个图片(或者语音、文本)中进行卷积;
池化操作:与多层次结构一起,实现了数据的降维,将低层次的局部特征组合为较高层次的特征,从而对整个图片进行表示
8.LSTM结果推导,为什么比RNN好?
答:推导forget gate, input gate, cell state, hidden information等的变化;因为LSTM有进有出且当前的cellinformation是通过input gate控制之后叠加的,RNN是叠乘,因此LSTM可以防止梯度消失或者梯度爆炸
9.sigmoid、Tanh、 Relu这三个激活函数有什么缺点或者不足,有没改进的激活函数?
答:relu函数:梯度弥散没有完全解决,神经元死亡问题
解决方案:LeakyRelu 解决了神经死亡问题
Maxout:参数较多,本质上是在输出结果上又增加了一层 克服了relu的缺点,比较提倡使用
10.为什么要引入非线性激励函数?
答:1.对于神经网络来说,网络的每一层相当于f(wx+b)=f(w’x),对于线性函数,其实相当于f(x)=x,那么在线性激活函数下,每一层相当于用一个矩阵
去乘以x,那么多层就是反复的用矩阵去乘以输入。根据举证的乘法法则,多个矩阵相乘得到一个大的矩阵。所以线性激励函数下,多层网络与一层网络相当。
比如:两层的网络f(w1*f(w2x)) = W1W2x = Wx
2.非线性变换是深度学习有效的原因之一。原因在于非线性相当于对空间进行变换,变换完成之后相当于对问题空间进行简化,原来线性不可解的问题现
在变得可以解了
3.如果不用激励函数(其实相当于激励函数是f(x)=x),在这种情况下,你的每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络多少层,
输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机了
正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络就有意义了(不再是输入的线性组合,可以逼近任意函数)。最早的想法是
sigmoid函数或者tanh函数,输出有界,很容易充当下一层输入
11.神经网路中使用relu函数要好过tanh和sigmoid函数?
答:1.使用sigmoid函数,算激活函数时(指数运算),计算量大,反向传播误差梯度时,求导涉及除法和指数运算,计算量相对较大,而采用relu激活函数,整个过程的计算量节省很多
2.对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况,这种现象称为饱和,从而无法完成深层网络的训练。而relu函数就不会出现饱和倾向,不会有特别小的梯度出现
3.relu函数会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。当然现在也有一些对relu函数的改进,比如prelu, random relu等,在不同的数据集上会有一些训练速度上或者准确率上的改进多加一句,现在主流的做法,会多做一步batch normalization,尽可能保证每一层网络的输入具有相同的分布。
12.深度学习中的Batch Normalization?
答:BN就是在神经网络的训练过程中对每层的输入数据加一个标准化处理
传统的神经网络,只是在将样本x输入输入层之前对x进行标准化处理(减均值,除标准差),以降低样本间的差异性。BN是在此基础上,不仅仅只对输入层的输入数据x进行标准化,还对每个隐藏层的输入进行标准化
13.为什么在LSTM模型中既存在sigmoid函数又存在tanh两种激活函数,二不是选择区中单独的一组?这样做的目的是什么?
答:sigmoid函数用在了各种gate上,产生0~1之间的值,这个一般只有sigmoid最直接了;
tanh用在了状态和输出上,是对数据的处理,这个用其他激活函数或许也可以;
两者的目的不同
14.如何解决RNN梯度爆炸和弥散的问题?
答:梯度爆炸:为解决梯度爆炸问题,Thomas Mikolov首先提出了一个简单的启发性的解决方案,就是当梯度大于一定阀值的时候,将它截断为一个较为小的数。
解决梯度弥散问题的两种方法:
第一种:将随机初始化W改为一个有关联的矩阵初始化。
第二种:使用ReLU代替sigmid函数。ReLU导数不是0就是1,因此,神经元的梯度将始终为1,而不会当梯度传播了一定时间之后变小
15.什么样的资料不适合深度学习?
答:(1) 数据集太小,数据样本不足时,深度学习相对于其他机器学习算法,没有明显优势;
(2) 数据集没有局部相关性,目前深度学习表现较好的领域是图像识、语音、自然语言处理等领域,这些领域的一个共性是局部相关性。图像中像素组成物体,语音信号中音位组合成单词,文本数据中单词组合成句子,这些特征元素的组合一旦被打乱,表示的含义同时也被改变。对于没有这样的局部相关性的数据集,不合适使用深度学习算法进行处理。举个例子:预测一个人的健康状况,相关的参数会有年龄,职业,收入,家庭状况等各种因素,将这些元素打乱,并不会影响相关的结果
16.如何解决梯度消失和梯度膨胀?
答:(1) 梯度消失:根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重解雇小于1的话,那么即使这个结果是0.99,经过足够多层传播之后,误差对输入层的偏导会趋于0;
(2) 梯度膨胀:根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重结果都大于1的话,在经过足够多层传播之后,误差对输入层的偏导会趋于无穷大
解决方案:可以通过激活函数来解决或者用Bath Normalization解决这个问题
17.广义线性模型是怎么被应用在深度学习中?
答:深度学习从统计学角度,可以看做递归的广义线性模型
广义线性模型相对于经典的线性模型(y=wx+b),核心在于引入了连接函数g(.),形式变为:y=g-1(wx+b)
深度学习时递归的广义线性模型,神经元的激活函数,既为广义线性模型的连接函数。逻辑回归(广义线性模型的一种)的Logistic函数即为神经元激活函数中的sigmoid函数,很多类似的方法在统计学和神经网络中的名称不一样,容易引起初学者的困惑
18.简述神经网络的发展史?
答:sigmoid会饱和,造成梯度消失,于是有了ReLU
ReLU负半轴是死区,会造成梯度变为0,于是有了LeakyReLU、PReLU
强调梯度和权值分布的稳定性,由此有了ELU,以及较新的SELU
太深了,梯度传递不下去,于是有了highway
干脆连highway的参数都不要,直接变残差,于是有了ResNet
强行稳定参数的均值和方差,于是有了BatchNorm
在梯度流中增加噪声,于是有了Dropout
RNN梯度不稳定,于是加几个通路和门控,于是有了LSTM
LSTM简化一下,有了GRU
GAN的JS散度有问题,会导致梯度消失或者无效,于是有了WGAN
WGAN对梯度的clip有问题,于是有了WGAN-GP
19.深度学习常用方法:
答:全连接DNN(相邻层互相连接,层内无连接)
AutoEncoder(尽可能还原输入)、Sparse Coding(在AE上加入L1规范)、RBM(解决概率问题)——>>特征检测——>>栈式叠加贪心训练
RBM——>DBM
解决全连接DNN的全连接问题——>CNN
解决全连接DNN的无法对时间序列上变化进行建模的问题——>RNN——解决时间轴上的梯度消失问题——>>LSTM
DNN是传统的全连接网络,可以用于广告点击预估,推荐等。其使用embedding的方式将很多离散的特征编码到神经网络中,可以很大的提升结果
CNN主要用于计算机视觉(Computer Vision)领域,CNN的出现主要解决了DNN在图像领域中参数过多的问题。同时,CNN特有的卷积,池化、batch normalization、Inception、ResNet、DeepNet等一系列的发展使得在分类、物体检测、人脸识别、图像分割等众多领域有了长足的进步。同时,CNN不仅在图像上应用很多,在自然语言处理上也颇有进展,现在已经有基于CNN的语言模型可以比LSTM更好的效果。在最新的AlphaZero中,CNN中的ResNet也是两种基本算法之一
GAN是一种应用在生成模型的训练方法现在有很多在CV方面的应用,例如图像翻译,图像超清化,图像修复等等
RNN主要应用于NLP领域,用于处理序列到序列的问题。普通RNN会遇到梯度爆炸和梯度消失的问题。所以现在在NLP领域,一般会使用LSTM模型。在最近的机器翻译领域,Attention作为一种新的手段,也被引入进来
除了DNN、RNN和CNN外,自动编码器(AutoEncoder)、稀疏编码(SparseCoding)、深度信念网络(DBM)、限制玻尔兹曼(RBM)也都有相应的研究
20.简单说说CNN常用的几个模型:
名称 | 特点 |
---|---|
LeNet5 | 没啥特点,不过是第一个CNN应该知道 |
AlexNet | 引入了ReLU和dropout,引入数据增强,池化相互之间有覆盖,三个卷积一个最大池化+三个全连接 |
VGGNet | 采用11和33的卷积核以及2*2的最大池化使得层数变得更深,常用VGGNet-16和VGGNet-19 |
Google Inception Net | 这个在控制参数的同时,获得了比较好的分类性能,和上面相比有几个大的改进 1.去除最后的全连接层,而是用一个全局的平均池化层来取代它 2.引入Inception Module,这是一个4个分支结合的结构,所有的分支都用到了11的卷积,这是因为1×1性价比很高,可以用很少的参数达到非线性和特征变换 3.Inception V2第二版将所有的55变成2个3*3,而且提出来著名的Batch Normalization4.Inception V3第三版就更变态了,把较大的二维卷积拆成了两个较小的一维卷积,加速运算,减少过拟合,同时还更改了Inception Module的结构 |
微软ResNet残差神经网络(Residual Neural Network) | 1.引入高速公路结构,可以让神经网络 变得非常深 2.ResNet第二个版本将ReLU激活函数 变成y=x的线性函数 |