深度学习与AI+思维简单课程思考3

2017/10/25 deep learning 共 2947 字,约 9 分钟

这一次的话题是:

  •   什么是过度拟合,请举例说明。
  •   简介至少三种神经网络模型。
  •   简述什么是梯度下降和学习率。

Q1:过拟合是指为了得到一致假设而使假设变得过度严格。避免过拟合是分类器设计中的一个核心任务。通常采用增大数据量和测试样本集的方法对分类器性能进行评价。

例子1:送来一群天鹅的图像让机器来学习天鹅的特征,经过训练后,知道了天鹅是有翅膀的,天鹅的嘴巴是长长的弯曲的,天鹅的脖子是长长的有点曲度,天鹅的整个体型像一个“2”且略大于鸭子。这时候你的机器已经基本能区别天鹅和其他动物了。但是如果这批天鹅全是白色的,于是机器经过学习后,会认为天鹅的羽毛都是白的,以后机器看到羽毛是黑的天鹅就会认为那不是天鹅。

例子2:知识和经验,当我们看到下图是不是可以回想起生活中自己的点点滴滴?


所以过拟合,就是指把学习进行的太彻底,把样本数据的所有特征几乎都习得了,于是机器学到了过多的局部特征,过多的由于噪声(白色羽毛)带来的假特征,造成模型的“泛化性”和识别正确率几乎达到谷点,于是你用你的机器识别新的样本的时候会发现就没几个是正确识别的。

Q2:三种神经网络模型如下:

A.    感知器perceptron(有可能是传说中的神经元)

本质上是一个分类器,如下图:要将如下图的两边的点分成这个样子,需要的是一个线性分类器。

算法思想是:

  1. 开始选择一条线。初始状态w0【开始】
  2. 若这个线不好,则一定可以找到一个点,不在满足范围内。【找error】
  3. 纠正规则:W+Yx【纠正】
  4. 更新到不再犯错【遍历】

B.    卷积神经网络CNN

主要用于处理图像数据,但可用于其它形式数据的处理,如语音数据。对于卷积神经网络来说,一个典型的应用就是给它输入一个图像,而后它会给出一个分类结果。也就是说,如果你给它一张猫的图像,它就输出“猫”;如果你给一张狗的图像,它就输出“狗”。

卷积神经网络是从一个数据扫描层开始,这种形式的处理并没有尝试在一开始就解析整个训练数据。比如:对于一个大小为200X200像素的图像,你不会想构建一个40000个节点的神经元层。而是,构建一个20X20像素的输入扫描层,然后,把原始图像第一部分的20X20像素图像(通常是从图像的左上方开始)输入到这个扫描层。当这部分图像(可能是用于进行卷积神经网络的训练)处理完,你会接着处理下一部分的20X20像素图像:逐渐(通常情况下是移动一个像素,但是,移动的步长是可以设置的)移动扫描层,来处理原始数据。

注意,你不是一次性移动扫描层20个像素(或其它任何扫描层大小的尺度),也不是把原始图像切分成20X20像素的图像块,而是用扫描层在原始图像上滑过。这个输入数据(20X20像素的图像块)紧接着被输入到卷积层,而非常规的神经细胞层——卷积层的节点不是全连接。每一个输入节点只会和最近的那个神经元节点连接(至于多近要取决于具体的实现,但通常不会超过几个)。

这些卷积层会随着深度的增加而逐渐变小:大多数情况下,会按照输入层数量的某个因子缩小(比如:20个神经元的卷积层,后面是10个神经元的卷积层,再后面就是5个神经元的卷积层)。2的n次方(32, 16, 8, 4, 2, 1)也是一个非常常用的因子,因为它们在定义上可以简洁且完整地除尽。除了卷积层,池化层(pooling layers)也非常重要。

假如每个神经元只和10×10个像素值相连。那么权值数据为1000000×100个参数。减少为原来的万分之一。而那10×10个像素值对应的10×10个参数,就是卷积操作。不论图片尺寸如何,需要训练的权值只跟卷积核大小、卷积核数量有关,可以使用非常少的参数量处理任意大小的图片。

参考:http://www.asimovinstitute.org/neural-network-zoo-prequel-cells-layers/

C.     极限学习机ELM

极限学习机(ELM:Extreme learning machines)本质上是拥有随机连接的FFNN。它们与LSM、ESN极为相似,除了循环特征和脉冲性质,它们还不使用反向传播。相反,它们先给权重设定随机值,然后根据最小二乘法拟合来一次性训练权重(在所有函数中误差最小)。这使ELM的函数拟合能力较弱,但其运行速度比反向传播快多了。

Q3:梯度下降和学习率的概念如下:

梯度下降,以老师PPT的解释是:

比如我们在一座大山上的某处位置,由于我们不知道怎么下山,于是决定走一步算一步,也就是在每走到一个位置的时候,求解当前位置的梯度,沿着梯度的负方向,也就是当前最陡峭的位置向下走一步,然后继续求解当前位置梯度,向这一步所在位置沿着最陡峭最易下山的位置走一步。这样一步步的走下去,一直走到觉得我们已经到了山脚。当然这样走下去,有可能我们不能走到山脚,而是到了某一个局部的山峰低处。

给出我自己了解到的算法:

(1)先确定向下一步的步伐大小,我们称为Learningrate;

(2)任意给定一个初始值: ;

(3)确定一个向下的方向,并向下走预先规定的步伐,并更新 ;

(4)当下降的高度小于某个定义的值,则停止下降;

给出python代码:

for i in range(m):

        diff[0] = y[i]-( theta0 + theta1 *x[i][1] + theta2 * x[i][2] )

        theta0 = theta0 + alpha * diff[0]*x[i][0]

        theta1 = theta1 + alpha * diff[0]*x[i][1]

        theta2 = theta2 + alpha * diff[0]*x[i][2]

学习率,简单的解释是:

机器学习中的一个超参数。在寻解过程中,步长太大,就会搜索得不仔细,可能跨过了优秀的解,而步长太小,又会使寻解过程进行得太慢。因此,步长设置适当非常重要。在神经网络的训练阶段,调整梯度下降算法的学习率可以改变网络权重参数的更新幅度,根据损失程度、陡峭程度和学习率对原步长(梯度的长度)进行调整。

为了能够使得梯度下降法有较好的性能,我们需要把学习率的值设定在合适的范围内。学习率决定了参数移动到最优值的速度快慢。如果学习率过大,很可能会越过最优值;反而如果学习率过小,优化的效率可能过低,长时间算法无法收敛。所以学习率对于算法性能的表现至关重要。

这堂课的内容有点大,实在是有点知道的太多的感觉,里面借鉴了一些比较权威的知识来源,但是还是很多自己的见解的,所以,希望大家多给批评~




文档信息

Search

    Table of Contents