深度学习主要有哪些重点

2020-08-17 09:23发布

2条回答
卡卡
2楼 · 2020-08-31 10:36


深度学习在比较火的时候,很多人想从事这方面的工作,但是深度学习有哪些必须会的知识点呢?我在学习的过程中,慢慢的学习,慢慢积累,现将会的一部分记录了下来,会慢慢的更新的


1、CPU与GPU的区别


CPU:CentralProcessingUnit中央处理器,是一台计算机的运算核心和控制核心,


GRU:GraphicProcessingUnit图形处理器,一个专门的图形核心处理器,GRU是显示卡的“大脑”,决定了该显卡的档次和大部分性能


CPU虽然有多核,但一般也就几个,每个核都有足够大的缓存和足够多的数字和逻辑运算单元,需要很强的通用性处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分歧跳转和中断处理,并辅助很多加速分支判断甚至更复杂的逻辑判断的硬件。这些都使得CPU的内部结构异常复杂,而GPU面对的则是类型高度统一的、相互依赖的大规模数据和不需要被打断的纯净的计算环境


GPU的核数远超过CPU,被称为众核,每个核拥有的缓存大小相对小,数字逻辑运算单元也少而简单,面对的则是类型高度统一的、相互无依赖的大规模数据和不需要被打断的纯净的计算环境。GPU的工作大部分是这样的:计算量大,但没什么技术含量,而且要重复很多很多次


下面的解释很好理解:




图片来自网址:


https://www.cnblogs.com/chakyu/p/7405186.html()


2、什么样的资料集不适合深度学习的训练学习?


数据集太小,数据样本不足时,深度学习相对其它机器学习算法,没有明显优势。


数据集没有局部相关特性,目前深度学习表现比较好的领域主要是图像/语音/自然语言处理等领域,这些领域的一个共性是局部相关性。图像中像素组成物体,语音信号中音位组合成单词,文本数据中单词组合成句子,这些特征元素的组合一旦被打乱,表示的含义同时也被改变。对于没有这样的局部相关性的数据集,不适于使用深度学习算法进行处理。


举个例子:预测一个人的健康状况,相关的参数会有年龄、职业、收入、家庭状况等各种元素,将这些元素打乱,并不会影响相关的结果  例子中的各个特征之间没有相关性,所以不适合作为深度学习的语料集进行深度学习的训练。


3、激活函数的作用


定义:激活函数是映射:h:R-->R,且几乎处处可导


神经网络中激活函数的主要作用是提供网络的非线性建模能力,如不特别说明,激活函数一般而言是非线性函数,假设一个示例神经网络中仅包含线性卷积和全连接运算,那么该网络仅能够表达线性映射,即便增加网络的深度也依旧还是线性映射,难以有效建模实际环境中非线性分布的数据,加入(非线性)激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。因此,激活函数是深度神经网络中不可或缺的部分。


4、神经网络


神经网络的学习就是学习如何利用矩阵的线性变换加激活函数的非线性变换,将原始输入空间投向线性可分/稀疏的空间去分类/回归。增加节点数:增加维度,即增加线性转换能力。增加层数:增加激活函数的次数,即增加非线性转换次数


 为什么深层神经网络比浅层神经网络更高效:迭代组成的先验知识使得样本可用于帮助训练其他共用同样底层结构的样本。

神经网络在什么问题上不具备优势:不满足并行与迭代先验的任务


5、CNN: 


1)卷积:对图像元素的矩阵变换,是提取图像特征的方法,多种卷积核可以提取多种特征。一个卷积核覆盖的原始图像的范围叫做感受野(权值共享)。一次卷积运算(哪怕是多个卷积核)提取的特征往往是局部的,难以提取出比较全局的特征,因此需要在一层卷积基础上继续做卷积计算,这也就是多层卷积。


2)池化:降维的方法,按照卷积计算得出的特征向量维度大的惊人,不但会带来非常大的计算量,而且容易出现过拟合,解决过拟合的办法就是让模型尽量“泛化”,也就是再“模糊”一点,那么一种方法就是把图像中局部区域的特征做一个平滑压缩处理,这源于局部图像一些特征的相似性(即局部相关性原理)。

3)全连接:softmax分类

训练过程:

卷积核中的因子(×1或×0)其实就是需要学习的参数,也就是卷积核矩阵元素的值就是参数值。一个特征如果有9个值,1000个特征就有900个值,再加上多个层,需要学习的参数还是比较多的。

CNN的三个优点:


sparseinteraction(稀疏的交互),parametersharing(参数共享),equivalentrespresentation(等价表示)。适合于自动问答系统中的答案选择模型的训练。


CNN与DNN的区别:


DNN的输入是向量形式,并未考虑到平面的结构信息,在图像和NLP领域这一结构信息尤为重要,例如识别图像中的数字,同一数字与所在位置无关(换句话说任一位置的权重都应相同),CNN的输入可以是tensor,例如二维矩阵,通过filter获得局部特征,较好的保留了平面结构信息。


filter尺寸计算:FeatureMap的尺寸等于(input_size+2*padding_size−filter_size)/stride+1


6、RNN:


1)为什么具有记忆功能?

这个是在RNN就解决的问题,就是因为有递归效应,上一时刻隐层的状态参与到了这个时刻的计算过程中,直白一点呢的表述也就是选择和决策参考了上一次的状态。

2)为什么LSTM记的时间长?

因为特意设计的结构中具有CEC的特点,误差向上一个状态传递时几乎没有衰减,所以权值调整的时候,对于很长时间之前的状态带来的影响和结尾状态带来的影响可以同时发挥作用,最后训练出来的模型就具有较长时间范围内的记忆功能。

误差回传的主力还是通过了MemoryCell而保持了下来。所以我们现在用的LSTM模型,依然有比较好的效果。

最后整个梳理一下误差回传的过程,误差通过输出层,分类器,隐层等进入某个时刻的Block之后,先将误差传递给了OutputGate和MemoryCell两个地方。

到达输出门的误差,用来更新了输出门的参数w,到达MemoryCell之后,误差经过两个路径,

1是通过这个cell向前一个时刻传递或者更前的时刻传递,

2是用来传递到inputgate和block的输入,用来更新了相应的权值(注意!不会经过这里向前一个时刻传递误差)。

最关键的问题就是,这个回传的算法,只通过中间的MemoryCell向更前的时刻传递误差。


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


以上几个不相关问题的相关性在于,都存在局部与整体的关系,由低层次的特征经过组合,组成高层次的特征,并且得到不同特征之间的空间相关性。低层次的直线/曲线等特征,组合成为不同的形状,最后得到汽车的表示。 

CNN抓住此共性的手段主要有四个:局部连接/权值共享/池化操作/多层次结构。局部连接使网络可以提取数据的局部特征;权值共享大大降低了网络的训练难度,一个Filter只提取一个特征,在整个图片(或者语音/文本)中进行卷积;池化操作与多层次结构一起,实现了数据的降维,将低层次的局部特征组合成为较高层次的特征,从而对整个图片进行表示。


8、什麽造成梯度消失问题? 

神经网络的训练中,通过改变神经元的权重,使网络的输出值尽可能逼近标签以降低误差值,训练普遍使用BP算法,核心思想是,计算出输出与标签间的损失函数值,然后计算其相对于每个神经元的梯度,进行权值的迭代。 

梯度消失会造成权值更新缓慢,模型训练难度增加。造成梯度消失的一个原因是,许多激活函数将输出值挤压在很小的区间内,在激活函数两端较大范围的定义域内梯度为0。造成学习停止


9、小知识点


损失函数loss:预测值月已知结果的差距,常用均方误差MSE作为loss


学习率learningrate:决定参数每次更新的幅度


滑动平均:提高模型泛化能力


正则化:缓解过拟合


池化pooling:减少特征数量


CNN:借助卷积核提取特征后,送入全连接网络


10、为什么需要RNN(循环神经网络)

一般的神经网络智能单独的处理一个个的输入,前一个输入和后一个输入是完成没有关心的,但是,某些任务需要能够更好的处理序列的信息,即前面的输入和后面的输入是有关系的。比如,我们在理解一句话的意思时,孤立的理解这句话的每一个词是不够的,我们需要处理这些词连接起来的整个序列


搜集的面试题


  1. 台球

  2. 有8个台球,其中一个比其他的7个都要重一些。如果仅仅是使用天平而不称出具体的重量,请问最少几次能找出那个最重的台球?

  3. 2. 沙漠里的男尸

  4. 在沙漠里发现一具男人的尸体,他手里有一根火柴。没有脚印。请问他为什么会死,是怎么死的?

  5. 3.4升水

  6. 你有足够多的水和两个杯子:5L和3L。请精确地量出4L水。

  7. 4. 熊

  8. 你刚建造了一间房子,房子的每一面墙都是朝南的。突然你看见了一只熊,请问这只熊是什么颜色的?

  9. 5. 药片

  10. 医生给了病人4片药:每一种药2片,医生叮嘱千万不能弄混了。早上一种药吃1片,晚上一种药吃1片。如果吃错了或者不吃,病人就会死掉。然而,病人把要弄混了,怎么办?

答案1:

2次。把所有的球分成3组,其中2组是3个球,最后一组是两个球。首先,把3个球的两组放在天平上。如果其中一方比较重,把偏重的那一组球任意拿出来两个放在天平上。如果两组球一样重,那就把剩下的2个球放在天平上称重。

答案2:

这个问题主要是测试你还原事件真相的能力。这个男人是在跳下飞机的时候摔死的。飞机上的降落伞不够,所以用抽火柴的方式决定。不幸的是,这个男人抽中的是短火柴,所以就只能在没有降落伞的情况下跳下去了。

答案3:

  1. 先把5L水的杯子装满,然后用5L的杯子里的水把3L的杯子装满。

  2. 2.把3L杯子里的水倒掉。

  3. 3.把5L杯子里剩的2L水倒入3L的杯子。

  4. 4.把5L的杯子装满,再用5L杯子里的水补满3L的杯子(里边有2L的水)。这样5L的杯子里就有4L水。

  5. 答案4:

  6. 白色的。只有在北极才能做到房子的每一面墙都是朝南的。

  7. 答案5:

  8. 把四片药都分成两半,早上吃4个半片,晚上吃4个半片。


Anonyem
3楼 · 2020-09-21 14:54


深度学习在比较火的时候,很多人想从事这方面的工作,但是深度学习有哪些必须会的知识点呢?我在学习的过程中,慢慢的学习,慢慢积累,现将会的一部分记录了下来,会慢慢的更新的

1、CPU与GPU的区别

CPU:CentralProcessingUnit中央处理器,是一台计算机的运算核心和控制核心,

GRU:GraphicProcessingUnit图形处理器,一个专门的图形核心处理器,GRU是显示卡的“大脑”,决定了该显卡的档次和大部分性能

CPU虽然有多核,但一般也就几个,每个核都有足够大的缓存和足够多的数字和逻辑运算单元,需要很强的通用性处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分歧跳转和中断处理,并辅助很多加速分支判断甚至更复杂的逻辑判断的硬件。这些都使得CPU的内部结构异常复杂,而GPU面对的则是类型高度统一的、相互依赖的大规模数据和不需要被打断的纯净的计算环境

GPU的核数远超过CPU,被称为众核,每个核拥有的缓存大小相对小,数字逻辑运算单元也少而简单,面对的则是类型高度统一的、相互无依赖的大规模数据和不需要被打断的纯净的计算环境。GPU的工作大部分是这样的:计算量大,但没什么技术含量,而且要重复很多很多次

下面的解释很好理解:


图片来自网址:

https://www.cnblogs.com/chakyu/p/7405186.html()

2、什么样的资料集不适合深度学习的训练学习?

数据集太小,数据样本不足时,深度学习相对其它机器学习算法,没有明显优势。

数据集没有局部相关特性,目前深度学习表现比较好的领域主要是图像/语音/自然语言处理等领域,这些领域的一个共性是局部相关性。图像中像素组成物体,语音信号中音位组合成单词,文本数据中单词组合成句子,这些特征元素的组合一旦被打乱,表示的含义同时也被改变。对于没有这样的局部相关性的数据集,不适于使用深度学习算法进行处理。

举个例子:预测一个人的健康状况,相关的参数会有年龄、职业、收入、家庭状况等各种元素,将这些元素打乱,并不会影响相关的结果  例子中的各个特征之间没有相关性,所以不适合作为深度学习的语料集进行深度学习的训练。

3、激活函数的作用

定义:激活函数是映射:h:R-->R,且几乎处处可导

神经网络中激活函数的主要作用是提供网络的非线性建模能力,如不特别说明,激活函数一般而言是非线性函数,假设一个示例神经网络中仅包含线性卷积和全连接运算,那么该网络仅能够表达线性映射,即便增加网络的深度也依旧还是线性映射,难以有效建模实际环境中非线性分布的数据,加入(非线性)激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。因此,激活函数是深度神经网络中不可或缺的部分。

4、神经网络

神经网络的学习就是学习如何利用矩阵的线性变换加激活函数的非线性变换,将原始输入空间投向线性可分/稀疏的空间去分类/回归。增加节点数:增加维度,即增加线性转换能力。增加层数:增加激活函数的次数,即增加非线性转换次数

 为什么深层神经网络比浅层神经网络更高效:迭代组成的先验知识使得样本可用于帮助训练其他共用同样底层结构的样本。神经网络在什么问题上不具备优势:不满足并行与迭代先验的任务

5、CNN: 

1)卷积:对图像元素的矩阵变换,是提取图像特征的方法,多种卷积核可以提取多种特征。一个卷积核覆盖的原始图像的范围叫做感受野(权值共享)。一次卷积运算(哪怕是多个卷积核)提取的特征往往是局部的,难以提取出比较全局的特征,因此需要在一层卷积基础上继续做卷积计算,这也就是多层卷积。

2)池化:降维的方法,按照卷积计算得出的特征向量维度大的惊人,不但会带来非常大的计算量,而且容易出现过拟合,解决过拟合的办法就是让模型尽量“泛化”,也就是再“模糊”一点,那么一种方法就是把图像中局部区域的特征做一个平滑压缩处理,这源于局部图像一些特征的相似性(即局部相关性原理)。3)全连接:softmax分类训练过程:卷积核中的因子(×1或×0)其实就是需要学习的参数,也就是卷积核矩阵元素的值就是参数值。一个特征如果有9个值,1000个特征就有900个值,再加上多个层,需要学习的参数还是比较多的。CNN的三个优点:

sparseinteraction(稀疏的交互),parametersharing(参数共享),equivalentrespresentation(等价表示)。适合于自动问答系统中的答案选择模型的训练。

CNN与DNN的区别:

DNN的输入是向量形式,并未考虑到平面的结构信息,在图像和NLP领域这一结构信息尤为重要,例如识别图像中的数字,同一数字与所在位置无关(换句话说任一位置的权重都应相同),CNN的输入可以是tensor,例如二维矩阵,通过filter获得局部特征,较好的保留了平面结构信息。

filter尺寸计算:FeatureMap的尺寸等于(input_size+2*padding_size−filter_size)/stride+1

6、RNN:

1)为什么具有记忆功能?这个是在RNN就解决的问题,就是因为有递归效应,上一时刻隐层的状态参与到了这个时刻的计算过程中,直白一点呢的表述也就是选择和决策参考了上一次的状态。2)为什么LSTM记的时间长?因为特意设计的结构中具有CEC的特点,误差向上一个状态传递时几乎没有衰减,所以权值调整的时候,对于很长时间之前的状态带来的影响和结尾状态带来的影响可以同时发挥作用,最后训练出来的模型就具有较长时间范围内的记忆功能。误差回传的主力还是通过了MemoryCell而保持了下来。所以我们现在用的LSTM模型,依然有比较好的效果。最后整个梳理一下误差回传的过程,误差通过输出层,分类器,隐层等进入某个时刻的Block之后,先将误差传递给了OutputGate和MemoryCell两个地方。到达输出门的误差,用来更新了输出门的参数w,到达MemoryCell之后,误差经过两个路径,1是通过这个cell向前一个时刻传递或者更前的时刻传递,2是用来传递到inputgate和block的输入,用来更新了相应的权值(注意!不会经过这里向前一个时刻传递误差)。最关键的问题就是,这个回传的算法,只通过中间的MemoryCell向更前的时刻传递误差。

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

以上几个不相关问题的相关性在于,都存在局部与整体的关系,由低层次的特征经过组合,组成高层次的特征,并且得到不同特征之间的空间相关性。低层次的直线/曲线等特征,组合成为不同的形状,最后得到汽车的表示。 CNN抓住此共性的手段主要有四个:局部连接/权值共享/池化操作/多层次结构。局部连接使网络可以提取数据的局部特征;权值共享大大降低了网络的训练难度,一个Filter只提取一个特征,在整个图片(或者语音/文本)中进行卷积;池化操作与多层次结构一起,实现了数据的降维,将低层次的局部特征组合成为较高层次的特征,从而对整个图片进行表示。

8、什麽造成梯度消失问题? 神经网络的训练中,通过改变神经元的权重,使网络的输出值尽可能逼近标签以降低误差值,训练普遍使用BP算法,核心思想是,计算出输出与标签间的损失函数值,然后计算其相对于每个神经元的梯度,进行权值的迭代。 梯度消失会造成权值更新缓慢,模型训练难度增加。造成梯度消失的一个原因是,许多激活函数将输出值挤压在很小的区间内,在激活函数两端较大范围的定义域内梯度为0。造成学习停止

9、小知识点

损失函数loss:预测值月已知结果的差距,常用均方误差MSE作为loss

学习率learningrate:决定参数每次更新的幅度

滑动平均:提高模型泛化能力

正则化:缓解过拟合

池化pooling:减少特征数量

CNN:借助卷积核提取特征后,送入全连接网络

10、为什么需要RNN(循环神经网络)一般的神经网络智能单独的处理一个个的输入,前一个输入和后一个输入是完成没有关心的,但是,某些任务需要能够更好的处理序列的信息,即前面的输入和后面的输入是有关系的。比如,我们在理解一句话的意思时,孤立的理解这句话的每一个词是不够的,我们需要处理这些词连接起来的整个序列

搜集的面试题

  1. 台球有8个台球,其中一个比其他的7个都要重一些。如果仅仅是使用天平而不称出具体的重量,请问最少几次能找出那个最重的台球?2. 沙漠里的男尸 在沙漠里发现一具男人的尸体,他手里有一根火柴。没有脚印。请问他为什么会死,是怎么死的?3.4升水你有足够多的水和两个杯子:5L和3L。请精确地量出4L水。4. 熊你刚建造了一间房子,房子的每一面墙都是朝南的。突然你看见了一只熊,请问这只熊是什么颜色的?5. 药片医生给了病人4片药:每一种药2片,医生叮嘱千万不能弄混了。早上一种药吃1片,晚上一种药吃1片。如果吃错了或者不吃,病人就会死掉。然而,病人把要弄混了,怎么办?

  2. 答案1:2次。把所有的球分成3组,其中2组是3个球,最后一组是两个球。首先,把3个球的两组放在天平上。如果其中一方比较重,把偏重的那一组球任意拿出来两个放在天平上。如果两组球一样重,那就把剩下的2个球放在天平上称重。答案2:这个问题主要是测试你还原事件真相的能力。这个男人是在跳下飞机的时候摔死的。飞机上的降落伞不够,所以用抽火柴的方式决定。不幸的是,这个男人抽中的是短火柴,所以就只能在没有降落伞的情况下跳下去了。答案3:1.先把5L水的杯子装满,然后用5L的杯子里的水把3L的杯子装满。2.把3L杯子里的水倒掉。3.把5L杯子里剩的2L水倒入3L的杯子。4.把5L的杯子装满,再用5L杯子里的水补满3L的杯子(里边有2L的水)。这样5L的杯子里就有4L水。答案4:白色的。只有在北极才能做到房子的每一面墙都是朝南的。答案5:把四片药都分成两半,早上吃4个半片,晚上吃4个半片。


相关问题推荐

  • 回答 3

    换行。比如,print hello\nworld效果就是helloworld\n就是一个换行符。\是转义的意思,'\n'是换行,'\t'是tab,'\\'是,\ 是在编写程序中句子太长百,人为换行后加上\但print出来是一整行。...

  • 回答 42

    十种常见排序算法一般分为以下几种:(1)非线性时间比较类排序:a. 交换类排序(快速排序、冒泡排序)b. 插入类排序(简单插入排序、希尔排序)c. 选择类排序(简单选择排序、堆排序)d. 归并排序(二路归并排序、多路归并排序)(2)线性时间非比较类排序:...

  • 回答 70
    已采纳

    前景很好,中国正在产业升级,工业机器人和人工智能方面都会是强烈的热点,而且正好是在3~5年以后的时间。难度,肯定高,要求你有创新的思维能力,高数中的微积分、数列等等必须得非常好,软件编程(基础的应用最广泛的语言:C/C++)必须得很好,微电子(数字电...

  • 回答 28

    迭代器与生成器的区别:(1)生成器:生成器本质上就是一个函数,它记住了上一次返回时在函数体中的位置。对生成器函数的第二次(或第n次)调用,跳转到函数上一次挂起的位置。而且记录了程序执行的上下文。生成器不仅记住了它的数据状态,生成器还记住了程序...

  • 回答 9

    python中title( )属于python中字符串函数,返回’标题化‘的字符串,就是单词的开头为大写,其余为小写

  • 回答 6

    第一种解释:代码中的cnt是count的简称,一种电脑计算机内部的数学函数的名字,在Excel办公软件中计算参数列表中的数字项的个数;在数据库( sq| server或者access )中可以用来统计符合条件的数据条数。函数COUNT在计数时,将把数值型的数字计算进去;但是...

  • 回答 1

    head是方法,所以需要取小括号,即dataset.head()显示的则是前5行。data[:, :-1]和data[:, -1]。另外,如果想通过位置取数据,请使用iloc,即dataset.iloc[:, :-1]和dataset.iloc[:, -1],前者表示的是取所有行,但不包括最后一列的数据,结果是个DataFrame。...

  • Python入门简单吗2021-09-23 13:21
    回答 45

    挺简单的,其实课程内容没有我们想象的那么难、像我之前同学,完全零基础,培训了半年,直接出来就工作了,人家还在北京大公司上班,一个月15k,实力老厉害了

  • 回答 4

    Python针对众多的类型,提供了众多的内建函数来处理(内建是相对于导入import来说的,后面学习到包package时,将会介绍),这些内建函数功用在于其往往可对多种类型对象进行类似的操作,即多种类型对象的共有的操作;如果某种操作只对特殊的某一类对象可行,Pyt...

  • 回答 8

     相当于 ... 这里不是注释

  • 回答 4

    还有FIXME

  • 回答 3

    python的两个库:xlrd和xlutils。 xlrd打开excel,但是打开的excel并不能直接写入数据,需要用xlutils主要是复制一份出来,实现后续的写入功能。

  • 回答 8

    单行注释:Python中的单行注释一般是以#开头的,#右边的文字都会被当做解释说明的内容,不会被当做执行的程序。为了保证代码的可读性,一般会在#后面加一两个空格然后在编写解释内容。示例:#  单行注释print(hello world)注释可以放在代码上面也可以放在代...

  • 回答 2

    主要是按行读取,然后就是写出判断逻辑来勘测行是否为注视行,空行,编码行其他的:import linecachefile=open('3_2.txt','r')linecount=len(file.readlines())linecache.getline('3_2.txt',linecount)这样做的过程中发现一个问题,...

  • 回答 4

    或许是里面有没被注释的代码

  • 回答 26

    自学的话要看个人情况,可以先在B站找一下视频看一下

没有解决我的问题,去提问