神经网络,通俗解释就是可以模拟人脑的神经网络以及能够实现人工智能的一种机器学习技术。常见的神经网络模型有Hopfield网络、BP神经网络、Kohonen网络和ART网络。今天笔者先给大家介绍一下什么是前馈神经网络和递归神经网络。
前馈神经网络(Feedforward Neural Network)和递归神经网络(Recurrent Neural Network)是两种常见的神经网络模型,它们之间存在一些关键区别。
前馈神经网络是一种最基本的神经网络模型,也称为多层感知机(Multilayer Perceptron,MLP)。它的信息流只能从输入层经过一系列隐藏层传递到输出层,不存在环路或循环结构。每一层的节点只与前一层的节点相连接,没有反馈连接。前馈神经网络主要用于处理静态输入数据,如图像分类、文本分类等任务。
递归神经网络则允许信息在网络中形成环路或循环结构。它引入了记忆单元(Memory Cell)和状态反馈(State Feedback),能够处理序列数据和时序关系。在递归神经网络中,隐藏层的输出会被传递给下一个时间步骤的输入,使网络可以记忆之前的信息和处理时间依赖的数据。递归神经网络广泛应用于自然语言处理、语音识别、时间序列预测等任务。
接下来,笔者使用Python代码演示前馈神经网络和递归神经网络的基本结构和使用方法。
先来看前馈神经网络代码示例:
import numpy as np
# 定义前馈神经网络类
class FeedforwardNeuralNetwork:
def __init__(self, input_size, hidden_size, output_size):
self.W1 = np.random.randn(input_size, hidden_size) # 输入层到隐藏层的权重
self.W2 = np.random.randn(hidden_size, output_size) # 隐藏层到输出层的权重
def forward(self, X):
self.z2 = np.dot(X, self.W1) # 隐藏层输入
self.a2 = self.sigmoid(self.z2) # 隐藏层激活值
self.z3 = np.dot(self.a2, self.W2) # 输出层输入
y_hat = self.sigmoid(self.z3) # 输出层预测值
return y_hat
def sigmoid(self, z):
return 1 / (1 + np.exp(-z))
# 创建前馈神经网络实例
input_size = 2
hidden_size = 3
output_size = 1
nn = FeedforwardNeuralNetwork(input_size, hidden_size, output_size)
# 输入数据
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
# 目标输出
y = np.array([[0], [1], [1], [0]])
# 前向传播
y_hat = nn.forward(X)
print("预测结果:")
print(y_hat)
递归神经网络在深度学习框架中使用更为广泛,下面是一个使用PyTorch实现的递归神经网络(LSTM)的代码示例:
import torch
import torch.nn as nn
# 定义递归神经网络类
class RecurrentNeuralNetwork(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(RecurrentNeuralNetwork, self).__init__()
self.hidden_size = hidden_size
self.lstm = nn.LSTM(input_size, hidden_size) # LSTM层
self.fc = nn.Linear(hidden_size, output_size) # 全连接层
def forward(self, X):
_, (hn, _) = self.lstm(X) # LSTM层输出
out = self.fc(hn[-1]) # 最后一个时间步骤的隐藏状态传递给全连接层
return out
# 创建递归神经网络实例
input_size = 2
hidden_size = 3
output_size = 1
rnn = RecurrentNeuralNetwork(input_size, hidden_size, output_size)
# 输入数据
X = torch.tensor([[[0, 0], [0, 1], [1, 0], [1, 1]]], dtype=torch.float32)
# 目标输出
y = torch.tensor([[0, 1, 1, 0]], dtype=torch.float32)
# 前向传播
y_hat = rnn(X)
print("预测结果:")
print(y_hat)
在上述示例中,我们使用了PyTorch的nn.LSTM模块来定义LSTM层,并使用nn.Linear定义全连接层。然后,我们定义了递归神经网络类,继承自nn.Module,并实现了forward方法进行前向传播。最后,我们创建了递归神经网络的实例,输入数据X和目标输出y,并通过调用实例的forward方法得到预测结果y_hat。
在实际的工作中,我们可以根据具体的任务和数据进行适当的修改和扩展。