感知机:人工神经网络的起点

It all started with a Perceptron
perceptron
artificial neural network
machine learning
deep learning
Author
Published

Monday, December 16, 2024

感知机的诞生:人工神经网络的起点

1958年,弗兰克·罗森布拉特(Frank Rosenblatt)在康奈尔大学航空实验室提出了感知机,这是第一个模拟人脑神经元功能的算法模型。感知机的设计灵感来自人脑的神经元连接方式,目标是通过数学模型模仿人类学习的过程

核心思想

感知机的基本功能是进行线性分类。它通过将输入值加权求和后与阈值比较,来决定输出属于哪个类别。简单来说,感知机的输出是一个二元值(如 0 或 1 ),用来表示输入数据所属的类别。

数学模型

感知机基于以下公式:

\[ y = f\left(\sum_{i=1}^{n} w_i x_i + b\right) \]

感知机的局限性:XOR 问题的挑战

尽管感知机在某些任务中表现良好,但其能力受到线性可分性限制。1969年,著名的《Perceptrons》一书由马文·明斯基(Marvin Minsky)和西摩·帕珀特(Seymour Papert)撰写,他们指出感知机无法解决非线性可分的问题,例如XOR问题。感知机只能通过一条直线分割两个类别的数据点。当数据分布无法用一条直线区分(如 XOR 问题),感知机便无能为力。这一挑战让研究者认识到,单层感知机无法胜任复杂任务,需要更复杂的多层结构来解决。

class Perceptron:
    def __init__(self, input_size, learning_rate=0.01, epochs=1000):
        # Initialize weights to zeros, with one extra weight for the bias
        self.weights = np.zeros(input_size + 1)  # +1 for the bias
        self.learning_rate = learning_rate  # Learning rate controls weight updates
        self.epochs = epochs  # Number of iterations over the training data

    def activation_function(self, x):
        # Apply step function: return 1 if x >= 0, else return 0
        return 1 if x >= 0 else 0

    def predict(self, x):
        # Compute the weighted sum (dot product), including bias
        z = self.weights.T.dot(np.insert(x, 0, 1))  # Insert bias term into input
        return self.activation_function(z)

    def train(self, X, y):
        for _ in range(self.epochs):
            for xi, target in zip(X, y):
                prediction = self.predict(xi)
                error = target - prediction
                update = self.learning_rate * error
                
                self.weights[1:] += update * xi 
                self.weights[0] += update

# Training data (XOR logic)
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([0, 1, 1, 0])

多层感知机(MLP)的出现:突破局限

为了克服单层感知机的局限性,研究者提出了多层感知机(Multi-Layer Perceptron, MLP)。它通过引入隐藏层和非线性激活函数(如 sigmoid 函数),实现了对复杂数据的学习能力。1986 年,David Rumelhart等人提出了反向传播(Backpropagation)算法,这使得训练多层感知机变得可行。该算法通过梯度下降更新权重,优化了模型性能。此外,隐藏层中的非线性激活函数打破了单层感知机的线性限制,使模型能够处理复杂的非线性关系。

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Input
from tensorflow.keras.optimizers import Adam
class MLPerceptron:
    def __init__(self, input_size, learning_rate=0.05, epochs=2000):
        self.input_size = input_size
        self.learning_rate = learning_rate
        self.epochs = epochs
        self.model = Sequential()
        self.model.add(Input((input_size,)))  
        self.model.add(Dense(2, activation="tanh", ))  
        self.model.add(Dense(1, activation="sigmoid")) 
        self.model.compile(
            loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"]
        )

    def train(self, X, y):
        self.model.fit(X, y, epochs=self.epochs, verbose=0)

    def predict(self, x):
        prediction = self.model.predict(np.array([x]))
        return 1 if prediction >= 0.5 else 0  

感知机的现代继承者

虽然感知机本身不再是当前人工智能的核心技术,但它为后续技术的发展奠定了重要基础。现代深度学习模型(如卷积神经网络、循环神经网络)可以被视为感知机的扩展和进化。多层感知机推动了深度神经网络的研究热潮,尤其是在 2010 年代 GPU 计算力提升后,深度学习应用于图像识别、自然语言处理等领域。感知机的提出使得研究者开始探索机器如何学习这一基本问题,也激发了人工智能领域的快速发展。

感知机的意义与启示

感知机的历史体现了技术发展的非线性特性:早期的技术突破可能因为局限性而受到批评,但它们却是后续更复杂技术的基石。感知机虽然简单,但它的概念推动了我们对人类学习过程和计算机模拟的理解。虽然感知机的局限曾导致人工智能研究进入低谷期(AI冬天),但最终多层感知机证明了它的价值。