专栏首页机器学习算法工程师全面直观认识深度神经网络

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

作者:石文华

编辑:赵一帆

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),作者:石文华

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 阿里资深 AI 工程师教你逐个击破机器学习核心算法

    近年来,随着 Google 的 AlphaGo 打败韩国围棋棋手李世乭之后,机器学习尤其是深度学习的热潮席卷了整个 IT 界。

    机器学习算法工程师
  • 数据挖掘中的利器--XGBoost理论篇

    XGBoost是各种数据挖掘或机器学习算法类比赛中每个团队都会使用且精度相对最好的算法之一(Deep Learning算法除外)。也就是说,对于刚转向机器学习领...

    机器学习算法工程师
  • 机器学习该如何入门

    引言   可能你对这个名字叫“机器学习”的家伙不是特别的了解,但是相信用过iPhone的同学都知道iPhone的语音助手Siri,它能帮你打电话,查看天气等等;...

    机器学习算法工程师
  • 深度学习最新梳理:OpenAI研究骨干博士论文

    【新智元导读】Wojciech Zaremba 是 Hinton、Ilya Sutskever 一脉相承的弟子,在谷歌大脑实习过,在 Facebook 受过 L...

    新智元
  • 深度学习笔记-神经网络介绍

    ---- Deep Learning 学习笔记-第一周 Andrew Ng发布了新课程,业界评价很好。在看的过程中非常不错,我把一些重要的知识和要点进行了总结和...

    BrianLv
  • 转型AI产品经理需要掌握的硬知识二:AI常见概念和算法梳理

    上一篇文章介绍AI产品经理能力模型,人工智能的发展历史,人工智能常见概念的结构梳理,也简要做了BAT人工智能的优势分析,感兴趣的朋友可以点击链接查看上文。转型A...

    用户2559057
  • 程序员该如何学习数据结构与算法?

    一个成熟的程序员数据结构和算法属于基本必备素质,很多程序员觉得算法距离自己有点距离,正常情况下算法不是渗透到每个角落。但程序的执行效率散布在每个角落。所以学习数...

    程序员互动联盟
  • 【深度学习进化论】谷歌大脑神经演化新算法 PK OpenAI 集群智能

    【新智元导读】神经演化方法在上世纪80年代被提出,由于神经网络的兴起而一度遭受冷遇。不过现在,谷歌大脑和 OpenAI 都在重新审视这种方法。通过在深度学习中引...

    新智元
  • 为什么现在算法工程师工资这么高?

    2018届互联网校招高薪酬清单出炉,排在第一位的是谷歌中国的年薪56万(人工智能),其次是微软、Google的算法工程师,以51万,50万分居第二,第三。 放眼...

    程序员互动联盟
  • 1.4 算法和算法分析

    1、算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。

    C语言入门到精通

扫码关注云+社区

领取腾讯云代金券