Understanding dropout:Training Multi-Layer Perceptrons with Auxiliary Independent Stochastic Neurons

本文提出一种向多层感知器中加入辅助随机神经元的通用方法,扩展了dropout技术,允许对不同隐藏神经元或层使用不同下降概率。通过实证研究,发现这种方法可以提高模型的泛化能力。

《Understanding dropout:Training Multi-Layer Perceptrons with Auxiliary Independent Stochastic Neurons》 笔记

摘要:本文提出了一种向多层感知器中加入辅助随机神经元的简单通用方法。
在提出的框架下,对dropout进行了扩展,允许对不同的隐藏神经元或层使用不同的下降概率。分别对隐层下降概率的使用进行了实证研究。

3 dropout是一种正则化技术,当训练MLP时,它会迫使每一层中随机选择的一半隐藏神经元的激活为零。就像我们提出的加入辅助随机神经元训练一个带dropout的MLP的方法一样,只改变了正向计算,而保留了误差的反向传播。

训练时:
让我们考虑一个使用直线隐藏神经元的MLP。那么,学习带dropout相当于训练一个带辅助随机神经元的MLP,每个辅助随机神经元都服从均值p = 0.5的伯努利分布。我们将辅助随机神经元与隐神经元连接的边的权值u[l] j固定为负无穷。h[l] j的表达式:
在这里插入图片描述
这相当于在训练MLP时使用dropout。

这个过程适用于任何隐藏的神经元,它的激活函数在负无穷范围内收敛于零。逻辑s型激活函数就是这样一个例子。对于其他类型的激活函数,则需要其他方法来固定隐藏神经元与其相应的辅助神经元之间的连接强度。

测试时:

当一个MLP使用dropout程序进行训练时,Hinton提出的dropout将输出的权重减半,以补偿训练阶段丢失的大约一半的隐藏神经元。通过一个温和的近似,这个将输出权值减半的过程 对应于 计算输出神经元对辅助随机神经元的预激活。
如果我们对输出神经元的期望进行线性近似,我们可以将期望算子一直推到每个隐藏神经元h[l] j激活的评估。由于h[l] j的激活概率降为0,概率为0.5。
在这里插入图片描述
很明显,这相当于将输出重量减半。
如果输出神经元是线性的,并且只有一层隐藏的神经元,那么不需要进行线性逼近,计算期望就变得精确了。
将输出权值减半的过程,看作取多个共享参数的神经网络的几何平均值的过程,使近似的非线性隐藏层的数量增加。
**如果每个隐藏神经元的激活函数可以很好地线性逼近,这个将输出权值减半的过程是很近似的。**这有两个潜在的后果。将dropout应用于激活函数(可能不是很近似的线性)下的隐藏神经元,例如max-pooling,将不会很好地工作。
第二,分段线性激活函数,如修正的线性函数,很适合使用dropout。
通过这个公式,我们可以通过去掉每个隐藏项来扩展原来的dropout神经元的概率是p而不是0.5。在这种情况下,在测试时间,外向重量将乘以1 - p。此外,这允许我们使用不同的滴隐藏神经元的概率。

4 去噪自编码器

一个DAE可以由一个普通的自动编码器通过添加一个附加的来构造在输入和第一隐藏层之间的隐藏层。附加层有as许多隐藏的神经元作为输入变量的数量。Each 隐藏 神经元 i 连接第i个输入分量xi的权值为1,并有一个辅助随机变量神经元ri服从标准正态分布。

一旦训练结束,可以使用学过的参数它们是未经显式添加而训练的普通自动编码器的参数噪音。

5 实验
本文的重点是解释最近提出的各种培训方案在此框架下,加入辅助随机神经元。我们可以藉由瞭解找出一些现有方案的潜在有用的扩展从这个新的角度来看。其中之一是对dropout by的使用进行了扩展对隐藏的神经元使用不同的下降概率,另一种方法是注入白色高斯噪声对隐藏神经元的影响。
从这些初步实验中得到的一个重要教训是,通过仔细调整辅助随机神经元来获得更好的泛化性能是可能的。
这相当于,在退出的情况下选择不同的下降概率和注入不同水平的高斯噪声。然而,需要使用各种体系结构和数据集进行更深入的研究。

6 结论

在这篇论文中,我们描述了在多层感知机(MLP)中添加辅助随机神经元的一般方法。这个过程有效地使隐藏的神经元在一个MLP随机中,但不需要任何改变标准的反向传播算法,这是通常用来训练一个MLP。

该方法是对最近提出的几种训练方案的推广。例如,dropout被发现是一种特殊的情况,它具有依赖于输入信号的连接强度的二元辅助神经元的特性。一种向输入神经元显式注入噪声的方法,例如用于去噪的自动编码器被发现是一个明显的应用,提出使用辅助随机神经元遵循标准正态分布。此外,我们还发现了一种激活瓶颈层中隐藏神经元的方法。

然而,这篇文章并没有试图解释为什么,例如,dropout有助于获得更好的泛化性能。

通过对该框架下的drop - out方法的理解,我们发现了另一个扩展,它允许对每个隐藏层使用单独的drop概率。同样,我们观察到,在提出的框架下,也可以在每个隐层注入高斯白噪声,而不是只在输入端注入。
实验结果表明,在不同隐层的情况下,采用不同的丢包概率,并在h中加入高斯白噪声,可以获得较好的泛化性能

### Multi-Layer Perceptron (MLP) Definition and Implementation A **Multi-Layer Perceptron (MLP)** is a class of feedforward artificial neural networks. It consists of at least three layers of nodes: an input layer, a hidden layer (or multiple hidden layers), and an output layer. Each node in one layer connects to all nodes in the next layer, making it a fully connected or dense network. The MLP uses non-linear activation functions, such as ReLU or sigmoid, which allow the model to learn complex patterns in data. In practice, MLPs are trained using backpropagation and optimization algorithms like stochastic gradient descent (SGD) or Adam. They are widely used for tasks such as classification, regression, and feature learning. The architecture can be defined as follows: - **Input Layer**: Accepts the raw data features. - **Hidden Layers**: Intermediate layers that perform computations using weights and biases, followed by activation functions. - **Output Layer**: Produces the final prediction or classification result. Each neuron in a hidden layer computes a weighted sum of its inputs, adds a bias term, and applies an activation function to introduce non-linearity [^1]. Here is a basic implementation of an MLP using Python and PyTorch: ```python import torch import torch.nn as nn import torch.optim as optim # Define the MLP architecture class MLP(nn.Module): def __init__(self, input_size, hidden_size, output_size): super(MLP, self).__init__() self.layers = nn.Sequential( nn.Linear(input_size, hidden_size), nn.ReLU(), nn.Linear(hidden_size, output_size) ) def forward(self, x): return self.layers(x) # Example usage input_size = 10 # Number of input features hidden_size = 50 # Number of neurons in the hidden layer output_size = 2 # Number of classes or outputs model = MLP(input_size, hidden_size, output_size) # Define loss function and optimizer criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001) # Dummy input for demonstration inputs = torch.randn(3, input_size) targets = torch.tensor([0, 1, 0]) # Example labels # Forward pass outputs = model(inputs) loss = criterion(outputs, targets) # Backward pass and optimization optimizer.zero_grad() loss.backward() optimizer.step() print(f'Loss after one step: {loss.item()}') ``` This example demonstrates how to define an MLP with one hidden layer, train it on a small dataset, and perform a single optimization step. In real-world applications, you would iterate over many epochs, include validation steps, and possibly add more layers or regularization techniques like dropout to prevent overfitting.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值