13. 深度学习笔记

13.1. 基本概念

  • 人工智能 (AI Artificial Intelligence),努力将通常由人类完成的智力任务自动化。
  • 机器学习 (ML Machine Learning)
  • 深度学习 (DL Deep Learning)

DL 是 ML 算法中的一种。ML 是实现 AI 的方法。

包含关系,AI > ML > DL。

13.1.1. AI

人工智能发展阶段:

  • AI 诞生于 20 世纪 50 年代,人们提出疑问:计算机是否能够“思考”?
  • 符号主义人工智能(Symbolic AI),人们相信,只要编写足够多的“明确规则”(硬编码)就可以实现 AI。专家系统(Expert System)是此种方式的典型应用。
  • ML 机器学习,符号主义人工智能适用于解决另一明确的逻辑问题,比如国际象棋,不适用于更加复杂,模糊的问题,比如图像分类,声音识别,于是 ML 取代了它。

13.1.2. ML

如果没有程序员精心编写的数据处理规则,计算机能否通过观察数据自动学会这些规则?

  • 符号主义人工智能:输入规则和处理数据,系统输出答案。
0
1
2
3
4
5
6
7
+------+     +-----------------------+     +---------+
| Data | --> | Classical Programming | --> | Answers |
+------+     +-----------------------+     +---------+
               ^
               |
             +-----------------------+
             |         Rules         |
             +-----------------------+
  • ML:人们输入数据(样本)和从这些数据中预期得到的答案,系统输出的是规则。规则可用于新的数据,并使计算机自主生成答案。
0
1
2
3
4
5
6
7
+---------+     +------------------+     +-------+
| Answers | --> | Machine Learning | --> | Rules |
+---------+     +------------------+     +-------+
                  ^
                  |
                +------------------+
                |       Data       |
                +------------------+

机器学习的最大特点:机器学习系统是训练出来的,而不是明确用程序编写出来的。举个例子,给 ML 分析一些猫的照片,机器会学习到猫的特征规则,并可以识别新的照片中的动物是否是猫。

机器学习的蓬勃发展的驱动力来源于硬件速度的提升和更大的数据集。例如:

  • Flickr 网站上用户生成的图像标签一直是计算机视觉的数据宝库。
  • YouTube 视频也是一座宝库。
  • 维基百科则是自然语言处理的关键数据集。

机器学习与数理统计密切相关,但是不同于统计学,它是一门以工程为导向的科学,更多的靠实践来证明,而不是理论推导。

机器学习三要素:

  1. 输入数据集。 比如语音数据,图像数据。
  2. 预期输入的示例。对于图像输入来说预期输入可能是“猫狗”之类的标签。
  3. 衡量算法效果好坏的方法。为了计算算法的当前输入出与预期输出的差距。

衡量结果是一种反馈信号,用于调节算法的工作方式,这个调节步骤就是我们所说的 学习

机器学习的核心问题是为输入数据寻找合适的表示——对数据进行变换,使其更适合手头的任务(比如分类任务)。 例如识别认证码,我们就不关心色彩,而是要把它与背景区分开来并校正扭曲的码字。

机器学习中的 学习 指的是,寻找更好数据表示(根据任务将数据转化为更加有用的表示)的自动搜索过程。

机器学习算法在寻找这些变换时仅仅是遍历一组预先定义好的操作,这组操作叫做 假设空间 (Hypothesis Space)。

这就是机器学习的技术定义:在预先定义好的可能性空间中,利用反馈型号的指引来寻找输入数据的有用表示。整个流程如下所示:

0
1
2
3
4
5
6
7
+-----------+     +------------------+     +---------+       +-----------+
|   Data    | --> | Machine Learning | --> | Answers | <-|-> | Expection |
+-----------+     +------------------+     +---------+   |   +-----------+
                          ^                              |
                          | Transform                    | Feedback
                +------------------+     +-----------+   |
                | Hypothesis Space | <-- |   Diff    | <-+
                +------------------+     +-----------+

13.1.3. DL

数据模型中包含多少层,这被称为模型的 深度 (depth)。

这一领域的其他名称包括分层表示学习(layered representations learning)和层级表示学习(hierarchical representations learning)。

  • 深度学习通常包含数十个甚至上百个连续的表示层,这些表示层全都是从训练数据中自动学习的。
  • 其他机器学习方法的重点往往是仅仅学习一两层的数据表示,因此有时也被称为浅层学习(shallow learning)。

在深度学习中,这些表示层通过神经网络(neural network)的模型来学习得到。神经网络的结构是 逐层堆叠

深度学习的技术定义:学习数据表示的多级方法。

神经网络中每层对输入数据所做的具体操作保存在该层的 权重 (weight) 。其本质是一串数字,权重也被称为该层的 参数 (parameter)。

学习的意思是为神经网络的每层找到一组权重值,使得该网络能够将每个示例输入与其目标正确地一一对应。

神经网络的 损失函数 (loss function),或目标函数(objective function)用于衡量输出与预期之间的距离,也即效果的好坏。

DL 的基本技巧是利用这个距离值作为反馈信号来对权重值进行微调,以降低损失值,这种调节由优化器(Optimizer)来完成,它实现了所谓的反向传播(backpropagation) 算法。这是 DL 的核心算法。

一开始对权重随机赋值,随着网络处理的示例越来越多,权重值也在向正确方向趋近,损失值也逐渐降低,这就是训练循环(Training Loop)。

深度学习从数据中进行学习时有两个基本特征:

  • 第一, 通过渐进的、逐层的方式形成越来越复杂的表示;
  • 第二, 对中间这些渐进的表示共同进行学习,每一层的变化都需要同时考虑上下两层的需要。

这两个特征使得深度学习比先前的机器学习方法更加成功。

深度学习已经取得了以下突破,它们都是机器学习历史上非常困难的领域:

-‰ 接近人类水平的图像分类 ‰- 接近人类水平的语音识别 ‰- 接近人类水平的手写文字转录 ‰- 更好的机器翻译 ‰- 更好的文本到语音转换 ‰- 数字助理,比如谷歌即时(Google Now)和亚马逊 Alexa ‰- 接近人类水平的自动驾驶 ‰- 更好的广告定向投放, Google、百度、必应都在使用 ‰- 更好的网络搜索结果 ‰- 能够回答用自然语言提出的问题 ‰- 在围棋上战胜人类

13.1.4. 经典机器学习方法

13.1.4.1. 概率建模

概率建模是统计学原理在数据分析中的应用。它是最早的机器学习形式之一。

  • 朴素贝叶斯算法,它假设输入数据的特征都是独立的。
  • Logistic 回归(Logistic Regression,简称 Logreg),它是一种分类算法,而不是回归算法。

13.1.4.2. 早期神经网络

贝尔实验室于 1989 年第一次成功实现了神经网络的实践应用,当时 Yann LeCun 将卷积神经网络的早期思想与反向传播算法相结合,并将其应用于手写数字分类问题,由此得到名为 LeNet 的网络,在 20 世纪 90 年代被美国邮政署采用,用于自动读取信封上的邮政编码。

13.1.4.3. 核方法

核方法(kernel method)。核方法是一组分类算法,其中最有名的就是支持向量机(SVM,support vector machine)。

SVM 的目标是通过在属于两个不同类别的两组数据点之间找到良好决策边界(decision boundary)来解决分类问题。

SVM 通过两步来寻找决策边界。 1. 将数据映射到一个新的高维表示,这时决策边界可以用一个超平面来表示。 2. 尽量让超平面与每个类别最近的数据点之间的距离最大化,从而计算出良好决策边界(分割超平面),这一步叫作间隔最大化(maximizing the argin)。这样决策边界可以很好地推广到训练数据集之外的新样本。

SVM 很难扩展到大型数据集,并且在图像分类等感知问题上的效果也不好。 SVM 是一种比较浅层的方法,因此要想将其应用于感知问题,首先需要手动提取出有用的表示(这叫作特征工程),这一步骤很难,而且不稳定。

13.1.4.4. 决策树、随机森林

决策树(decision tree)是类似于流程图的结构,可以对输入数据点进行分类或根据给定输入来预测输出值。

随机森林(random forest)算法,它引入了一种健壮且实用的决策树学习方法,即首先构建许多决策树,然后将它们的输出集成在一起。随机森林适用于各种各样的问题—— 对于任何浅层的机器学习任务来说,它几乎总是第二好的算法。

13.1.4.5. 梯度提升机

与随机森林类似, 梯度提升机(gradient boosting machine)也是将弱预测模型(通常是决策树)集成的机器学习技术。它使用了梯度提升方法,通过迭代地训练新模型来专门解决之前模型的弱点,从而改进任何机器学习模型的效果。

13.2. 神经网络

  • NN(Neural Network):神经网络,这里还没有和生物上的神经网络相揖别。
  • ANN(Artificial Neural Network):人工神经网络,这里就是计算机领域(人工智能/深度学习领域)的神经网络了,通常把最前面的A替换为某种优化算法或特性的缩写,比如 DNN,CNN。
  • DNN(Deep Neural Network):深度神经网络,所有当前讨论的神经网络的基石。通常指隐藏层 >=2 的人工神经网络,含一层隐藏层的称为多层感知机(Multi-layer Perceptron)。
  • DBM(Deep Boltzmann Machine):深度波尔茨曼机。
  • DBN(Deep Belief Network):深度置信网络。
  • RNN(RNN(Recurrent Neural Network):循环神经网络,是一类用于处理序列数据的神经网络。

13.2.1. 多层感知机

最早的神经网络节点的雏形源于感知机(Perceptron),只可处理线性可分的二分类问题,无法解决 XOR 异或问题。

20世纪80年代末期,人工神经网络的反向传播算法(也叫Back Propagation算法或者BP算法)被发明,利用 BP 算法可以让一个人工神经网络模型从大量训练样本中学习到统计规律,从而对未知事件做预测。这种基于统计的机器学习方法比起过去基于人工规则的系统,在很多方面显出优越性。这个时候的人工神经网络,只含有一层隐层节点的浅层模型,被称作多层感知机(Multi-layer Perceptron)。

20世纪90年代,各种各样的浅层机器学习模型相继被提出,例如支撑向量机(SVM,Support Vector Machines)、 Boosting、最大熵方法(如LR,Logistic Regression)等。这些模型的结构基本上可以看成带有一层隐层节点(如SVM、Boosting),或没有隐层节点(如LR)。这些模型无论是在理论分析还是应用中都获得了巨大的成功。相比之下,由于理论分析的难度大,训练方法又需要很多经验和技巧,这个时期浅层人工神经网络反而相对沉寂。

2006年,加拿大多伦多大学教授、机器学习领域的泰斗Geoffrey Hinton和他的学生Ruslan Sala khutdinov 在《科学》上发表了一篇文章,开启了深度学习在学术界和工业界的浪潮。这篇文章有两个主要观点:

  • 多隐层的人工神经网络具有优异的特征学习能力,学习得到的特征对数据有更本质的刻画,从而有利于可视化或分类;
  • 深度神经网络在训练上的难度,可以通过“逐层初始化”(layer-wise pre-training)来有效克服,这篇文章中,逐层初始化是通过无监督学习实现的。

13.2.2. 深度学习

比起使用 BP 算法的浅层学习,超过 2 层的神经网络上的学习通常被认为是深度学习(Deeping Learning)。

深度神经网络具有学习能力的本质:利用矩阵的线性变换和激活函数的非线性变换,将原始输入空间投向线性可分/稀疏的空间去分类/回归。增加节点数,即增加线性转换能力。增加层数:增加激活函数的次数,即增加非线性转换能力。

Hornik 1989 年证明只需要一个包含足够多神经元的隐层,BP神经网络就能以任意精度逼近任意复杂度的连续函数。通过增加层数相当于则降低了单层的复杂度。浅层神经网络可以模拟任何函数,但数据量的代价是无法接受的。深层解决了这个问题。相比浅层神经网络,深层神经网络可以用更少的数据量来学到更好的拟合。

13.2.3. CNN

CNN(Convolutional Neural Network)卷积神经网络的特定:

  • 卷积:对图像元素的矩阵变换,是提取图像特征的方法,多种卷积核可以提取多种特征。一个卷积核覆盖的原始图像的范围叫做感受野(权值共享)。一次卷积运算(哪怕是多个卷积核)提取的特征往往是局部的,难以提取出比较全局的特征,因此需要在一层卷积基础上继续做卷积计算 ,这也就是多层卷积。
  • 池化(Pooling):降维的方法,按照卷积计算得出的特征向量维度大的惊人,不但会带来非常大的计算量,而且容易出现过拟合,解决过拟合的办法就是让模型尽量“泛化”,也就是再“模糊”一点,那么一种方法就是把图像中局部区域的特征做一个平滑压缩处理,这源于局部图像一些特征的相似性(即局部相关性原理)。
  • 全连接:softmax分类训练过程:卷积核中的因子(×1或×0)其实就是需要学习的参数,也就是卷积核矩阵元素的值就是参数值。一个特征如果有9个值,1000个特征就有900个值,再加上多个层,需要学习的参数还是比较多的。

与普通的 DNN 深度神经网络相比:DNN的输入是向量形式,并未考虑到平面的结构信息,在图像和NLP领域这一结构信息尤为重要,例如识别图像中的数字,同一数字与所在位置无关(换句话说任一位置的权重都应相同),CNN的输入可以是其他维度的张量,例如二维矩阵,通过filter获得局部特征,较好的保留了平面结构信息。

CNN的几个特点:局部感知、参数共享、池化。

CNN 在计算机图像处理领域应用很广,比如寻找相似图片,人脸检测等。

CNN发展至今,已经有很多变种,其中有几个经典模型在CNN发展历程中有着里程碑的意义,它们分别是:LeNet、Alexnet、Googlenet、VGG、DRL等。

13.2.3.1. LeNet5

CNN 的经典模型:手写字体识别模型 LeNet5。

LeNet5 诞生于1994年,是最早的卷积神经网络之一,由Yann LeCun 完成,推动了深度学习领域的发展。在那时候,没有 GPU 帮助训练模型,甚至CPU的速度也很慢,因此,LeNet5 通过巧妙的设计,利用卷积、参数共享、池化等操作提取特征,避免了大量的计算成本,最后再使用全连接神经网络进行分类识别,这个网络也是最近大量神经网络架构的起点,给这个领域带来了许多灵感。

参考:https://my.oschina.net/u/876354/blog/1632862 论文:Gradient-Based Learning Applied to Document Recognition

13.2.3.2. AlexNet

2012年,Alex Krizhevsky、Ilya Sutskever在多伦多大学Geoff Hinton的实验室设计出了一个深层的卷积神经网络AlexNet,夺得了2012年ImageNet LSVRC的冠军,且准确率远超第二名(top5错误率为15.3%,第二名为26.2%),引起了很大的轰动。AlexNet可以说是具有历史意义的一个网络结构,在此之前,深度学习已经沉寂了很长时间,自2012年AlexNet诞生之后,后面的ImageNet冠军都是用卷积神经网络(CNN)来做的,并且层次越来越深,使得CNN成为在图像识别分类的核心算法模型,带来了深度学习的大爆发。

AlexNet之所以能够成功,跟这个模型设计的特点有关,主要有:

  • 使用了非线性激活函数:ReLU
  • 防止过拟合的方法:Dropout,数据扩充(Data augmentation)
  • 其他:多GPU实现,LRN 归一化层的使用

参考:https://my.oschina.net/u/876354/blog/1633143

13.2.3.3. VGGNet

2014年,牛津大学计算机视觉组(Visual Geometry Group)和Google DeepMind公司的研究员一起研发出了新的深度卷积神经网络:VGGNet,并取得了ILSVRC2014比赛分类项目的第二名(第一名是GoogLeNet,也是同年提出的)和定位项目的第一名。 VGGNet探索了卷积神经网络的深度与其性能之间的关系,成功地构筑了16~19层深的卷积神经网络,证明了增加网络的深度能够在一定程度上影响网络最终的性能,使错误率大幅下降,同时拓展性又很强,迁移到其它图片数据上的泛化性也非常好。到目前为止,VGG仍然被用来提取图像特征。 VGGNet可以看成是加深版本的AlexNet,都是由卷积层、全连接层两大部分构成。

参考:https://my.oschina.net/u/876354/blog/1634322

13.2.3.4. GoogLeNet

2014年,GoogLeNet和VGG是当年ImageNet挑战赛(ILSVRC14)的双雄,GoogLeNet获得了第一名、VGG获得了第二名,这两类模型结构的共同特点是层次更深了。VGG继承了LeNet以及AlexNet的一些框架结构,而GoogLeNet则做了更加大胆的网络结构尝试,虽然深度只有22层,但大小却比AlexNet和VGG小很多,GoogleNet参数为500万个,AlexNet参数个数是GoogleNet的12倍,VGGNet参数又是AlexNet的3倍,因此在内存或计算资源有限时,GoogleNet是比较好的选择;从模型结果来看,GoogLeNet的性能却更加优越。

13.2.3.5. ResNet

ResNet(Residual Neural Network)深度残差网络,应用于CNN,解决网络训练深度。

13.2.4. RNN

13.2.4.1. LSTM

长短时记忆网络 (Long Short Term Memory Network),是一种改良的RNN,它成功的解决了原始循环神经网络的缺陷,成为当前最流行的RNN,在语音识别、图片描述、自然语言处理等许多领域中成功应用。

13.2.4.2. GRU

一种LSTM的变体:GRU (Gated Recurrent Unit)。 它的结构比LSTM简单,而效果却和LSTM一样好,因此,它正在逐渐流行起来。

参考:https://cuijiahua.com/blog/2019/01/dl-12.html

13.3. 基础数学

比较全面的总结参考这里:机器学习中的基本数学知识

13.3.1. 张量

张量是矩阵向任意维度的推广[注意,张量的维度(dimension)通常叫作轴(axis)]。矩阵是 2D 张量。

张量轴的个数也叫作阶 (rank)。 维度可以表示沿着某个轴上的元素个数,也可以表示张量中轴的个数。

  • 0D 张量:仅包含一个数字的张量叫作标量(scalar),对应 Numpy 中 一个 float32 或 float64 数字。
  • 1D 张量:数字组成的1维数组叫作向量(vector),它有一个轴。如果一个向量有 5 个元素,称为 5D向量。5D 向量只有一个轴,沿着轴有5个维度。
  • 2D 张量:向量组成的数组叫作矩阵(matrix)或者二维张量。矩阵有2个轴,通常被叫作行和列。
  • 3D 张量:多个矩阵组合成一个新的数组,可以得到一个 3D 张量。

深度学习处理的一般是 0D 到 4D 张量,但处理视频时会遇到 5D 张量。

我们用几个你未来会遇到的示例来具体介绍数据张量。你需要处理的数据几乎总是以下类别之一。

  • 向量数据:2D 张量,形状为 (samples, features)。
  • 时间序列数据或序列数据: 3D 张量,形状为 (samples, timesteps, features)。
  • 图像: 4D 张量,形状为 (samples, height, width, channels) 或 (samples, channels,height, width)。
  • 视频: 5D 张量,形状为 (samples, frames, height, width, channels) 或 (samples, frames, channels, height, width)。

13.3.2. 概率论

13.3.2.1. 样本和事件

样本空间:考虑一个试验,其结果是不可肯定地预测的(是一个具有随机性的变量),则所有可能的结果构成的集合,称为该试验的样本空间(Sample Space),记为 S,所以S 就是随机变量所有的可能值的集合。

例如:试验是考察新生婴儿的性别,那么所有可能结果的集合 S = {girl, boy}。

事件(event):样本空间的任一子集 E 称为事件。一个事件是由试验的部分结果组成的一个集合,如果试验的结果包含在 E 里面,那么就称事件 E 发生了。

例如,E={girl} 就是一个事件,如果考察的出生的婴儿是女孩,那么就表示事件 E (婴儿是个女孩)发生了。

\[P\left( E\right) =\lim _{n\rightarrow \infty }\dfrac {n\left( E\right) }{n}\]

n(E)表示 n 次重复试验中事件E发生的次数,概率 P(E) 就定义成上面的形式。关于概率的几个简单性质:

  • 一个事件不发生的概率等于 1 减去它发生的概率。\(P\left( E^{c}\right) =1-P\left( E\right)\)
  • 如果 \(E\subset F\),那么 \(P\left( E\right) \leq P\left( F\right)\)
  • \(P\left( E\cup F\right) =P\left( E\right) +P\left( F\right) -P\left( EF\right)\)

使用维恩图很容易理解。

13.3.2.2. 信息熵

信息熵(Information Entropy)用于对样本集D在样本空间(所有可能结果的集合)分布的纯度的度量:分布越单一,那么纯度越高,熵越小,分布越杂乱,那么纯度越底,熵越大。

信息熵

公园步道和绿化带

举一个直觉上的例子,把公园中的步道和绿化带做对比,步道的规律非常明显,无论从材料还是从铺设上都是有规律可循的,我们只要观察一小部分就能推出其余步道规律,它所包含的信息量就少,可以类比数据“abcabcabc”;而绿化带就没有那么明显的规律,有草有树,还有落叶和有了设施,地势也高低不平,那么它所包含的信息量就大,可以类比于数据“Hello world!”。

\[Ent(D)=-\sum_{k=1}^npk\log_{2}^{pk}\]

以上就是熵的定义,单位为bit。pk 表示每一样本空间的概率,当分类最具规律时,也即全部属于一个分类 i 时,必有 pi = 1,其余分类概率为 0, 此时 Ent(D) 取最小值0,当所有 k 均匀分布时(最杂乱),Ent(D) 取最大值 \(\log_{2}^{n}\)

以2为底的信息熵还直接给出了最小二进制编码长度,信息熵的单位为 bit 是有实际意义的。如何度量一篇英文文章的信息量,以及如何最小编码?英文文章中的每一个字符可以使用128个ASCII码表示,如果每个ASCII码等概率出现,那么每个字符的 Ent(D) 就是 7bits,就需要 7bits 进行编码,然而字符 a 比 z 出现的概率要高得多,所以 a 可以使用更短的编码: (\(\log_{2}^{pa}\) 向上取整),z 可以使用更长的编码,平均下来每个字符的 Ent(D) 就远远少于 7bits。

由于编码后的字节是连续的,要区分不同的字符的编码就要加入控制字符,比如前导码,这就是数据冗余。以上就是香农-范诺编码和哈夫曼编码的理论基础。

决策树分类方法使用最大信息增益(或基尼系数)构造决策树,每一步选择分类的属性标准:让数据更趋于有规律,此时信息增益最大,而整个分类的信息熵就会降低最大。

13.3.2.3. 几种概率

先验概率\(P(X=a)\) 仅与单个随机变量有关的概率称为先验概率。又称为 边缘概率统计概率,因为它不考虑其他因素(不限定任何条件)。

例如一个箱子中有 0-9 编号的 10 个球,从中单次取到编号为 0 的球的概率 \(P(X=0) = \frac{1}{10}\)

条件概率:在 Y = b 成立的情况之下,X = a 的概率,记作 \(P(X=a|Y=b)\)\(P(a|b)\)。是已知 b 发生后发生 a 的条件概率,也称作 a 在给定 b 条件下的 后验概率

例如当从第一个箱子取到编号为 0 的情况下,再从箱子中取到 1 号球的概率:\(P(1|0) = \frac{1}{9}\)

联合概率:包含多个条件且所有条件同时成立的概率,记作 \(P(X=a,Y=b)\)\(P(a,b)\)

例如有两个箱子,一个箱子中有 0-9 编号的10个球,另一个箱子有红绿 2 种颜色的 2 个球。从第一个箱子取到数字 0 并且第二个箱子取到红色球的概率 \(P(0,Red) = \frac{1}{20}\)

13.3.2.4. 各类概率间关系

联合概率、边缘概率与条件概率之间的关系

\[\ P(X=a|Y=b)=\frac{P(X=a,Y=b)}{P(Y=b)}\]

简写为:

\[\ P(X|Y)=\frac{P(X,Y)}{P(Y)}\]

由于 \(P(X=a,Y=b)=P(Y=b,X=a)\),所以 :

\[\ P(Y=b|X=a)=\frac{P(X=a|Y=b)P(Y=b)}{P(X=a)}\]

简写为:

\[\ P(Y|X)=\frac{P(X|Y)P(Y)}{P(X)}\]

这就是概率论中著名的 贝叶斯定理 的定义。

独立事件:如果事件 Y 发生不会影响事件 X 的发生,则称X, Y相互独立。而在条件概率中,当 \(P(X|Y)=P(X)\) 时也就意味着 Y 发生不会影响 X 发生。 代入 \(P(X|Y)=\frac{P(X,Y)}{P(Y)}\) 得到 \(P(X,Y)={P(X)}{P(Y)}\),它通常用于判断两个事件是否独立。

上面例子中的从两个箱子拿小球的例子就是相互独立,所以 \(P(X,Y)={P(X)}{P(Y)}\),也即 \(\frac{1}{20}=\frac{1}{10}\frac{1}{2}\)

非独立事件:如果不满足 \(P(X,Y)={P(X)}{P(Y)}\),那么 X, Y 就是非独立事件。

例如在一个箱子里面有编号 0-9 的 10 个小球,其中奇数球为红色,偶数球为绿色,那么取到 0 号球的事件 X 概率为 \(P(X)=\frac{1}{10}\),取到红色球的事件 Y 概率为 \(P(Y)=\frac{1}{2}\),但是同时取到 0 号球和红色球的概率 \(P(X,Y)\neq{P(X)}{P(Y)}\),而是 0。

无论是独立事件还是非独立事件,下面的等式恒成立:

\[\ \frac{P(Y|X)}{P(Y)}=\frac{P(X|Y)}{P(X)}\]

这意味着互为条件的概率比值是一个常数。

举例子:

  • 假如发现金矿的地形多在靠近河流的山地,那么如果新发现一个金矿,那么这个新矿的地形很可能是靠近河流的山地。
  • 假如统计发现垃圾邮件中多出现 “大奖”,“发票”,“陪聊”,“大乐透”等关键词,那么当一个邮件内出现这些词的时候,它是垃圾邮件的概率就很高。

这就是贝叶斯分类的理论依据。

分类垃圾邮件的算法变成了,计算如下几个概率的问题:

  • P(Y):P(Y=垃圾邮件),垃圾邮件出现的概率,这个比较简单,只要有足够的邮件数,将垃圾邮件数除以总邮件数量,P(Y=正常邮件) 等于 1-P(Y=垃圾邮件)。
  • P(X|Y):统计Xi(每个分词)在垃圾邮件中出现的概率,P(X|Y=垃圾邮件)是每个分词在垃圾邮件中的联合概率,为了简便计算,这里认为各个分词出现在垃圾邮件中的概率是独立的,所以P(X|Y=垃圾邮件)=P(X0|Y=垃圾邮件)*P(X1|Y=垃圾邮件)*…,由于涉及到多个小数相乘,为了防止下溢出,转化为对数计算。同理可以计算出各个分词在正常邮件中出现概率。由于某些词可能不出现,这样整个后验概率就成 0 了,将所有词出现次数初始化为 1,分母初始化为 2。
  • P(X):也即每个分词在所有邮件中出现的频率。

以上概率都是基于大数定律,所以样本一定要足够多,否则并不能体现出真实的概率分布情况。有了以上概率,当收到一封邮件时,首先进行分词,然后计算 P(Y=垃圾邮件|X) 和 P(Y=正常邮件|X),比较概率值即可进行分类。

如果要进行多分类(n 分类)就要分别计算 n 个分类的 P(Yi),预测时也要计算 n 个分类的 P(Yi|X)。