1感知器:一种人工神经元,接受多个二进制输入,并产生一个二进制输出。每个输入有一个权重w,表示其重要程度。神经元的输出,0 或者 1,则由分配权重后的总和小于或者大于一些阈值决定。
2S型神经元
S 型神经元有多个输入,x 1 , x 2 , . . .,但与感知器不同,这些输入可以取 0 和 1 中的任意值,而不仅仅是 0 或 1。例如,0.638 . . .。同样,S 型神经元对每个输入有权重,w 1 , w 2 , . . .,和一个总的偏置,b。但是输出不是 0 或 1。其输出为
s型函数如图:
3神经网络架构:分三部分,输入层,隐藏层,输出层,下图为一个多层感知器。
4代价函数或损失函数:我们希望有一个算法,能让我们找到合适的权重和偏置,以至于网络的输出 y(x) 能够拟合所有的训练输入 x。为了量化如何实现这个目标,需要定义一个代价函数,下式为一个均方误差代价函数:
训练神经网络的目的是找到能最小化二次代价函数 C(w, b) 的权重和偏置。
5梯度下降法:可以被视为一种在代价函数 C 下降最快的方向上做微小变化,求代价函数的最小值的方法。
随机梯度下降的算法能够加速学习,其思想就是通过随机选取小量训练输入样本(mini_batch)来计算 ∇C x ,进而估算梯度 ∇C。一个一个样本取,速度太慢,可能在在最小点附近来回震荡,不能到达最小点,每次取全部的样本,数量太多,计算量大,所以就一个小批次一个小批次的取,既加快了速度,一次计算量也不大。
6反向传播算法的四个公式:
(1)输出层误差的方程:
(2)使用下一层的误差 δ l+1 来表示当前层的误差 δ l:
使用前两个公式就可以来计算任何层的误差,由l层,l-1层,l-2层,如此一步一步的反向传播完整个网络。
(3)代价函数关于网络中任意偏置的改变率:
(4)代价函数关于任何一个权重的改变率:
总结一下:
反向传播就是一种巧妙地追踪权重(和偏置)微小变化的传播,抵达输出层影响代价函数的技术。
6交叉熵代价函数:
相比于二次代价函数,交叉熵代价函数的优点是:误差越大,学习速度越快。
7 softmax:为神经网络定义一种新式的输出层,其输出是一些相加为 1的 正数的集合,即其输出可以看做一个概率分布。柔性最大值(softmax)加上对数似然的组合更加适用于那些需要将输出激活值解释为概率的场景。
8 过度拟合(overfitting)/过度训练(overtraining): 如下图所示,我们的训练集的损失一直在平滑的下降,给我们的感觉很好,但是测试集的准确率在迭代280次后就没有了明显的上升,仅仅在 280 迭代期准确率周围随机的小波动。这种情况我们就说网络在 迭代280次后就过度拟合(overfitting)或者过度训练(overtraining)了。
还有就是在训练集上准确率一直在提升,接近100%,但是我们的写实准确率却在82.27%左右,现在的网络几乎是在单纯记忆训练集合,而没有对数字本质进行理解能够泛化到测试数据集上。
解决办法:使用验证数据集而不是测试数据集来防止过拟合。在每个迭代后计算验证数据集的分类准确率,若已经饱和就停止训练,即early stopping。利用验证集来获取合适的超参数,如果用测试集的话,很可能到最后得到过度拟合于测试集的超参数,而不能泛化到其他数据集上。一般来说,最好的降低过度拟合的方式之一就是增加训练样本的量,但是往往训练样本是最昂贵的资源。
9规范化:一种缓解过拟合的技术。最常用的规范化方法是权重衰减(weight decay)或者 L2 规范化,在代价函数后面加一个额外的项,规范化的交叉熵公式如下:
这个式子有两部分,第一部分就是正常的交叉熵代价函数,第二部分为权重的平方和,其中 λ > 0 可以称为规范化参数。规范化可以当做一种寻找小的权重和最小化原始的代价函数之间的折中,通过控制λ来调整两部分的重要性,λ越小,就偏向于最小化原始代价函数,反之,倾向于小的权重。
为啥l2规范化可以减轻过拟合呢?l2规范化倾向于选择较小的权重,使网络的行为不会因为随便改变了一个输入而改变很大,可以抵挡数据中噪声的影响,从而使网络具有更好的泛化性。
其他规范化方法:
(1) l1规范化,在未规范化的代价函数上加上一个权重绝对值的和,即:
和l2规范化相似,都是惩罚大的权重,只是权重缩小的方式不同。在 L1 规范化中,权重通过一个常量向 0 进行缩小。在 L2 规范化中,权重通过一个和 w 成比例的量进行缩小的。L1 规范化倾向于聚集网络的权重在相对少量的高重要度连接上,而其他权重就会被驱使向 0 接近。
(2) 弃权(Dropout)是一种相当激进的技术。随机(临时)地删除网络中的一些隐藏神经元,同时让输入层和输出层的神经元保持不变。这个方法就类似我们在训练不同的神经网络,最后来一个平均,不同的网络过拟合的方式不同,这样一平均就会帮助我们减轻过拟合。弃权技术在训练大规模深度网络时尤其有用,这样的网络中过度拟合问题经常特别突出。
(3) 人为扩展训练数据:图像数据集可以旋转,扭曲,变换图像等方法来扩展数据,提高分类准确率。其他类数据集也可以通过其他方法,一般就是通过应用反映真实世界变化的操作来扩展训练数据。
10权重初始化:均值为 0 标准差为 1/√nin 的高斯随机分布初始化权重要比均值为 0,标准差 1初始化训练速度要快,有时候在性能上还会有较大提升。
11其他人工神经元:
tanh神经元:和s型神经元不同,其输出的值域为(-1,1)
修正线性神经元(ReLU):不存在学习速度下降的问题,但是当带权输入是负数的时候,梯度就消失了,所以神经元就完全停止了学习。
12 神经网络的一个最显著的事实就是它可以计算任何的函数。需要说明的有两点:第一点,不是说一个网络可以被用来准确地计算任何函数。而是说,我们可以获得尽可能好的一个近似。第二点,近似的函数类其实是连续函数。所以,更加准确的关于普遍性定理的表述是包含一个隐藏层的神经网络可以被用来按照任意给定的精度来近似任何连续函数。
一个输入一个输出的普遍性:
多个输入:
13深度神经网络为何很难训练:
(1)梯度消失问题:在神经网络中前面的隐藏层中的神经元学习速度要慢于后面的隐藏层。
(2)梯度爆炸:神经网络前面的层中的梯度变得非常大!
总的来说,在深度神经网络中的梯度是不稳定的,在前面的层中或会消失,或会激增。
不稳定的梯度问题: 根本的问题其实并非是消失的梯度问题或者激增的梯度问题,而是在前面的层上的梯度是来自后面的层上项的乘积。当存在过多的层次时,就出现了内在本质上的不稳定场景。唯一让所有层都接近相同的学习速度的方式是所有这些项的乘积都能得到一种平衡。如果没有某种机制或者更加本质的保证来达成平衡,那网络就很容易不稳定了。简而言之,真实的问题就是神经网络受限于不稳定梯度的问题。所以,如果我们使用标准的基于梯度的学习算法,在网络中的不同层会出现按照不同学习速度学习的情况。
14卷积神经网络采用了三种基本概念:局部感受野(local receptive fields),共享权重(sharedweights),和池化(pooling)。
(1)局部感受野:和通常一样,我们把输入像素连接到一个隐藏神经元层。但是我们不会把每个输入像素连接到每个隐藏神经元。相反,我们只是把输入图像进行小的,局部区域的连接。下图黄色部分就是一个局部感受野,每个连接学习一个权重,隐藏神经元同时也学习一个总的偏置。局部感受野从左往右,从上往下移动,步长可以是1或其他整数。如此重复,构建起第一个隐藏层。
(2)共享权重和偏置:隐藏神经元中的每一个使用相同的权重和偏置,也就是第一个隐藏层的所有神经元检测完全相同的特征,只是在输入图像的不同位置。所以说卷积网络能很好地适应图像的平移不变性:例如稍稍移动一幅猫的图像,它仍然是一幅猫的图像 。
因为这个原因,我们有时候把从输入层到隐藏层的映射称为一个特征映射。我们把定义特征映射的权重称为共享权重。我们把以这种方式定义特征映射的偏置称为共享偏置。共享权重和偏置经常被称为一个卷积核或者滤波器。一个卷积核可以检测一种特征,在卷积网络中每一层可以有很多卷积核。
共享权重和偏置的一个很大的优点是,它大大减少了参与的卷积网络的参数。举个例子,对于一个5*5的卷积核,每个特征映射需要 25 = 5 × 5 个共享权重,加上一个共享偏置,所以每个特征映射需要 26 个参数。如果我们有 20 个特征映射,那么总共有 20 × 26 = 520 个参数来定义卷积层。作为对比,假设有一个全连接的第一层,具有 784 = 28 × 28 个输入神经元,和一个相对适中的 30 个隐藏神经元,总共有 784 × 30 个权重,加上额外的 30 个偏置,共有 23, 550 个参数。换句话说,这个全连接的层有多达 40 倍于卷基层的参数。
如上图所示,在这个例子中有 3 个特征映射。每个特征映射定义为一个 5 × 5 共享权重和单个共享偏置的集合。其结果是网络能够检测 3 种不同的特征,每个特征都在整个图像中可检测。
(3)池化层:卷积神经网络除了卷基层也包含池化层(pooling layers),池化层通常紧接着在卷积层之后使用,它要做的是简化从卷积层输出的信息。一个池化层取得从卷积层输出的每一个特征映射并且从它们准备一个凝缩的特征映射。