深度学习基础知识和概念汇总(适合给小伙伴们查缺补漏)

深度学习基础知识和概念汇总

  • 入门推荐
    • 推荐课程
    • 推荐书籍
    • 其他推荐
  • 概念汇总及简洁解析

本文为自己学习过程中,所做笔记,很多笔记是参考前人大佬的,如有侵权,请私聊,如转载注明出处就好。
如果本文对您有用,希望老哥帮忙点个赞。
随着本人的不断学习,将持续更新。

入门推荐

深度学习定义:用深度神经网络的方法来解决机器学习的问题
学好深度学习,一定要三条腿都足够硬。这三条腿分别是:数学,编程,算法
数学:线性代数,工程矩阵,微积分,概率论
编程:python和C++(C++是高性能,面向底层硬件,非常快速的一种编程语义。Pytorch的底层是C++写的,然后加上一层python的接口,方便更多的人使用,调用。Python也被称为胶水语义,他能粘合其他语义和其他用户)。
算法。
希望一起入坑的小伙伴们,通过踏实的学习和训练把这三条腿都弄硬。

推荐课程

(1)同济子豪兄的大白话讲解卷积神经网络。
简单易懂,并且带有可视化实验,可以在宏观上对卷积神经网络有一个直观的认识,方便后续的学习。
本人被同济子豪兄实力圈粉。
(2)学python:北京理工大学的慕课公开课。
(3)机器学习:台湾台湾李宏毅老师(B站有)。本课程讲机器学习,深度学习,生成对抗网络及其各种变种,RNN,PPT简洁易懂,老师还有点二次元的感觉。
(4)计算机视觉公开课:斯坦福的CS231N(子豪兄的中文讲解课有利于消化吸收,B站上有)
(5)子豪兄的超有趣的神经网络可视化工具:有趣,好玩,操作一下,能够相当大的加深自己对网络的认识。
(6)深度学习框架与Pytorch入门实战:在跟着老师一起实战的过程中,提升速度非常快。(B站可查)

推荐书籍

(1)花书:人民邮电出版社的《DeepLearning深度学习》
(2)西瓜书:清华大学的《深度学习》
(3)清华大学的《统计学习方法》
(4)《动手学深度学习》(亚马逊的深度学习框架)
(5)人民邮电出版社的《鸟哥的Linux私房菜》:可以当成一本工具书,来学习linux。
(6)电子工业出版社的《C++Primer》

其他推荐

  1. 推荐的操作系统linux:代表着一个开源的世界,推荐利用终端不断的敲代码来学习。更代表一个开源世界,代表了开源理念,人人为我,我为人人**(学会了都说好)**
  2. Tensorflow:直接百度搜索tensorflow,里面有很多非常好的初学者程序教学,并且有很好的说明文档,唯一缺点就是都是英文的,对英文不好的小伙伴不是很友好。
  3. 标注软件
    Labelme (图像分割中制作数据集)
    Labellmg(图像检测中制作数据集)
    Yolo_mark(图像检测中制作数据集)
    Vatic(图像检测中制作数据集)(可以做视频的标注)
    Sloth(图像检测中制作数据集)
    Annotorious(图像检测中制作数据集)
    等,可以参考:https://blog.csdn.net/chaipp0607/article/details/79036312
  4. 论文:经典 ->顶会或者竞赛最佳
    最开始看论文 要慢点看,仔细点看。
    论文中的公式:80%的论文作者会故弄玄虚,故意让人不能马上一下子看懂,才能显得自己的论文有难度有水平。才更容易发更高水平的文章
  5. leetcode

概念汇总及简洁解析

没有按照相应的顺序,看到啥名词,补充啥名词吧。

  1. 深度学习的三驾马车:Yoshua Bengio、Yann LeCun和Geoffrey Hinton(三位开创级别的大佬)

  2. CNN的三大特点:
    (1) 权值共享(卷积核的权重)
    (2) 下采样(不断的将大图像,换成小图像(feature map))
    (3) 局部感受。(先局部再全局的顺序)(卷积核就是在局部区域进行提取特征的操作)

  3. 数据增强:通过对原始的数据进行变换,进行改变(如:旋转,裁剪,遮挡部分信息,改变光照强度,)然后和原始信息一同加入到深度学习的网络中,从而使得该网络训练出来的结果更具有鲁棒性。同时也大大减轻了过拟合,同时争抢了模型的泛化能力。

  4. 过拟合:数学上的定义:为了得到一致假设,而使假设变得过得复杂成为过拟合。
    拟合的外在表现是:该模型在训练集上的效果非常的好,但是一到测试集上效果非常的差,我们称这种现象为过拟合现象,同时也称,该模型的泛化能力很弱。
    **过拟合的造成原因:**数据太少(可以用数据增强来处理)和模型太复杂

  5. 泛化能力:机器学习算法对新样本的适应能力。

  6. 池化层:(1)将大的特征地图,变成小的特征地图,减少计算量(2)进行一部分的模糊化,减少一部分的干扰,解决过拟合问题(3)引入平移不变性
    现在的池化层也可以被某种卷积层代替了。

  7. Dropout:能够随机的忽略一部分神经元,可以有效的缓解模型过拟合,一定程度上达到了正则化的效果。AlexNet是将其进行实际应用化的工作。
    具体工作流程可以参考:
    https://blog.csdn.net/program_developer/article/details/80737724

  8. 激活函数的作用:为深度学习引入非线性。(非线性才是自然界中最普遍的特性)
    为什么要引入非线性:
    深度学习用数学的例子来比喻:就像是用一堆的神经元来搭建出来一个未知的函数,通过大量的数据来反向拟合出这个函数,其中神经元的权重,就是这个函数的参数。如果这个函数中的所有东西都是线性的话,得出来的函数也就是个线性组合而已,并不能像人一样完成人现实生活中完成的任务,所以必须引入非线性的部分,(这就是激活函数的作用)
    比方说人对物体的识别就是一个非线性模型,而激活函数就是将非线性模型引入上深度神经网络中。
    常用激活函数:
    一、ReLU(2001年起源于生物学家对闹信号的更精确激活模型)(线性整流函数)激活函数:(1)梯度是1,能够大大加大收敛速度,非常快,(2)完成很好的非线性的工作。(3)ReLU具有稀疏性(4)运算速度快(5)一定程度上避免了梯度爆炸和梯度消失
    二、Sigmoid(二分类多)(相对使用较早)(是之前应用较为广泛的激活函数,但近几年来用的越来越少了):(1)计算量大,是指数运算(2)容易出现梯度消失的情况,(两侧的位置,变换太缓慢,导数趋于0,所以相对来说较难生成觉深的网络)(停止反向传播的学习),当输入非常小或者输入非常大的时候,这些神经元的梯度是接近0的。
    三、Tanh(是双曲正切函数)生成对抗 和RNN中多)(是sigmoid的一种变种,)
    Tanh的收敛速度比Sigmoid的收敛速度更快:他的梯度小时问题比sigmoid要轻许多。梯度过早消失,会使得收敛的速度较慢。
    神经元的稀疏性是指:同时工作的只有部分神经元(少部分),其他神经元都被刻意屏蔽掉了,这样刻意提高学习的精度,同时缓解了过拟合现象的发生。Relu就具有稀疏性,通过Relu后,神经元能大量的发挥筛选作用,符合某一特征的就使劲放大,不符合的直接切掉。

  9. 梯度消失:在某些情况下,梯度趋近于0导致无法更新网络权重,一般情况是在反向传播过程中,由于梯度的累计,从后端到前端的过程中,梯度越来越小,使得前端的训练非常缓慢。在最坏的情况下,深圳能够完全停止神经网络的进一步训练。
    梯度消失的影响是使得网络权重无法进行更新。网络无法进行进一步的训练。
    梯度消失常出现的场合:(1)深层网络中(2)采用了不合适的损失函数。

  10. 梯度爆炸:也是在深度神经网络或者RNN中经常发生,误差梯度在更新中累积,然后变得非常大的梯度,最终导致网络权重大幅更新,并因此使得网络变得不稳定。在极端情况下,权重变得非常大,导致NaN值。网络层之间的梯度(值大于1)重复相乘,导致的指数级增长会产生梯度爆炸。
    影响:导致学习过程不稳定。

  11. 解决梯度消失和梯度爆炸的方法
    (1) 使用合适的激活函数:如ReLu、;eakrelu、elu等激活函数。
    Relu激活函数,大于1的位置,导数都为1.所以就不存在梯度消失和梯度爆炸的问题。
    (2)其他解决方法:有比较多,但是相对来说 都没有换一个激活函数来得简单直接。
    CSDN上有其他相应的参考文献。

  12. 正则化(可以理解为规则化,给模型训练加上一定的规则)的目的是限制参数过多或者过大,避免模型更加复杂。比如:为了防止过拟合,我们可以将高阶部分的权重,限制为0,这样高阶的函数就变成了低阶的函数,就不会产生过拟合现象。
    神经网络所接收的数据最好是在0附近均匀分布的数据,而有些输入的数据,并不是这样的,所以我们通过正则化的变换,使得数据变成在0附近均匀分布的。
    最终结果:一般会使网络的性能(准确性上升一些,Pytorch的课中的例子中上升了百分之10的点)
    L1正则化:直观的解释:直接在原来的损失函数的基础上加上权重参数的绝对值。限制区域为正方形。
    L2正则化:直观的结实:直接在原来的损失函数基础上加上权重参数的平方和。限制区域为圆形。

  13. 生成对抗网络(GAN),2014年由lan Goodfellow提出GAN(Generative adversarial Network),
    直观理解:就是在对抗训练的过程中,提高性能。
    生成对抗网络由两部分组成:生成模型G,和判别模型D
    博弈的简单模式如下:生成模型生成一些图片->判别模型学习区分生成的图片和真实图片->生成模型根据判别模型改进自己,生成新的图片->判别模型再学习区分生成的图片和真实图片… 面的博弈场景会一直继续下去,直到生成模型和判别模型别无法提升自己,这样生成模型就会成为一个比较完美的模型。
    解决假数据,看似是真的,但是不是真的,一般用对抗学习

  14. 卷积神经网络(CNN):可以学习所有能转变为图片格式的输入。(推荐看子豪兄的大白话讲解卷积神经网络)

  15. 图卷积神经网络(GCN):可以对图结构(拓扑结构)的输入进行深度学习,

  16. 循环神经网络(RNN):可以对序列结构的数据进行深度学习(常用在自然语言处理方向上)

  17. 要想做好一个深度学习网络,完成很好的训练和训练结果,有三样东西很重要:数据,特征工程,深度学习网络。借用子豪兄的一个比喻:数据就是葡萄,特征工程就是压榨葡萄的机器,深度学习就是酿葡萄的工艺流程,所以想要酿好一瓶葡萄酒,这三样东西都必须要好。
    还有一句话:好网络架不住烂数据。

  18. 特征工程是从原始数据中最大限度的提取出能表征原始数据信息的特征,深度学习中,数据和特征决定了机器学习的上限,算法和模型不过是逼近这个上限。

  19. batch size:表示一次性输入GPU中数据的数量。实现对数据的并行输入计算
    理论上我们设置的batch size的数值越大,GPU使用的越多,整体网络训练的时间就越短。但由于GPU的硬件限制,不能无限制的增加batch size

  20. epoch:一个epoch表示对数据集中所有数据都遍历了一遍。

  21. CUDA的作用是加速深度卷积网络的训练,GPU在深度学习中的作用是:提供强大的并行计算能力:(1)加快运算速度,(2)因为有并行计算的能力,所以才能引入batch size,通过使用batch size的 平均梯度,能够实现更好地深度学习性能。

  22. 深度学习 从某种角度来说 是重实验的一门学科,

  23. 初始化:在深度学习中,神经网络的权重初始化方法对(weight initialization)对模型的收敛速度和性能有着至关重要的影响,甚至还能一定程度上避免梯度消失和梯度爆炸的现象。
    在现在的神经网络中,隐层层经常使用ReLU进行激活函数,权重初始化常用He initialization(何式初始化方法)(何凯明大神,保送清华本科,同时高考900分满分,本科毕业,用了四年直接在香港中文大学博士毕业)

  24. 全连接层,主要起到了一个分类器的作用。
    全连接层中的每个神经元与其前一层的所有神经元进行全连接,来整合前面的全部信息,然后进行分类。

  25. 1*1卷积的作用:(1)降维或者升维(2)夸通道信息交融(3)减少参数量(4)增加模型深度

  26. Keras :是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行。Keras 的开发重点是支持快速的实验。能够以最小的时延把你的想法转换为实验结果,是做好研究的关键。

如果你在以下情况下需要深度学习库,请使用 Keras:
1.允许简单而快速的原型设计(由于用户友好,高度模块化,可扩展性)。
2.同时支持卷积神经网络和循环神经网络,以及两者的组合。
3.在 CPU 和 GPU 上无缝运行。

特点:
1.用户界面友好
2.模块化:各模块可以进行组装,
3.易扩展性:
4.基于Python
中文文档:
https://keras.io/zh/

  1. 上采样(把小图片变成大图片):双线性插值(直接把小图片拉大的操作),反卷积,
  2. 下采样:卷积操作就是下采样,把大像素的图片,经过卷积层,变成相对来说较小的feature map
  3. 网络轻量化:用2层33的可以代替55的提取效果,,3层33的可以代替77带卷积核。33的卷积核也可以被一个31的卷积核和一个1*3的卷积核来代替。
  4. 不同层提取的特征一般不一样,,底层的网络是提取底层的信息(颜色,线条)(像素的特征),高层的网络提取出来的是高级的特征(带语义的特征,,)最后一层,就是完全的语义特征,能完成分类的作用。
  5. 特征图feature map也可以进行可视化(利用反卷积的方法)。

你可能感兴趣的:(基础知识,神经网络,卷积,算法,深度学习,机器学习)