1、深度学习简介

1、什么是神经网络

这里以房价预测为例,对于六个已知面积和对应价格的房屋样本,下图左边拟合出了一个线性模型,输入新样本的面积size,这个模型可以预测出这个新房屋样本的价格 price。
房屋的面积 size 被称为房屋这个样本的一个特征,一般用小写的 x 表示,而房屋的价格 price 被称为房屋这个样本的标签,一般用小写的 y 表示。
下图右边则是线性模型对应的一个神经网络模型,因为样本只具有一个特征,所以对应的这个神经网络模型非常简单,只包含一个神经元
在这里插入图片描述

但是我们知道,仅仅靠房屋的面积来判断它的价格是没有意义的。生活中的事物往往具有种特征,我们也会选择性的通过特征来描述一个事物。还是以刚刚的房价预测为例,这一次我们在面积 size 的基础上增加了多个特征:卧室数量bedrooms、邮政编码postcode、所在小区的富裕程度wealth。
下图构建了一个神经网络模型来通过size,bedrooms,postcode,wealth这四个特征来更加准确地预测房屋的价格。可以看到,将房屋面积size和卧室数量bedrooms传入从上到下第一个神经元,经过计算后得到的结果可以表示这套房屋可以容纳的家人数量;将邮政编码postcode输入到第二个神经元,经过计算出离学校或者便利店的步行距离,从而可以得到便利程度;把邮政编码postcode与小区富裕程度wealth输入第三个神经元可以计算出房屋所在区域学校的教学质量。最后再把可以容纳的家人数量、便利程度、学校质量输入最后一个神经元,便可以计算出一个比较合理的房屋价格。
在这里插入图片描述
对于一个特定的预测任务,我们在输入层输入样本的特征,经过中间层的计算,最后在输出层得到预测结果。但实际上,我们往往更加关心输入层和输出层,但中间层的神经元的计算结果的含义我们并不知晓,因为往往是由由神经网络自己来决定中间层的这些节点的含义。我们在样本集中只能看到输入层和输出层,但看不到中间层,所以也把输入层与输出层之间的中间层叫做隐藏层。由此,神经网络变成了以下的样子,上一层的输出与下一层的每一个神经网络节点相连,由神经网络自行决定隐藏层节点的含义。这样的网络也叫全连接神经网络FNN)。
在这里插入图片描述

2、监督学习

监督学习是机器学习的一种方式。可以概括为通过大量的样本数据来学习到一个函数,这个函数能够将x映射到输出y。下面是一些比方:
a.在线广告应用:根据你在网站上的输入信息及用户的一些其他信息,它可以向你展示你最有可能点击的广告
b.图片标注软件:输入一张图片,它可以标记图片的类别,以便分类管理
c.语音识别软件:当你输入一段语音给神经网络时,它将语音能够转化为文本
d.智能翻译软件:输入一个英文句子,它可以直接输出英文段落的翻译结果,例如输出对应的中文段落
很多有价值的发明都是通过神经网络在特定问题下来巧妙地建立x到y的函数映射关系,并且通过监督学习拟合数据成为某个复杂系统的一部分。

结构稍有不同的神经网络 在不同的应用领域都非常的有用。例如在预测房价和在线广告里,用的都是相对标准的神经网络结构,就像我们之前提及过的FNN。在图像应用中,常常将卷积结构放在神经网络结构当中,简称CNN。而对于序列化数据(如说音频,它是时序组成的数据且需要完整的播放才能表达其意,所以一维时间序列或一维时序序列最能自然而然地代表音频的数据结构),常常用到RNN,即所谓的循环神经网络。语言,比如英语和中文字母或汉字,都在序列化数据中有自己出现的时序,所以语言也是能够被自然而然地表现为序列化数据,并且更复杂版本的RNNs 经常用到上述的应用当中。 更复杂的应用比如自动驾驶技术,当它去识别图像内容时,需要对卷积神经网络CNN的结构和雷达信息有更多的改进,其所需要的结构也许更加定制化、更加复杂 ,并且混合着多个其他结构的神经网络结构。

机器学习能够应用在 结构化和非结构化数据中。结构化数据是基于数据库的数据,每一个特征例如房屋面积、卧室数量、 用户年龄,它们都有清晰的定义。相对来说 非结构化数据则是类似于音频、图片或文本这种数据。这里特征也许是图片中的像素值或一段文本中的独立单词。
对于非结构化数据的学习常常比对结构化数据的学习要困难得多。实际上,人类可以很好地理解语音和图像,文字相对于人类的历史来说,是很晚才被发明出来的,但是人类可以很好地解释这种非结构化数据。在神经网络崛起后,它带来的深度学习使得计算机能够比前些年更好地解释非结构化数据。

3、为什么深度学习会这么火

深度学习和神经网络背后的基本思想已经存在数十年了,但为什么它们最近几年才风靡起来呢

先来画个坐标图,横坐标表示在某个任务上我们拥有的数据量,纵坐标表示学习算法的性能。对于传统的学习算法,比如支持向量机或者逻辑回归,当你加入越来越多的数据,刚开始性能逐渐上升 ,但是过了一段时间性能逐渐地维持在一定的水平,他们不知道该拿大规模的数据怎么办。

由于社会的信息化,非常多的人类行为已经被电子化和信息化。我们在电脑上、网站上、手机APP花了大量的时间,这些在电子设备上的行为创造了数据。所以在过去20年,因为手机内置的相机,还有加速计,还有各种物联网中的感应器,这些东西的普及,使我们已经收集到了越来越多的数据。这逐渐超出了传统的学习算法所能有效利用的数据量。对于这些大规模的数据集,如果使用神经网络,使用神经网络的性能往往比传统的机器学习算法要好得多。而且,神经网络的规模越大,其性能也会越佳。

在这里插入图片描述
如果没有很大的数据集,那么自己提取出来的的特征很大程度上决定了算法的性能。所以很有可能发生这样的事, 有人用手工设计好的特征去训练 SVM (支持向量机),而有人在这个很小的训练集上训练一个很大的神经网络,SVM 可能会得到更好的结果。所以,在这个图像左边的这个区域里,不同算法的性能的排名是不固定的。这时算法的性能更多的是由你提取特征的能力和算法的细节而决定的。只有在这个很大的数据集的区域里,也就是图像的右边,我们会经常看到大型的神经网络的性能超过了其他方法。

由上面这张图我们可以看出,如果想要很高的性能,需要做两件事。首先,需要大量的数据,其次,需要训练足够大的网络来利用这些大量的数据。当然,大规模的数据和神经网络模型都需要以高效的计算能力作为支撑。也就是训练网络的能力,无论是在 CPU 还是在 GPU 上,这个能力的提升让深度学习进步了很多。

在过去的几年里,越来越多的算法层面上的创新也使得神经网络能运行得更快。举一个例子,神经网络里一个重大的突破就是从 sigmoid 函数到 ReLU 函数的迁移。sigmoid 函数在机器学习里有一个问题,那就是在这些梯度几乎为 0 区域里,它的学习的进度会变得非常慢。因为当你用梯度下降法的时候,梯度几乎为 0,那么参数的更新会变得非常慢。而把激活函数由 sigmoid 函数换成 ReLU 函数,全名是修正线性单元(rectified linear unit),对于所有的正输入,梯度都是1,那么梯度就不会慢慢变成 0,梯度在左边的时候为 0。结果证明,简单地把 sigmoid 函数换成 ReLU 函数使得梯度下降算法的速度提高很多。 这个看似比 Bayesian(贝叶斯)要简单许多的算法,大大提高了运算速度。还有很多这样的例子,改进了算法,使得我们的代码可以更快的运行,从而可以训练更大的神经网络。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值