首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

秒懂深度学习

深度学习是这一轮AI热潮里最火的主题。听上去深度学习好像挺高深的,但是事实上它的核心概念非常简单。希望这篇文章能帮助那些想要入门深度学习的同学们理解其中最基本,最核心的概念和算法。

想要理解深度学习,你只需要有中学数学知识和一点点机器学习的基本知识。如果你说你机器学习也不懂。那好吧,我们就先简单地扫盲机器学习。非小白请自动跳过这一部分。

先来看一个具体的例子。假设我们的任务是预测某一地区的房价。简单起见,假设这里的房价只跟房子的面积大小有关。那么首先我们要收集该地区房价和房屋大小的数据。把这些数据放到坐标轴里,假设分布如下:

观察之后我们认为房价跟面积的关系是:y=w*x+b。x表示面积大小,y表示价格,w和b是参数。这就是我们的模型。然后根据我们拥有的数据和一套算法可以推算出w=2,b=30。这个过程就是学习或者训练。把训练出来的模型也放到坐标轴里:

于是,我们训练出来的模型就可以用来预测房价了。机器学习模型的输出结果可能是一个数值,比如说这里的房价;也可能是是或否,比如说判断一封电子邮件是否是垃圾邮件;还有可能是是多个分类里的一种,比如说判断一张图片里的花是什么类型的花。由此可见,机器学习可以大致上理解为从数据中训练出模型,然后将模型应用的到新的数据。而深度学习是机器学习的一种,自然也逃不出这种模式。

神经元(Neuron)

深度学习又称深度神经网络。如果把深度神经网络比作一座大厦,那么神经元就是这座大厦的一块块的砖头。所以要搞清楚什么是深度神经网络,我们先要了解什么是神经元。这里的神经元跟生物没什么关系。单个神经元长的是这样的:

左边的x1, x2,等等是输入,中间的圆圈是对输入的计算,右边是输出,意思是输出是输入的函数,w和b是参数,x是输入的总称。圆圈里的计算如下:

它的意思是输入x1, x2, ..., xn乘以权重w1, w2, ..., wn求和,然后在和之上叠加一个激励函数(activation function)f,得到的结果就是输出。常见的一种激励函数叫sigmoid函数,它长下面这样:

激励函数的计算我们不用理会,可以交给电脑处理。至于为什么用要用这样的一个激励函数,我们以后再说。到了这里神经元就讲完了。总的来说,神经元就是输入的线性函数,然后再叠加一个像sigmoid这样的非线性函数。完整过程如下:

神经网络(Neural Network)

了解了神经元以后,我们再来看看什么是神经网络。最常见的神经网络结构都分为三层:输入层,隐藏层,输出层。顾名思义,输入层的数据就是输入数据,而输出层就是输出结果。下图是一个典型的神经网络:

深度神经网络就是指隐藏层的层数至少为2的神经网络。很多实际应用中的隐藏层动辄几十层,跟计算不要钱一样。神经元跟神经网络的关系是什么样的呢?看下面这张图就能理解了。

也就是说从隐藏层开始,每一个节点就是一个神经元,它的输入是上一层的所有节点。每一条连线就是到神经元的参数。

正向传播(forward propagation)和反向传播(backward propagation)

正向传播听上去高大上,其实就是从输入算出输出的过程。这个过程大致是这样的:对于每一个数据样本,用x1, x2, ... xn表示输入,然后中间的每一条线表示一个参数,这些参数一开始可以随机赋值。这样根据神经元的计算方法就可以算出最左边的隐藏层的每一个节点的值,以这一层作为输入,又可以计算出下一层的各个节点的值,经过这样一层层的计算,最后算出输出层的所有神经元的值,也就是神经网络的输出。

反向传播可能是这里最复杂的部分了。如果你对数学完全不感冒,那就看一个比喻就好了。假设我们的任务是训练投篮,要训练的参数是投篮的方向,力度还有角度。正向传播的过程就是随机设置一个方向,力度和角度,然后投出去,结果就是投到了篮筐旁边的某个地方,也可能狗屎运,投中了。反向传播的意思是根据这个结果位置和篮筐之间的偏差,逐渐调整方向,力度和角度,直到投篮命中,这个时候的方向,力度和角度就是我们模型的最终的参数。

实际当中的反向传播是用的是一种叫做梯度下降的算法来实现的。跟投篮的例子相似,每一个输入样本经过神经网络的计算都有一个输出。同时我们也知道这个输入的实际输出是什么,就像我们预测房价时候获取的数据,每一个样本里的面积大小都对应一个价格。神经网络的输出跟我们的实际输出之间有一个误差。根据这个误差,就能找到最快的减少误差的方向,然后朝着这个方向调整参数。这样迭代之后,就能算出模型的参数。具体计算过程涉及到微积分,就不细讲了。这里用中学生也能懂的方式来理解一下它的原理。

这是一个简化的模型,横轴是参数w,纵轴是误差J(w)。初始的时候我们随机选取了一个参数,但是这个参数对应的误差并不是最小的。要想快速减小误差,我们就根据这一点的斜率,慢慢调整参数w,直到误差最小。调整的速度称为学习率(learning rate)。最后得出的参数就是深度学习模型的参数。到此,我们的深度神经网络就讲完了。

最后,我们再结合一个实例来理解一下深度学习的整个过程。现在我们的任务是识别一张图片是不是数字8。用一张MNIST里的图片作为输入。每一个像素点上的数就是输入层x1, x2, ..., xn的值。对于28*28的图片,输入就是784个值。效果如下:

我们可以直接使用上面提到的神经网络模型,中间的层数,每层设置多少个神经元,包括随机参数怎么选现在并不重要,随便选一组参数就行。按照神经元的计算方法,经过层层计算,得到的输出会是0到1之间的一个数,把它当做图片是8的概率。对于上面的图片,我们知道实际输出是1,因为它就是一张8的图片。所以1和我们得到的输出的差就是这个输入样本的误差,用梯度下降算法就可以调整中间的参数。重复这个过程,直到误差足够小或者迭代的次数到了。这是展示的是一个输入样本,通常深度学习需要用到成千上万的样本。这些样本经过同样的计算和迭代,最后得出的参数就是我们的深度神经网络的参数。有了模型和参数,下次有了一张图片,只用把图片作为输入计算出输出就知道图片是不是8了。

总结一下,深度神经网络的重点如下:

1. 神经元是神经网络的基本单元,每一个神经元的计算就是以前一层为输入的线性函数,然后接一个非线性的激励函数。

2. 神经网络是由神经元构建而成,分为输入层,隐藏层和输出层,隐藏层大于一层就是深度神经网络。

3. 正向传播从输入层开始一层层计算出输出,反向传播根据输出的偏差反向一层层计算,调整参数,直到误差足够小。

这样训练出来的模型就可以用来对新的输入做判断了。这就是深度学习最基本的模型和算法了。深度学习里还有很多更深入更复杂的问题,并且新的算法和模型也是层出不穷。不过我相信,如果你掌握了以上要点,再去继续学习深度学习其它的知识也会轻松很多。

谢谢你看到最后!如果你有收获,劳烦顺手转发一下,如果还有什么问题,欢迎给我留言。

注:深度学习相关的图片均来自网络。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180113G0B1N400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券