神经网络(Neural Network,NN)

什么是神经网络?

人工神经网络(artificial neural network,ANN),简称神经网络(neural network,NN)或类神经网络,是机器学习的子集,同时也是深度学习算法的核心。是一种模仿生物神经网络的结构和功能的数学模型或计算模型,用于对函数进行估计或近似。

人工神经网络 (ANN) 由节点层组成,包含一个输入层、一个或多个隐藏层和一个输出层。 每个节点也称为一个人工神经元,它们连接到另一个节点,具有相关的权重和阈值。 如果任何单个节点的输出高于指定的阈值,那么会激活该节点,并将数据发送到网络的下一层。 否则,不会将数据传递到网络的下一层。

ANN.png

神经网络依靠训练数据来学习,并随时间推移提高自身准确性。 而一旦这些学习算法经过了调优,提高了准确性,它们就会成为计算机科学和人工智能领域的强大工具,使我们能够快速对数据进行分类和聚类。与由人类专家进行的人工识别相比,语音识别或图像识别任务可能只需要几分钟而不是数小时。

神经网络与神经元

一个神经元通常具有多个树突,主要用来接受传入信息;而轴突只有一条,轴突尾端有许多轴突末梢可以给其他多个神经元传递信息。轴突末梢跟其他神经元的树突产生连接,从而传递信号。这个连接的位置在生物学上叫做“突触”。
sjy.jpg

神经网络的最基本的构成元素是神经元(Neuron),也就是Kohonen的定义中的简单单元。如果某个神经元接收了足够多的神经递质(乙酰胆碱),那么其点位变会积累地足够高,从而超过某个阈值(Threshold)。超过这个阈值之后,这个神经元变会被激活,达到兴奋的状态,而后发送神经递质给其他的神经元。

一个简单的神经元模型如下图所示:

5_QE7YRNE1JF7ER0.png

数学公式表示为:

image.png

一个神经元的功能是求得输入向量与权向量的内积后,经一个非线性传递函数得到一个标量结果。

神经网络的类型

神经网络是一种广泛应用于机器学习和深度学习领域的算法模型,它有多种类型,每种类型具有不同的结构和应用。以下是一些常见的神经网络类型:

  • 前馈神经网络(Feedforward Neural Network):前馈神经网络是最基本的神经网络类型,信息在网络中单向传递,没有循环连接。它由输入层、若干个隐藏层和输出层组成,用于解决分类和回归问题。

  • 卷积神经网络(Convolutional Neural Network,CNN):卷积神经网络主要应用于图像和视觉任务,通过卷积层和池化层来提取图像特征。CNN能够有效处理空间结构的数据,并在图像分类、目标检测和图像生成等任务中表现出色。

  • 循环神经网络(Recurrent Neural Network,RNN):循环神经网络是一类具有循环连接的神经网络,主要用于处理序列数据,如自然语言处理、语音识别等。RNN具有记忆能力,可以捕捉序列中的上下文信息。

  • 长短时记忆网络(Long Short-Term Memory,LSTM):LSTM是一种特殊类型的循环神经网络,用于解决传统RNN中的梯度消失和梯度爆炸问题。它具有更好的长期依赖性建模能力,广泛应用于序列建模任务。

  • 生成对抗网络(Generative Adversarial Network,GAN):生成对抗网络由生成器和判别器组成,通过对抗训练的方式学习生成逼真的数据样本。GAN在图像生成、图像修复和文本生成等领域取得了显著的成果。

  • 自编码器(Autoencoder):自编码器是一种无监督学习的神经网络,用于数据的压缩和特征提取。它包含一个编码器和一个解码器,通过最小化重构误差来学习输入数据的低维表示。

以上仅列举了一些常见的神经网络类型,实际上还有许多其他变体和扩展,例如残差网络(Residual Network,ResNet)、变分自编码器(Variational Autoencoder,VAE)等。选择适合特定任务的神经网络类型需要根据问题的性质和数据的特点进行评估和决策。

人工神经网络如何运作

人工神经网络是一种受到生物神经系统启发的计算模型,它由大量的人工神经元(也称为节点或单元)组成,并通过连接权重来模拟神经元之间的相互作用。下面是一个房屋价格预测的示例:

ML Visuals.png

1. 将输入数据表示为特征向量

每个房屋可以由一个特征向量表示,其中每个特征对应一个影响因素的值。例如,假设我们有一个包含100个样本的数据集,每个样本的特征向量如下:

size  #bed  ZIP   Wealth
1500    3   12345   80000
2000    4   23456   90000
...

2. 定义神经网络的结构

假设我们选择一个具有一个或多个隐藏层的前馈神经网络。输入层的神经元数量取决于特征向量的维度(在这个例子中是4),输出层的神经元数量为1,因为我们要预测一个连续的房屋价格。

3. 初始化神经网络的权重和偏置项

这些参数是随机初始化的,然后通过训练过程进行优化。

4. 前向传播

我们将特征向量输入神经网络的输入层。每个神经元根据输入、权重和偏置项计算加权和,并将结果通过激活函数进行非线性变换。这样,信号逐层传递到输出层,最终得到一个连续的预测结果,表示该房屋的价格。

5. 衡量预测结果与真实房屋价格之间的差异

使用损失函数来衡量预测结果与真实房屋价格之间的差异例如,可以使用均方误差作为损失函数,以衡量预测值与真实值之间的差距。

6. 反向传播过程

我们计算损失函数对于网络中每个参数(权重和偏置项)的梯度。然后,使用梯度下降等优化算法,通过调整参数的值来最小化损失函数。这一过程将逐渐调整网络的参数,使网络能够更好地适应训练数据。

7. 重复进行前向传播和反向传播

重复进行前向传播和反向传播,直到达到预定的训练迭代次数或满足停止准则。在训练完成后,我们可以使用训练好的神经网络对新的房屋进行价格预测。

注意:为了训练和预测的准确性,可能需要对输入特征进行归一化或标准化处理,以便它们在相同的尺度范围内。

这是一个简单的示例,展示了神经网络在房屋价格预测问题中的运作过程。请注意,实际应用中可能会有更复杂的网络结构和更多的技术和技巧,以提高模型的性能和泛化能力。以下是一个使用Python编程语言和TensoFlow深度学习库来实现一个简单的神经网络进行房屋价格预测的示例代码:

import tensorflow as tf
import numpy as np

# 定义输入特征的维度
input_dim = 4

# 定义训练数据和标签
train_data = np.array([[1500, 3, 12345, 80000],
                       [2000, 4, 23456, 90000],
                       # 其他训练样本...
                       ], dtype=np.float32)
train_labels = np.array([[250000],
                         [300000],
                         # 其他训练标签...
                         ], dtype=np.float32)

# 创建模型
model = tf.keras.Sequential([
    tf.keras.layers.Dense(8, activation='relu', input_shape=(input_dim,)),  # 隐藏层
    tf.keras.layers.Dense(1)  # 输出层
])

# 定义损失函数和优化器
loss_fn = tf.keras.losses.MeanSquaredError()
optimizer = tf.keras.optimizers.SGD(learning_rate=0.01)

# 编译模型
model.compile(optimizer=optimizer, loss=loss_fn)

# 训练模型
num_epochs = 1000  # 训练迭代次数

model.fit(train_data, train_labels, epochs=num_epochs, verbose=0)

# 使用模型进行预测
test_data = np.array([[1800, 3, 23456, 85000],
                      [2200, 4, 34567, 95000],
                      # 其他测试样本...
                      ], dtype=np.float32)

predictions = model.predict(test_data)

# 打印预测结果
for i, pred in enumerate(predictions):
    print('Test sample {}: Predicted price: {:.2f}'.format(i+1, pred[0]))

神经网络的历史

神经网络的历史可以追溯到20世纪40年代和50年代。以下是神经网络发展的一些重要里程碑:

v2d08da478ac54d9735e7b3e67b4c76864_r.jpg

感知机模型(1957年)

由Frank Rosenblatt提出的感知机是最早的神经网络模型之一。它是一个基于神经元模型的二分类线性分类器,能够根据输入特征对样本进行分类。

多层感知机(1960年代-1970年代)

由于单层感知机的限制,Marvin Minsky和Seymour Papert在《Perceptrons》一书中指出了单层感知机的局限性。然而,在1980年代以前,由于计算能力和训练算法的限制,多层感知机的训练并不容易。

反向传播算法(1986年)

David Rumelhart、Geoffrey Hinton和Ronald Williams等人在1986年发表的论文中提出了反向传播算法,该算法使得多层感知机的训练成为可能。反向传播算法通过有效地计算梯度并将其传播回网络,可以根据训练数据调整网络的权重和偏置。

支持向量机(SVM)的兴起(1990年代)

在1990年代,支持向量机(SVM)成为了机器学习领域的热门方法。相对于神经网络,SVM具有更强的理论支持和较好的泛化能力,在一段时间内引起了广泛关注。

深度学习的复兴(2000年代以后)

随着计算能力的提升、数据量的增加和算法的改进,神经网络在2000年代以后经历了复兴。深度学习的兴起使得神经网络可以在更深的层次上建模,解决更复杂的问题。卷积神经网络(CNN)和循环神经网络(RNN)等变体被广泛应用于计算机视觉、自然语言处理和语音识别等领域,取得了许多突破性的成果。

深度学习的应用和发展(2010年代以后)

在2010年代以后,深度学习在各个领域取得了显著的进展。神经网络被广泛应用于图像识别、语音识别、自然语言处理、推荐系统等任务,并在很多方面超越了传统的机器学习方法。

总的来说,神经网络的发展经历了多个阶段,从最早的感知感机到多层感知机,再到反向传播算法的引入,这些里程碑都推动了神经网络的发展。而后,支持向量机的兴起暂时降低了神经网络的热度,但在2000年代以后,随着深度学习的复兴,神经网络再次成为主流。深度学习的发展使得神经网络可以构建更深层次的模型,解决更复杂的问题。

此外,大规模数据集的可用性和计算能力的提升也推动了神经网络的应用和发展。通过使用更多的数据来训练神经网络,可以提高模型的性能和泛化能力。同时,随着图形处理单元(GPU)和专用的神经网络加速器(如TPU)的出现,加速了神经网络的训练和推理过程。

现如今,神经网络已成为机器学习和人工智能领域最重要的技术之一。它在计算机视觉、自然语言处理、语音识别、推荐系统等领域取得了许多突破性的成果,并在许多实际应用中展现了强大的能力。随着技术的不断进步,神经网络的发展仍将持续,并为未来的人工智能提供更多的可能性。

猜你喜欢

转载自blog.csdn.net/qq_52730883/article/details/130886860
今日推荐