目录
一、神经网络的定义
二、神经网络的发展
2.1 初创期
2.2 低潮期
2.3 复兴期
2.4 深度学习期
三、LSTM(Long Short-Term Memory)
四、2个经典模型的案例
4.1 多层感知器(MLP)
4.2 卷积神经网络(CNN)
欢迎参考我之前的文章:
【AI】人工智能复兴的推进器之自然语言处理-CSDN博客
【AI】人工智能复兴的推进器之机器学习-CSDN博客(腾讯云社区收录)
神经网络是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)的结构和功能的数学模型或计算模型,用于对函数进行估计或近似。神经网络由大量节点(或神经元)相互关联构成,每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重,这可以看作人工神经元的记忆。网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。
此外,根据网络的结构和运行方式,神经网络可以分为前馈神经网络和反馈神经网络。前馈神经网络中,当前层的输入只依赖于前一层的节点输出,与更早的网络输出状态无关。而在反馈神经网络中,输出会被一步时移再接入到输入层,输入不仅仅取决于上一层节点的输出。
神经网络的发展路径可以大致分为以下几个阶段:
在1969年,人工智能的创始人Marvin Minsky和Seymour Papert出版了《Perceptrons》一书,指出简单的线性感知机无法解决异或等线性不可分问题,这一论断使神经网络的研究陷入了近20年的低潮期。
当然,尽管Minsky和Papert的论断对神经网络的研究造成了负面影响,但他们的批评也促使了神经网络研究的深入思考和改进。在随后的年代里,一些研究人员开始探索多层感知器(MLP)和其他更复杂的神经网络结构,以克服简单感知器的局限性。这些努力为神经网络的复兴奠定了基础。
在低潮期间,仍然有一些重要的工作在进行。例如,1972年,芬兰的Kohonen T.教授提出了自组织神经网络SOM(Self-Organizing feature map),这是一种无导师学习网络,主要用于模式识别、语音识别及分类问题。这种学习训练方式可以在不知道有哪些分类类型存在时,用作提取分类信息的一种训练。SOM网络为后来的神经网络发展提供了重要的思路和方法。
神经网络已经在图像识别、语音识别、自然语言处理等领域取得了显著的成果。未来,随着硬件设备的进一步发展以及算法的不断优化,神经网络将会在更多的领域发挥更大的作用。同时,对于神经网络的解释性、可解释性以及安全性等方面的研究也将成为未来的重要方向。
此外,LSTM也是不得不提及的信息点。
LSTM是一种特殊的RNN(循环神经网络),由Hochreiter和Schmidhuber在1997年提出,并在后续工作中得到了许多人的改进和推广。它是为了解决一般RNN存在的长期依赖问题而专门设计的。传统的RNN在处理长序列数据时可能会遇到梯度消失或梯度爆炸的问题,使得模型无法有效地学习长期依赖关系。相比之下,LSTM通过引入记忆单元和门控机制,能够有选择地保留重要信息并遗忘不重要的信息,从而有效地学习并处理长序列数据中的长期依赖关系。
LSTM在许多应用中都表现出色,尤其是那些需要处理时间序列数据或具有长期依赖关系的任务,如语音识别、文本生成、机器翻译等。它的成功也推动了其他类似变体的发展,如GRU(门控循环单元)等。
还是要把LSTM单独阐述一下。LSTM,在神经网络知识体系中具有重要的地位,它是一种特殊类型的RNN(循环神经网络),被设计用来解决长期依赖问题。以下是LSTM在神经网络知识体系中的几个重要方面:
具体包括什么内容呢,LSTM通过引入“单元状态”和三个门控机制:输入门、遗忘门和输出门,LSTM能够选择性地保留或遗忘信息,从而有效地学习并处理长序列数据中的长期依赖关系。
LSTM通过引入单元状态和三个门控机制,有效地解决了RNN在处理长序列数据时遇到的长期依赖问题。这种设计使得LSTM能够在许多任务中表现出色,尤其是那些需要处理时间序列数据或具有长期依赖关系的任务。
下面我将介绍两种非常流行的神经网络模型,并提供用Python实现的简单代码片段,以帮助您快速理解神经网络。
多层感知器是一种前馈神经网络,由多个全连接层组成。它是最简单的神经网络形式之一,适用于各种分类和回归任务。
下面是一个使用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)
卷积神经网络是一种专门用于处理图像数据的神经网络。它通过卷积层和池化层来提取图像的特征,并使用全连接层进行分类或回归。
下面是一个使用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)
这些代码片段只是神经网络的简单示例,实际的神经网络可能会更加复杂,包括更多的层和更复杂的结构。但是通过这些示例,您可以了解神经网络的基本构建块和训练过程。