全面直观认识深度神经网络

作者:石文华

编辑:赵一帆

01

深度学习的精准定义

一类通过多层非线性变换对高复杂性数据建模算法的集合。它的两个非常重要的特征是多层性和非线性。俗称多层非线性变换。所以深度学习要去线性化。

为什么呢?因为线性模型存在局限性,任意线性模型得到组合仍然还是线性模型。所以只要通过线性变换,任意层的全连接神经网络和单层神经网络模型的表达能力没有任何区别,而且他们都是线性模型,线性模型解决问题的能力是有限的。

02

激活函数实现去线性化

每个神经元(也就是神经网络上的节点)的输出通过一个非线性函数,那么整个神经网络的模型也就不再是线性的了,这个非线性函数就是激活函数。

tensorflow常见的激活函数有:

tf.nn.relu
tf.sigmoid
tf.tanh

tensorflow 也支持自定义激活函数。

带激活函数的前向传播算法:

a = tf.nn.relu(tf.matmul(x, w1) + biases1)
y = tf.nn.relu(tf.matmul(a, w2) + biases2)

03

单层神经网络解决不了的问题

事实上,一个单极网络可以将平面划分为两部分,用多个单极网络组合在一起,并用其中的一个区综合其他单极网络的结果,就可以构造出一个两极神经网络。

04

组合特征提取

深度神经网络具有组合特征提取的功能,这个特征对于不易提取特征向量的问题(比如图片识别和语音识别等)有很大的帮助。隐藏层的主要作用也就是隐藏层节点可以被认为代表了从输入特征中抽取更高纬度的特征。

05

损失函数

损失函数用于评价模型的效果。分类问题使用最广泛的损失函数是交叉熵。

交叉熵:

刻画两个概率分布的距离,也就是说交叉熵越小两个概率分布越接近。

交叉熵的数学定义是:

其用来衡量在给定真实分布下,使用非真实分布所指定的策略消除系统不确定性所需付出的努力的大小。

神经网络的输出不一定是概率模型,可以使用Softmat回归将神经网络的前向传播的结果变成概率分布。

代码实例:

cross_entropy = -tf.reduce_mean(
        y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0)

但是交叉熵一般会和softmax回归一起使用,所以会使用tf.nn.softm

cross_entropy=
    tf.nn.softmax_cross_entropy_with_logits(y,y_)

y代表原始神经网络的输出结果,而y_给出了标准答案。

在只有一个正确答案的分类问题中,Tensorflow提供了函数:

tf.nn.sparse_softmax_cross_entropy_with_logits

来加快计算过程。

回归问题常用的损失函数是均方误差。均方误差是指各数据偏离真实值的距离平方和的平均数。

06

神经网络的优化算法

梯度下降算法主要用于优化单个参数的取值,而反向传播算法则给出了一个高效的方式在所有参数上使用梯度下降算法,从而使神经网络模型在训练数据集上的损失函数尽可能的小。

反向传播算法是训练神经网络的核心算法。它可以根据定义好的损失函数优化神经网络中参数的取值,从而使神经网络模型在训练数据集上的损失函数达到一个较小的值。

神经网络模型中参数的优化过程直接决定了模型的质量。

07

什么是梯度和学习率

梯度:

由导数的概念,对点x0的导数反应了函数在点x0出的瞬时变化速率,或者叫做点x0出的斜度。推广到多维函数中,就有了梯度的概念,梯度是一个向量的组合,反应了多维图形中变化速率最快的反向。

学习率:

每次参数移动的幅度。

08

神经网络的优化过程

神经网络的优化过程分为两个阶段:

1、先通过神经网络的前向传播算法计算得到预测值,并将预测值和真实值做对比得出两者之间的差距。

2、通过反向传播算法计算损失函数对每个参数的梯度,再根据梯度和学习率使用梯度下降算法更新每一个参数。

梯度下降算法并不能保证被优化的函数达到全局最优解,可能只得到局部最优解,只有损失函数是凸函数才能保证达到全局最优解。

结合梯度下降算法和随机梯度下降算法的优缺点,这里采用一小部分数据(batch)来进行梯度下降,所以神经网络的训练过程大致如下:

09

学习率的设置

在训练神经网络时,需要设置学习率控制参数更新的速度,学习率决定参数每次更新的幅度,如果幅度过大,可能导致参数在极优值的两侧来回移动,如果幅度过小,虽然能保证收敛性,但是会大大降低优化速度。所以学习率不能过大也不能过小。

指数衰减法设置学习率:

tf.train.exponential_decay()

实现了指数衰减学习率,通过这个函数,可以先使用较大的学习率快速得到一个比较优的解,然后随着迭代的继续逐步减小学习率,使得模型训练后期更加稳定。实例代码:

上述代码设定了初始的学习率为0.1,因为指定了staircase=True,所以每次训练100轮后学习率乘以0.96。

10

过拟合问题

举几个例子:

1、过拟合就是你想多了,欠拟合就是你太天真。

2、中国著名计算机科学家,中国机器学习之父,被业内尊称为中国图灵的鲁迅先生曾经描述过一个名为「中国人」的机器学习算法,在图像识别上严重的过拟合问题。其原文如下:

一见短袖子,立刻想到白臂膊,立刻想到全裸体,立刻想到生殖器,立刻想到性交,立刻想到杂交,立刻想到私生子。中国人的想像惟在这一层能够如此跃进。《而已集·小杂感》

3、遇到几个渣男就得出结论“男人没一个好东西”。

4、举个物理学上的段子(转自他人博文),费米的话就是一个非常直观的理解:

1953年春天,戴森和自己的学生利用赝标介子理论计算了介子与质子的散射截面,得到了与费米的实验观测值十分相符的结果。然而该理论需要4个自由参数,费米很不屑,讲了一句日后很著名的话:“我记得我的朋友约翰·冯·诺依曼(John von Neumann)曾经说过,用四个参数我可以拟合出一头大象,而用五个参数我可以让它的鼻子摆动。”

有趣的是,2010年6月,尤根·迈尔(Jurgen Mayer)等三位德国分子生物学家在《美国物理学期刊》(American Journal of Physics)发表了题为“用四个复参数画出一头大象”的论文。他们发现,利用四个复参数可以大致勾勒出大象的形态,再引入一个复参数则可以让大象的鼻子摆动起来。

5、直观图:

过拟合:

当一个模型过为复杂之后,它可以很好的“记忆”每一个训练集上的随机噪声的部分而忘记要去“学习”训练数据中通用的趋势。

过拟合主要有两个原因造成:数据太少+模型太复杂

奥斯姆剃刀:

这个原理称为“如无必要,勿增实体”,即“简单有效原理”。正如他在《箴言书注》2卷15题说“切勿浪费较多东西去做,用较少的东西,同样可以做好的事情。”

解决过拟合问题:

增加数据,减少特征(特征提取),交叉验证,正则化。

正则化:

避免过拟合问题最常用的方法,它的思想是在损失函数中加入刻画模型复杂度的指标。

一般来说模型的复杂度由权重w决定,刻画模型复杂度的函数R(w)有两种,L1正则化和L2正则化。

L1:R(w)=∑∣Wi∣;L2:R(w)=∑(∣Wi∣*∣Wi∣)

L1和L2正则化的差别很大:

L1正则化会让参数变得更加稀疏,达到类似特征提取的功能,以及不可导,但是L2则相反。

11

滑动平均模型

在采用随机梯度下降算法训练神经网络时,使用 tf.train.ExponentialMovingAverage 滑动平均操作的意义在于提高模型在测试数据上的健壮性(robustness)。

tf.train.ExponentialMovingAverage需要提供一个衰减率(decay)。该衰减率用于控制模型更新的速度。该衰减率用于控制模型更新的速度。

ExponentialMovingAverage 对每一个(待更新训练学习的)变量(variable)都会维护一个影子变量(shadow variable)。影子变量的初始值就是这个变量的初始值。

shadow_variable=

decay×shadow_variable+(1−decay)×variable

由上述公式可知, decay 控制着模型更新的速度,越大越趋于稳定。实际运用中,decay 一般会设置为十分接近 1 的常数(0.99或0.999)。所有需要计算滑动平均的变量必须是实数型。

代码示例:


原文发布于微信公众号 - 机器学习算法全栈工程师(Jeemy110)

原文发表时间:2017-10-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏专知

一个实例读懂监督学习:Python监督学习实战

【导读】1月28日,Vihar Kurama和Sai Tejaswie撰写了一篇机器学习技术博文,为读者介绍了如何用python进行监督学习。作者首先解释什么是...

5047
来自专栏IT派

推荐|研究人脸识别技术必须知道的十个基本概念

1. 人脸检测 “人脸检测(Face Detection)”是检测出图像中人脸所在位置的一项技术。 人脸检测算法的输入是一张图片,输出是人脸框坐标序列(0个人...

3475
来自专栏机器学习从入门到成神

交叉熵代价函数定义及其求导推导(读书笔记)

神经元的输出就是 a = σ(z),其中z=\sum w_{j}i_{j}+b是输⼊的带权和。

46018
来自专栏奇点大数据

机器学习必备的数学基础有哪些?

对于机器学习给出了这样一个定义,机器学习是由三个部分组成,分别是表示、评价,还有优化。这样的三个步骤,实际上也就对应着在机器学习当中所需要的数学。

652
来自专栏AI科技大本营的专栏

实战 | 速度快3倍,大小仅1/4,这项技术教你多快好省搭建深度学习模型

一般来说,神经网络层数越深、参数越多,所得出的结果就越精细。但与此同时,问题也来了:越精细,意味着所消耗的计算资源也就越多。这个问题怎么破?这就要靠剪枝技术了。...

35014
来自专栏PPV课数据科学社区

机器学习测试题(上)

人工智能一直助力着科技发展,新兴的机器学习正推动着各领域的进步。如今,机器学习的方法已经无处不在—从手机上的语音助手到商业网站的推荐系统,机器学习正以不容忽视...

29212
来自专栏算法channel

北大陈浩然笔记:特征缩放和泛化能力(亮点)

表示第 i 个数据的第 j 个属性,它是一个实数,yi 是第 i 个数据的标签值,也是实数。f是我们学习到的模型,

650
来自专栏计算机视觉战队

简单聊聊压缩网络

秋雨伴随着寒风冰冷的飘落,告知大家初冬已经离我们不远!虽然今夜不能欣赏圆月和家人团聚,但是我们的心永远在一起。在此,也衷心祝福大家中秋节快乐,祝愿大家心想事成,...

2795
来自专栏机器之心

入门 | 简述迁移学习在深度学习中的应用

3517
来自专栏ATYUN订阅号

在不同的任务中,我应该选择哪种机器学习算法?

当开始研究数据科学时,我经常面临一个问题,那就是为我的特定问题选择最合适的算法。在本文中,我将尝试解释一些基本概念,并在不同的任务中使用不同类型的机器学习算法。...

3113

扫码关注云+社区