Introduction to deep learning--Week 1-Neural Networks and Deep Learning

什么是神经网络

通过一个预测房价的案例来了解:
假设有一组数据,房子的大小和对应的房价,通过这些数据可以拟合出一根如图所示的曲线。
这里写图片描述
而神经网络就是,输入房间大小,通过神经元,输入得到房价:
这里写图片描述

通过神经元的堆砌可以获得更大的神经网络,假设现在通过一个家庭的大小,和房子周围的步行程度,周围学校质量等因素来决定房子的价格。而这三个属性又通过房子大小、卧室数量、邮编等因素交叉决定,如下图:
这里写图片描述

监督学习

给定特征x,拟合一个函数,得到输出y
这里写图片描述
神经网络中的监督学习,案例有:
1.房价预测,输入是房子的各种特征,输出是价格
2.在广告应用中,输入是广告信息,用户信息,给用户推荐广告,判读用户是否会打开这个广告,这对广告商来说十分重要
3.在计算机视觉中,输入一张图片,获得想要的属性,可以是1到1000的数字,表明是哪一张照片
4.在语音识别方面,可以输入音频片段,然后输出文本
5.在机器翻译中,输入一段英文,输入是他的中文翻译
6.在自动驾驶方面,输入前方路况的一张照片,和对应的雷达信息,训练后的NN的输出就是周围其他车子的位置,这是无人驾驶的关键组件。

将这个神经网络系统嵌入到更大型的系统中,比如无人驾驶系统

在案例1,2中用的是标准NN,在图像领域中,用的是CNN。对于案例3的audio,随着时间播放,所以自然的认为是一维时间序列,对于序列数据,常用RNN。在案例5中,单词是一个一个出现的,也看做是序列数据,使用RNN或者更复杂的RNNs。对于案例6,里面有图片又有序列的雷达信息,所以可能会用更复杂的混合神经网络。

结构化数据数据 & 非结构化数据

这里写图片描述
对于结构化数据,比如上述案例中的房价预测、在线广告,都有一个数据库,在这个数据库中,每一个项,即特征,都有清晰的定义,比如size,bedrooms之类的。
对于非结构化数据,特征是,音频中的每一帧,图像中的像素点,或者文本中的每个单词。

从历史角度来看,两者相比,计算机难以理解非结构化数据,但对于人类却更擅长理解非结构化数据。由于神经网络的兴起,计算机能更好的理解非结构化数据。NN在很多短期经济价值的创造是基于结构化数据的,比如更好的广告系统 等。

为啥子深度学习又火了

这里写图片描述
&emsp&emsp用上面这个图来说明为什么DL这么火
&emsp&emspx轴代表数据量,y轴代表性能,比如过滤垃圾邮件的准确率,广告准确点击率,或者是用于无人驾驶中判断其他车辆位置的神经网络的准确率。根据传统机器学习方法,可以得到一个关于数据量的函数,即最下面红色那个曲线。它的性能在一开始的时候,随着数据的增加会上升,但是达到一定量的数据之后,就不再上升,是因为这些模型无法处理海量数据。在过去20年,有很多问题,但那时候的数据量只有(x轴上的第一个小箭头)那么多,多亏了数字化社会,手机海量数据变得容易起来。人们在数字设备花费的时间越来越多,数字设备上的活动都能创造数据。比如价格变得便宜的相机,被内嵌在手机、物联网中的各种传感器,越来越多数据被收集到了。在过去的20年那里,收集到的海量数据远远超过了传统机器学习方法所能处理的规模。
如果训练一个小型的NN,它的性能可能是黄色曲线那样,训练一个中等size的NN,可能得到如图蓝色的曲线,如果训练一个大型的NN则效果可能是绿色曲线。
想要效果能达到绿色曲线那样,有两个条件,一是需要训练一个规模足够大的NN,能够发挥出海量数据的优点,二要数据量能达到(x轴上的第2个小箭头)。规模在推动深度学习的进步,所谓规模,一个是神经网络的规模,有很多神经元,很多参数,很多连接,另一个是指数据的规模。
要想让NN效果好,要么训练一个更大的NN,要么使用更多的数据,但这都只能在一定程度上起作用。因为最终,要么你耗尽了数据,要么数据规模太多,需要训练的时间太久,但只是增加scale就能让效果提升很多。

x轴是带标签的数据的量,在训练神经网络的时候,输入x和标签y,即(x,y).
m代表训练集的规模,或者是训练样本的数量

在训练集还小的时候,各种算法的性能相对排名不是很明确。所以当训练集不是很大的时候,效果会取决于skills at hand engineering features,以及一些算法方面处理的细节。所以,可能会有人训练了一个SVM,在数据集小的时候,效果比一个NN还好。
只有当数据集很大的时候,可以看到large NN的效果远远领先其他算法。

data的规模,计算机的computation能力,以及近几年的算法方面的创新,都让DL效果越来越好。算法方面的创新都是为了让NN运行的更快,比如激活函数sigmoid转变为ReLU。在使用梯度下降算法中,在sigmoid函数中,越往两边走,梯度会逐渐接近于0,学习率会越来越小,学习速度会变慢,当改为后者时,只要输入为正,梯度就不会为0,后者让梯度下降算法运行得更快。

快速计算的两一个原因,在训练NN过程中,有了idea,就code,然后就experiment,然后回去改一些细节,迭代的速度影响很大。如果10分钟能这样迭代一次,就能尝试更多的改进,因为computation的速度也会影响迭代速度,迭代速度也会影响到算法的更新。(我承认下面这个图我画的巨丑逃。。。
这里写图片描述
同时,专用的硬件也在发展,比如GPU。

猜你喜欢

转载自blog.csdn.net/heheSakura/article/details/80303271