您现在的位置是:首页 >学无止境 >统计学习方法第二章——感知机网站首页学无止境
统计学习方法第二章——感知机
x.1 前言
perceptron感知机是二分类的线性分类模型,输入为实例的特征向量,输出为实例类别(取-1,+1)。perceptron旨在求出将训练数据进行线性划分的分离超平面,属于classification判别模型,策略为基于误分类的损失函数,算法为梯度下降算法。
perceptron由Rosenblatt于1957年提出,是神经网络与SVM支持向量机的基础。
为了方便理解,下面每讲一个统计学习方法都是根据统计学习三要素进行切入点:模型,策略,算法。
x.2 模型
preceptron意在将正负类别分开,若特征空间R的维度为n,则分离超平面的维度空间为n-1。
x.3 策略
首先定义N-1维超平面wx+b=0。
定义x_0到超平面的距离。
写出所有误分类点到超平面的距离。
得到损失函数为2.4中所示:
x.4 算法
perceptron模型中的未知参数为w和b,为了计算得到w和b,即求解最小化Loss损失函数的参数w和b
我们使用梯度下降算法来更新参数。
batch gradient descent一次性使用所有训练集进行梯度计算和参数更新,但是计算量大。
stochastic gradient descent(SGD)随机选取一个误分类点对w,b进行参数更新。
于是综合上面的方法诞生出mini-batch gradient descent随机选取小批量个误分类点对w,b进行参数更新。
x.4.1 SGD和BGD和miniBGD区别
在PyTorch框架中,SGD代表随机梯度下降法,与批量梯度下降法(Batch Gradient Descent)是不同的。
在批量梯度下降法中,我们使用整个训练集计算梯度并更新模型参数。而在随机梯度下降法中,每次仅随机选择一个样本计算梯度并更新参数。随机梯度下降法通常具有更快的收敛速度,但由于每个样本的梯度估计都是不准确的,因此可能会导致噪声较大的更新。
PyTorch中的SGD优化器是一种基于随机梯度下降的优化算法。它不同于Batch Gradient Descent,因为它每次只计算一个样本的梯度。但是,为了减少噪声和提高稳定性,通常会在计算梯度时选择一小批样本(即mini-batch),然后对这些样本的梯度进行平均,最后更新模型参数。
下面是一个简单的PyTorch代码示例,演示如何使用SGD优化器进行训练:
import torch
import torch.optim as optim
# 定义模型
model = torch.nn.Linear(10, 1)
# 定义损失函数
criterion = torch.nn.MSELoss()
# 定义优化器
optimizer = optim.SGD(model.parameters(), lr=0.01)
# 训练模型
for epoch in range(num_epochs):
for inputs, targets in data_loader:
# 前向传播
outputs = model(inputs)
loss = criterion(outputs, targets)
# 反向传播并更新参数
optimizer.zero_grad()
loss.backward()
optimizer.step()
在这个示例中,我们使用SGD优化器来优化一个线性模型,并在训练循环中使用mini-batch。在每个迭代中,我们随机从数据集中选择一个mini-batch,计算损失和梯度,并更新模型参数。
x.5 算法收敛性
当训练数据集线性可分的时候,perceptron是收敛的。perceptron算法存在许多解,这些解依赖于初值的选择,迭代过程中误分类点的选择顺序。
x.6 感知机学习算法的对偶形式
了解即可,即误分类点被误分类n次,则乘以次数n用于更新参数w,b。