深度学习之深度前馈网络(多层感知机)

Multilayer perceptron, MLP

Posted by WangW on August 9, 2019

记录了本人关于《Deep Learning》的读书笔记,仅仅为了个人形象直观的理解,望周知;

目录:

[TOC]

基于梯度的学习

设计和训练一个神经网络与使用梯度下降法训练其他任何机器学习模型并没有太大的不同;在之前,我们描述了通过指定的数据集代价函数优化方法以及模型族来构建一个机器学习算法。

代价函数

在大多数情况下,参数模型定义了一个分布$p(y|x; \theta)$并且简单地使用最大似然原来。这意味着我们使用交叉熵作为代价函数。

有时,我们使用一个更简单的方法,不是预测$y$的完整概率分布,而是仅仅预测在给的$x$的条件下$y$的某种统计量。某些专门的损失函数允许我们来训练这些估计量的预测器。

使用最大似然学习条件分布

大多数现代的神经网络使用最大似然来训练,意味着代价函数就是负的对数似然,它与训练数据与模型分布间的交叉熵等价,这个代价函数表示为:

代价函数的具体形式随着模型而改变,这取决于$log p_{model}(y|x)$的具体形式;

优势:

  1. 减轻为每个模型设计代价函数的负担。明确模型$p(y|x)$则自动确定代价函数。
  2. 代价函数的梯度需要足够大和具有足够的预测性,来为学习算法提供好的指引。饱和函数破坏这个目标,因为它可以把梯度变得十分小。在神经网络中,隐藏单元中的激活函数会变的饱和,而负的对数似然帮助我们在很多模型中避免这一个问题。

学习条件统计量

有时候不学习完整的概率分布,二十仅仅学习在给定$x$时$y$

直观理解就是函数族中找理想函数,主要用到的概念和技术有泛函、变分法。

输出单元

代价函数的选择与输出单元的选择密切相关。

用于高斯输出分布的线性单元

一种简单的输出单元是基于仿射变换的输出单元,放射变换不具有非线性。

给的特征向量$h$,线性输出单元层产生一个向量$\hat{y}=w^Th+b$.

线性输出层经常被用来产生条件高斯分布的均值:

最大化其对数似然此时等价与最小化均方误差。

用于Bernoulli 输出分布的sigmiod单元 (伯努利分布)

在二值型变量的情况下,我们希望计算一个单独的数

因为这个数需要在0-1之间,并且我们想要这个数的对数可以很好的用于对数似然的基于梯度的优化,因而我们选择去预测另外一个数$z=log\hat{P}(y=1|x)$, 对其指数化和归一化,就得到了一个由sigmiod函数控制的Bernoulli分布。

用于Multinoulli 输出分布的softmax单元

将上面的推广,得到一个softmax函数。

其它的输出类型

参考

隐藏单元

隐藏单元的设计是一个非常活跃的研究领域,并且还没有许多明确的指导性理论原则。

整流线性单元及其扩展

整流线性单元使用激活函数$g(z) = max{0, z}$.

通常作用与仿射变换之上:

缺点:不能通过基于梯度学习的方法学习那些使他们激活为0的样本。

为了解决这一问题,有了整流线性单元的四个扩展,前三个基于当$z_i < 0$时,使用一个非零的斜率$a_i$: $h_i = g(z,a)_i = max(0, z_i) + a_i min(0, z_i)$.

  • 绝对值整流 :固定$a_i = -1$
  • 渗漏整流线性单元(Leaky ReLU): 固定$a_i = 0.01$
  • 参数化整流线性单元(parametric ReLU) : 将$a_i ​$作为学习率的参数

  • $maxout​$单元

$logistic~sigmiod$与双曲正切函数

$logistic sigmiod$函数:

双曲正切函数:

当必须使用si’g’mi’o’d激活函数时,双曲正切激活函数通常比logistic sigmoid函数表现的好。

缺点:容易饱和,不推荐用在隐藏单元,除非使用一个合适的代价函数来抵消sigmoid的饱和性。

其它隐藏单元

  • 径向基函数
  • softplus函数
  • 硬双曲正切函数

架构设计

架构一词指的时网络中的整体结构:它应该具有多少单元,以及这些单元应该如何链接。

万能近似定理和深度

万能近似定理表明,一个前馈神经网络如果具有线性输出层和至少一层具有任何一种“挤压”性质的激活函数的隐藏层,只要给与网络足够数量的隐藏单元,它可以以任意精度来近似任何从一个有限维的空间到另一个有限维的空间的Borel可测函数。

万能定理意味着无论我们试图学什么函数,我们知道一个大的MLP一定能够表示这个函数。

其它构架上的考虑

后续会jiang

反向传播和其它的微分方程

略。