人工神经网络(Artificial Neural Network,ANN)常简称为神经网络(Neural Network,NN),它是一种通过数学模型来模拟生物大脑神经网络以及生物大脑功能的技术。
1943年,心理学家McCulloch和数学家Pitts提出了MP模型。该模型将一个生物神经元的结构简化成数学模型。
单个MP模型可以用以下公式表示:
O
j
=
f
(
∑
i
=
1
n
w
i
j
x
i
)
O_j=f(\sum_{i=1}^nw_{ij}x_{i})
Oj?=f(i=1∑n?wij?xi?)
f
f
f表示激活函数。常用的激活函数有sigmoid函数、Tanh函数、ReLU函数、Leaky ReLU函数。
感知机只能解决线性可分的数据。单层感知机(Perceptron)无法解决线性不可分的问题。
2006年,Jeffery Hinton提出了Deep Learning(深度学习)的概念。
传统机器学习算法。如支持向量机、随机森林等都是非常优秀的算法,它们推导过程是清晰的。使用传统机器学习算法进行模型训练,它的训练过程是透明的,你可以比较清楚地了解训练过程中发生了什么,以及为什么会造成这样的结果,这点是当前神经网络所不具有的,即神经网络在训练过程中是不透明的。
将复杂神经网络结构拆解成一个个的神经元,可以非常简单地理解这个神经元会对输入数据进行什么样的操作,但当几万个、几百万个甚至上千万个神经元连接成 一个复杂的体系时,要理解它就没有那么容易了。换句话说,使用一个神经网络训练某些数据,最终获得了比较好的结果,但使用者本身也不知道为什么好。
简单来说,神经网络只是将许多线性变换和非线性变换叠加在一起。那么为什么不使用透明度高、可解释性好的传统机器学习算法呢?一个核心的原因就是传统机器学习算法很难实现学习数据集中的特征。
解决一个机器学习问题的一般步骤:通过数据预处理从数据集中提取出相应的特征集,再将提取的特征集喂给相应的机器学习算法,训练,然后问题解决。很完美!但是现实中,很多任务面对的问题是我们不知道怎么做数据预处理,也不知道应该从数据集中提取哪些特征的。这些问题是严重的,因为整个计算机科学对数据特征表示都有较强的依赖。同样的机器学习算法,面对不同的特质表示,可能训练出两个准确率与性能有巨大差异的模型。这并不奇怪,而且生活中,很多数据具有非常多的“变差因素”。例如老人和小孩说一句同样的话,虽然对我们人类而言这是相同的一句话,但对计算机而言,这两份数据有巨大的不同。如果不提取出这两份数据共有的特征,训练效果就会变得很差。因为传统机器学习算法面临数据特征难以获得的问题,所以很多问题无法直接使用传统机器学习算法解决。
但对神经网络而言,因为它可以叠加无限多的线性变换和非线性变换,所以理论上神经网络可以拟合任何函数。利用这个特性,再通过相应的优化算法进行训练,神经网络就可以挖掘出数据集中隐含的特征,解决数据集特征表示困难的巨大问题。通过我们使用模型本身来挖掘数据的方法成为表示学习。对于一些简单的任务,表示学习在几分钟内就可以挖掘出数据集的特征表示;对于复杂任务,可能花上几小时或者几个月,但相对于人工设计数据集要花费几年时间而言,已经是巨大的进步。
负责将神经网络中输入层的输入逐层加权运算传递到输出层。
用来量化模型输出层输出的预测值与真实值之间的差距。
对于某个点找到一个具体的“方向”,该“方向”相对于其他“方向”具有最大的梯度,梯度下降就是让这个点往这个方向移动一小段距离。
Back Propagation Algorithm,简称BP算法,也称误差反向传播算法。
Overfitting
Underfitting
泛化 Generalize
泛化误差 = 偏差 + 方差 + 噪声
深入浅出GAN生成对抗网络原理剖析与TensorFlow实践