深度学习问题总结

1.归一化

1.什么是归一化

把数据经过处理限制在需要的范围内

2.归一化的目的

1.消除量纲的干扰

2.加速收敛

3.归一化的方式

1.最大最小归一化:\tfrac{x_i-x_{min}}{x_{max}-x_{min}}

2.标准化:\frac{\tfrac{x- \mu}{\sigma }}{}

标准化对噪点不敏感

4.哪些模型不需要归一化

        概率模型不需要归一化,因为他们不关心变量的值,而是关心变量分布与变量之间的条件概率,如决策树,随机森林(rf)。

        像adaboost,svm,逻辑回归,K-近邻,K-means需要进行归一化。

4.BN,LN,GN的区别

BN:对批次内所有数据进行归一化,有几个通道就归一化几次

LN:对所有通道进行归一化,批次内有几个样本就归一化几次

GN:对批次内所有数据进行归一化,和BN、LN的区别在于GN可以自己决定归一化的一次样本数和通道数

2.卷积CNN

1.什么是卷积

卷积核对要卷积的tensor对应通道对应点相乘后相加

2.CNN的池化

取区域内的平均或最大值

3.CNN最成功的应用是在cv,那为什么NLP和speech的很多问题也可以用CNN解出来?为什么AlphaGo里也用了CNN?这几个不相关的问题的相似性在哪里?CNN通过什么手段抓住了这个共性

以上问题的相关性在于都存在局部与整体的关系,由低层次的特征通过组合,得到高层次的特征,并且得到不同特征之间的空间相关性。CNN抓住此共性的手段主要有4个:局部连接,权值共享,池化操作和多层次结构。局部连接使网络可以提取局部特征,权值共享使每个卷积核学习只学习一个特征,池化操作和多层次结构可以对特征进行降维,由低层次特征得到较高层次的特征

这里想起7*7卷积可以由3个3*3卷积代替,为什么?因为卷积后输出的特征图的大小相同

卷积后的特征图大小=(l-k)/s+1

4.卷积的主要结构

1.输入层,对数据去平均值

2.卷积层,局部关联抽取feature

3.激活层,非线性变化

4.池化层,下采样

5.全连接层,增加模型的非线性

6.BN层,缓解梯度消失

5.CNN常用的几个模型

1.LeNet-5

        5*5conv-pooling-5*5conv-pooling-FC

        32-->28=\frac{input\_size+2p-k}{s}=(32-5)/1+1

        p:是填充大小,这里32已经是填充完的了

        k:卷积核的大小

        s:步长

FC层:目的就是把学习到的特征进行综合

原理:原本由5个3*3的特征图:5*3*3 输出为1*120的全连接,

那就直接让特征图进行卷积就行了:

5*3*3*120个卷积核和原本的5*3*3特征图对应通道的对应点相乘后相加

 2.Alexnet

        这个网络是一个大一点的LeNet,

        conv-->pooling-->conv-->pooling-->conv-->conv-->conv-->pooling-->FC*3

        改进:

        1.数据增强

                就是对数据集的图像变换,拉伸,明暗变换,旋转等

        2.最大池化

                池化由平均池化变成最大池化,然后池化区域3*3,步长2,有重叠

        3.Relu

                将激活函数由sigmoid变为Relu

        4.dropout

                在全连接中加入了dropout

 3.VGG

        主打一个22333+3*FC,然后每个后面加一个pooling层

        里面用到的卷积核都是3*3,大的卷积核可以通过小卷积核的叠加得到嘛

 4.GoogleLeNet

GoogleLeNet改进为1*1inception,有两个特点

1.卷积后都加了一个1*1卷积

作用:

1)卷积后再加一个1*1的卷积,每次卷积后都有激活层,相当于增加了一层带激活函数的线性层,增加非线性

2)可以通过卷积进行降维,提取特征的同时减少计算量

2.利用不同尺度的卷积核进行卷积

作用:可以提取到不同尺度的特征

6.rcnn,fast-rcnn,faster-rnn的区别

3.简述下什么是生成对抗GAN网络

GAN之所以是对抗,是因为GAN的内部是竞争关系,一个是generator,它的工作是生成图片,并且尽量使其看上去来自于训练样本,另一个discriminator,它的任务是判断真实样本和生成样本。一个生产假币,一个分辨假币和真币。

4.深度学习调参经验

1.进行数据预处理

2.数据归一化:都可以根据loss值得下降趋势进行调整

3.对数据做shuffle

4.学习率

5.参数的初始化方式

6.优化函数:sgd,adam 相比adam要简单一点,不需要设置参数,效果也不错

7.embedding的维度:维度并不是越多越好

8.残差网络的层数:和embedding的维度差不多也是一个凸函数

9.激活函数:不一定relu就好用,relu+sigmoid啥的都可以尝试

10.dropout

11.卷积核的大小

5.激活函数

1.sigmoid函数

 缺点:

1.会有梯度弥散

        根据图像可以看出当输入值的绝对值比较大的时候梯度比较小,更新梯度的时候容易造成梯  度弥散现象

2.不是关于原点对称

        不是关于原点对称会造成在梯度更新时,参数值同时变大或者同时变小,造成阶梯状下降

3.公式中含有指数函数计算比较困难

2.tanh函数

优点:

1.解决了关于原点对称的问题,加快收敛

缺点:

1.还是没有弥补梯度弥散现象

2.包含指数函数,计算复杂

3.relu函数

 优点:

1.解决了部分梯度弥散的问题

2.收敛速度快

3.没有指数函数计算简单

缺点:

1.在x<0处会有死亡神经元

        经过PRelu,LeakyRelu改进后避免这个问题 

4.为什么要引入非线性激活函数

谜底就在谜面里,是为了引入非线性因素啊。如果都是线性的y=wx+b,即使再多层

前面传播的公式a_2=f(w_2f(w_1x+b_1)+b_2

f()是线性的则

a_2=w_2w_1x+b=wx+b

引入非线性激活函数后,可以引入非线性因素解决线性不可分的问题,逼近任何函数。

5.激活函数的意义,有哪些属性是必要的

1.激活函数的意义就是为了引入非线性,使多层网络不会退化为单层网络

2.几乎处处可微,毕竟是要进行梯度下降的

3.计算简单

4.非饱和性,就是尽量不会造成因为激活函数造成的梯度消失

5.单调性,这个同样是有利于梯度下降

6.输出范围有限

7.接近恒等变换

8.参数少

9.归一化

6.循环神经网络

1.RNN

 现在时刻的隐藏层 S_t 包含现在时刻的输入 X_t 和前一时刻的隐藏层状态 S_{t-1} 

S_t=f(UX_t+WS_{t-1}+b)

 其中注意这里的权值是共享的

网络中的W都是相同的,U,V也是一样

这是典型的N to N的结构,就是输入N个,输出N个

另外还有

N to 1:

只需要在最后一个隐藏层状态进行输出,用来判断分类或者情感趋向等

1 to N:

把输入重复输入生成不同的输出,用来进行输入图像生成一段描述等

 N to M:

最重要的变种,又叫Encoder-Decoder模型,也可以叫做seq2seq模型

Encoder-Decoder结构先将输入数据编码成一个上下文向量c

得到c的方法有很多种

 通过编码器结构得到c,这个上下文向量c得到之后有什么用呢

利用另一部分编码器结构的RNN网络进行解码

一种做法是将上下文向量c当作初始状态 h_0 输入到解码器中:

 还有一种做法就是将上下文向量c作为每一步的输入:

 主要用于机器翻译,语音转换,文本摘要,阅读理解

RNN的缺点:

长期依赖问题,RNN不是对长序列进行建模。为什么不能?

因为梯度消失,为什么会造成梯度消失

因为后向传播时包含激活函数导数的累乘,当激活函数的导数一直小于1,就会造成梯度消失现象

 怎么解决这个问题:

把激活函数换一下,把sigmoid/tanh换成relu,把RNN换成LSTM

2.LSTM:

那么LSTM和RNN之间的区别是啥

首先LSTM有两个状态,c^t,h^t 

c^t 变化的比较慢

h^t 变化的比较快

那除了变化快慢还有什么区别呢

在了解 c^t,h^t  区别之前先了解一下两个输入和四个激活状态

两个输入: h^{t-1}, x^{t}

四个激活状态包括3个sigmiod还有一个tanh,3个sigmoid表示不同的门,tanh表示输入的激活状态

三个门都有:

遗忘门: z^f=\sigma (w^f[x^t,h^{t-1}]+b^f)

记忆门: z^i=\sigma (w^i[x^t,h^{t-1}]+b^i)

输出门:z^o=\sigma (w^o[x^t,h^{t-1}]+b^o)

输入的激活状态:

        z=tanh(w[x^t,h^{t-1}]+b)

然后就是利用得到的这4个状态求  c^t,h^t 

首先由 c^{t-1} 得到 c^t

        c^t=z^f c^{t-1}+z^i z

        这一步的意思就是忘记之前不重要的,记住当前输入重要的

再由 c^t 得到 h^{t}

        h^t=z^otanh(c^t)

 LSTM中的激活函数包括sigmiod和tanh,为什么不使用一个激活函数呢

sigmoid的使用是作为一个门的作用,他的取值是0-1,可以根据数据的重要性给予数值,这个无法代替,但是tanh就是一个简单的激活函数可以使用其他的激活函数代替。

7.如何解决梯度消失和爆炸的问题

首先搞清楚为什么会梯度消失和爆炸

因为后向传播时是权重和激活函数导数的连乘,所以当这个权重和激活函数相乘小于1的时候,经过累乘后就会造成梯度消失,当这个权重和激活函数相乘大于1的时候就会造成梯度爆炸。

1.pre-train和fun-tunning

思想就是想找局部最优,再整合起来找全局最优

2.梯度截断

适合于梯度爆炸的情况

3.正则化

就是把权重减小来抑制梯度爆炸

4.激活函数

选择relu

5.归一化

6.残差网络

7.将RNN换成LSTM

8.梯度下降法的神经网络容易收敛到局部最优,为什么应用广泛

神经网络容易收敛到局部最优可能只是一种想象,很多时候我们可能从来没有找到过局部最优,更别说是全局最优了。所有很可能我们实际上实在什么也没找到的情况之下就停止训练了,然后拿到训练集上一看,效果还不错。

9.怎么缓解神经网络中的过拟合

神经网络,本质就是一个大量参数的f(x),过拟合了就说明参数过多了,两个方向,一个是减少参数的数目,另一个减小参数的数值

1.早停法

2.dropout

3.正则化

4.残差网络

5.BN

10.神经网络中,是否隐藏层如果具有足够数量的单位,他就可逼近任何连续函数?

理论上是这样的,具有非线性激活函数的足够数量的隐藏层单元是可以近似任何函数的

11.为什么更深的网络更好?

更深的网络仅需要少的参数就可以表达许多重要的函数类。比如有九个灯控制他们的明暗,如果开关只铺一层,需要9个开关。铺两层需要6个就行了。

12.更多的数据是否有利于更深的神经网络

当数据集的数目足够克服过拟合时,深度学习只会比其他技术更有效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值