首先简要解释下网络过程:
1、将输入图像传递到第一个卷积层中,卷积后以激活图形式输出。
图片在卷积层中过滤后的特征会被输出,并传递下去
2、每个过滤器都会给出不同的特征,以帮助进行正确的类预测。
因为需要保证图像大小的一致,所以使用同样的填充(零填充),
否则填充会被使用,因为它可以帮助减少特征的数量
零填充,可以理解为特征稀疏化,留下来的特征更能代表这个图像
3、随后加入池化层进一步减少参数的数量
4、在预测最终提出前,数据会经过多个卷积和池化层的处理。
卷积层会帮助提取特征,越深的卷积神经网络会提取越具体的特征,
越浅的网络提取越浅显的特征
5、CNN 中的输出层是全连接层,其中来自其他层的输入在这里被平化和发送,
以便将输出转换为网络所需的参数
6、随后输出层会产生输出,这些信息会互相比较排除错误。
损失函数是全连接输出层计算的均方根损失。随后我们会计算梯度错误
7、错误会进行反向传播,以不断改进过滤器(权重)和偏差值
8、一个训练周期由单次正向和反向传递完成
训练基本思想:
基于一组设置的初始化模型参数,比如利用高斯分布来随机初始化网络结构中的参数,输入数据在卷积神经网络中经过前向传播会得到一个期望输出,如果这个期望输出与数据的实际类别标签不相同,则将误差逐层反向传播至输入层,每层的神经元会根据该误差对网络结构中的参数进行更新
关键概念解释:
1)神经元(Neuron)
——就像形成我们大脑基本元素的神经元一样,神经元形成神经网络的基本结构。
想象一下,当我们得到新信息时我们该怎么做。当我们获取信息时,我们一般会处理它,然后生成一个输出。
类似地,在神经网络的情况下,神经元接收输入,处理它并产生输出,而这个输出被发送到其他神经元用于进一步处理,或者作为最终输出进行输出。
2)权重(Weights)
——当输入进入神经元时,它会乘以一个权重。例如,如果一个神经元有两个输入,则每个输入将具有分配给它的一个关联权重。
我们随机初始化权重,并在模型训练过程中更新这些权重。
训练后的神经网络对其输入赋予较高的权重,这是它认为与不那么重要的输入相比更为重要的输入。为零的权重则表示特定的特征是微不足道的。
让我们假设输入为a,并且与其相关联的权重为W1,那么在通过节点之后,输入变为a * W1
3)偏差(Bias)
——除了权重之外,另一个被应用于输入的线性分量被称为偏差。
它被加到权重与输入相乘的结果中。
基本上添加偏差的目的是来改变权重与输入相乘所得结果的范围的。
添加偏差后,结果将看起来像a* W1 +偏差。这是输入变换的最终线性分量。
4)激活函数(Activation Function)
——一旦将线性分量应用于输入,将会需要应用一个非线性函数。
这通过将激活函数应用于线性组合来完成。
激活函数将输入信号转换为输出信号。
应用激活函数后的输出看起来像f(a * W1 + b),其中f()就是激活函数。
比如,我们将“n”个输入给定为X1到Xn而与其相应的权重为Wk1到Wkn。
我们有一个给定值为bk的偏差。权重首先乘以与其对应的输入,然后与偏差加在一起。
而这个值叫做u。
U =ΣW* X+ b
激活函数被应用于u,即 f(u),并且我们会从神经元接收最终输出,如yk = f(u)。
常用的激活函数最常用的激活函数就是Sigmoid,ReLU和softmax
a)Sigmoid
——最常用的激活函数之一是Sigmoid,它被定义为:
Sigmoid变换产生一个值为0到1之间更平滑的范围。我们可能需要观察在输入值略有变化时输出值中发生的变化。光滑的曲线使我们能够做到这一点,因此优于阶跃函数
ReLU(整流线性单位)
——与Sigmoid函数不同的是,最近的网络更喜欢使用ReLu激活函数来处理隐藏层。
该函数定义为:当X>0时,函数的输出值为X;当X<=0时,输出值为0。
使用ReLU函数的最主要的好处是对于大于0的所有输入来说,它都有一个不变的导数值。
常数导数值有助于网络训练进行得更快
c) Softmax
——Softmax激活函数通常用于输出层,用于分类问题。
它与sigmoid函数是很类似的,区别就是输出被归一化为总和为1。
Sigmoid函数将发挥作用以防我们有一个二进制输出,但是如果我们有一个多类分类问题,softmax函数使为每个类分配值这种操作变得相当简单,而这可以将其解释为概率。
以这种方式来操作的话,我们很容易看到——假设你正在尝试识别一个可能看起来像8的6。该函数将为每个数字分配值如下。我们可以很容易地看出,较高概率被分配给6,而下一个较高概率分配给8,依此类推……
6)输入/输出/隐藏层(Input / Output / Hidden Layer)
——正如它们名字所代表的那样,输入层是接收输入那一层,本质上是网络的第一层。
而输出层是生成输出的那一层,也可以说是网络的最终层。
处理层是网络中的隐藏层。这些隐藏层是对传入数据执行特定任务并将其生成的输出传递到下一层的那些层。
输入和输出层是我们可见的,而中间层则是隐藏的
7)MLP(多层感知器)
——单个神经元将无法执行高度复杂的任务。因此,我们使用堆栈的神经元来生成我们所需要的输出。在最简单的网络中,我们将有一个输入层、一个隐藏层和一个输出层。
每个层都有多个神经元,并且每个层中的所有神经元都连接到下一层的所有神经元。这些网络也可以被称为完全连接的网络
8)正向传播(Forward Propagation)
——正向传播是指输入通过隐藏层到输出层的运动。在正向传播中,信息沿着一个单一方向前进。输入层将输入提供给隐藏层,然后生成输出。这过程中是没有反向运动的
9)成本函数(Cost Function)
——当我们建立一个网络时,网络试图将输出预测得尽可能靠近实际值。
我们使用成本/损失函数来衡量网络的准确性。
而成本或损失函数会在发生错误时尝试惩罚网络。
我们在运行网络时的目标是提高我们的预测精度并减少误差,从而较大限度地降低成本。
最优化的输出是那些成本或损失函数值最小的输出。
如果我将成本函数定义为均方误差,则可以写为:
C= 1/m ∑(y–a)^2,
其中m是训练输入的数量,a是预测值,y是该特定示例的实际值。
学习过程围绕最小化成本来进行
10)梯度下降(Gradient Descent)
——梯度下降是一种最小化成本的优化算法。要直观地想一想,在爬山的时候,你应该会采取小步骤,一步一步走下来,而不是一下子跳下来。因此,我们所做的就是,如果我们从一个点x开始,我们向下移动一点,即Δh,并将我们的位置更新为x-Δh,并且我们继续保持一致,直到达到底部。考虑较低成本点。
在数学上,为了找到函数的局部最小值,我们通常采取与函数梯度的负数成比例的步长
11)学习率(Learning Rate)
——学习率被定义为每次迭代中成本函数中最小化的量。
简单来说,我们下降到成本函数的最小值的速率是学习率。
我们应该非常仔细地选择学习率,因为它不应该是非常大的,以至于较佳解决方案被错过,也不应该非常低,以至于网络需要融合
12)反向传播(Backpropagation)
——当定义神经网络时,为节点分配随机权重和偏差值。
一旦收到单次迭代的输出,我们就可以计算出网络的错误。
然后将该错误与成本函数的梯度一起反馈给网络以更新网络的权重。
最后更新这些权重,以便减少后续迭代中的错误。
使用成本函数的梯度的权重的更新被称为反向传播。
在反向传播中,网络的运动是向后的,错误随着梯度从外层通过隐藏层流回,权重被更新
13)批次(Batches)
——在训练神经网络的同时,不用一次发送整个输入,我们将输入分成几个随机大小相等的块。与整个数据集一次性馈送到网络时建立的模型相比,批量训练数据使得模型更加广义化。
14)周期(Epochs)
——周期被定义为向前和向后传播中所有批次的单次训练迭代。
这意味着1个周期是整个输入数据的单次向前和向后传递。
你可以选择你用来训练网络的周期数量,更多的周期将显示出更高的网络准确性,
然而,网络融合也需要更长的时间。
另外,你必须注意,如果周期数太高,网络可能会过度拟合。
15)丢弃(Dropout)
——Dropout是一种正则化技术,可防止网络过度拟合。
顾名思义,在训练期间,隐藏层中的一定数量的神经元被随机地丢弃。
这意味着训练发生在神经网络的不同组合的神经网络的几个架构上。
你可以将Dropout视为一种综合技术,然后将多个网络的输出用于产生最终输出
16)批量归一化(Batch Normalization)
——作为一个概念,也这样翻译:分批标准化 (Batch Normalization)
批量归一化可以被认为是我们在河流中设定为特定检查点的水坝。
这样做是为了确保数据的分发与希望获得的下一层相同。
当我们训练神经网络时,权重在梯度下降的每个步骤之后都会改变,
这会改变数据的形状如何发送到下一层
但是下一层预期分布类似于之前所看到的分布。
所以我们在将数据发送到下一层之前明确规范化数据
17) 过滤器/滤波器 (Filters)
——CNN中的滤波器,卷基层被使用到:具体是指将一个权重矩阵乘以输入图像的一个部分,产生相应的卷积输出。
比方说,对于一个28×28的图片而言,将一个3×3的滤波器与图片中3×3的矩阵依次相乘,从而得到相应的卷积输出。
滤波器的尺寸通常比原始图片要小,与权重相似,在最小化成本的反向传播中,滤波器也会被更新。
18)卷积神经网络CNN (Convolutional neural network)
——卷积神经网络通常用来处理图像数据,假设输入数据的形状。
为28×28×3(28pixels×28pixels×RGBValue),那么对于传统的神经网络来说就会有2352(28×28×3)个变量。随着图像尺寸的增加,那么变量的数量就会急剧增加。
通过对图片进行卷积,可以减少变量的数目(已在过滤器的概念中提及)。随着过滤器沿着图像上宽和高的两个方向滑动,就会产生一个相应的2维激活映射,最后再沿纵向将所有的激活映射堆叠在一起,就产生了最后的输出。
可以参照下面这个示意图
19) 池化 (Pooling)
—–为进一步减少变量的数目同时防止过拟合,一种常见的做法是在卷积层中引入池化层(pooling layer)。
最常用的池化层的操作是将原始图片中每个4×4分块取最大值形成一个新的矩阵,这叫做最大值池化(max pooling)
也有人尝试诸如平均池化(average pooling)之类的方式,但在实际情况中最大化池化拥有更好的效果
20) 补白 (Padding)
补白(Padding)通常是指给图像的边缘增加额外的空白,从而使得卷积后输出的图像跟输入图像在尺寸上一致,这也被称作相同补白(Same Padding)
如应用过滤器,在相同补白的情况下,卷积后的图像大小等于实际图像的大小。
有效补白(Valid Padding)指的是保持图片上每个真实的像素点,不增加空白,因此在经历卷积后数据的尺寸会不断变小
21)数据增强 (Data Augmentation)
–——数据增强指的是从已有数据中创造出新的数据,通过增加训练量以期望能够提高预测的准确率。
比如,在数字识别中,我们遇到的数字9可能是倾斜或旋转的,因此如果将训练的图片进行适度的旋转,增大训练量,那么模型的准确性就可能会得到提高。
通过“旋转”“照亮”的操作,训练数据的品质得到了提升,这种过程被称作数据增强
22) 递归神经元 (Recurrent NeuralNetwork)
—— 对于递归神经元来说,经由它自己处理过的数据会变成自身下一次的输入,这个过程总共会进行t次。
如下图所示,将递归神经元展开就相当于t个不同的神经元串联起来,这种神经元的长处是能够产生一个更全面的输出结果
23)递归神经网络(RNN-Recurrent NeuralNetwork)
递归神经网络通常被用于处理序列化的数据,即前一项的输出是用来预测下一项的输入
递归神经网络中存在环的结构,这些神经元上的环状结构使得它们能够存储之前的数据一段时间,从而使得能够预测输出。
与递归神经元相似,在RNN中隐含层的输出会作为下一次的输入,如此往复经历t次,再将输出的结果传递到下一层网络中。这样,最终输出的结果会更全面,而且之前训练的信息被保持的时间会更久。
隐藏层将反向传递错误以更新权重。这被称为backpropagation through time (BPTT)
24) 梯度消失问题
——激活函数的梯度非常小的情况下会出现消失梯度问题。在权重乘以这些低梯度时的反向传播过程中,它们往往变得非常小,并且随着网络进一步深入而“消失”。这使得神经网络忘记了长距离依赖。这对循环神经网络来说是一个问题,长期依赖对于网络来说是非常重要的。
这可以通过使用不具有小梯度的激活函数ReLu来解决
25)激增梯度问题(Exploding Gradient Problem)
——这与消失的梯度问题完全相反,激活函数的梯度过大。在反向传播期间,它使特定节点的权重相对于其他节点的权重非常高,这使得它们不重要。这可以通过剪切梯度来轻松解决,使其不超过一定值