请用Python代码实现一个简单的递归神经网络（RNN），要求代码简洁明了，并加上详细的注释
user
```python
# 定义一个简单的递归神经网络（RNN）

import numpy as np

class SimpleRNN:
    def __init__(self, input_size, hidden_size, output_size):
        """
        初始化RNN层
        :param input_size: 输入的特征数量
        :param hidden_size: 隐藏层的神经元数量
        :param output_size: 输出的特征数量
        """
        # 权重矩阵和偏置项的初始化
        self.Wxh = np.random.randn(hidden_size, input_size) * 0.01  # 输入到隐藏层的权重
        self.Whh = np.random.randn(hidden_size, hidden_size) * 0.01  # 隐藏层到隐藏层的权重
        self.Why = np.random.randn(output_size, hidden_size) * 0.01  # 隐藏层到输出层的权重
        self.bh = np.zeros((hidden_size, 1))  # 隐藏层的偏置
        self.by = np.zeros((output_size, 1))  # 输出层的偏置

    def forward(self, inputs):
        """
        前向传播过程
        :param inputs: 输入序列，形状为 (input_size, 1)
        :return: 输出序列和最后一个时间步的隐藏状态
        """
        h = np.zeros((self.Whh.shape[0], 1))  # 初始化隐藏状态为零
        outputs = []

        # 遍历输入序列的每个时间步
        for x in inputs:
            x = x.reshape(-1, 1)  # 确保输入是列向量
            h = np.tanh(np.dot(self.Wxh, x) + np.dot(self.Whh, h) + self.bh)  # 更新隐藏状态
            y = np.dot(self.Why, h) + self.by  # 计算输出
            outputs.append(y)

        return outputs, h

    def loss(self, outputs, targets):
        """
        计算损失函数（均方误差）
        :param outputs: 模型的输出序列
        :param targets: 目标序列
        :return: 总的损失值
        """
        loss = 0
        for output, target in zip(outputs, targets):
            loss += np.sum((output - target) ** 2)  # 计算每个时间步的均方误差
        return loss / len(outputs)

# 示例使用
if __name__ == "__main__":
    input_size = 3  # 输入特征的数量
    hidden_size = 5  # 隐藏层神经元的数量
    output_size = 2  # 输出的特征数量

    rnn = SimpleRNN(input_size, hidden_size, output_size)

    # 假设有输入序列和目标序列
    inputs = [np.random.randn(input_size, 1) for _ in range(10)]  # 10个时间步的输入序列
    targets = [np.random.randn(output_size, 1) for _ in range(10)]  # 10个时间步的目标序列

    # 前向传播
    outputs, last_hidden = rnn.forward(inputs)

    # 计算损失
    loss = rnn.loss(outputs, targets)
    print(f"Loss: {loss}")
```
assistant