什么是深度学习What is Deep Learning

深度学习近几年异常火热,它其实只是人工智能领域的一小部分。人工智能包含机器学习和一些其他方法,机器学习又包含决策树、支持向量机、神经网络等等许多算法,而深度学习其实就是多层神经网络的另一种称呼。之所以叫深度,是相较于传统只有一层中间层的神经网络算法来说,现在的深度学习可以做到几十、甚至上百层。

深度学习之所以能够如此迅猛发展呢,一是因为硬件的发展,能够支持如此庞大的运算量。二是因为进入网络时代,大数据的普及,让模型能够拥有更多的数据进行训练。在我做本科毕设的时候看过一段话,说在小数据上,其实支持向量机比神经网络表现的更好。

不过深度学习能够如此优秀,还因为他另外两种形式,卷积神经网络convolution neural network和循环神经网络recurrent neural network,前者考虑到了空间信息,因此在计算机视觉computer vision(CV)领域有非常好的表现,后者考虑到了时序信息,因此在自然语言处理natural language processing(NLP)上运用的更多。当然RNN的时序性有时候也可以用在CV的某些问题上,例如在做物体追踪object tracking时可以利用一些时序信息。两者有时候也可进行结合,比如识别一张图并用一句话来描述图片的信息,叫做image caption。

扯完这些背景之后,我们先来看一下最基础的深度神经网络模型artificial neural network,简称ANN。

从整体框架上来看,可以将结构分成三个部分:输入层input layer,输出层output layer,以及隐藏层hidden layer。以识别手写数字为例,我们总共有0-9这10个数字,因此输出维度为10;每一个手写数字都是由一张28*28的图片输入的,将图片展开拉伸成一维数组,因此输入层有784个神经元neural。而隐藏层设置多少层,每层设置多少个神经元,都由自己决定,一般依靠经验而定。(想知道从哪获取经验,那就多看看论文,参考别人的结构)

对于隐藏层的每个单元来说,都由上一层所有的输入乘上权重weight,加上偏移bias,在经过激活函数activation function得来的。上图的sigmoid就是一种激活函数,此外还有ReLu,Tanh等等,至于什么时候该用什么激活函数,这个以后再进行介绍。

另外提一句在编程当中,为了减少代码的冗余和复杂度,我们可以将单个数字的相乘相加(需要用循环语句重复操作)简化为矩阵的相乘,这里就用到了线性代数的知识。weight的第一行和上一层a的这一列对应相乘再相加即可得到这一层第一个神经元的值,最后得到的一维数组则代表了本层所有神经元的结果。

以上图为例,输入层784,第一层16,第二层16,输出层10,那么每一层需要的weights的数量就是784*16+16*16+10,而biases每个神经元只加一次,因此是16+16+10,总共就有13002的运算量。神经元越多,隐藏层越深,计算量也就越大。

我们最终的目的就是得到能够实现我们目的的神经网络,这里结构是定死的,需要通过机器训练学习得到的数值就是每一层的weights和biases了,至于它是怎么学习到的呢,这里涉及到了前向传播forward propagation和反向传播backward propagation,我们以后再详细说明。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180131G03VQH00?refer=cp_1026

相关快讯

扫码关注云+社区