AI 基础知识(2) ---- 神经网络原理

神经网络基础

神经网络是一种可以模仿人脑处理信息方式的计算模型,它由很多相互连接的节点(神经元)组成,这些节点按照层次排列
神经网络的强大之处在于其能够自动从大量数据中学习复杂的模式和特征,无需人工设计特征提取器

神经元(Neuron)

神经元是神经网络的基本单元, 它接收输入信号, 通过加权求和和偏置相加, 最后通过激活函数产生输出
神经元的权重偏置是神经网络学习过程中需要调整的参数

  • 输入:输入是网络的起点, 可以是特征数据, 比如图像的像素值和文本的词向量
  • 输出:输出是网络的终点, 表示模型的预测结果, 比如分类任务重的类别标签

神经元接收多个输入(例如: x1,x2,x3… xn), 如果输入的加权和大于激活阈值(activeation potential), 则产生二进制输出

neuron

层(layer)

输入层和输出层之间的被称为隐藏层,层和层之间的连接密度和类型构成了网络的配置
神经网络由多个层组成:

  • 输入层(Input Layer): 接收原始输入数据
  • 输出层(Output Layer): 产生多个输出结果
  • 隐藏层(Hidden Layer): 对输入数据进行处理, 可以有多个隐藏层

neuron_netwotk

激活函数

激活函数决定了神经元是否应该被激活,它们是非线性函数,使得神经网络能够学习和执行复杂的任务
常见的激活函数包括:

  • Sigmoid: 用于二分类问题,输出值在 0 和 1 之间
  • Tanh: 输出值在 -1 和 1 之间,常用于输出层之前
  • ReLU(Rectified Linear Unit): 目前流行的激活函数,定义为 f(x) = max(0,x), 有助于解决梯度消失问题
  • Softmax: 常用于多分类的输出层,将输出转换为概率分布

损失函数(loss function)

损失函数用于衡量模型的预测值与真实值之间的差异
常见的损失函数包括:

  • 均方误差(MSELoss): 回归问题常用,计算输出和目标值的平方差
  • 交叉熵损失(CrossEntropyLoss): 分类问题常用,计算输出和真实标签之前的交叉熵
  • BCEWithLogitsLoss: 二分类问题,结合了 Sigmoid 激活和二元交叉熵损失

优化器(Optimizer)

优化器负责在训练过程中更新网络的权重和偏置:
常见的优化器包括:

  • SGD (随机梯度下降)
  • Adam (自适应矩估计)
  • RMSprop (均方根传播)

训练过程(Training Process)

训练神经网络的步骤如下:

  1. 准备数据: 通过 DataLoader 加载数据
  2. 定义损失函数和优化器
  3. 前向传播: 计算模型的输出
  4. 计算损失: 通过和目标比较,得到损失值
  5. 反向传播: 通过 loss.backward() 计算梯度
  6. 更新参数: 通过 optimize.step() 更新模型的参数
  7. 重复上述步骤

测试和评估

  1. 计算测试集的损失: 测试模型在没见过数据上的表现
  2. 计算准确率: 对于分类问题,计算正确预测的比例
神经网络的类型
  1. 前馈神经网络(Feedforward Netural Networks)
    数据单向流动, 从输入层到输出层, 无反馈连接

  2. 卷积神经网络(Convolutional Netural Networks, CNN)
    适用于图像处理, 使用卷积层提取空间特征

  3. 循环神经网络(REcurrent Netural Networks, RNN)
    适用于序列数据, 如时间序列分析和自然语言处理, 允许信息反馈循环

  4. 长短期记忆网络(Long short-Term Memory, LSTM)
    一种特殊的 RNN, 能够学习长期依赖关系

数据集的加载

为了高效地处理数据, PyTorch 提供了强大的工具, 包括 torch.utils.data.Datasettorch.utils.data.DataLoader, 帮助我们管理数据集、批量加载和数据增强等任务

自定义 Dataset: 通过继承 torch.utils.data.Dataset 来加载自己的数据集
DataLoader: DataLoader 按批次加载数据, 支持多线程加载并进行数据打乱
数据预处理与增强: 使用 torchvison.transfroms 进行常见的图像预处理和增强操作, 提高模型的泛化能力
加载标准数据集: torchvision.datasets 提供了许多常见的数据集, 简化了数据加载过程
多个数据源: 通过组合多个 Dataset 实例来处理来自不同来源的数据

自定义数据集

torch.utils.data.Dataset 是一个抽象类, 允许你从自己的数据源中创建数据集
我们需要继承该类并实现以下两个方法:

len(self): 返回数据集中的样本数量
getitem(self, idx): 通过索引返回一个样本

使用 DataLoader 加载数据

DataLoaderPyTorch 提供的一个重要工具, 用于从 Dataset 中按批次(batch)加载数据
DataLoader 允许我们批量读取数据并进行多线程加载, 从而提高训练效率

预处理和数据增强

数据预处理和增强对于提高模型的性能至关重要
PyTorch 提供了 torchvision.transforms 模块来进行常见的图像预处理和增强操作, 如旋转、裁剪、归一化等

加载图像数据集

对于图像数据集, torchvision.datasets 提供了许多常见数据集(如 CIFAR-10ImageNetMNIST 等)以及用于加载图像数据的工具

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值