时间序列中的前馈神经网络 (Feed-Forward Neural Network) 详细解释及举例

时间序列中的前馈神经网络 (Feed-Forward Neural Network) 详细解释及举例

前馈神经网络 (Feed-Forward Neural Network, FFNN) 是Transformer模型中的一个重要组成部分,它用于对自注意力层的输出进行进一步的非线性变换。FFNN通过两个线性变换和一个非线性激活函数(通常是ReLU)来增强模型的表达能力。

工作原理

在这里插入图片描述

举例说明

假设我们有一个时间序列输入 ( X ),自注意力层的输出形状为 ( (4, 3) ),即序列长度为4,每个时间步有3个特征。

输入数据
import numpy as np

# 自注意力机制的输出(示例)
X = np.array([[0.5, 0.6, 0.7], [0.8, 0.9, 1.0], [1.1, 1.2, 1.3], [1.4, 1.5, 1.6]])
第一层线性变换

假设前馈神经网络的隐藏层维度 ( dff = 6 ):

# 初始权重和偏置
W1 = np.random.rand(3, 6)
b1 = np.random.rand(6)

# 第一层线性变换
X_ff1 = np.dot(X, W1) + b1
非线性激活函数

应用ReLU激活函数:

# ReLU激活函数
def relu(x):
    return np.maximum(0, x)

X_relu = relu(X_ff1)
第二层线性变换

将特征维度还原到原始维度 ( dff= 3 ):

# 初始权重和偏置
W2 = np.random.rand(6, 3)
b2 = np.random.rand(3)

# 第二层线性变换
X_ff2 = np.dot(X_relu, W2) + b2
完整代码示例
import numpy as np

# 自注意力机制的输出(示例)
X = np.array([[0.5, 0.6, 0.7], [0.8, 0.9, 1.0], [1.1, 1.2, 1.3], [1.4, 1.5, 1.6]])

# 初始权重和偏置
W1 = np.random.rand(3, 6)
b1 = np.random.rand(6)
W2 = np.random.rand(6, 3)
b2 = np.random.rand(3)

# 第一层线性变换
X_ff1 = np.dot(X, W1) + b1

# ReLU激活函数
def relu(x):
    return np.maximum(0, x)

X_relu = relu(X_ff1)

# 第二层线性变换
X_ff2 = np.dot(X_relu, W2) + b2

print("Input X:\n", X)
print("First Layer Output (X_ff1):\n", X_ff1)
print("ReLU Activation Output (X_relu):\n", X_relu)
print("Second Layer Output (X_ff2):\n", X_ff2)

输出解释

  • Input X: 自注意力机制的输出。
  • First Layer Output (X_ff1): 第一层线性变换的输出,维度从3增加到6。
  • ReLU Activation Output (X_relu): 应用ReLU激活函数后的输出。
  • Second Layer Output (X_ff2): 第二层线性变换的输出,维度还原到3。

通过前馈神经网络的两次线性变换和一次非线性激活函数,可以对输入进行非线性变换,增强模型的表达能力,捕捉更复杂的特征。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值