深度学习的介绍
目标
- 知道什么是深度学习
- 知道深度学习和机器学习的区别
- 能够说出深度学习的主要应用场景
- 知道深度学习的常用框架
深度学习的概念
深度学习:是机器学习的分支,是一种以人工神经网络为架构,对数据进行特征学习的算法。
机器学习和深度学习的区别
-
区别1:特征提取
从特征提取的角度出发:
- 机器学习需要有人工的特征提取的过程
- 深度学习没有复杂的人工特征提取的过程,特征提取的过程可以通过深度神经网络自动完成
-
区别2:数据量
从数据量的角度出发:
- 深度学习需要大量的训练数据,会有更高的效果
- 深度学习训练深度神经网络需要大量的算力,因为其中有更多的参数
深度学习的应用场景
- 图像识别
- 物体识别
- 场景识别
- 人脸检测跟踪
- 人脸身份认证
- 自然语言处理技术
- 机器翻译
- 文本识别
- 聊天对话
- 语音技术
- 语音识别
常见的深度学习框架
TensorFlow、Caffe2、Keras、Theano、PyTorch、Chainer、DyNet、MXNet、CNTK等。
其中tensorflow和keras是google出品的,使用者很多,但其语法晦涩,而且语法和python语法不尽相同,对于入门玩家而言上手难度较高。
facebook的pytorch的使用和python的语法相同,整个操作类似于Numpy的操作,而且pytorch使用的是动态计算,会让代码的调试变得更加简单。
神经网络的介绍
目标
- 知道神经网络的概念
- 知道什么是神经元
- 知道什么是单层神经网络
- 知道什么是感知机
- 知道什么是多层神经网络
- 知道激活函数是什么,有什么作用
- 理解神经网络的思想
人工神经网络的概念
人工神经网络(Artificial Neural Network,ANN),简称神经网络(Neural Network,NN)或类神经网络,是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)的结构和功能的数学模型,用于对函数进行估计或近似。
人工神经网络与生物神经元类似,由多个节点(人工神经元)互相连接而成,可以用来对数据之间的复杂关系进行建模。不同节点之间的连接被赋予了不同的权重,每个权重代表了一个节点对另一个节点的影响大小。每个节点代表一种特定函数,来自其他节点的信息经过其相应的权重计算,输入到一个激活函数中并得到一个新的活性值(兴奋或抑制)。
神经元的概念
可见,一个神经元的功能是求得输入向量与权向量内积后,经过一个非线性决策(即激活)函数得到一个标量的结果。
单层神经网络
是最基本的神经网络形式,由有限个神经元构成,所有神经元的输入向量都是同一个向量。由于每个神经元都会产生一个标量结果,所以单层神经网络输出的是一个向量,向量的维数等于神经元的数目。
感知机
感知机由两层神经网络组成,输入层接受外界输入信号后传递给输出层(输出+1正例、-1反例),输入层是M-P神经元。
权重(突触)、偏置(阙值)、激活函数(细胞体),输出为+1或-1
感知器的作用:
把一个n维向量空间用一个超平面分割成两部分,给定一个输入向量,超平面可以判断出这个向量位于超平面的哪一边,得到输入是正例或反例,对应到2维空间就是一条直线把一个平面分为两部分。
多层神经网络
多层神经网络由单层神经网络进行叠加之后得到的,常见的多层神经网络有如下结构:
-
输入层:众多神经元接受大量非线性输入向量。
-
输出层:消息在神经元连接中传输、分析、权衡,形成输出结果,即输出向量。
-
隐藏层:隐藏层可以有多层,隐藏层的节点(神经元)数目不定,但数目越多,神经网络的非线性越显著,从而神经网络的强健性更显著。
概念:全连接层
全连接层:当前这一层和前一层每个神经元互相连接,我们称当前这一层为全连接层。
思考:假设第N-1层有m个神经元,第N层有n个神经元,当第N层是全连接层时,则N-1和N层之间有多少个参数w,这些参数可以如何表示?
从上图可以看出,所谓是全连接层就是在前一层的输出的基础上进行一次Y=Wx + b 的变化(不考虑激活函数的情况下就是一次线性变化,所谓线性变化就是平移+b和缩放*w的组合。(f(x1+x2) = y1+y2;f(kx1)=ky1)
激活函数
假设我们有这样一组数据(三角形、四边形),需要把它们分为两类
通过感知机模型,我们可以划出一条线,把平面分隔开
假设我们确定了参数w和b之后,那么代入需要预测的数据,如果y>0,我们认为这个点在直线的右边,也就是三角形,否则就是在左边,也就是四边形。
但是可以看出,三角形和四边形是没有办法通过直线分开的,那么该怎么办呢?可以考虑使用多层神经网络进行尝试,比如在前面的感知机模型中再增加一层:
对上图中的等式进行合并,可以得到:
和公式y = w1x1 + w2x2 +b完全相同,依然只能绘制出直线,所以可以发现,即使是多层神经网络,相比于之前的感知器,没有如何改进。但如果我们再前面感知机的基础上加上非线性激活函数之后,输出的结果就不再是一条直线。
如上图,右边是sigmoid函数,对感知机的结果,通过sigmoid函数机械能处理。
如果给定合适的参数w和b,就可以得到合适的曲线,能够完成对最开始问题的非线性分割,所以激活函数很重要的一个作用就是增加模型的非线性分割能力。
看图可知:
- sigmoid只会输出正数,以及越靠近0,输出变化率越大
- tanh和sigmoid不同的是,它可以输出负数
- Relu输入只能大于0,如果输入含有负数,Relu就不合适。如果你输入的是图片格式,Relu就挺常用,因为图片的像素值作为输入时取值为[0,255]
激活函数的作用:
- 增加模型的非线性分割能力
- 提高模型鲁棒性(稳健性)
- 缓解梯度消失问题
- 加速模型收敛