深度学习网络基础解析(一)

引言

神经网络是深度学习的基石,说起来的渊源应该是1986年RumelhartMcCelland提出的BP(Back Propagation)算法。一般书上要讲解这一部分知识通常会从模型结构、算法原理等等开始,这样虽然会很专业严谨,然而对初学者不甚友好,不利于快速消化吸收。而本系列文章则以初学者的角度来边思考,边“形容”出深度学习深层次的原理,并在此基础上配以公式和图片,以满足处于不同学习阶段的学习者理解深度学习。

猜数字

在开始讲深度学习理论之前,我们先来回想一个小时候都玩过的游戏(首先声明一下我是90后,00后作为电子时代的孩子有没有玩过我就不知道了)——猜数字,也就是两个人坐在一起,其中一个人A在心里默想一个数字x,然后让另一个人B猜,当B说出一个数字后,A只能回答真实数字比猜测值大、小或是相等,然后B再根据A的回答相应调整猜测值,直到两者相等为止。

我们放慢这一过程(就像下图一样)——当B说出一个数字后,猜测值 xg x g 随着数据流到了A,随之A在心里面将真实值 xr x r 和猜测值 xg x g 做了比较,即 Δ=xrxg Δ = x r − x g ,然后将 Δ Δ 的正负情况告诉 B,B 则提出一个新的值 xg+Δg x g + Δ g ( Δg Δ g 是一个与 Δ Δ 正负一致,然而绝对值不尽相同的数) 给A进行判断。

举这样一个例子并非天马行空,而是因为这是一个绝好的抽象出 BP神经网络 原理的例子,即使事实上最简单的BP网络结构也会像下图一样复杂许多,但如果概括到输入层、隐藏层、输出层的层面上,其最重要的特征——传播性质也与猜数字有异曲同工之妙,下一节就从更加严谨、更具数学美感的角度来讲解。

两个函数、双向传播

(1)正向传播、反向传播

首先我们从双向传播开始。相信只要对深度学习有一定了解的人(当然没有也不要紧)都应该知道双向传播指的是正向传播和反向传播。其中,正向传播是输入通过隐藏层中的权值、偏置、激活函数等一层层向前推进,继而得出输出的过程,对应到上节的猜数字游戏就是 B 猜测一个数字,并告诉 A 的过程;反向传播是比较输出值与期望值(抑或称为真实值),得到一个差值,再根据这个差值算出梯度,并将梯度按照输入数据流入的反方向倒推回去,继而达到改变每层权值与偏置的目的,也就是上节猜数字故事中提到的 A 将 Δ Δ 的正负情况告诉 B 的过程。

依据上图,我们可以通过数学推导来详细解释这一过程( x1 x 1 x2 x 2 是输入映射, b1 b 1 是偏置, F F 是输出映射):

  • 正向传播:

  • 反向传播:

反向传播计算梯度在 w11 w 11 w12 w 12 的作用。因为最后的输出映射与 w11 w 11 w12 w 12 无直接关系,故而用求导链式法则来推导:

如果此时学习率为 η η ,则更新后的 w11 w 11 w12 w 12 为:

细心的人可能发现公式中出现了 loss ,这就是我们下一节要谈到的损失函数。

(2)损失函数

损失函数是表征模型输出值和期望值相近程度的函数,通常称为 loss函数,也有叫 error函数,一般有下面几种形式( y^ y ^ 代表期望值, y y 代表模型输出值):

  1. 0-1损失(Zero-one Loss)

    0-1损失是一种较为简单的损失函数,如果预测值与目标值不相等,那么为1,否则为0,即:

  2. 感知损失(Perceptron Loss)

    0-1损失太过严格,如果正式值为1,预测值为0.99,那么该预测大概率是正确的,但0-1损失认为是不对的,因此0-1损失只适合理想的情况。感知损失是对0-1损失的一种改进:

  3. Hinge损失(Hinge Loss)

    Hinge Loss为svm算法的损失函数,用来解决最大化几何间隔的问题,对于二分类问题 yi[1,1] ,定义为:

    • 对数损失函数(Log Loss)

      对数损失是使用对数的损失函数的一个总称,在使用似然函数最大化时,其形式是进行连乘,但是为了便于处理,一般会套上 log l o g ,这样便可以将连乘转化为求和,由于 log l o g 函数是单调递增函数,因此不会改变优化结果。逻辑回归算法中的交叉熵损失函数就是一种对数损失函数,为二分类问题 yi[1,1] y i ∈ [ − 1 , 1 ] ,交叉熵损失函数定义为:

    • 均方误差(Square Loss)

    • 绝对值误差(Absolute Loss)

    • 指数误差(Exponential Loss)

      指数误差,常用于boosting算法中,如adaboost,定义为:

      其中均方误差在深度学习中应用最广泛,常常作为模型最后好坏的标准。但需要注意的是loss函数的值并不一定是越小越好,关于这一点我们以后慢慢道来。

    • (2)激活函数

      关于激活函数(activation function),首先要搞清楚的问题是,激活函数是什么,有什么用?不用激活函数可不可以?答案是不可以。激活函数在上一节的介绍中即是 f1 f 1 f2 f 2 函数, 其主要作用是提供网络的非线性建模能力。如果没有激活函数,那么该网络仅能够表达线性映射,此时即便有再多的隐藏层,其整个网络跟单层神经网络也是等价的。因此也可以认为,只有加入了激活函数之后,深度神经网络才具备了分层的非线性映射学习能力,就像下图一样。

      单一线性神经元

      多个线性神经元

      那么激活函数应该具有什么样的性质呢?

      可微性: 当优化方法是基于梯度的时候,这个性质是必须的。

      单调性: 当激活函数是单调的时候,单层网络能够保证是凸函数。
      输出值的范围: 当激活函数输出值是 有限 的时候,基于梯度的优化方法会更加 稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是 无限 的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的learning rate。

      就现有情况而言,激活函数有这几种选择:Sigmoid函数、Tanh函数、Relu函数、Leaky ReLU函数、Maxout函数等等,它们各自特性、侧重点以及应用场景均不尽相同,关于它们的区别,我们之后再细细讨论。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值