为什么要分batch来学习?

Batch_size参数的作用:

决定了下降的方向。

极端一:

batch_size为全数据集(Full Batch Learning):

好处:

1.由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。

2.由于不同权重的梯度值差别巨大,因此选择一个全局的学习率很困难。Full Batch Learning可以使用Rprop只基于梯度符号并且针对性单独更新各权值。

坏处:

1.随着数据集的海量增长和内存限制,一次性载入所有的数据进来变得越来越不可行。

2.以Rprop的方式迭代,会由于各个Batch之间的采样差异性,各次梯度修正值相互抵消,无法修正。

极端二:

Batch_size=1:

Batch_size=1,也就是每次只训练一个样本。这就是在线学习(Online Learning)。

线性神经元在均方误差代价函数的错误面是一个抛物面,横截面是椭圆。

对于多层神经元,非线性网络,在局部依然近似是抛物面。使用在线学习,每次修正方向以各自样本的梯度方向修正,难以达到收敛。

.

如何选择适中的Batch_size值:

也就是批梯度下降法。因为如果数据集足够充分,那么用一半,甚至少得多的数据训练算出来的梯度与用全部数据训练出来的梯度几乎是一样的。

在合理范围内,增大Batch_size的好处:

1.提高了内存利用率以及大矩阵乘法的并行化效率。

2.减少了跑完

### 数据批的原因 在机器学习和深度学习中,将数据为批次进行训练可以有效提高计算资源利用率并改善模型性能。具体来说: #### 提高内存利用效率 一次性加载整个数据集可能会超出计算机的内存容量,尤其是在处理大型数据集时。通过批处理数据,每次只加载一部样本进入内存,从而降低了对硬件的要求[^1]。 #### 改善梯度估计稳定性 当采用批量更新参数的方式时,能够获得更稳定的梯度方向。相比于逐个样本来调整权重,在一个小批量内累积误差再做平均化处理能减少噪声干扰,使得收敛更加平滑稳定[^2]。 #### 加速训练过程 现代GPU擅长于执行矩阵运算,而这些设备对于大规模并行操作有着极高的效能表现。如果一次仅传递少量甚至单一实例,则无法充利用其强大的算力;相反地,适当大小的数据批次可以让显卡发挥最佳性能,进而加快整体训练进度[^3]。 ```python import torch from torch.utils.data import DataLoader, TensorDataset # 假设有如下特征X和标签y组成的简单数据集 features = torch.randn(1000, 5) # 1000 samples with 5 features each labels = (torch.rand(1000) > 0.5).float()[:, None] dataset = TensorDataset(features, labels) # 创建DataLoader对象用于迭代获取mini-batches,默认shuffle=True表示打乱顺序 dataloader = DataLoader(dataset, batch_size=64, shuffle=True) for i_batch, sample_batched in enumerate(dataloader): print(f'Batch {i_batch}:') X_batch, y_batch = sample_batched # 这里可以放置前向传播、反向传播以及优化步骤... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值