深度学习是机器学习的分支,是一种以人工神经网络为架构,对数据进行特征学习的算法。
机器学习:数据少,效果不是特别好
深度学习:数据多,效果更好
目前企业中常见的深度学习框架有很多(TensorFlow、Caffe2、Keras、Theano、PyTorch等等)
其中TensorFlow和Keras是Google出品的,使用者很多,但是语法比较晦涩难懂而且和python的语法不尽相同通,对于入门者上手难度比较高。
所以PyTorch的使用频率会更高,它和python的语法相同,整个操作类似Numpy的操作,并且PyTorch使用的是动态计算,会让代码的调试变得更简单。
人工神经网络,简称神经网络或类神经网络,是一种模仿生物神经网络(大脑)的结构和功能的数学模型,用于对函数进行估计或近似。
和其他机器学习方法一样,神经网络已经被用于解决各种各样的问题,比如说机器视觉和语音识别,这些问题都是很难被传统基于规则的编程所解决的。
在生物神经网络中,每个神经元与其他神经元相连,当它“兴奋”时,就会向相连的神经元发送化学物质,从而改变这些神经元内的电位;如果某神经元的电位超过了一个“阈值”,那么它就会被激活,即“兴奋”起来,向其它神经元发送化学物质。
1943年,M-P神经元模型,把许多这样的神经元按一定的层次结构连接起来,就得到了神经网络。
神经网络中的基础单元,相互连接,组成神经网络
一个简单的神经元如下图所示:

其中:
是最基本的神经元网络形式,由有限个神经元构成,所有神经元的输入向量都是同一个向量。由于每一个神经元都会产生一个标量结果,所以单层神经元的输出是一个向量,向量的维数等于神经元的数目。
示意图如下:

感知机由两层神经网络组成,输入层接收外界输入信号后传递给输出层(输出:+1正例,-1反例),输出层是M-P神经元

感知机的作用:
把一个n维向量空间用一个超平面分割成两部分,给定一个输入向量,超平面可以判断出这个向量位于超平面的哪一边,得到输入时正类或者是反类,对应到2维空间就是一条直线把平面分为两个部分。
简单的二分类的模型,给定阈值,判断数据属于哪一部分
多层神经网络就是由单层神经网络进行叠加之后得到的,所以就形成了层的概念,常见的多层神经网络有如下结构:


在前面的神经元中提到了激活函数,下来就进行简单介绍
假设我们有这样一组数据,三角形和四边形,需要把他们分为两类

如上图,右边是sigmoid函数,对感知机的结果,通过sigmoid函数进行处理
如果给定合适的参数w和b,就可以得到合适的曲线,能够完成对最开始问题的非线形分割,所以激活函数的一个非常重要的作用就是:增加模型的非线性分割能力
常见的激活函数:

看图可知:
sigmoid只会输出正数,以及靠近0的输出变化率最大
tanh和sigmoid不同的是,tanh输出可以是负数
Relu是输入只能大于0,如果输入含有负数,Relu就不合适,如果你的输入是图片格式,Relu就是挺常用的,因为图片的像素值作为输入时,取值为[0,255]。
激活函数的作用除了前面说的增加模型非线性分割能力外,还有
提高模型鲁棒性(稳健性)
缓解梯度消失问题
加速模型收敛等
(这些做了解即可)
a:线性
i:系统:函数,f,模型,f(x)=y
ii:满足这两个条件为线性:f(x1+x2)=y1+y2;f(kx1)=ky1
即既满足可加性,又满足乘一个数值,结果还为一个数值两个条件就为线性
b:作用:增加模型的非线性分割能力;提供模型的稳健性;缓解梯度消失;加速模型的收敛
c:常见的激活函数:
i:sigmoid:(0,1)
ii:tanh:(-1,1)
iii:relu:max(0,x)图像用的比较多
iv:elu:a(e^x-1) 文本用的比较多
一个男孩想要找一个女朋友,于是实现了一个女友判定机,随着年龄的增长,他的判定机也一直在变化
14岁时:

在15岁的时候终于找到呢女朋友,但是一顿时间后他发现有各种难以忍受的习惯,最终决定分手。一段空窗期中,他发现找女朋友很复杂,需要更多的条件才能够帮助他找到女朋友,于是在25岁的时候,他再次修改了判定机:

上述的判定机其实就是神经网络,它能够接受基础的输入,通过隐藏层的线性的和非线性的变化最终的到输出。
通过上面例子,希望大家能够理解深度学习的思想:
输出的最原始、最基本的数据,通过模型来进行特征工程,进行更加高级特征的学习,然后通过传入的数据来确定合适的参数,让模型去更好的拟合数据。
这个过程可以理解为盲人摸象,多个人一起摸,把摸到的结果乘上合适的权重,进行合适的变化,让他和目标值趋近一致。整个过程只需要输入基础的数据,程序自动寻找合适的参数。