当我们用下图所示的方式来可视化一个 PLA 时,我们可以得到一些有趣的思考方式:样本 的每一个维度/特征的输入 都可以视为一个个“神经元”,它们通过一个个“树突”(dendrites) 和“细胞核”(nucleus) 连接到“细胞体”(Cell body)中,最后通过“轴突”(axon)传递到下一个“神经元”。
单层感知机 | 真实的神经元 |
---|---|
这就是从感知机到多层感知机最终被称为神经网络的起因。值得注意的是,神经网络虽然这样得名于“仿生学”的研究,但是其实际的作用机理乃至如今的蓬勃发展和现实中的人类神经几乎已经没有联系了。
一个简单的多层感知机 (Multi-Layer Perceptron,MLP) 可以用“神经网络”的可视化方法展示如下:
也许你已经注意到了,多层感知机 MLP 正是单层感知机 PLA 的级联和扩展。主要有以下几个特点:
由于历史渊源(提出于算力上不去那个年代),我们通常也把只有一个隐藏层,一共三层的多层感知机叫做:人工神经网络(Artificial Neural Network,ANN)
当隐藏层有 个神经元时,我们可以写出第 个隐藏层变量 的表达式(忽略激活函数):
其中, 分别表示第 个隐藏层的权重和偏置。上式还等价于:
对于一个输入样本 ,如果将其“嵌入”到维度(隐藏层变量个数)是 的“表示”中,那么所组成的 维隐变量 为:
由于计算机训练神经网络时通常是以一个批次为单位 batch_size
,也就是说一次性可以并行计算 个维度(特征数)是 的样本。
那么所有 个样本的隐变量 可以用矩阵形式表示:
最后,我们以小批量的形式,给出一个人工神经网络的前向过程:
上标表示不同的层,不同层所用的权重和偏置也有所不同。
灵活的神经网络层以及激活函数的选择赋予了多层感知机
机器学习中的数学——激活函数(五):ELU函数_elu激活函数-CSDN博客
目前神经网络最常用的激活函数:ReLU(Rectified Linear Unit)是Nair & Hintonw是在2010为限制玻尔兹曼机(restricted Boltzmann machines)提出的,并且首次成功地应用于神经网络(Glorot,2011)。除了产生稀疏代码,主要优势是ReLUs缓解了消失的梯度问题(Hochreiter, 1998;Hochreiteret al .)。值得注意的是,ReLUs是非负的,因此,它的平均激活值大于零。并且ReLU更容易学习优化。因为其分段线性性质,导致其前传,后传,求导都是分段线性。而传统的sigmoid函数,由于两端饱和,在传播过程中容易丢弃信息。
early stop
Lasso回归/L2正则化
https://blog.csdn.net/xholes/article/details/78461164
NMT Tutorial 3扩展c. 神经网络的初始化 | Tingxun’s Blog (txshi-mt.com)
Xavier 初始化是一种在训练深度学习模型时常用的权重初始化方法。它是 Xavier Glorot 和 Yoshua Bengio 在 2010 年提出的,原文为 Understanding the difficulty of training deep feedforward neural networks。
该初始化方法旨在保持激活函数的方差在前向传播和反向传播过程中大致相同,从而避免梯度消失或梯度爆炸的问题。
考虑一个简单的全连接层,该层接受 个输入并产生 个输出。每个输出 可以表示为:
如果输入 的方差为 ,则线性函数的方差将是 (忽略偏执和激活函数)。
Xavier 初始化试图使得每一层的输出的方差接近于其输入的方差。具体地,它取权重 的初始方差为:
这样无论如何,这一层的输出方差都接近于其输入方差。
当然考虑到偏置与激活函数,实际上所取的初始方差会更为复杂,需要一些推导,此处不做赘述了。
正如诸多参考资料指出的那样,xavier初始化只适用于关于0对称、呈线性的激活函数,比如 sigmoid
、tanh
、softsign
等。
而对于ReLU激活函数,可以采用 Kaiming 初始化、He 初始化,或 采用 Batch Normalization。
训练深层神经网络是⼗分困难的,特别是在较短的时间内使他们收敛更加棘⼿。而2015年提出的 批量归一化(Batch Normalization,BN)成为了⼀种流行且有效的技术,可持续加速深层⽹络的收敛速度。
批量归一化一般应⽤于单个可选层(也可以应用到所有层),其原理如下:
在每次训练迭代中,我们是总览一个批次 内的所有样本进行归一化,即通过减去其均值并除以其标准差,之后再调整适当的⽐例系数和⽐例偏移。
值得注意的是,这里的均值和标准差计算的是同一个特征不同样本数据之间的均值和标准差。
注意,如果我们尝试使⽤大小为 的小量应⽤批量归一化,我们将无法学到任何东西。这是因为在减去均值之后,每个隐藏单元将为0。
通常,我们将批量归一化层置于全连接层中的仿射变换和激活函数之间。如下式所示:
对于卷积层,我们可以在卷积层之后和⾮线性激活函数之前批量归一化。当卷积有多个输出通道时,我们需要对这些通道的“每个”输出都分别进行归一化,每个通道都有⾃⼰的拉伸(scale)和偏移(shift)参数(即)。
具体来说,我们对第 个特征图 中,处于 这个位置的像素点的值需要和该批次中所有落在这个位置的 个像素点进行统一的处理。
所以,一个批次就要对 个数据进行处理,归一化 次。其中 分别表示该特征图的高和宽。
在训练过程中,我们⽆法得知使⽤整个数据集来估计平均值和⽅差,所以只能根据每个⼩批次的平均值和⽅差不断训练模型。
⽽在预测模式下,可以根据整个数据集精确计算批量规范化所需的平均值。
因为我们的模型是经过 BN 层训练得到参数的,所以预测时也应该对预测样本的数据进行归一化(否则结果就不对了)。而此时的均值和方差可以利用训练集的全体样本来计算而不再是批量样本。