【深度学习与神经网络】【一】学习笔记

本文介绍了线性回归的基本概念,展示了如何用Python进行房价预测,并详细讲解了感知机模型,包括其工作原理和多层感知机(MLP)的结构及其在Python中的实现。同时,讨论了过拟合问题及其解决方案,如Dropout和Xavier初始化。
摘要由CSDN通过智能技术生成

一、线性回归

定义:利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法
要素:训练集x,输出数据y,模型为
在这里插入图片描述
假设给定样本在这里插入图片描述

构造代价(误差、损失函数):

在这里插入图片描述
目标:找到超平面参数在这里插入图片描述使在这里插入图片描述最小,则求解为:在这里插入图片描述即可得到在这里插入图片描述
对房屋价格与面积之间的关系进行建模和预测的例子如下:

import numpy as np
from sklearn.linear_model import LinearRegression
# 输入数据
X = np.array([[1000], [1500], [2000], [2500], [3000]])  # 房屋面积
y = np.array([300000, 400000, 500000, 600000, 700000])  # 房屋价格
# 创建线性回归模型
model = LinearRegression()
# 拟合数据
model.fit(X, y)
# 打印模型参数
print("截距 (intercept):", model.intercept_)  
print("斜率 (slope):", model.coef_[0])       
# 使用模型进行预测
new_area = np.array([[2000]])  # 新房屋的面积
predicted_price = model.predict(new_area)
print("预测的价格:", predicted_price[0])

二、感知机模型

感知机是一种简单的人工神经网络模型,最早由Frank Rosenblatt在1957年提出。它是一种二分类模型,用于将输入向量划分为两个类别之一。感知机模型由输入、权重、偏置和输出层组成。

感知机的训练过程是通过调整权重和偏置来实现的。通常使用感知机学习算法来最小化误分类点的数量,并使模型能够正确地分类输入数据。

感知机从输入到输出的模型如下:
在这里插入图片描述
对于样本在这里插入图片描述,注意到如果样本正确分类,则有在这里插入图片描述
因此可定义损失函数如下:
在这里插入图片描述
我们需要找到超平面参数w∗,满足:
在这里插入图片描述
权值更新公式:
在这里插入图片描述

尽管感知机模型最初只能解决线性可分问题,但通过堆叠多个感知机以及使用非线性激活函数,可以构建更复杂的模型,如多层感知机(MLP),以解决非线性分类和回归问题,它是一种常见的人工神经网络(Artificial Neural Network,ANN)架构,用于解决分类和回归问题。它由多个神经元层组成,每个神经元层与前一层完全连接(称为全连接或密集连接)。MLP通常由输入层、若干隐藏层和输出层组成。

以下是多层感知机的一些关键特点和组成部分:

  • 输入层(Input Layer):接收输入特征,并将它们传递给下一层。每个输入特征都与输入层中的一个神经元相对应。
  • 隐藏层(Hidden Layers):位于输入层和输出层之间的层称为隐藏层。每个隐藏层由多个神经元组成。隐藏层的存在使得MLP能够学习非线性关系。
  • 输出层(Output Layer):输出层产生模型的最终输出。对于分类问题,输出层通常具有与类别数量相等的神经元,并使用激活函数(如softmax)将神经元的输出转换为概率分布。对于回归问题,输出层通常只有一个神经元,它输出连续值。
  • 激活函数(Activation Function):隐藏层和输出层中的每个神经元通常都应用一个非线性的激活函数,如ReLU(Rectified Linear Unit)、sigmoid或tanh。这些激活函数使得网络能够学习复杂的模式。
  • 前向传播(Forward Propagation):在前向传播过程中,输入特征从输入层经过隐藏层传递到输出层,最终产生预测结果。
  • 反向传播(Backpropagation):使用反向传播算法来更新神经网络的权重,以最小化损失函数。反向传播通过计算损失函数对每个权重的梯度,然后利用梯度下降或其变体来更新权重。

以下是使用Python和PyTorch库实现一个简单的多层感知机(MLP)的示例代码:

import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
# 定义一个简单的多层感知机模型
class MLP(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(MLP, self).__init__()
        self.fc1 = nn.Linear(input_size, hidden_size)  # 第一个全连接层
        self.relu = nn.ReLU()                          # 激活函数
        self.fc2 = nn.Linear(hidden_size, output_size) # 第二个全连接层
    def forward(self, x):
        out = self.fc1(x)
        out = self.relu(out)
        out = self.fc2(out)
        return out
# 设置随机种子以便结果可重复
torch.manual_seed(0)
# 输入数据和标签
X = torch.tensor([[0,0], [0,1], [1,0], [1,1]], dtype=torch.float32)
y = torch.tensor([[0], [1], [1], [0]], dtype=torch.float32)
# 实例化模型
input_size = 2
hidden_size = 4
output_size = 1
model = MLP(input_size, hidden_size, output_size)
# 定义损失函数和优化器
criterion = nn.MSELoss()  # 均方误差损失函数
optimizer = optim.SGD(model.parameters(), lr=0.1)  # 随机梯度下降优化器
# 训练模型
num_epochs = 10000
for epoch in range(num_epochs):
    outputs = model(X)
    loss = criterion(outputs, y)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    if (epoch+1) % 1000 == 0:
        print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))
# 测试模型
with torch.no_grad():
    outputs = model(X)
    predicted = (outputs > 0.5).float()
    print('预测结果:', predicted.numpy())

三、性能优化

在模型训练时经常遭遇过拟合问题,过拟合是指机器学习模型在训练数据上表现很好,但在未见过的新数据上表现较差的现象。这种情况通常发生在模型过度学习了训练数据的特征和噪声,导致模型对训练数据过度拟合,而忽略了普遍性和泛化能力。
为防止过拟合和权值震荡,加入新的指标函数项:

在这里插入图片描述
第二项约束了权值不能过大。在梯度下降时,导数容易计算:在这里插入图片描述
Dropout(暂退):一种处理过拟合的方式。在整个训练过程的每一次迭代中,标准暂退法包括在计算下
一层之前将当前层中的一些节点置零。
在这里插入图片描述
Xavier初始化:为了使得网络中信息更好的流动,每一层输出的方差应该尽量相等。因此需要实现下面的均匀分布:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值