目录
三、LSTM(Long Short-Term Memory)
欢迎参考我之前的文章:
【AI】人工智能复兴的推进器之机器学习-CSDN博客(腾讯云社区收录)
一、神经网络的定义
神经网络是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)的结构和功能的数学模型或计算模型,用于对函数进行估计或近似。神经网络由大量节点(或神经元)相互关联构成,每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重,这可以看作人工神经元的记忆。网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。
此外,根据网络的结构和运行方式,神经网络可以分为前馈神经网络和反馈神经网络。前馈神经网络中,当前层的输入只依赖于前一层的节点输出,与更早的网络输出状态无关。而在反馈神经网络中,输出会被一步时移再接入到输入层,输入不仅仅取决于上一层节点的输出。
二、神经网络的发展
神经网络的发展路径可以大致分为以下几个阶段:
2.1 初创期
- 1943年,心理学家Warren McCulloch和数学家Walter Pitts提出了MP模型,这是第一个用数理语言描述脑功能的神经元网络模型,标志着神经网络研究的开始。
- 1949年,心理学家Donald Hebb提出了Hebb学习规则,为神经网络的学习算法奠定了基础。
2.2 低潮期
在1969年,人工智能的创始人Marvin Minsky和Seymour Papert出版了《Perceptrons》一书,指出简单的线性感知机无法解决异或等线性不可分问题,这一论断使神经网络的研究陷入了近20年的低潮期。
当然,尽管Minsky和Papert的论断对神经网络的研究造成了负面影响,但他们的批评也促使了神经网络研究的深入思考和改进。在随后的年代里,一些研究人员开始探索多层感知器(MLP)和其他更复杂的神经网络结构,以克服简单感知器的局限性。这些努力为神经网络的复兴奠定了基础。
在低潮期间,仍然有一些重要的工作在进行。例如,1972年,芬兰的Kohonen T.教授提出了自组织神经网络SOM(Self-Organizing feature map),这是一种无导师学习网络,主要用于模式识别、语音识别及分类问题。这种学习训练方式可以在不知道有哪些分类类型存在时,用作提取分类信息的一种训练。SOM网络为后来的神经网络发展提供了重要的思路和方法。
2.3 复兴期
- 1982年,美国物理学家John Hopfield提出了Hopfield网络模型,引入了“计算能量”的概念,给出了网络稳定性判据,为神经网络的复兴奠定了基础。
- 1986年,David Rumelhart和James McClelland等人提出了BP(Back Propagation)算法,即反向传播算法,解决了多层神经网络的学习问题,使得神经网络的训练变得更加有效。
2.4 深度学习期
- 2006年,Hinton等人提出了深度学习的概念,通过逐层预训练的方式解决了深度神经网络难以训练的问题,开启了深度学习的时代。
- 随着计算机硬件的发展,尤其是GPU的出现,使得大规模神经网络的训练成为可能,深度学习开始广泛应用于各个领域。
神经网络已经在图像识别、语音识别、自然语言处理等领域取得了显著的成果。未来,随着硬件设备的进一步发展以及算法的不断优化,神经网络将会在更多的领域发挥更大的作用。同时,对于神经网络的解释性、可解释性以及安全性等方面的研究也将成为未来的重要方向。
此外,LSTM也是不得不提及的信息点。
LSTM是一种特殊的RNN(循环神经网络),由Hochreiter和Schmidhuber在1997年提出,并在后续工作中得到了许多人的改进和推广。它是为了解决一般RNN存在的长期依赖问题而专门设计的。传统的RNN在处理长序列数据时可能会遇到梯度消失或梯度爆炸的问题,使得模型无法有效地学习长期依赖关系。相比之下,LSTM通过引入记忆单元和门控机制,能够有选择地保留重要信息并遗忘不重要的信息,从而有效地学习并处理长序列数据中的长期依赖关系。
LSTM在许多应用中都表现出色,尤其是那些需要处理时间序列数据或具有长期依赖关系的任务,如语音识别、文本生成、机器翻译等。它的成功也推动了其他类似变体的发展,如GRU(门控循环单元)等。
三、LSTM(Long Short-Term Memory)
还是要把LSTM单独阐述一下。LSTM,在神经网络知识体系中具有重要的地位,它是一种特殊类型的RNN(循环神经网络),被设计用来解决长期依赖问题。以下是LSTM在神经网络知识体系中的几个重要方面:
- 解决长期依赖问题:传统的RNN在处理长序列数据时可能会遇到梯度消失或梯度爆炸的问题,使得模型无法有效地学习长期依赖关系。LSTM通过引入记忆单元和门控机制,能够有选择地保留重要信息并遗忘不重要的信息,从而有效地学习并处理长序列数据中的长期依赖关系。
- 推动循环神经网络的发展:LSTM的成功推动了循环神经网络领域的发展,并启发了其他类似变体的发展,如GRU(门控循环单元)等。这些变体在保持LSTM的核心思想的同时,对结构和计算进行了优化,进一步提高了模型的性能。
- 广泛的应用领域:LSTM在许多应用中都表现出色,尤其是那些需要处理时间序列数据或具有长期依赖关系的任务,如语音识别、文本生成、机器翻译等。它的成功应用证明了其在处理复杂序列数据方面的有效性。
- 为深度学习奠定基础:随着深度学习的发展,LSTM等循环神经网络结构成为了深度学习模型的重要组成部分。它们与其他深度学习技术(如卷积神经网络、自编码器等)相结合,构建出更加强大和复杂的深度学习模型,进一步推动了人工智能领域的发展。
具体包括什么内容呢,LSTM通过引入“单元状态”和三个门控机制:输入门、遗忘门和输出门,LSTM能够选择性地保留或遗忘信息,从而有效地学习并处理长序列数据中的长期依赖关系。
- 单元状态(Cell State)。单元状态是LSTM中的核心部分,它负责信息的传递。与RNN中的隐藏状态不同,单元状态在LSTM中是相对稳定的,它可以在序列中长时间传递信息而不受到太大的干扰。单元状态就像一个传送带,它贯穿于整个链条,使得信息可以在序列的起始位置一直传递到序列的结束位置。这种机制使得LSTM能够有效地处理长期依赖关系。
- 输入门(Input Gate)。输入门负责决定哪些新信息会被加入到单元状态中。它接收当前的输入和前一个隐藏状态作为输入,通过sigmoid函数计算出一个0到1之间的值,这个值表示新信息的保留程度。同时,输入门还通过一个tanh函数计算出一个新的候选值,这个候选值表示新信息的具体内容。然后,输入门将sigmoid函数的输出与tanh函数的输出相乘,得到的结果就是实际加入到单元状态中的新信息。
- 遗忘门(Forget Gate)。遗忘门负责决定哪些旧信息会被从单元状态中遗忘。它同样接收当前的输入和前一个隐藏状态作为输入,通过sigmoid函数计算出一个0到1之间的值,这个值表示旧信息的保留程度。然后,遗忘门将这个值与上一个时刻的单元状态相乘,得到的结果就是实际保留的旧信息。通过遗忘门,LSTM能够选择性地遗忘不重要的信息,从而避免信息的冗余和干扰。
- 输出门(Output Gate)。输出门负责决定哪些信息会被输出到隐藏状态中。它首先通过sigmoid函数计算出一个0到1之间的值,这个值表示信息的输出程度。然后,输出门将这个值与经过tanh函数处理的单元状态相乘,得到的结果就是实际输出的隐藏状态。通过输出门,LSTM能够选择性地输出重要的信息,从而提供给下一层的网络使用。
LSTM通过引入单元状态和三个门控机制,有效地解决了RNN在处理长序列数据时遇到的长期依赖问题。这种设计使得LSTM能够在许多任务中表现出色,尤其是那些需要处理时间序列数据或具有长期依赖关系的任务。
四、2个经典模型的案例
下面我将介绍两种非常流行的神经网络模型,并提供用Python实现的简单代码片段,以帮助您快速理解神经网络。
4.1 多层感知器(MLP)
多层感知器是一种前馈神经网络,由多个全连接层组成。它是最简单的神经网络形式之一,适用于各种分类和回归任务。
下面是一个使用Python和Keras库实现多层感知器的示例代码:
from keras.models import Sequential
from keras.layers import Dense
# 定义模型结构
model = Sequential()
model.add(Dense(16, input_dim=10, activation='relu')) # 输入层,10个输入神经元,16个隐藏神经元
model.add(Dense(8, activation='relu')) # 隐藏层,8个神经元
model.add(Dense(1, activation='sigmoid')) # 输出层,1个输出神经元
# 编译模型
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# 训练模型(这里仅作示例,实际训练需要使用真实数据)
# X_train, y_train = ... # 训练数据和标签
# model.fit(X_train, y_train, epochs=10, batch_size=32)
4.2 卷积神经网络(CNN)
卷积神经网络是一种专门用于处理图像数据的神经网络。它通过卷积层和池化层来提取图像的特征,并使用全连接层进行分类或回归。
下面是一个使用Python和Keras库实现卷积神经网络的示例代码:
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
# 定义模型结构
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(64, 64, 3))) # 卷积层,32个卷积核,大小为3x3
model.add(MaxPooling2D((2, 2))) # 池化层,2x2的池化窗口
model.add(Flatten()) # 扁平化层,将二维特征图转换为一维向量
model.add(Dense(128, activation='relu')) # 全连接层,128个神经元
model.add(Dense(10, activation='softmax')) # 输出层,10个输出神经元(假设有10个类别)
# 编译模型
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# 训练模型(这里仅作示例,实际训练需要使用真实数据)
# X_train, y_train = ... # 训练数据和标签(注意输入数据的维度要与模型的输入匹配)
# model.fit(X_train, y_train, epochs=10, batch_size=32)
这些代码片段只是神经网络的简单示例,实际的神经网络可能会更加复杂,包括更多的层和更复杂的结构。但是通过这些示例,您可以了解神经网络的基本构建块和训练过程。