赞
踩
首先,我们需要明确几个概念之间的关系。
机器学习(Machine Learning,ML) 是人工智能(Artificial Intelligence,AI)的子集,神经网络(Neural Network,NN)是机器学习的子集,深度学习(Deep learning,DL)是神经网络的子集。如图1-1所示。
人工神经网络(Artificial Neural Network,ANN),简称神经网络,是机器学习的重要研究方向。近年来掀起了一阵深度学习浪潮,深度学习并不是一个全新的领域,从本质上说,就是神经网络。
神经网络主要分为三种类型:前馈神经网络(Feedforward Neural Network,FNN)、反馈神经网络(Feedback Neural Network)、图神经网络(Graph Neural Network,GNN)。
其中,前馈神经网络不存在反馈信号,信号从输入层向输出层单向传播。相对其它两种类型的神经网络来说更加简单,是神经网络初学者的首要研究学习的对象。
深度学习的研究对象是深度神经网络(Deep Neural Network,DNN)。
因此,本文主要讲解深度前馈神经网络(Deep Feedforward Neural Network,DFNN)。深度前馈神经网络主要包括了深度全连接神经网络(Deep Fully Connected Neural Network,DFCNN),深度卷积神经网络(Deep Convolutional Neural Network,DCNN)、深度信念网络(Deep Belief Network,DBN)、多层自编码器(Multi-layer Autoencoder,MAE)等。
深度学习并不关心到底使用何种类型的神经网络,只要网络的层数够深,都可以成为深度学习的研究对象。至于有多少层才算深度神经网络,有一种说法认为超过三层以上的神经网络都可以叫作深度神经网络。
注:为了便于学习和查阅,仍然在各章节中纳入了浅层网络的知识,虽然严格来说它们并不在深度学习的范畴之内,但毫无疑问,浅层网络是深层网络的基础,是必须要牢牢掌握的。
深度学习的许多概念和算法出自于机器学习,如损失函数、正则化、优化算法、性能评价指标等概念和算法。因此,在介绍深度学习之前,不可避免地需要对机器学习的基本理论有所了解,为后续进一步学习深度学习的原理、算法和实践奠定坚实的基础。
就我看来,机器学习的一种比较合理的定义是:研究如何让计算机模型自动地从历史数据中学习得到模型参数,从而改善模型的性能,能对新数据能作出有效预测和判断的一门交叉学科。
当下我们常说的机器学习,又称统计机器学习、归纳学习,它是以统计学原理为深刻基础的。其核心内涵用一句话表示,就是 “模型从数据中学习”。
那么,根据“模型从数据中学习”,就得到了机器学习的三要素:数据、模型、算法。更确切地说,“数据”指的是训练集,“模型”指的是函数,“算法”指的是学习的过程,即模型参数从劣到优的整个变化过程。
构建一个较大的数据集以供机器学习模型从中学习,是机器学习的第一个前提条件,这个数据集就叫做训练数据集,简称训练集。为什么叫训练集呢?因为,“模型从数据中学习”的等价表述就是“用数据训练模型”。
机器学习任务按照是否已知训练集的标签,主要可分为有监督学习和无监督学习两大类。
有监督学习,又称有教师学习,它是一类已知训练样本标签的分类或者回归任务。为了解决一个模式识别任务,需要构建一个模型,要求该模型能够从有标注的训练样本中尽可能学习到数据的特征表示及其分布,即找到合适的模型参数,使得输入一个训练样本的特征,模型就能输出与该训练样本匹配的标签(事先已经给出了),并能够很好地预测新样本(测试样本)的标签。
常见的有监督学习模型有线性回归(Linear Regression, LR)、对数几率回归(Logistic Regression, LR)、决策树(Decision Tree, DT)、支持向量机(Support Vector Machine, SVM)、朴素贝叶斯(Naive Bayes, NB)、随机森林(Random Forest, RF)等。
无监督学习,又称无教师学习,常见的无监督学习问题有聚类、降维、离群点检测等。无监督学习任务的训练集中没有标签,也不需要标签。在不依靠标签的情况下,模型能学习到训练样本的特征信息和样本之间的相互关系。
在1.1中,我们已经介绍了机器学习的三要素是数据、模型和算法,下面分别详细介绍这三个要素,以此来阐明机器学习的原理。
数据指的是训练集。
以有监督学习为例,设有一个训练集
D
D
D:
D
=
{
(
x
(
1
)
,
y
(
1
)
)
,
(
x
(
2
)
,
y
(
2
)
)
,
⋯
,
(
x
(
N
)
,
y
(
N
)
)
}
D=\{(\bm{x}^{(1)},y^{(1)}),(\bm{x}^{(2)},y^{(2)}),\cdots,(\bm{x}^{(N)},y^{(N)})\}
D={(x(1),y(1)),(x(2),y(2)),⋯,(x(N),y(N))}
或记作:
D
=
{
(
x
(
i
)
,
y
(
i
)
)
∣
i
=
1
,
2
,
⋯
,
N
}
D=\{(\bm{x}^{(i)},y^{(i)})|i=1,2,\cdots,N\}
D={(x(i),y(i))∣i=1,2,⋯,N}
其中,
x
(
i
)
\bm{x}^{(i)}
x(i) 是一个列向量,它表示第
i
i
i 个训练样本的特征向量,
x
(
i
)
=
(
x
1
(
i
)
,
x
2
(
i
)
,
⋯
,
x
m
(
i
)
)
T
\bm{x}^{(i)}=(x^{(i)}_{1},x^{(i)}_{2},\cdots,x^{(i)}_{m})^{T}
x(i)=(x1(i),x2(i),⋯,xm(i))T,向量中的每一个分量都代表一个特征,特征的个数为
m
m
m;
y
(
i
)
y^{(i)}
y(i) 是一个数(也可以是向量,根据问题来定),它表示第
i
i
i 个训练样本的标签(label),也叫地面真值(ground truth,gt);
N
N
N 表示训练样本的个数;
举个例子,在有监督网站用户异常行为检测任务中,训练集的样本
x
(
i
)
\bm{x}^{(i)}
x(i) 当中一般会包含用户请求次数(可设定为
x
1
(
i
)
x^{(i)}_{1}
x1(i))、请求频率(
x
2
(
i
)
x^{(i)}_{2}
x2(i))、请求方式(
x
3
(
i
)
x^{(i)}_{3}
x3(i))、请求内容(
x
4
i
x^{i}_{4}
x4i)等与异常行为息息相关的特征信息,
y
(
i
)
y^{(i)}
y(i) 的取值要么是正常(可编码为1),要么是异常(可编码为0)。
我们的任务就是要根据训练集的若干
x
(
i
)
\bm{x}^{(i)}
x(i) 和
y
(
i
)
y^{(i)}
y(i),学习到数据的整体分布,确定模型的参数,使得模型尽可能拟合这个分布,将来可以利用这个模型,只要给定用户的请求次数等特征信息,将其输入到模型当中,模型就能预测出用户的行为是正常还是异常,从而指导服务器,若预测结果是异常,则拒绝服务,并将用户加入黑名单;若预测结果是正常,则提供服务。
什么是模型?通俗地讲,就是函数。什么是训练模型或者模型学习?就是依靠大量数据确定函数中的未知参数的过程。什么才是好的模型?就是确定参数后的模型针对训练集、验证集和测试集上的大多数样本都能给出正确的预测,越多越好。
形式相同,参数不同的函数的集合构成一个函数族。
函数族的一般形式是:
F
=
{
f
(
x
;
ω
)
∣
ω
∈
Ω
}
(1-1)
\mathbf{F} =\{f(\bm{x};\bm{\omega})|\bm{\omega}\in{\Omega}\} \tag{1-1}
F={f(x;ω)∣ω∈Ω}(1-1)
其中,
x
\bm{x}
x 是输入向量,与训练集中特征向量相对应;
y
y
y 是输出,与训练集中的标签相对应;
ω
\bm{\omega}
ω 是权重(参数)向量;
Ω
\Omega
Ω 是所有权重(参数)向量构成的集合;
函数族
F
\mathbf{F}
F 当中的一个元素就是一个函数
f
(
x
;
ω
)
f(\bm{x};\bm{\omega})
f(x;ω),也就是一个确定了参数的模型。
函数的类型主要有三类:线性函数、广义线性函数、非线性函数。
线性函数:
f
(
x
;
ω
)
=
ω
T
x
+
b
f(\bm{x};\bm{\omega})=\bm{\omega}^T\bm{x}+b
f(x;ω)=ωTx+b
广义线性函数:
f
(
x
;
ω
)
=
ω
T
Φ
(
x
)
+
b
f(\bm{x};\bm{\omega})=\bm{\omega}^T\Phi{(\bm{x})}+b
f(x;ω)=ωTΦ(x)+b
其中,
Φ
(
x
)
\Phi(x)
Φ(x) 是特征变换函数,它对原始的输入特征进行变换,从而获得更易于学习拟合的特征表示,这个过程通常被称为特征提取,对它的研究衍生出一个重要的领域,叫做特征工程(Feature Engineering)。
为什么要进行特征提取呢?因为,原始输入特征的分布规律性往往是不强的,难以用简单的模型去表示,可能是用线性模型拟合不了的。因此,选择一个好的
Φ
(
x
)
\Phi(x)
Φ(x) 进行特征提取,使得提取后的特征能被线性模型很好地表示,是一项非常重要的前置工作。特征提取工作的优劣,最终关系到数据是否能被简单模型表示。
在过去,尤其是在深度学习诞生之前,对于一个具体问题,机器学习研究者习惯于手工设计和定制一些特征,然后选择一个机器学习模型,用从原始特征中提取出来的定制化的特征对模型进行训练,模型的好坏从很大程度上决定于特征提取的好坏。但是,自从深度学习诞生以来,一种自动特征提取的手段应运而生,只需要构建一个深层神经网络,除最后一层外,其它的层做的都是特征提取的工作。在前几层,模型学习低级的、直观的、局部的特征表示,随着层数的加深,在后面几层,模型逐步学习组合得到高级的、抽象的、全局的特征表示,最后一层做的是模型拟合(分类或者回归)的工作。在训练阶段,将原始训练数据输入到网络中,网络既能学习如何表示特征,又能学习如何拟合特征。在测试阶段,只要给一个原始样本输入,网络就能一步到位地给出模型预测结果,不需要人工提取特征的步骤,这种特点被称为端到端(end-to-end)。
因此,深度学习也被称为表示学习(Representation Learning,RL)或者特征学习(Feature Learning,FL),即学习如何更好地表示输入样本,学习如何提取特征。
非线性函数:例如单层感知机模型为
f
(
x
;
ω
)
=
φ
(
ω
T
x
+
b
)
f(\bm{x};\bm{\omega})=\varphi(\bm{\omega}^T\bm{x}+b)
f(x;ω)=φ(ωTx+b),
φ
(
∗
)
\varphi(*)
φ(∗) 是非线性激活函数,常见的激活函数有Relu、Sigmoid、tanh等。
上面已经介绍了数据和模型,那么究竟如何实现“模型从数据中学习”呢?这就需要算法的帮助,算法的运行就是学习的过程。
我们知道,机器学习的诞生,意味着人类可以不像过去那样人工地从海量数据中归纳出一般性的知识,然后将知识原封不动地教给机器来让机器去执行(传统的显式编程范式),而意味着模型可以自动地从数据中学习知识。
然而,模型天生不知道怎么学习,它不明白学习的方法。这就需要人工设计一个学习算法,教导模型如何从数据学习,告诉模型怎么样才算学好(基于损失函数的风险函数),该朝着什么方向学习(风险函数最小化),具体采取什么样的学习策略(优化方法或优化器)。
因此,学习算法的设计过程涉及到一系列学习准则,如损失函数、经验风险(函数)、结构风险(函数)、优化器等。
学习的目的是最小化风险函数,对于这个优化问题,通常很难找到合适的解析方法(不排除某些问题可以用诸如最小二乘法的解析法直接求解得到全局最优解),求出精确的解析解,而主要采用数值优化方法(如梯度下降法等优化器)对模型权重进行迭代优化,使得所有样本损失函数值相对较小,求出较好的数值解。
总之,从损失函数衍生出来的经验风险和结构风险是模型的训练阶段的性能评价指标,衡量模型当前学习效果好坏;优化器是模型的具体学习策略,是学习算法的核心,优化器的运行过程就是模型具体的学习过程。风险最小化是学习的目的,利用优化器对模型权重进行调整是实现目的的手段。
下面分别介绍损失函数、经验风险、结构风险和优化器。
注意:本文严格区分损失函数和风险函数,损失函数只考虑1个样本,风险函数考虑全部样本。
假设有一个训练样本
(
x
,
y
)
(\bm{x},y)
(x,y),有一个模型
f
(
x
;
ω
)
f(\bm{x};\bm{\omega})
f(x;ω),损失函数用于衡量样本真实标签
y
y
y 和样本预测值
f
(
x
;
ω
)
f(\bm{x};\bm{\omega})
f(x;ω) 之间的差异程度,差异程度越大,损失函数值越大,差异程度越小,损失函数值越小,记作:
L
(
y
,
f
(
x
;
ω
)
)
(1-2)
L(y,f(\bm{x};\bm{\omega})) \tag{1-2}
L(y,f(x;ω))(1-2)
若标签
y
y
y 是1个数,常用的损失函数有:
平方损失函数:
L
(
y
,
f
(
x
;
ω
)
)
=
[
y
−
f
(
x
;
ω
)
]
2
L(y,f(\bm{x};\bm{\omega}))=[y-f(\bm{x};\bm{\omega})]^2
L(y,f(x;ω))=[y−f(x;ω)]2
绝对损失函数:
L
(
y
,
f
(
x
;
ω
)
)
=
∣
y
−
f
(
x
;
ω
)
∣
L(y,f(\bm{x};\bm{\omega}))=|y-f(\bm{x};\bm{\omega})|
L(y,f(x;ω))=∣y−f(x;ω)∣
0-1损失函数:
L
(
y
,
f
(
x
;
ω
)
)
=
{
1
y
≠
f
(
x
;
ω
)
0
y
=
f
(
x
;
ω
)
L(y,f(\bm{x};\bm{\omega})) = \left\{ 1y≠f(\bmx;\bmω)0y=f(\bmx;\bmω) \right.
L(y,f(x;ω))={10y=f(x;ω)y=f(x;ω)
若标签
y
\bm{y}
y 是1个
p
p
p 维向量,以平方损失函数为例,令
y
^
=
f
(
x
;
ω
)
\bm{\hat y}=f(\bm{x};\bm{\omega})
y^=f(x;ω),平方损失函数可推广成:
L
(
y
,
y
^
)
=
∑
i
=
1
p
[
y
i
−
y
^
i
]
2
L(\bm{y},\bm{\hat y})=\sum_{i=1}^{p}[y_i-\hat y_i]^2
L(y,y^)=i=1∑p[yi−y^i]2
其中,
y
\bm{y}
y 是样本的真实标签向量,
y
i
y_i
yi 是
y
\bm{y}
y 的第
i
i
i 个分量;
y
^
\bm{\hat y}
y^ 是样本的预测标签向量(由模型计算给出),
y
^
i
\hat y_i
y^i 是
y
^
\bm{\hat y}
y^ 的第
i
i
i 个分量;
p
p
p 为
y
\bm{y}
y 和
y
^
\bm{\hat y}
y^的维数,即它们的分量的个数,
y
∈
R
p
\bm{y} \in \mathbb{R}^p
y∈Rp,
y
^
∈
R
p
\bm{\hat y} \in \mathbb{R}^p
y^∈Rp
此时的平方损失函数,也可以叫做L2损失函数。
有时候,为了便于对L2损失函数求导,可以L2损失函数前面乘上
1
2
\frac{1}{2}
21,即
L
(
y
,
y
^
)
=
1
2
∑
i
=
1
p
[
y
i
−
y
^
i
]
2
L(\bm{y},\bm{\hat y})=\frac{1}{2}\sum_{i=1}^{p}[y_i-\hat y_i]^2
L(y,y^)=21i=1∑p[yi−y^i]2
为什么叫做L2损失函数呢?因为L2损失也可以用L2范数的平方来表示:
L
(
y
,
y
^
)
=
1
2
∣
∣
y
−
y
^
∣
∣
2
2
L(\bm{y},\bm{\hat y})=\frac{1}{2}||\bm{y}-\bm{\hat y}||_2^2
L(y,y^)=21∣∣y−y^∣∣22
其中,
∣
∣
∗
∣
∣
2
||*||_2
∣∣∗∣∣2 表示向量的L2范数,设
a
\bm{a}
a 为
T
T
T 维向量,则
∣
∣
a
∣
∣
2
=
∑
i
=
1
T
a
i
2
||\bm{a}||_2=\sqrt{\sum_{i=1}^{T}a_i^2}
∣∣a∣∣2=∑i=1Tai2
经验风险(Experience Risk,ER)就是所有训练样本在某个模型下的损失函数值之和的平均值,其定义式为:
R
e
x
p
(
ω
)
=
1
N
∑
i
=
1
N
L
(
y
(
i
)
,
f
(
x
(
i
)
;
ω
)
)
(1-3)
R_{exp}(\bm{\omega})=\frac{1}{N}\sum_{i=1}^NL(y^{(i)},f(\bm{x}^{(i)};\bm{\omega})) \tag{1-3}
Rexp(ω)=N1i=1∑NL(y(i),f(x(i);ω))(1-3)
其中,
R
e
x
p
R_{exp}
Rexp 表示经验风险;
L
(
∗
)
L(*)
L(∗) 表示损失函数;
N
N
N 表示训练样本的总数
我们希望能实现经验风险最小化(Experience Risk Minimization,ERM),这意味着模型更加拟合训练样本,预测得更加精准。
但这还不够,经验风险非常小,以至于模型完美拟合了训练集,但仍然有可能在测试集上表现不佳,这种现象被称为过拟合(Over-Fitting)。一个有效避免过拟合的方法就是引入正则项。
结构风险(Structural Risk,SR)在经验风险的基础上,引入了正则化(Regularization)的思想,增加一个正则化项
J
(
ω
)
J(\bm{\omega})
J(ω),对模型的复杂度进行惩罚,即
R
s
t
r
(
ω
)
=
R
e
x
p
(
ω
)
+
λ
J
(
ω
)
(1-4)
R_{str}(\bm{\omega})=R_{exp}(\bm{\omega})+\lambda J(\bm{\omega}) \tag{1-4}
Rstr(ω)=Rexp(ω)+λJ(ω)(1-4)
其中,
R
s
t
r
R_{str}
Rstr 是结构风险;
R
e
x
p
R_{exp}
Rexp 是经验风险;
λ
\lambda
λ 表示正则项权重,用于衡量正则化项的影响程度,它是一个超参数,由人工指定,其值越大,正则化的程度越强,模型越简单,其值越小,正则化的程度越弱,模型越复杂;
J
(
ω
)
J(\bm{\omega})
J(ω)是正则项,主要有L0正则项、L1正则项、L2正则项三类。以L2正则项为例,
J
(
ω
)
=
∣
∣
ω
∣
∣
2
2
J(\bm{\omega})=||\omega||_{2}^2
J(ω)=∣∣ω∣∣22 表示权重向量的L2范数的平方,
∣
∣
ω
∣
∣
2
2
=
∑
i
=
1
p
ω
i
2
=
ω
1
2
+
ω
2
2
+
⋯
+
ω
p
2
||\omega||_{2}^2=\sum_{i=1}^p\bm{\omega}_i^2={\bm{\omega}}_1^2+{\bm{\omega}}_2^2+\cdots+{\bm{\omega}}_p^2
∣∣ω∣∣22=∑i=1pωi2=ω12+ω22+⋯+ωp2,
p
p
p 为权重向量的维数;
结构风险最小化(Structural Risk Minimization,SRM)能够使得权重向量
ω
\bm{\omega}
ω 当中的大部分元素值
ω
i
\bm{\omega}_i
ωi 为0或者接近于0,减少模型的项数,实现
ω
\bm{\omega}
ω 的稀疏化,保证模型不会过于复杂。
最小化结构风险所对应的参数通常是最优参数,因此,整个学习算法的目的就是求解如下优化问题:
ω
=
a
r
g
m
i
n
ω
R
s
t
r
(
ω
)
(1-5)
\bm{\omega} = \mathop{argmin}\limits_{\bm{\omega}}\ R_{str}(\bm{\omega}) \tag{1-5}
ω=ωargmin Rstr(ω)(1-5)
梯度下降法(Gradient Descent)是最常见的一种机器学习的优化器,梯度下降法一次使用整个训练数据集来计算梯度来调整模型参数,又称为批量梯度下降。多维批量梯度下降具体见 3.3.3.4 梯度下降法。
深度学习的研究对象是深度神经网络(Deep Neural Network,DNN)。
由于深度神经网络的层数多、每层的神经元数量也多,连接相邻层神经元之间的参数总量也很大,这意味着深度神经网络的训练非常困难。神经网络面临一系列问题:
(1) 陷入局部最优解
神经网络的目标函数(损失函数)通常是非凸函数,该函数的最小化优化问题是非凸优化问题,并且对于很深的神经网络来说,优化目标往往容易陷入了局部极小值而无法跳出,难以达到全局最小值,这成为模型性能提升的最大瓶颈。
(2) 梯度消失和梯度爆炸
在运用BP算法训练的过程中,可能会发生梯度消失问题(Gradient Vanishing Problem),靠前的隐藏层的学习速率(参数调整能力)要远远慢于靠后的隐藏层的学习速率,使得靠前的层的参数调整的幅度非常小,甚至发生了停止学习的现象。
同样可能会发生梯度爆炸问题(Gradient Explosion Problem),靠前的隐藏层的学习速率(参数调整能力)要远远快于靠后的隐藏层的学习速率,越靠前梯度值越大,导致参数溢出,难以收敛到可接受的性能。
(3) 训练速度很慢
由于没有良好GPU的计算机、模型巨大、数据集巨大、调参不良、缺少高效的训练策略等诸多原因,训练一次深层神经网络可能要花费几天、几个星期,甚至几个月。
(4) 调参麻烦
在深层神经网络中,需要调节的超参数量巨大,针对不同的超参数,需要人工无数次的试验试错,才能调出好的超参数。目前,还没有严格数学证明过并且细致到每个参数具体取什么值的调参准则(至少在某种程度上还没有),大多还是经验法则。
(5) 可解释性差
很多神经网络的性能很好,可是为什么好?人们并不太清楚。因此,很多人戏称神经网络是玄学,搭网络结构、调参以及模型训练的过程是炼丹。神经网络的可解释性是当前一个亟待开拓的领域。
想要训练出好的深度学习模型,需要达成以下几个条件:
1943年,心理学家W·S·McCulloch和数理逻辑学家W·pitts在一篇论文[1]中首次提出了人工神经网络的概念,并基于生物神经元的生理结构建立了神经元的MP模型。
1958年,Rosenblatt发表了一篇论文《感知器:大脑中信息存储和组织的概率模型》[2],在文中他提出了著名的感知器(Perceptron)算法,可用于解决线性可分的二分类问题。
1969年,Minsky等证明了感知器不能解决非线性可分的问题,如异或问题。自此,神经网络陷入了低潮。
1986年, Rumelhart、Hinton、Williams在《Nature》上[3]提出了反向传播算法(Backpropagation algorithm),即BP算法,用于训练深层前馈神经网络。随后几年,BP算法遇到了梯度消失问题,网络的训练陷入局部极小值而无法取得全局极小值,神经网络再次进入低潮期。
1998年,LeCun构建了一种经典的CNN模型——LeNet网络[4],在手写体识别问题上取得了很好的效果,但在当时没有引起太多的注意。
2006年,Hinton等在《Neural computation》上发表论文[5],提出了深度信念网络(Deep Belief Network,DBN)。同年,Hinton和Salakhutdinov在《Science》上发表了《Reducing the dimensionality of data with neural networks》[6],正式提出了深度学习(Deep Learning,DL)的概念。因此,2006年也被称为是深度学习元年。
2012年,Krizhevsky、Sutskever和Hinton发明了AlexNet[7],赢得了2012年的ImageNet图像分类竞赛,掀起了深度学习的研究热潮,人们才开始真正意识到深度学习的价值。
深度学习是一种方法和手段,而不是任务和目的。只有将它应用到具体的模式识别任务当中,才能实现它的意义和价值。当前,深度学习的常见应用领域有计算机视觉(Computer Vision,CV)、语音处理(Speech Processing)、自然语言处理(Natural Language Processing,NLP)等。
全连接神经网络(Fully Connected Neural Network,FCNN),是一种最简单的、最常见的、最基础的前馈神经网络。除最后一层(输出层)外,全连接神经网络的每一层的每个神经元都与下一层的所有神经元相连接。
按照层数的多少划分,它包括两种形式:单层感知器(Single-Layer Perceptron,SLP)和多层感知器(Multi-Layer Perceptron,MLP)。下面分别介绍人工神经元、单层感知器、多层感知器。
人工神经网络是人工智能联结主义学派(或称仿生学派)的一大创造。作为人工神经网络的最基本组成部分的人工神经元,是受到人体神经元的启发而诞生的,人体神经元的简要生理结构如图3-1所示。
假设一个人体神经元有 m m m 个树突,每个树突可以接受 1 1 1 个电刺激信号,一共接受 m m m 个电刺激信号。那么现在来建立MP模型。
1943年,心理学家W·S·McCulloch和数理逻辑学家W·pitts基于神经元的生理结构和上述建模过程,建立了单个神经元的数学模型,当时他们提出的模型叫做MP模型,MP模型是一种简单的神经元数学模型,它具有输入、计算、输出三大功能,这和函数的功能是完全一致的,如图3-2所示。
因此,单个神经元的MP模型可表示为如下的数学公式:
{
v
=
∑
i
=
1
m
ω
i
x
i
+
b
y
=
φ
(
v
)
(3-1)
\left\{ v=m∑i=1ωixi+by=φ(v) \right. \tag{3-1}
⎩⎪⎪⎨⎪⎪⎧vy=i=1∑mωixi+b=φ(v)(3-1)
其中,
x
i
x_i
xi 表示第
i
i
i 个输入变量,即第
i
i
i 个特征,
1
≤
i
≤
m
1\le i\le m
1≤i≤m,
m
m
m 为特征的数量;
ω
i
\omega_i
ωi 表示第
i
i
i 个权重,与
x
i
x_i
xi 相对应;
b
b
b 表示偏置,也被看作是阈值;
φ
(
∗
)
\varphi(*)
φ(∗) 表示激活函数,它对线性加权求和的结果
v
v
v 进行非线性变换;
v
v
v 表示加权求和的中间结果;
y
y
y 表示经过激活函数处理的最终输出结果;
令
ω
=
(
ω
1
,
ω
2
,
.
.
.
,
ω
m
)
T
\bm{\omega}=(\omega_1,\omega_2,...,\omega_m)^T
ω=(ω1,ω2,...,ωm)T,
x
=
(
x
1
,
x
2
,
.
.
.
,
x
m
)
T
\bm{x}=(x_1,x_2,...,x_m)^T
x=(x1,x2,...,xm)T,可将MP模型写成向量的形式,为
{
v
=
ω
T
x
+
b
y
=
φ
(
v
)
(3-2)
\left\{ v=\bmωT\bmx+by=φ(v) \right. \tag{3-2}
{vy=ωTx+b=φ(v)(3-2)
合并两式,得
y
=
φ
(
ω
T
x
+
b
)
(3-3)
y=\varphi(\bm{\omega}^T\bm{x}+b) \tag{3-3}
y=φ(ωTx+b)(3-3)
那么,上述激活函数
φ
(
∗
)
\varphi(*)
φ(∗) 到底指的是什么函数呢?有这样几种常见的激活函数:sgn、sigmoid、tanh、ReLU
(1) sgn函数
sgn函数,即符号函数,其表达式为:
s
g
n
(
x
)
=
{
0
x
≤
0
1
x
>
0
(3-4)
sgn(x)= \left\{ 0x≤01x>0 \right.\tag{3-4}
sgn(x)={0x≤01x>0(3-4)
图3-3为sgn函数的图像(只画出了[-10,10]区间内的图像),由图可知该函数具有如下性质:
(2) sigmoid函数
S
(
x
)
=
1
1
+
e
−
x
(3-5)
S(x)=\frac{1}{1+e^{-x}} \tag{3-5}
S(x)=1+e−x1(3-5)
对其求导,可得:
S
′
(
x
)
=
e
−
x
(
1
+
e
−
x
)
2
=
S
(
x
)
×
(
1
−
S
(
x
)
)
(3-6)
\begin{aligned} S'(x)&=\frac{e^{-x}}{ {(1+e^{-x})}^2} \\ &=S(x)\times(1-S(x)) \tag{3-6} \end{aligned}
S′(x)=(1+e−x)2e−x=S(x)×(1−S(x))(3-6)
图3-4为sigmoid函数的图像,由图可知该函数具有如下性质:
(3) tanh函数
t
a
n
h
(
x
)
=
e
x
−
e
−
x
e
x
+
e
−
x
(3-7)
tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}\tag{3-7}
tanh(x)=ex+e−xex−e−x(3-7)
对其求导,可得
t
a
n
h
′
(
x
)
=
1
−
(
e
x
−
e
−
x
e
x
+
e
−
x
)
2
=
1
−
t
a
n
h
2
(
x
)
(3-8)
\begin{aligned} tanh'(x)&=1-(\frac{e^x-e^{-x}}{e^x+e^{-x}})^2\\ &=1-tanh^2(x) \tag{3-8} \end{aligned}
tanh′(x)=1−(ex+e−xex−e−x)2=1−tanh2(x)(3-8)
图3-5为tanh函数的图像,由图可知该函数具有如下性质:
(4)ReLU函数
R
e
L
U
(
x
)
=
m
a
x
(
0
,
x
)
(3-9)
ReLU(x)=max(0,x)\tag{3-9}
ReLU(x)=max(0,x)(3-9)
对其求导,可得
R
e
L
U
′
(
x
)
=
{
0
x
<
0
1
x
≥
0
(3-10)
ReLU'(x)= \left\{ 0x<01x≥0 \right.\tag{3-10}
ReLU′(x)={0x<01x≥0(3-10)
图3-6为ReLU函数的图像。
单层感知器,又称单层神经网络(单层全连接前馈神经网络),是最简单的神经网络模型。
3.1节已经介绍了单个神经元的MP模型,现在我们将模型拓展到多个神经元的情况,把多个MP神经元并排放在一起,它们组成了一个集合,称这个集合为输出层,集合的每一个元素称为输出层神经元。输出层神经元共享相同的输入
x
i
(
i
=
1
,
2
,
.
.
.
,
m
)
x_i(i=1,2,...,m)
xi(i=1,2,...,m),我们将多个输入
x
i
x_i
xi 分别存储在多个神经元中,这些神经元就共同组成了输入层,将这些神经元称为输入层神经元,如此就得到了单层感知器模型。
在单层感知器中,输入层仅仅起着传递输入数据的作用,并不具有运算处理功能,而输出层具有计算功能,它能对输入数据进行加权求和与非线性变换。因此,“单层”指的就是仅有一个可计算层,即输出层。
单层感知器模型用数学公式可以表示为:
y
k
=
φ
(
∑
i
=
1
m
ω
k
,
i
x
i
+
b
k
)
(3-11)
y_k = \varphi(\sum_{i=1}^m\omega_{k,i} x_i+b_k) \tag{3-11}
yk=φ(i=1∑mωk,ixi+bk)(3-11)
其中,
x
i
x_{i}
xi 表示第
i
i
i 个输入层神经元的值(输入值);
ω
k
,
i
\omega_{k,i}
ωk,i 表示第
i
i
i 个输入层神经元连接到第
k
k
k 个输出层神经元的权重;
b
k
b_k
bk 表示第
k
k
k 个输出层神经元对应的偏置值;
y
k
y_k
yk 表示第
k
k
k 个输出层神经元的值(输出值);
m
m
m 表示输入层神经元的个数(不包括偏置神经元),
1
≤
i
≤
m
1 \le i \le m
1≤i≤m;
n
n
n 表示输出层神经元的个数,
1
≤
k
≤
n
1 \le k \le n
1≤k≤n;
φ
(
∗
)
\varphi(*)
φ(∗)为表示非线性激活函数。
可以用向量表示上述公式:
令
x
=
(
x
1
,
x
2
,
.
.
.
,
x
m
)
T
\bm{x}=(x_1,x_2,...,x_m)^T
x=(x1,x2,...,xm)T,
ω
k
=
(
ω
k
,
1
,
ω
k
,
2
,
.
.
.
,
ω
k
,
m
)
T
\bm{\omega}_k=(\omega_{k,1},\omega_{k,2},...,\omega_{k,m})^T
ωk=(ωk,1,ωk,2,...,ωk,m)T,得
y k = φ ( ω k T x + b k ) (3-12) y_k = \varphi({\bm{\omega}^T_k} \bm{x}+b_k) \tag{3-12} yk=φ(ωkTx+bk)(3-12)
进一步,令
y
=
(
y
1
,
y
2
,
.
.
.
,
y
n
)
T
\bm{y}=(y_1,y_2,...,y_n)^T
y=(y1,y2,...,yn)T,
b
=
(
b
1
,
b
2
,
.
.
.
,
b
n
)
T
\bm{b}=(b_1,b_2,...,b_n)^T
b=(b1,b2,...,bn)T,
W
=
(
ω
1
,
ω
2
,
.
.
.
,
ω
n
)
T
=
[
ω
1
,
1
ω
1
,
2
⋯
ω
1
,
m
ω
2
,
1
ω
2
,
2
⋯
ω
2
,
m
⋮
⋮
⋱
⋮
ω
n
,
1
ω
n
,
2
⋯
ω
n
,
m
]
n
×
m
\bm{W}=(\bm{\omega}_1,\bm{\omega}_2,...,\bm{\omega}_n)^T= [ω1,1ω1,2⋯ω1,mω2,1ω2,2⋯ω2,m⋮⋮⋱⋮ωn,1ωn,2⋯ωn,m]_{n \times m}
W=(ω1,ω2,...,ωn)T=⎣⎢⎢⎢⎡ω1,1ω2,1⋮ωn,1ω1,2ω2,2⋮ωn,2⋯⋯⋱⋯ω1,mω2,m⋮ωn,m⎦⎥⎥⎥⎤n×m
则可以得到
y
=
φ
(
W
x
+
b
)
(3-13)
\bm{y}= \varphi(\bm{W} \bm{x}+\bm{b})\tag{3-13}
y=φ(Wx+b)(3-13)
其中,
W
∈
R
n
×
m
\bm{W} \in \mathbb{R}^{n \times m}
W∈Rn×m,
x
∈
R
m
×
1
\bm{x} \in \mathbb{R}^{m \times 1}
x∈Rm×1,
b
∈
R
n
×
1
\bm{b} \in \mathbb{R}^{n \times 1}
b∈Rn×1,
y
∈
R
n
×
1
\bm{y} \in \mathbb{R}^{n \times 1}
y∈Rn×1
该向量函数实现了从
m
m
m 维向量
x
\bm{x}
x 映射到
n
n
n 维向量
y
\bm{y}
y
若再令
x
∗
=
(
x
T
,
1
)
T
=
(
x
1
,
x
2
,
.
.
.
,
x
m
,
1
)
T
\bm{x}^*=(\bm{x}^T,1)^T=(x_1,x_2,...,x_m,1)^T
x∗=(xT,1)T=(x1,x2,...,xm,1)T,
W
∗
=
(
W
,
b
)
=
[
ω
1
,
1
ω
1
,
2
⋯
ω
1
,
m
b
1
ω
2
,
1
ω
2
,
2
⋯
ω
2
,
m
b
2
⋮
⋮
⋱
⋮
⋮
ω
n
,
1
ω
n
,
2
⋯
ω
n
,
m
b
n
]
n
×
(
m
+
1
)
\bm{W}^*=(\bm{W},\bm{b})= [ω1,1ω1,2⋯ω1,mb1ω2,1ω2,2⋯ω2,mb2⋮⋮⋱⋮⋮ωn,1ωn,2⋯ωn,mbn]_{n \times (m+1)}
W∗=(W,b)=⎣⎢⎢⎢⎡ω1,1ω2,1⋮ωn,1ω1,2ω2,2⋮ωn,2⋯⋯⋱⋯ω1,mω2,m⋮ωn,mb1b2⋮bn⎦⎥⎥⎥⎤n×(m+1)
可以得到基于增广向量和增广矩阵的单层感知器模型:
y = φ ( W ∗ x ∗ ) (3-14) \bm{y}= \varphi(\bm{W}^* \bm{x}^*)\tag{3-14} y=φ(W∗x∗)(3-14)
单层感知器的一般结构如图3-7所示。
图3-8是单层感知器的一个例子,图中的单层感知器有1个输入层和1个输出层,输入层有4个输入神经元和1个偏置神经元,输入值分别为
x
1
,
x
2
,
x
3
,
x
3
x_1,x_2,x_3,x_3
x1,x2,x3,x3和1,输出层有3个输出神经元,输出值分别为
y
1
,
y
2
,
y
3
y_1,y_2,y_3
y1,y2,y3,输入神经元和输出神经元之间两两有边相连。
这个例子用公式可以写成:
{
y
1
=
φ
(
ω
1
,
1
x
1
+
ω
1
,
2
x
2
+
ω
1
,
3
x
3
+
ω
1
,
4
x
4
+
b
1
)
y
2
=
φ
(
ω
2
,
1
x
1
+
ω
2
,
2
x
2
+
ω
2
,
3
x
3
+
ω
2
,
4
x
4
+
b
2
)
y
3
=
φ
(
ω
3
,
1
x
1
+
ω
3
,
2
x
2
+
ω
3
,
3
x
3
+
ω
3
,
4
x
4
+
b
3
)
(
3-15
)
\hspace{1em} \left \{ y1=φ(ω1,1x1+ω1,2x2+ω1,3x3+ω1,4x4+b1)y2=φ(ω2,1x1+ω2,2x2+ω2,3x3+ω2,4x4+b2)y3=φ(ω3,1x1+ω3,2x2+ω3,3x3+ω3,4x4+b3) \right.\hspace{1em} (\operatorname{3-15})
⎩⎪⎨⎪⎧y1=φ(ω1,1x1+ω1,2x2+ω1,3x3+ω1,4x4+b1)y2=φ(ω2,1x1+ω2,2x2+ω2,3x3+ω2,4x4+b2)y3=φ(ω3,1x1+ω3,2x2+ω3,3x3+ω3,4x4+b3)(3-15)
或者用向量和矩阵表示:
[
y
1
y
2
y
3
]
=
φ
(
[
ω
1
,
1
ω
1
,
2
ω
1
,
3
ω
1
,
4
ω
2
,
1
ω
2
,
2
ω
2
,
3
ω
2
,
4
ω
3
,
1
ω
3
,
2
ω
3
,
3
ω
3
,
4
]
[
x
1
x
2
x
3
x
4
]
+
[
b
1
b
2
b
3
]
)
(
3-16
)
\hspace{1em} [y1y2y3]= \varphi( [ω1,1ω1,2ω1,3ω1,4ω2,1ω2,2ω2,3ω2,4ω3,1ω3,2ω3,3ω3,4] [x1x2x3x4]+ [b1b2b3])\hspace{1em} (\operatorname{3-16})
⎣⎡y1y2y3⎦⎤=φ(⎣⎡ω1,1ω2,1ω3,1ω1,2ω2,2ω3,2ω1,3ω2,3ω3,3ω1,4ω2,4ω3,4⎦⎤⎣⎢⎢⎡x1x2x3x4⎦⎥⎥⎤+⎣⎡b1b2b3⎦⎤)(3-16)
或者简写成:
y
=
φ
(
W
x
+
b
)
(3-17)
\bm{y}=\varphi(\bm{W}\bm{x}+\bm{b})\tag{3-17}
y=φ(Wx+b)(3-17)
详见 https://blog.csdn.net/verssqsq2089/article/details/130154022
多层感知器,又称深度神经网络或多层神经网络(多层全连接前馈神经网络)。
由于多层感知器的高度复杂性,首先定义一些符号,下文统一用这些符号:
L L L 表示神经网络的层数,包括了输入层、若干隐藏层和输出层。我们称第 1 1 1 层为输入层,第 L L L 层为输出层,介于两者之间的各层为隐藏层
n ( l ) n^{(l)} n(l) 表示第 l l l 层的神经元个数,不包括偏置神经元在内,下文只要提到神经元的个数,绝不要把偏置神经元算在内;
φ ( l ) ( ∗ ) \varphi^{(l)}(*) φ(l)(∗) 表示第 l l l 层的激活函数, φ i ( l ) ( ∗ ) \varphi^{(l)}_i(*) φi(l)(∗) 表示第 l l l 层的第 i i i 个神经元的激活函数,通常某一层的神经元用的是相同的激活函数,即 φ i ( l ) ( ∗ ) = φ ( l ) ( ∗ ) \varphi^{(l)}_i(*)=\varphi^{(l)}(*) φi(l)(∗)=φ(l)(∗);
W ( l ) \bm{W}^{(l)} W(l) 表示第 l l l 层连接到第 l + 1 l+1 l+1 层的权重矩阵,其中, W ( l ) \bm{W}^{(l)} W(l) 的第 i i i 行第 j j j 列的元素记为 ω i , j ( l ) \omega^{(l)}_{i,j} ωi,j(l), ω i , j ( l ) \omega^{(l)}_{i,j} ωi,j(l) 表示第 l l l 层的第 j j j 个神经元连接到第 l + 1 l+1 l+1 层的第 i i i 个神经元的权重;
b ( l ) \bm{b}^{(l)} b(l) 表示第 l l l 层连接到第 l + 1 l+1 l+1 层的偏置向量, b i ( l ) b^{(l)}_i bi(l) 表示第 l l l 层连接到第 l + 1 l+1 l+1 层的第 i i i 个神经元的偏置;
a ( l ) \bm{a}^{(l)} a(l) 表示第 l l l 层的输出向量, a i ( l ) a^{(l)}_i ai(l) 表示第 l l l 层的第 i i i 个神经元的输出;
z ( l ) \bm{z}^{(l)} z(l) 表示第 l l l 层的输入向量(加权求和向量),即第 l l l 层的状态,其值等于对第 l − 1 l-1 l−1 层的输出向量 a ( l − 1 ) \bm{a}^{(l-1)} a(l−1)加权求和而未激活的结果, z i ( l ) z^{(l)}_i zi(l) 表示第 l l l 层第 i i i 个神经元的输入;
x \bm{x} x 表示输入层的输入向量,规定 x = z ( 1 ) = a ( 1 ) \bm{x}=\bm{z}^{(1)}=\bm{a}^{(1)} x=z(1)=a(1), x i x_i xi表示输入层第 i i i 个神经元的输入;
y \bm{y} y 表示输出层的输出向量,规定 y = a ( L ) \bm{y}=\bm{a}^{(L)} y=a(L), y i y_i yi 表示输出层第 i i i 个神经元的输出。
F ( ∗ ) F(*) F(∗) 表示整个网络函数,它是从 n ( 1 ) n^{(1)} n(1) 维向量空间到 n ( L ) n^{(L)} n(L) 维向量空间的映射,即 F : R n ( 1 ) → R n ( L ) F:\mathbb{R}^{n^{(1)}}\rightarrow \mathbb{R}^{n^{(L)}} F:Rn(1)→Rn(L)
特别规定,在第2、6、7条中,
1
≤
l
≤
L
1\le l \le L
1≤l≤L;在第4、5条中,
1
≤
l
≤
L
−
1
1\le l \le L-1
1≤l≤L−1;在第3条中,
2
≤
l
≤
L
2 \le l \le L
2≤l≤L
特别规定,在第3、6、7、8、9条中,
1
≤
i
≤
n
(
l
)
1\le i \le n^{(l)}
1≤i≤n(l);在第4条中,
1
≤
i
≤
n
(
l
+
1
)
,
1
≤
j
≤
n
(
l
)
1\le i \le n^{(l+1)},1\le j \le n^{(l)}
1≤i≤n(l+1),1≤j≤n(l);在第5条中,
1
≤
i
≤
n
(
l
+
1
)
1 \le i \le n^{(l+1)}
1≤i≤n(l+1)
基于之前所学的单层感知器的知识,假设各层激活函数相同,并且规定
2
≤
l
≤
L
2 \le l \le L
2≤l≤L ,不难得到:
{
z
i
(
l
)
=
∑
j
=
1
n
(
l
−
1
)
ω
i
,
j
(
l
−
1
)
a
j
(
l
−
1
)
+
b
i
(
l
−
1
)
a
i
(
l
)
=
φ
(
z
i
(
l
)
)
1
≤
i
≤
n
(
l
)
(3-18)
\left\{ z(l)i=n(l−1)∑j=1ω(l−1)i,ja(l−1)j+b(l−1)ia(l)i=φ(z(l)i) 1 \le i \le n^{(l)} \right. \tag{3-18}
⎩⎪⎪⎪⎨⎪⎪⎪⎧zi(l)=j=1∑n(l−1)ωi,j(l−1)aj(l−1)+bi(l−1)ai(l)=φ(zi(l))1≤i≤n(l)(3-18)
若用向量表示,为:
{
z
(
l
)
=
W
(
l
−
1
)
a
(
l
−
1
)
+
b
(
l
−
1
)
a
(
l
)
=
φ
(
z
(
l
)
)
(3-19)
\left\{ \bmz(l)=\bmW(l−1)\bma(l−1)+\bmb(l−1)\bma(l)=φ(\bmz(l)) \right. \tag{3-19}
{z(l)a(l)=W(l−1)a(l−1)+b(l−1)=φ(z(l))(3-19)
合并两式,得:
a
(
l
)
=
φ
(
W
(
l
−
1
)
a
(
l
−
1
)
+
b
(
l
−
1
)
)
(3-20)
\bm{a}^{(l)}=\varphi(\bm{W}^{(l-1)}\bm{a}^{(l-1)}+\bm{b}^{(l-1)} )\tag{3-20}
a(l)=φ(W(l−1)a(l−1)+b(l−1))(3-20)
若将第
1
1
1 层考虑在内:
a
(
l
)
=
{
x
l
=
1
φ
(
W
(
l
−
1
)
a
(
l
−
1
)
+
b
(
l
−
1
)
)
2
≤
l
≤
L
(
3-21
)
\hspace{1em} \bm{a}^{(l)}= \left\{ \bmxl=1φ(\bmW(l−1)\bma(l−1)+\bmb(l−1))2≤l≤L \right. \hspace{1em} (\operatorname{3-21})
a(l)={φ(W(l−1)xa(l−1)+b(l−1))l=12≤l≤L(3-21)
多层感知器的一般结构如图3-9所示。
图3-10是多层感知器的一个例子,有1个输入层、1个隐藏层和1个输出层。输入层有4个普通神经元和1个偏置神经元,输出值分别为 a 1 ( 1 ) , a 2 ( 1 ) , a 3 ( 1 ) , a 4 ( 1 ) a^{(1)}_1,a^{(1)}_2,a^{(1)}_3,a^{(1)}_4 a1(1),a2(1),a3(1),a4(1)和1;隐藏层有5个普通神经元和1个偏置神经元,输出值分别为 a 1 ( 2 ) , a 2 ( 2 ) , a 3 ( 2 ) , a 4 ( 2 ) , a 5 ( 2 ) a^{(2)}_1,a^{(2)}_2,a^{(2)}_3,a^{(2)}_4,a^{(2)}_5 a1(2),a2(2),a3(2),a4(2),a5(2)和1;输出层有3个普通神经元,输出值分别为 a 1 ( 3 ) , a 2 ( 3 ) , a 3 ( 3 ) a^{(3)}_1,a^{(3)}_2,a^{(3)}_3 a1(3),a2(3),a3(3)。
针对图3-10所示的例子,我们可以得到:
输入层的前向传播公式为:
a
(
1
)
=
z
(
1
)
=
x
(
1
)
(3-22)
\bm{a}^{(1)}=\bm{z}^{(1)}=\bm{x}^{(1)}\tag{3-22}
a(1)=z(1)=x(1)(3-22)
隐藏层的前向传播公式为:
{
z
(
2
)
=
W
(
1
)
a
(
1
)
+
b
(
1
)
a
(
2
)
=
φ
(
z
(
2
)
)
(3-23)
\left\{ \bmz(2)=\bmW(1)\bma(1)+\bmb(1)\bma(2)=φ(\bmz(2)) \right.\tag{3-23}
{z(2)a(2)=W(1)a(1)+b(1)=φ(z(2))(3-23)
输出层的前向传播公式为:
{
z
(
3
)
=
W
(
2
)
a
(
2
)
+
b
(
2
)
a
(
3
)
=
φ
(
z
(
3
)
)
(3-24)
\left\{ \bmz(3)=\bmW(2)\bma(2)+\bmb(2)\bma(3)=φ(\bmz(3)) \right.\tag{3-24}
{z(3)a(3)=W(2)a(2)+b(2)=φ(z(3))(3-24)
合并式(3-22)、式(3-23)和式(3-24),并消去
z
\bm{z}
z ,得
{
a
(
3
)
=
φ
(
W
(
2
)
a
(
2
)
+
b
(
2
)
)
a
(
2
)
=
φ
(
W
(
1
)
a
(
1
)
+
b
(
1
)
)
a
(
1
)
=
x
(
1
)
(3-25)
\left\{ \bma(3)=φ(\bmW(2)\bma(2)+\bmb(2))\bma(2)=φ(\bmW(1)\bma(1)+\bmb(1))\bma(1)=\bmx(1) \right.\tag{3-25}
⎩⎪⎪⎨⎪⎪⎧a(3)=φ(W(2)a(2)+b(2))a(2)=φ(W(1)a(1)+b(1))a(1)=x(1)(3-25)
若将式(3-25)用非向量形式表达,则为:
{
a
i
(
3
)
=
φ
(
∑
j
=
1
n
(
2
)
ω
i
,
j
(
2
)
a
j
(
2
)
+
b
i
(
2
)
)
1
≤
i
≤
n
(
3
)
a
i
(
2
)
=
φ
(
∑
j
=
1
n
(
1
)
ω
i
,
j
(
1
)
a
j
(
1
)
+
b
i
(
1
)
)
1
≤
i
≤
n
(
2
)
a
i
(
1
)
=
x
i
(
1
)
1
≤
i
≤
n
(
1
)
(
3-26
)
\hspace{1em}\left\{ a(3)i=φ(n(2)∑j=1ω(2)i,ja(2)j+b(2)i)1≤i≤n(3)a(2)i=φ(n(1)∑j=1ω(1)i,ja(1)j+b(1)i)1≤i≤n(2)a(1)i=x(1)i1≤i≤n(1) \right.\hspace{1em} (\operatorname{3-26})
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧ai(3)=φ(j=1∑n(2)ωi,j(2)aj(2)+bi(2))ai(2)=φ(j=1∑n(1)ωi,j(1)aj(1)+bi(1))ai(1)=xi(1)1≤i≤n(3)1≤i≤n(2)1≤i≤n(1)(3-26)
下面要对多层感知器(多层神经网络)进行训练,即确定神经网络中的每一个权重 ω \omega ω 和偏置 b b b,使得经验风险最小化。训练的优化算法采用1986年提出的反向传播(Backpropagation)算法,简称BP算法。BP算法是一种基于梯度下降法和误差反向传播策略的用于训练多层前馈神经网络的有效的学习算法。
定义训练集为
D
=
{
(
x
(
i
)
,
y
(
i
)
)
∣
1
≤
i
≤
N
}
D=\{(\bm{x}^{(i)},\bm{y}^{(i)})|1 \le i \le N\}
D={(x(i),y(i))∣1≤i≤N}
其中,
x
(
i
)
\bm{x}^{(i)}
x(i) 表示第
i
i
i 个训练样本的特征向量,特征向量的维数(元素个数)和神经网络输入层的神经元个数是相同的,
x
(
i
)
=
(
x
1
(
i
)
,
x
2
(
i
)
,
.
.
.
,
x
n
(
1
)
(
i
)
)
\bm{x}^{(i)}=(x^{(i)}_1,x^{(i)}_2,...,x^{(i)}_{n(1)})
x(i)=(x1(i),x2(i),...,xn(1)(i)),即
x
i
∈
R
n
(
1
)
\bm{x_i} \in \mathbb{R}^{n^{(1)}}
xi∈Rn(1),
n
(
1
)
n^{(1)}
n(1) 表示神经网络输入层的神经元个数;
y
(
i
)
\bm{y}^{(i)}
y(i) 表示第
i
i
i 个训练样本的标签向量,标签向量的维数(元素个数)和神经网络输出层的神经元个数是相同的,
y
(
i
)
=
(
y
1
(
i
)
,
y
2
(
i
)
,
.
.
.
,
y
n
(
L
)
(
i
)
)
\bm{y}^{(i)}=(y^{(i)}_1,y^{(i)}_2,...,y^{(i)}_{n(L)})
y(i)=(y1(i),y2(i),...,yn(L)(i)),即
y
(
i
)
∈
R
n
(
L
)
\bm{y}^{(i)} \in \mathbb{R}^{n^{(L)}}
y(i)∈Rn(L),
n
(
L
)
n^{(L)}
n(L) 表示神经网络输出层的神经元个数;
N
N
N 表示训练样本的个数。
单个样本的损失函数采用L2损失函数,则L2损失函数为:
L
(
y
,
y
^
)
=
1
2
∑
i
=
1
n
(
L
)
(
y
i
−
y
^
i
)
2
=
1
2
∣
∣
y
−
y
^
∣
∣
2
2
=
1
2
∣
∣
y
−
F
(
x
;
W
)
∣
∣
2
2
(3-27)
\begin{aligned} L(\bm{y},\bm{\hat y}) & =\frac{1}{2}\sum_{i=1}^{n^{(L)}}(y_i- {\hat y_i})^{2} \\ & = \frac{1}{2} ||\bm{y}-\bm{\hat y}||^2_{2}\\ &=\frac{1}{2} ||\bm{y}-F(\bm{x};\bm{W}) ||^2_{2} \tag{3-27} \end{aligned}
L(y,y^)=21i=1∑n(L)(yi−y^i)2=21∣∣y−y^∣∣22=21∣∣y−F(x;W)∣∣22(3-27)
其中,
L
(
∗
)
L(*)
L(∗) 表示损失函数,详见 1.3.3.1 损失函数;
F
(
∗
)
F(*)
F(∗) 表示网络函数,详见 3.3.1 符号定义;
n
(
L
)
n^{(L)}
n(L) 表示第
L
L
L 层(输出层)神经元的个数,即网络的输出变量数,详见 3.3.1 符号定义;
x
\bm{x}
x 表示某样本的特征向量,
x
i
x_i
xi 表示
x
\bm{x}
x 的第
i
i
i 个分量;
y
\bm{y}
y 表示某样本的真实标签向量,也叫地面真值(ground truth),
y
i
y_i
yi 表示
y
\bm{y}
y 的第
i
i
i 个分量;
y
^
\bm{\hat y}
y^ 表示某样本的网络预测向量,
y
^
i
\hat y_i
y^i 表示
y
^
\bm{\hat y}
y^ 的第
i
i
i 个分量,损失函数用于衡量真实值和预测值之间的差距;
W
\bm{W}
W 表示网络权重;
∣
∣
∗
∣
∣
2
||*||_2
∣∣∗∣∣2 为向量的L2范数,假设有一个
p
p
p 维向量
a
\bm{a}
a,
∣
∣
a
∣
∣
2
=
∑
i
=
1
p
a
i
2
||\bm{a}||_2=\sqrt{\sum_{i=1}^{p}a^2_i}
∣∣a∣∣2=∑i=1pai2
注意:
L
(
∗
)
L(*)
L(∗) 和
n
(
L
)
n^{(L)}
n(L) 当中的
L
L
L 是完全不同的两个事物,请严格区分。
基于上述损失函数,可得经验风险函数
E
(
W
)
E(\bm{W})
E(W):
E
(
W
)
=
1
N
∑
i
=
1
N
L
(
y
(
i
)
,
y
^
(
i
)
)
)
=
1
2
N
∑
i
=
1
N
∑
j
=
1
n
(
L
)
(
y
j
−
y
^
j
)
2
=
1
2
N
∑
i
=
1
N
∣
∣
y
(
i
)
−
y
^
(
i
)
∣
∣
2
2
=
1
2
N
∑
i
=
1
N
∣
∣
y
(
i
)
−
F
(
x
(
i
)
;
W
)
∣
∣
2
2
(3-28)
\begin{aligned} E(\bm{W}) & =\frac{1}{N}\sum_{i=1}^NL(\bm{y}^{(i)},\bm{\hat y}^{(i)})) \\ & =\frac{1}{2N}\sum_{i=1}^{N}\sum_{j=1}^{n^{(L)}}(y_j- {\hat y_j})^{2} \\ & =\frac{1}{2N}\sum_{i=1}^{N}||\bm{y}^{(i)}-\bm{\hat y}^{(i)}||_2^{2}\\ & =\frac{1}{2N}\sum_{i=1}^{N}||\bm{y}^{(i)}-F(\bm{x}^{(i)};\bm{W}) ||_2^{2} \tag{3-28} \end{aligned}
E(W)=N1i=1∑NL(y(i),y^(i)))=2N1i=1∑Nj=1∑n(L)(yj−y^j)2=2N1i=1∑N∣∣y(i)−y^(i)∣∣22=2N1i=1∑N∣∣y(i)−F(x(i);W)∣∣22(3-28)
关于经验风险,详见 1.3.3.2 经验风险。
在我们的网络中,损失函数
L
L
L 也可以写成:
L
(
a
(
L
)
,
a
^
(
L
)
)
=
1
2
∑
i
=
1
n
(
L
)
(
a
i
(
L
)
−
a
^
i
(
L
)
)
2
(
3-29
)
\hspace{1em} L(\bm{a}^{(L)},\bm{\hat a}^{(L)}) =\frac{1}{2}\sum_{i=1}^{n^{(L)}}(a^{(L)}_i- {\hat a^{(L)}_i})^{2} \hspace{1em} (\operatorname{3-29})
L(a(L),a^(L))=21i=1∑n(L)(ai(L)−a^i(L))2(3-29)
在介绍误差反向传播之前,先引入一个概念——反向传播误差
δ
i
(
l
)
(
1
≤
l
≤
L
)
\delta^{(l)}_i(1 \le l \le L)
δi(l)(1≤l≤L),它定义为:
δ
i
(
l
)
≜
∂
L
∂
z
i
(
l
)
(3-30)
\delta^{(l)}_i\triangleq\frac{ \partial L}{ \partial z^{(l)}_i} \tag{3-30}
δi(l)≜∂zi(l)∂L(3-30)
由复合函数偏导数的链式法则可得:
∂
L
∂
ω
i
,
j
(
l
)
=
∂
L
∂
z
i
(
l
+
1
)
∂
z
i
(
l
+
1
)
∂
ω
i
,
j
(
l
)
(3-31)
∂L∂ω(l)i,j=∂L∂z(l+1)i∂z(l+1)i∂ω(l)i,j \tag{3-31}
∂ωi,j(l)∂L=∂zi(l+1)∂L∂ωi,j(l)∂zi(l+1)(3-31)
基于式(3-30)和式(3-18),可将式(3-31)转化为:
∂
L
∂
ω
i
,
j
(
l
)
=
δ
i
(
l
+
1
)
a
j
(
l
)
(3-32)
\frac{\partial{L}}{\partial \omega_{i,j}^{(l)}}=\delta^{(l+1)}_i a^{(l)}_j \tag{3-32}
∂ωi,j(l)∂L=δi(l+1)aj(l)(3-32)
同理可得:
∂
L
∂
b
i
(
l
)
=
∂
L
∂
z
i
(
l
+
1
)
∂
z
i
(
l
+
1
)
∂
b
i
(
l
)
=
δ
i
(
l
+
1
)
(3-33)
∂L∂b(l)i=∂L∂z(l+1)i∂z(l+1)i∂b(l)i=δ(l+1)i \tag{3-33}
∂bi(l)∂L=∂zi(l+1)∂L∂bi(l)∂zi(l+1)=δi(l+1)(3-33)
a
j
(
l
)
a^{(l)}_j
aj(l)在前向传播过程中就已经算出来了,因此,我们只需要算出
δ
i
(
l
+
1
)
\delta^{(l+1)}_i
δi(l+1),代入式(3-32)和式(3-33)当中,就能算出
∂
L
∂
ω
i
,
j
(
l
)
\frac{\partial{L}}{\partial \omega_{i,j}^{(l)}}
∂ωi,j(l)∂L和
∂
L
∂
b
i
(
l
)
\frac{\partial{L}}{\partial b_i^{(l)}}
∂bi(l)∂L,紧接就能更新各个权重,问题也就迎刃而解了。
下面我们考虑如何计算各层的
δ
i
(
l
+
1
)
\delta^{(l+1)}_i
δi(l+1)。
首先,我们要计算输出层各神经元的反向传播误差
δ
i
(
L
)
(
1
≤
i
≤
n
(
L
)
)
\delta^{(L)}_i(1 \le i\le n^{(L)})
δi(L)(1≤i≤n(L)):
δ
i
(
L
)
=
∂
L
∂
z
i
(
L
)
(
3-34
-1
)
=
∂
L
∂
a
i
(
L
)
∂
a
i
(
L
)
∂
z
i
(
L
)
(
3-34
-2
)
=
(
a
i
(
L
)
−
a
^
i
(
L
)
)
⋅
φ
′
(
z
i
(
L
)
)
(
3-34
-3
)
δ(L)i=∂L∂z(L)i(3-34-1)=∂L∂a(L)i∂a(L)i∂z(L)i(3-34-2)=(a(L)i−ˆa(L)i)⋅φ′(z(L)i)(3-34-3)
δi(L)=∂zi(L)∂L=∂ai(L)∂L∂zi(L)∂ai(L)=(ai(L)−a^i(L))⋅φ′(zi(L))(3-34-1)(3-34-2)(3-34-3)
其中,
式(3-34-1) 由
δ
i
(
l
)
\delta^{(l)}_i
δi(l) 的定义式(3-30)所得
式(3-34-2) 基于复合函数求导的链式法则
式(3-34-3) 的第1项基于式(3-29),第2项基于式(3-18)
然后,我们考虑一般情况,即计算除输出层外的各层的各神经元的反向传播误差
δ
i
(
l
)
(
1
≤
l
≤
L
−
1
,
1
≤
i
≤
n
(
l
)
)
\delta^{(l)}_i(1 \le l \le L-1,1 \le i \le n^{(l)})
δi(l)(1≤l≤L−1,1≤i≤n(l)):
δ
i
(
l
)
=
∂
L
∂
z
i
(
l
)
(
3-35
-1
)
=
∑
j
=
1
n
(
l
+
1
)
∂
L
∂
z
j
(
l
+
1
)
∂
z
j
(
l
+
1
)
∂
a
i
(
l
)
∂
a
i
(
l
)
∂
z
i
(
l
)
(
3-35
-2
)
=
∑
j
=
1
n
(
l
+
1
)
δ
j
(
l
+
1
)
⋅
ω
j
,
i
(
l
)
⋅
φ
′
(
z
i
(
l
)
)
(
3-35
-3
)
δ(l)i=∂L∂z(l)i(3-35-1)=n(l+1)∑j=1∂L∂z(l+1)j∂z(l+1)j∂a(l)i∂a(l)i∂z(l)i(3-35-2)=n(l+1)∑j=1δ(l+1)j⋅ω(l)j,i⋅φ′(z(l)i)(3-35-3)
δi(l)=∂zi(l)∂L=j=1∑n(l+1)∂zj(l+1)∂L∂ai(l)∂zj(l+1)∂zi(l)∂ai(l)=j=1∑n(l+1)δj(l+1)⋅ωj,i(l)⋅φ′(zi(l))(3-35-1)(3-35-2)(3-35-3)
可以发现,第
l
l
l 层的
δ
i
(
l
)
\delta^{(l)}_i
δi(l) 可以用多个第
l
+
1
l+1
l+1 层的
δ
j
(
l
+
1
)
(
1
≤
j
≤
n
(
l
+
1
)
)
\delta^{(l+1)}_j(1 \le j \le n^{(l+1)})
δj(l+1)(1≤j≤n(l+1))表示,前面我们已经计算出了
δ
i
(
L
)
\delta^{(L)}_i
δi(L),因此,从输出层开始,不断一层一层向前迭代计算
δ
i
(
l
)
\delta^{(l)}_i
δi(l),直到输入层,我们能算出所有的
δ
i
(
l
)
\delta^{(l)}_i
δi(l),从而能算出所有的
∂
L
∂
ω
i
,
j
(
l
)
\frac{\partial{L}}{\partial \omega_{i,j}^{(l)}}
∂ωi,j(l)∂L和
∂
L
∂
b
i
(
l
)
\frac{\partial{L}}{\partial b_i^{(l)}}
∂bi(l)∂L,然后我们就能对权重进行更新,这就完成了一次反向传播过程。
此外,如果激活函数
φ
(
∗
)
\varphi(*)
φ(∗) 选择sigmoid函数,因为我们知道
S
′
(
x
)
=
S
(
x
)
(
1
−
S
(
x
)
)
S'(x)=S(x)(1-S(x))
S′(x)=S(x)(1−S(x)),那么式(3-34-3)和式(3-35-3)能进一步简化为:
{
δ
i
(
L
)
=
(
a
i
(
L
)
−
a
^
i
(
L
)
)
⋅
a
i
(
L
)
⋅
(
1
−
a
i
(
L
)
)
1
≤
i
≤
n
(
L
)
δ
i
(
l
)
=
∑
j
=
1
n
(
l
+
1
)
δ
j
(
l
+
1
)
⋅
ω
j
,
i
(
l
)
⋅
a
i
l
⋅
(
1
−
a
i
(
l
)
)
1
≤
l
≤
L
−
1
,
1
≤
i
≤
n
(
l
)
(
3-36
)
\hspace{1em} \left \{ δ(L)i=(a(L)i−ˆa(L)i)⋅a(L)i⋅(1−a(L)i)1≤i≤n(L)δ(l)i=n(l+1)∑j=1δ(l+1)j⋅ω(l)j,i⋅ali⋅(1−a(l)i)1≤l≤L−1,1≤i≤n(l) \hspace{1em} (\operatorname{3-36}) \right.
⎩⎪⎪⎪⎨⎪⎪⎪⎧δi(L)=(ai(L)−a^i(L))⋅ai(L)⋅(1−ai(L))1≤i≤n(L)δi(l)=j=1∑n(l+1)δj(l+1)⋅ωj,i(l)⋅ail⋅(1−ai(l))1≤l≤L−1,1≤i≤n(l)(3-36)
因为,我们已经计算出了每一层的反向传播误差 δ i ( l ) \delta^{(l)}_i δi(l),所以立刻能计算出单个样本的损失函数对权重的偏导数,将 δ i ( l + 1 ) \delta^{(l+1)}_i δi(l+1)代入下式即可:
{
∂
L
∂
ω
i
,
j
(
l
)
=
δ
i
(
l
+
1
)
a
j
(
l
)
∂
L
∂
b
i
(
l
)
=
δ
i
(
l
+
1
)
(3-37)
\left \{ ∂L∂ω(l)i,j=δ(l+1)ia(l)j∂L∂b(l)i=δ(l+1)i \tag{3-37} \right .
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧∂ωi,j(l)∂L=δi(l+1)aj(l)∂bi(l)∂L=δi(l+1)(3-37)
接着对其它样本的损失函数进行相同的求偏导操作,然后将它们加起来,即对式(3-28)两边分别对
ω
i
,
j
(
l
)
\omega_{i,j}^{(l)}
ωi,j(l) 和
b
i
(
l
)
b_i^{(l)}
bi(l) 求偏导:
{
∂
E
∂
ω
i
,
j
(
l
)
=
1
N
∑
k
=
1
N
∂
L
k
∂
ω
i
,
j
(
l
)
∂
E
∂
b
i
(
l
)
=
1
N
∑
k
=
1
N
∂
L
k
∂
b
i
(
l
)
(3-38)
\left \{ \begin{aligned} \frac{\partial{E}}{\partial \omega_{i,j}^{(l)}}=\frac{1}{N}\sum_{k=1}^{N}\frac{\partial{L_k}}{\partial \omega_{i,j}^{(l)}} \\ \frac{\partial{E}}{\partial b_i^{(l)}}=\frac{1}{N}\sum_{k=1}^{N}\frac{\partial{L_k}}{\partial b_i^{(l)}} \tag{3-38} \end{aligned} \right.
⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧∂ωi,j(l)∂E=N1k=1∑N∂ωi,j(l)∂Lk∂bi(l)∂E=N1k=1∑N∂bi(l)∂Lk(3-38)
其中,
L
k
L_k
Lk 为第
k
k
k 个样本的损失函数,
L
k
=
L
(
y
(
k
)
,
y
^
(
k
)
)
L_k=L(\bm{y}^{(k)},\bm{\hat y}^{(k)})
Lk=L(y(k),y^(k));
E
E
E 为经验风险函数;
N
N
N 为训练样本总数
根据式(3-38)的计算结果,就能得到一次训练的所有网络权重变化量
Δ
ω
i
,
j
(
l
)
\Delta \omega_{i,j}^{(l)}
Δωi,j(l) 和偏置变化量
Δ
b
i
(
l
)
\Delta b_i^{(l)}
Δbi(l):
{
Δ
ω
i
,
j
(
l
)
=
−
η
⋅
∂
E
∂
ω
i
,
j
(
l
)
Δ
b
i
(
l
)
=
−
η
⋅
∂
E
∂
b
i
(
l
)
(3-39)
\left \{ Δω(l)i,j=−η⋅∂E∂ω(l)i,jΔb(l)i=−η⋅∂E∂b(l)i \right. \tag{3-39}
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧Δωi,j(l)=−η⋅∂ωi,j(l)∂EΔbi(l)=−η⋅∂bi(l)∂E(3-39)
其中,
η
\eta
η 为学习率,决定权重调整的幅度大小。
若将它们展开,也可以写成:
(
Δ
ω
1
,
1
(
1
)
,
.
.
.
,
Δ
ω
1
,
1
(
2
)
,
.
.
.
,
Δ
ω
1
,
1
(
L
−
1
)
,
.
.
.
,
Δ
b
1
(
1
)
,
.
.
.
,
Δ
b
1
(
2
)
,
.
.
.
,
Δ
b
1
(
L
−
1
)
)
=
−
η
(
∂
E
∂
ω
1
,
1
(
1
)
,
.
.
.
,
∂
E
∂
ω
1
,
1
(
2
)
,
.
.
.
,
∂
E
∂
ω
1
,
1
(
L
−
1
)
,
.
.
.
,
∂
E
∂
b
1
(
1
)
,
.
.
.
,
∂
E
∂
b
1
(
2
)
,
.
.
.
,
∂
E
∂
b
1
(
L
−
1
)
)
(
3-40
)
(\Delta \omega_{1,1}^{(1)},...,\Delta \omega_{1,1}^{(2)},...,\Delta \omega_{1,1}^{(L-1)},...,\Delta b_1^{(1)},...,\Delta b_1^{(2)},...,\Delta b_1^{(L-1)}) \\ =-\eta( \frac{\partial{E}}{\partial \omega_{1,1}^{(1)}},...,\frac{\partial{E}}{\partial \omega_{1,1}^{(2)}},...,\frac{\partial{E}}{\partial \omega_{1,1}^{(L-1)}},...,\frac{\partial{E}}{\partial b_1^{(1)}},...,\frac{\partial{E}}{\partial b_1^{(2)}},...,\frac{\partial{E}}{\partial b_1^{(L-1)}}) \hspace{1em} (\operatorname{3-40})
(Δω1,1(1),...,Δω1,1(2),...,Δω1,1(L−1),...,Δb1(1),...,Δb1(2),...,Δb1(L−1))=−η(∂ω1,1(1)∂E,...,∂ω1,1(2)∂E,...,∂ω1,1(L−1)∂E,...,∂b1(1)∂E,...,∂b1(2)∂E,...,∂b1(L−1)∂E)(3-40)
最后对权重进行更新:
{
ω
i
,
j
(
l
)
(
新
)
=
ω
i
,
j
(
l
)
(
旧
)
+
Δ
ω
i
,
j
(
l
)
b
i
(
l
)
(
新
)
=
b
i
(
l
)
(
旧
)
+
Δ
b
i
(
l
)
(3-41)
\left \{ ω(l)i,j(新)=ω(l)i,j(旧)+Δω(l)i,jb(l)i(新)=b(l)i(旧)+Δb(l)i \right . \tag{3-41}
⎩⎨⎧ωi,j(l)(新)=ωi,j(l)(旧)+Δωi,j(l)bi(l)(新)=bi(l)(旧)+Δbi(l)(3-41)
这就成功完成了一轮(epoch)学习,在实际应用中,需要重复多轮学习,才能使得经验风险降至可接受的范围以内。
[1] McCulloch W S, Pitts W. A logical calculus of the ideas immanent in nervous activity[J]. The bulletin of mathematical biophysics, 1943, 5: 115-133.
[2] Rosenblatt F. The perceptron: a probabilistic model for information storage and organization in the brain[J]. Psychological review, 1958, 65(6): 386.
[3] Rumelhart D E, Hinton G E, Williams R J. Learning representations by back-propagating errors[J]. nature, 1986, 323(6088): 533-536.
[4] LeCun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11): 2278-2324.
[5] Hinton G E, Osindero S, Teh Y W. A fast learning algorithm for deep belief nets[J]. Neural computation, 2006, 18(7): 1527-1554.
[6] Hinton G E, Salakhutdinov R R. Reducing the dimensionality of data with neural networks[J]. science, 2006, 313(5786): 504-507.
[7] Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[J]. Advances in neural information processing systems, 2012, 25.
1、人工智能 杨清平 北京航空航天大学出版社
2、机器学习 赵卫东 董亮 人民邮电出版社
3、机器学习基础——原理、算法与实践 袁梅宇 清华大学出版社
4、人工智能(第2版) 作者:[美]史蒂芬·卢奇(Stephen Lucci)、丹尼·科佩克(Danny Kopec) 译者:林赐 人民邮电出版社
5、深度学习的数学 作者:[日]涌井良幸、涌井贞美 译者:杨瑞龙 人民邮电出版社
6、深度学习 作者:[美] 伊恩·古德费洛、[加] 约书亚·本吉奥、[加] 亚伦·库维尔 译者:赵申剑等 人民邮电出版社
1、机器学习 胡浩基 浙江大学
2、深度学习 吴立德 复旦大学
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。