VPICK 头像

从零构建神经网络——理解感知机到前馈神经网络

摘要

本文从最简单的感知机模型讲起,逐步构建一个完整的前馈神经网络,介绍其结构、前向传播与反向传播的机制,并以 Python 实现为例,引导读者构建自己的神经网络理解基础。

引言

神经网络作为深度学习的基础,其核心思想便是模仿人脑神经元之间的连接,通过层与层之间的传递与调整,不断优化学习任务的结果。本文将从感知机开始讲解,逐步引导到复杂的前馈神经网络。

感知机模型

感知机是最早提出的神经网络模型之一,它是一个简单的二分类模型,通过线性分类器实现数据的分割。感知机模型的核心是一个线性方程:

        y = w1 * x1 + w2 * x2 + ... + wn * xn + b
      

其中,x 是输入特征,w 是权重,b 是偏置项,y 是输出。感知机的学习过程是调整权重和偏置,使得模型输出结果与目标值尽可能接近。

前馈神经网络

前馈神经网络(Feedforward Neural Network,简称 FNN)是多层感知机(MLP)的扩展。它由输入层、隐藏层和输出层组成,每一层的节点与前一层和后一层的节点都有连接。

前馈神经网络的工作原理是将输入数据通过一系列的激活函数进行计算,并通过反向传播算法调整权重和偏置,使得输出值尽量接近实际值。

前向传播与反向传播

在前馈神经网络中,前向传播是指输入数据从输入层经过隐藏层,最终输出到输出层的过程。而反向传播则是根据输出结果与实际目标的误差,通过梯度下降优化模型的权重。

反向传播的核心是计算损失函数的梯度,并利用梯度下降法更新模型参数。常用的损失函数包括均方误差(MSE)和交叉熵损失(Cross-Entropy)等。

Python实现

以下是一个简单的前馈神经网络的 Python 实现:

        import numpy as np

        # 激活函数
        def sigmoid(x):
            return 1 / (1 + np.exp(-x))

        def sigmoid_derivative(x):
            return x * (1 - x)

        # 训练数据
        inputs = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
        outputs = np.array([[0], [1], [1], [0]])

        # 随机初始化权重
        weights = np.random.rand(2, 1)
        bias = np.random.rand(1)

        # 训练
        for epoch in range(10000):
            # 前向传播
            z = np.dot(inputs, weights) + bias
            predictions = sigmoid(z)

            # 计算误差
            error = outputs - predictions

            # 反向传播
            d_predictions = error * sigmoid_derivative(predictions)
            weights += np.dot(inputs.T, d_predictions)
            bias += np.sum(d_predictions)
        
        print("训练后的预测结果:")
        print(predictions)