Jupyter AI

10 神经网络基础:神经网络的基本结构

📅 发表日期: 2024年8月10日

分类: 🔥PyTorch 入门

👁️阅读: --

在前一篇教程中,我们探讨了torch.autograd如何实现自动求导,这是构建深度学习模型所必不可少的工具。今天,我们将继续深入学习神经网络的基础知识,特别是神经网络的基本结构

神经网络的基本组成

一个神经网络的基本结构通常由以下几个主要部分组成:

  1. 输入层(Input Layer):接收原始数据。
  2. 隐藏层(Hidden Layer):进行特征转换,可以有一个或多个隐藏层。
  3. 输出层(Output Layer):输出最终结果。
  4. 权重和偏置(Weights and Biases):每个连接都有一个权重,而每个神经元有一个偏置。

神经元的基本计算

一个单独的神经元的计算可以被表示为以下公式:

y=f(wx+b)y = f(w \cdot x + b)

其中:

  • yy 是神经元的输出。
  • ff 是激活函数,常用的有ReLUSigmoidTanh等。
  • ww 是权重向量。
  • xx 是输入向量。
  • bb 是偏置。

这个计算通过对输入进行线性变换,然后应用激活函数,将非线性引入模型中。

激活函数

激活函数的选择对神经网络的性能有很大影响。以下是几种常用的激活函数:

  • ReLU(Rectified Linear Unit)f(x)=max(0,x)f(x) = \max(0, x)。适用于深度神经网络,因为它能够解决梯度消失问题。
  • Sigmoidf(x)=11+exf(x) = \frac{1}{1 + e^{-x}}。常用于二分类任务,但在深层网络中可能导致梯度消失。
  • Tanhf(x)=tanh(x)f(x) = \tanh(x)。输出范围在[1,1][-1, 1]之间,也能解决部分梯度消失问题。

网络结构示例

假设我们想要构建一个简单的全连接神经网络(Feedforward Neural Network),其结构可以用如下方式理解:

输入层(数据) → 隐藏层(特征提取) → 输出层(预测结果)

例如,一个简单的结构包括:

  • 输入层:有10个神经元(假设每个神经元对应一个特征)。
  • 隐藏层:有5个神经元,可以使用ReLU激活函数。
  • 输出层:有1个神经元,用于二分类任务,可以使用Sigmoid激活函数。

代码示例

下面是如何用PyTorch定义一个简单的神经网络结构的示例代码:

import torch
import torch.nn as nn

class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.fc1 = nn.Linear(10, 5)  # 输入层到隐藏层
        self.fc2 = nn.Linear(5, 1)  # 隐藏层到输出层
        self.relu = nn.ReLU()  # 使用ReLU激活函数
        self.sigmoid = nn.Sigmoid()  # 使用Sigmoid激活函数

    def forward(self, x):
        x = self.fc1(x)  # 前向传播到隐藏层
        x = self.relu(x)  # 激活
        x = self.fc2(x)  # 前向传播到输出层
        x = self.sigmoid(x)  # 激活
        return x

# 创建一个神经网络实例
model = SimpleNN()
print(model)

在这个示例中,我们定义了一个名为SimpleNN的神经网络,它包含1个输入层,1个隐藏层和1个输出层。forward方法是网络的前向传播过程,它定义了输入数据如何通过网络进行传递。

总结

在本篇中,我们讲解了神经网络的基本结构,包括输入层、隐藏层、输出层及其对应的计算公式。我们还探讨了激活函数的选择及其作用,并通过一个简单的PyTorch代码示例展示了如何实现一个基本的神经网络。

接下来,我们将会学习如何定义模型的具体细节,这会帮助我们更深入地理解如何构建和训练神经网络。