📜  人工神经网络-构建块(1)

📅  最后修改于: 2023-12-03 15:21:45.230000             🧑  作者: Mango

人工神经网络-构建块

人工神经网络是一种模拟生物神经网络的计算模型,由多个节点(神经元)之间相互连接而成。这些神经元通过加权输入,传递信号并产生输出。神经元之间的连接称为权重,权重可以调整以优化网络的性能。本文将介绍人工神经网络中的构建块,包括:

  1. 神经元
  2. 激活函数
  3. 损失函数
神经元

神经元是神经网络的基本单元。它接收来自其他神经元的输入,并根据一些特定的规则产生输出。一个神经元通常包括以下部分:

  • 输入:神经元可以接收来自其他神经元的输入,每个输入都有一个对应的权重。
  • 加权和:输入和权重相乘后求和,得到神经元的加权和。
  • 激活函数:将加权和转换为输出的函数,常见的激活函数包括sigmoid、ReLU等。
  • 输出:激活函数的输出即为神经元的输出。

以下是一个简单的神经元的示例代码片段:

class Neuron:
    def __init__(self, input_size):
        # 初始化权重和偏置
        self.weights = np.random.randn(input_size)
        self.bias = np.random.randn()

    def forward(self, inputs):
        # 计算加权和
        total = np.dot(inputs, self.weights) + self.bias
        # 应用激活函数
        output = sigmoid(total)
        return output

层是神经网络中的一组神经元。在输入层中,每个节点对应一个特征。在输出层中,每个节点对应一个类别。在隐藏层中,每个节点将多个输入映射为一个输出。以下是一些常见的层类型:

  • 全连接层:每个神经元都与上一层的所有神经元相连。
  • 卷积层:用于图像处理,在输入上进行滑动窗口卷积运算。
  • 池化层:用于降低特征图大小的层。

以下是一个简单的全连接层的示例代码片段:

class FullyConnectedLayer:
    def __init__(self, input_size, output_size):
        # 初始化权重和偏置
        self.weights = np.random.randn(input_size, output_size)
        self.bias = np.random.randn(output_size)

    def forward(self, inputs):
        # 计算加权和
        total = np.dot(inputs, self.weights) + self.bias
        # 应用激活函数
        output = sigmoid(total)
        return output
激活函数

激活函数是神经元的非线性转换函数,用于在神经元之间传递信息。常见的激活函数包括sigmoid、ReLU、tanh等。以下是一些常见的激活函数的图形示例:

激活函数

以下是一个简单的sigmoid激活函数的示例代码片段:

def sigmoid(x):
    return 1 / (1 + np.exp(-x))
损失函数

损失函数是神经网络中的一个重要指标,用于表示网络预测与真实标签的差距。损失函数的值越小,说明预测结果越接近真实标签。常见的损失函数包括均方误差(MSE)、交叉熵(Cross Entropy)等。以下是一些常见的损失函数的公式:

  • 均方误差:$$MSE = \frac{1}{n} \sum_{i=1}^{n}(y_i - \hat{y_i})^2$$
  • 交叉熵:$$CrossEntropy = -\frac{1}{n} \sum_{i=1}^{n}(y_i * log(\hat{y_i}) + (1 - y_i) * log(1 - \hat{y_i}))$$

以下是一个简单的均方误差损失函数的示例代码片段:

def mse_loss(y_true, y_pred):
    diff = y_true - y_pred
    return np.mean(diff**2)

以上就是人工神经网络的构建块介绍,程序员可以根据自己的需求使用这些构建块来构建自己的神经网络模型。