神经网络的发展历史
前言
神经网络是一种模拟人脑神经系统的计算模型,它由大量的人工神经元组成,并通过连接权值调整实现模型的学习和预测。神经网络的发展经历了几个关键的阶段,本文将介绍神经网络的发展历史,并通过代码示例来说明神经网络的基本原理。
早期的神经网络模型
早期的神经网络模型主要受到生物学中神经元的启发。在1943年,心理学家McCulloch和数学家Pitts提出了一种基于二进制逻辑的神经元模型,即McCulloch-Pitts模型。该模型将神经元表示为一个二进制开关,通过输入和权值的运算来产生输出。
def mcculloch_pitts(inputs, weights):
threshold = 0
weighted_sum = sum([x * w for x, w in zip(inputs, weights)])
output = 1 if weighted_sum > threshold else 0
return output
感知机模型的提出
感知机模型是神经网络发展的重要里程碑之一。在1957年,心理学家Rosenblatt提出了感知机模型,它是一种基于线性分类的神经网络模型。感知机接收多个输入,并通过权值和激活函数的计算来产生输出。
def perceptron(inputs, weights, activation_func):
weighted_sum = sum([x * w for x, w in zip(inputs, weights)])
output = activation_func(weighted_sum)
return output
多层感知机和反向传播算法
1969年,Minsky和Papert发现感知机模型无法解决非线性可分问题,这也导致了神经网络的研究陷入低谷。直到1986年,Rumelhart、Hinton和Williams等人提出了多层感知机(Multi-Layer Perceptron,MLP)以及反向传播算法(Backpropagation),神经网络的研究才重新兴起。
多层感知机是一种具有至少一个隐藏层的神经网络模型,它通过多个神经元层的连接和权值调整来实现复杂的非线性映射。
import numpy as np
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def feed_forward(inputs, weights, biases):
hidden_layer = sigmoid(np.dot(inputs, weights[0]) + biases[0])
output = sigmoid(np.dot(hidden_layer, weights[1]) + biases[1])
return output
inputs = np.array([0.5, 0.3, 0.9])
weights = [np.array([[0.2, 0.4, 0.1], [0.3, 0.6, 0.8], [0.5, 0.7, 0.9]]),
np.array([[0.1], [0.3], [0.5]])]
biases = [np.array([0.5, 0.2, 0.1]), np.array([0.8])]
output = feed_forward(inputs, weights, biases)
print(output)
深度学习的崛起
在2006年,Hinton等人提出了深度学习中的关键技术之一,即深度信念网络(Deep Belief Networks,DBN)。DBN是一种多层堆叠的限制玻尔兹曼机(Restricted Boltzmann Machine,RBM)的神经网络模型,通过无监督预训练和有监督微调来提高模型的性能。
import torch
import torch.nn as nn
class DeepBeliefNetwork(nn.Module):
def __init__(self, input_dim, hidden_dims, output_dim):
super(DeepBeliefNetwork, self).__init__()
self.layers = nn.ModuleList()
prev_dim = input_dim
for i, hidden_dim in enumerate(hidden_dims):
self.layers.append(nn.Linear(prev_dim, hidden_dim))
self.layers.append(nn.Sigmoid())
prev_dim = hidden_dim
self.layers.append(nn.Linear(prev_dim, output_dim))
self.layers.append