深入详解神经网络根本知识——理解前馈神经网络( FNN)、卷积神经网络(CN ...

打印 上一主题 下一主题

主题 691|帖子 691|积分 2073

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
深入详解神经网络根本知识

        深度学习作为人工智能(AI)的核心分支之一,比年来在各个领域取得了显著的结果。从图像识别、自然语言处置惩罚到主动驾驶,深度学习技术的应用无处不在。而深度学习的根本,神经网络,是理解和掌握这一强大工具的关键。本文将深入探讨神经网络的根本知识,包括前馈神经网络(Feedforward Neural Networks, FNN)、卷积神经网络(Convolutional Neural Networks, CNN)和循环神经网络(Recurrent Neural Networks, RNN)等,并通过详细的示例代码帮助读者更好地理解这些概念。

目次
深入详解神经网络根本知识
1. 引言
2. 神经网络概述
2.1 生物神经网络与人工神经网络
2.2 神经网络的基本构成
3. 前馈神经网络(FNN)
3.1 布局与原理
3.2 激活函数
3.3 损失函数
3.4 训练过程
3.5 示例代码
4. 卷积神经网络(CNN)
4.1 布局与原理
4.2 卷积层
4.3 池化层
4.4 常见架构
4.5 示例代码
5. 循环神经网络(RNN)
布局与原理
是非期记忆网络(LSTM)
门控循环单元(GRU)
应用场景
 示例代码
6. 深度学习的优化技术
正则化
批量归一化(Batch Normalization)
早停法(Early Stopping)
数据增强(Data Augmentation)
7. 实践中的神经网络设计
数据预处置惩罚
超参数调优
模型评估
8. 总结与预测
 9. 参考资料

1. 引言

        神经网络是深度学习的核心,通过模拟人脑的神经元毗连,实现对复杂数据的抽象和理解。自从Geoffrey Hinton等人在上世纪80年代提出反向流传算法以来,神经网络在计算本领增强和大数据时代的推动下,取得了飞速的发展。本文旨在为读者提供一个全面、深入的神经网络根本知识体系,涵盖前馈神经网络、卷积神经网络和循环神经网络,并辅以详细的示例代码。
2. 神经网络概述

2.1 生物神经网络与人工神经网络

        神经网络的灵感泉源于生物神经体系,特别是人脑的神经元布局。在生物神经网络中,数以亿计的神经元通过突触相互毗连,形成复杂的网络布局,实现信息通报和处置惩罚。人工神经网络(Artificial Neural Networks, ANN)则是对生物神经网络的简化和抽象,通过模拟神经元和突触的功能,构建可以或许举行学习和预测的计算模型。
2.2 神经网络的基本构成

一个典范的神经网络由以下几个基本构成部分构成:
   1. 神经元(Neurons):基本的计算单元,接受输入并产生输出。
2. 层(Layers):神经元的集合,通常包括输入层、隐藏层和输出层。
3. 权重(Weights):毗连神经元之间的参数,决定信息通报的强度。
4. 偏置(Bias):调整输出的参数,帮助模型更好地拟合数据。
5. 激活函数(Activation Functions):引入非线性,使网络可以或许学习复杂的模式。
6. 损失函数(Loss Functions):衡量模型预测与真实值之间的差异。
7. 优化器(Optimizers):用于调整网络参数,以最小化损失函数。
  
3. 前馈神经网络(FNN)

        前馈神经网络(Feedforward Neural Networks, FNN)是最基本的神经网络布局,信息在网络中单向流动,从输入层通过隐藏层通报到输出层,没有循环或反馈毗连。
3.1 布局与原理

FNN由多个层次构成:
   输入层(Input Layer):接收原始数据的特征向量。
隐藏层(Hidden Layers):一或多个层,举行特征的非线性变换。
输出层(Output Layer):产生最终的预测结果。
  每个神经元与上一层的所有神经元相毗连,权重和偏置决定了每个毗连的强度和输出位置。
3.2 激活函数

激活函数为神经网络引入非线性,使其可以或许拟合复杂的函数关系。常见的激活函数包括:
Sigmoid:
  \[
  \sigma(x) = \frac{1}{1 + e^{-x}}
  \]
  映射输入到(0,1)区间,适用于二分类题目的输出。
ReLU(Rectified Linear Unit)
  \[
  \text{ReLU}(x) = \max(0, x)
  \]
  简单高效,广泛应用于隐藏层。
Tanh(双曲正切):
  \[
  \tanh(x) = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}}
  \]
  映射输入到(-1,1)区间。
3.3 损失函数

损失函数用于衡量模型预测值与真实值之间的差异,常见的损失函数有:
   均方误差(Mean Squared Error, MSE):适用于回归题目。
交叉熵损失(Cross-Entropy Loss):适用于分类题目。
  3.4 训练过程

神经网络的训练过程重要包括前向流传和反向流传:
   1. 前向流传:数据从输入层经过隐藏层通报到输出层,计算输出值。
2. 损失计算:根据输出值与真实值计算损失。
3. 反向流传:根据损失对网络参数举行梯度计算。
4. 参数更新:使用优化器调整权重和偏置,以最小化损失。
  3.5 示例代码

以下是一个使用TensorFlow和Keras构建和训练前馈神经网络的示例,用于手写数字识别任务(MNIST数据集)。
  1. import tensorflow as tf
  2. from tensorflow.keras.models import Sequential
  3. from tensorflow.keras.layers import Dense, Flatten
  4. from tensorflow.keras.datasets import mnist
  5. from tensorflow.keras.utils import to_categorical
  6. # 加载MNIST数据集
  7. (x_train, y_train), (x_test, y_test) = mnist.load_data()
  8. # 数据预处理
  9. x_train = x_train.astype('float32') / 255.0  # 标准化
  10. x_test = x_test.astype('float32') / 255.0
  11. y_train = to_categorical(y_train, 10)       # 独热编码
  12. y_test = to_categorical(y_test, 10)
  13. # 构建前馈神经网络模型
  14. model = Sequential([
  15.     Flatten(input_shape=(28, 28)),          # 输入层,将28x28的图像展平为784维向量
  16.     Dense(128, activation='relu'),          # 第一个隐藏层,128个神经元,ReLU激活
  17.     Dense(64, activation='relu'),           # 第二个隐藏层,64个神经元,ReLU激活
  18.     Dense(10, activation='softmax')         # 输出层,10个神经元,对应10个类别,Softmax激活
  19. ])
  20. # 编译模型
  21. model.compile(optimizer='adam',
  22.               loss='categorical_crossentropy',
  23.               metrics=['accuracy'])
  24. # 训练模型
  25. model.fit(x_train, y_train, epochs=20, batch_size=32, validation_split=0.2)
  26. # 评估模型
  27. test_loss, test_acc = model.evaluate(x_test, y_test)
  28. print(f'测试准确率: {test_acc:.4f}')
复制代码
  代码注释说明:
  1. 数据加载与预处置惩罚:
   使用Keras内置的`mnist`数据集。
   将图像像素值标准化到[0,1]区间,提高训练效率。
   将标签举行独热编码,以顺应多分类的损失函数。
  2. 模型构建:
   使用`Sequential`顺序模型,逐层堆叠网络布局。
   `Flatten`层将二维图像数据展平为一维向量。
   `Dense`全毗连层作为隐藏层,激活函数选择ReLU引入非线性。
    输出层使用Softmax激活函数,将输出转换为概率分布。
  3. 模型编译与训练:
   编译时选择Adam优化器和交叉熵损失函数,适用于多分类题目。
   训练过程中使用20个epoch和32的批量大小,使用20%的训练数据作为验证集。
  4. 模型评估:
   在测试集上评估模型性能,输出测试准确率。
  
4. 卷积神经网络(CNN)

        卷积神经网络(Convolutional Neural Networks, CNN)专为处置惩罚具有网格布局的数据设计,尤其在图像处置惩罚领域表现卓越。CNN通过局部毗连、权重共享和池化操作,可以或许有用捕获数据中的空间特征。
4.1 布局与原理

典范的CNN由以下几类层构成:
   1. 卷积层(Convolutional Layers):通过卷积操作提取局部特征。
2. 激活层(Activation Layers):引入非线性,如ReLU。
3. 池化层(Pooling Layers):低落特征图的尺寸,减少计算量和过拟合。
4. 全毗连层(Fully Connected Layers):将提取的特征映射到输出类别。
5. 输出层(Output Layers):产生最终的预测结果。
  4.2 卷积层

卷积层通过应用多个滤波器(卷积核)在输入数据上滑动,计算卷积操作,从而提取差别层次的特征。每个卷积核学习到一种特定的特征,如边缘、纹理等。
公式表现:
\[
\text{Output}(i, j) = \sum_{m=0}^{M-1} \sum_{n=0}^{N-1} \text{Input}(i+m, j+n) \times \text{Filter}(m, n)
\]
4.3 池化层

池化层用于下采样,通过取局部地区的最大值(最大池化)或平均值(平均池化)来减少特征图的尺寸,减小计算量,并具有肯定的平移不变性。
4.4 常见架构

   1. LeNet:早期的CNN架构,应用于手写数字识别。
2. AlexNet:在2012年ImageNet角逐中取得突破,接纳ReLU激活和Dropout正则化。
3. VGG:通过增长网络深度(16-19层)提升性能,使用小卷积核(3x3)。
4. ResNet:引入残差毗连,办理深层网络训练中的梯度消失题目,支持上百层的深度。
  4.5 示例代码

以下是使用TensorFlow和Keras构建和训练简单卷积神经网络的示例,用于CIFAR-10图像分类任务。
  1. import tensorflow as tf
  2. from tensorflow.keras.models import Sequential
  3. from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
  4. from tensorflow.keras.datasets import cifar10
  5. from tensorflow.keras.utils import to_categorical
  6. # 加载CIFAR-10数据集
  7. (x_train, y_train), (x_test, y_test) = cifar10.load_data()
  8. # 数据预处理
  9. x_train = x_train.astype('float32') / 255.0  # 标准化
  10. x_test = x_test.astype('float32') / 255.0
  11. y_train = to_categorical(y_train, 10)       # 独热编码
  12. y_test = to_categorical(y_test, 10)
  13. # 构建CNN模型
  14. model = Sequential([
  15.     Conv2D(32, (3, 3), activation='relu', padding='same', input_shape=(32, 32, 3)),
  16.     Conv2D(32, (3, 3), activation='relu', padding='same'),
  17.     MaxPooling2D(pool_size=(2, 2)),
  18.     Dropout(0.25),
  19.     Conv2D(64, (3, 3), activation='relu', padding='same'),
  20.     Conv2D(64, (3, 3), activation='relu', padding='same'),
  21.     MaxPooling2D(pool_size=(2, 2)),
  22.     Dropout(0.25),
  23.     Flatten(),
  24.     Dense(512, activation='relu'),
  25.     Dropout(0.5),
  26.     Dense(10, activation='softmax')
  27. ])
  28. # 编译模型
  29. model.compile(optimizer='adam',
  30.               loss='categorical_crossentropy',
  31.               metrics=['accuracy'])
  32. # 训练模型
  33. model.fit(x_train, y_train, epochs=50, batch_size=64, validation_split=0.2, verbose=2)
  34. # 评估模型
  35. test_loss, test_acc = model.evaluate(x_test, y_test)
  36. print(f'测试准确率: {test_acc:.4f}')
复制代码
  代码注释说明:
  1. 数据加载与预处置惩罚:
   使用Keras内置的CIFAR-10数据集。
  将图像像素值标准化到[0,1]区间。
  标签举行独热编码,顺应多分类任务。
  2. 模型构建:
   使用`Sequential`顺序模型。
  第一组卷积层:两层32个3x3卷积核,ReLU激活,保持输入尺寸(`padding='same'`)。
   第一个池化层:2x2最大池化,减少特征图尺寸。
   Dropout层:防止过拟合,随机丢弃25%的神经元。
   第二组卷积层:两层64个3x3卷积核。
   第二个池化层和`Dropout`层。
   Flatten`层将多维特征图展平为一维向量。
   全毗连层:512个神经元,ReLU激活。
   末了一个`Dropout`层和输出层(10个神经元,Softmax激活)。
  3. 模型编译与训练:
   使用Adam优化器和交叉熵损失函数。
   训练50个epoch,批量大小为64,使用20%的训练数据作为验证集。
  4. 模型评估:
   在测试集上评估模型性能,输出测试准确率。
  
5. 循环神经网络(RNN)

        循环神经网络(Recurrent Neural Networks, RNN)专门用于处置惩罚序列数据,如时间序列、文本和音频。与前馈神经网络差别,RNN具有内部循环毗连,可以或许记忆和利用前序信息。
布局与原理

        RNN通过在时间步(time steps)上共享参数,处置惩罚序列中的每个元素。每个时间步的输出不但依赖于当前输入,还依赖于前一个时间步的隐藏状态,从而捕获序列中的上下文信息。
核心公式:
\[
h_t = \sigma(W_{hh}h_{t-1} + W_{xh}x_t + b_h)
\]
\[
y_t = W_{hy}h_t + b_y
\]
此中:
 \( h_t \) 是当前隐藏状态。
 \( x_t \) 是当前输入。
 \( W_{hh} \), \( W_{xh} \), \( W_{hy} \) 是权重矩阵。
 \( b_h \), \( b_y \) 是偏置向量。
 \( \sigma \) 是激活函数(通常是tanh或ReLU)。
是非期记忆网络(LSTM)

传统RNN在处置惩罚长序列时,容易出现梯度消失或爆炸的题目,难以捕获远间隔依赖关系。是非期记忆网络(Long Short-Term Memory, LSTM)通过引入门控机制,有用缓解了这一题目。
LSTM的核心布局包括三个门:
   1. 忘记门(Forget Gate):决定保留多少前一时间步的信息。
2. 输入门(Input Gate):决定当前输入的信息量。
3. 输出门(Output Gate):决定输出多少当前隐藏状态。
  门控循环单元(GRU)

门控循环单元(Gated Recurrent Unit, GRU)是LSTM的简化版本,归并了忘记门和输入门,减少了参数数量,同时保持了雷同的性能。
应用场景

   自然语言处置惩罚:语言建模、呆板翻译、文本天生。
时间序列预测:股票价格预测、气象预测。
语音识别:语音转文字。
视频分析:动作识别、视频择要。
   示例代码

以下是使用TensorFlow和Keras构建和训练LSTM模型的示例,用于IMDB电影批评情绪分类任务。`
  1. import tensorflow as tf
  2. from tensorflow.keras.models import Sequential
  3. from tensorflow.keras.layers import Embedding, LSTM, Dense, Dropout
  4. from tensorflow.keras.datasets import imdb
  5. from tensorflow.keras.preprocessing import sequence
  6. # 参数设置
  7. max_features = 20000  # 词汇表大小
  8. maxlen = 100          # 序列最大长度
  9. # 加载IMDB数据集
  10. (x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)
  11. # 数据预处理,填充序列
  12. x_train = sequence.pad_sequences(x_train, maxlen=maxlen)
  13. x_test = sequence.pad_sequences(x_test, maxlen=maxlen)
  14. # 构建LSTM模型
  15. model = Sequential([
  16.     Embedding(max_features, 128, input_length=maxlen),  # 嵌入层,将词索引转换为密集向量
  17.     LSTM(128, dropout=0.2, recurrent_dropout=0.2),      # LSTM层,128个隐藏单元
  18.     Dense(1, activation='sigmoid')                      # 输出层,二分类
  19. ])
  20. # 编译模型
  21. model.compile(optimizer='adam',
  22.               loss='binary_crossentropy',
  23.               metrics=['accuracy'])
  24. # 训练模型
  25. model.fit(x_train, y_train, epochs=10, batch_size=64, validation_split=0.2)
  26. # 评估模型
  27. test_loss, test_acc = model.evaluate(x_test, y_test)
  28. print(f'测试准确率: {test_acc:.4f}')
复制代码
  代码注释说明:
  1. 参数设置与数据加载:
   max_features:词汇表大小,选择最常见的20000个词。
   maxlen:将所有序列添补或截断到100个词。
   使用Keras内置的IMDB数据集,默认按频率编码词索引。
  2. 数据预处置惩罚:
   使用`pad_sequences`将所有序列添补到固定长度,确保输入数据具有同一的形状。
  3. 模型构建:
   Embedding层将词索引转换为128维的麋集向量。
   LSTM层具有128个隐藏单元,dropout和recurrent_dropout用于防止过拟合。
   输出层使用Sigmoid激活函数,适用于二分类任务。
  4. 模型编译与训练:
   使用Adam优化器和二元交叉熵损失函数。
   训练10个epoch,批量大小为64,使用20%的训练数据作为验证集。
  5. 模型评估:
   在测试集上评估模型性能,输出测试准确率。
  
6. 深度学习的优化技术

在深度神经网络的训练过程中,优化模型性能和防止过拟合是至关重要的。以下是几种常见的优化技术:
正则化

正则化通过在损失函数中添加惩罚项,限定模型的复杂度,防止过拟合。常见的正则化方法包括:
   L1正则化(Lasso):促进稀疏性,适用于特征选择。
L2正则化(Ridge):限定权重的绝对值,防止权重过大。
  示例:
  1. from tensorflow.keras.regularizers import l2
  2. Dense(64, activation='relu', kernel_regularizer=l2(0.001))
复制代码
批量归一化(Batch Normalization)

批量归一化通过对每一层的输入举行标准化,加速训练过程,提高模型的稳固性。
示例:
  1. from tensorflow.keras.layers import BatchNormalization
  2. model.add(Dense(64, activation='relu'))
  3. model.add(BatchNormalization())
复制代码
早停法(Early Stopping)

早停法通过监控验证集的性能,提前停止训练以防止过拟合。
示例:
  1. from tensorflow.keras.callbacks import EarlyStopping
  2. early_stopping = EarlyStopping(monitor='val_loss', patience=5, restore_best_weights=True)
  3. model.fit(x_train, y_train, epochs=100, batch_size=32, validation_split=0.2, callbacks=[early_stopping])
复制代码
数据增强(Data Augmentation)

数据增强通过对训练数据举行随机变换(如旋转、平移、翻转),增长数据的多样性,提升模型的泛化本领。
示例(适用于图像数据):
  1. from tensorflow.keras.preprocessing.image import ImageDataGenerator
  2. datagen = ImageDataGenerator(
  3.     rotation_range=20,
  4.     width_shift_range=0.2,
  5.     height_shift_range=0.2,
  6.     horizontal_flip=True
  7. )
  8. datagen.fit(x_train)
  9. model.fit(datagen.flow(x_train, y_train, batch_size=32), epochs=50, validation_data=(x_test, y_test))
复制代码

7. 实践中的神经网络设计

在实际应用中,设计和训练神经网络必要综合思量数据预处置惩罚、模型布局、超参数调优和模型评估等多个方面。
数据预处置惩罚

高质量的数据预处置惩罚是深度学习乐成的关键,包括:
   数据洗濯:处置惩罚缺失值、非常值。
特征缩放:标准化或归一化特征。
数据增强:增长数据多样性。
类别平衡:处置惩罚不平衡类别题目,如过采样、欠采样。
  超参数调优

超参数的选择直接影响模型性能,常见的超参数包括:
   学习率(Learning Rate):控制梯度更新的步长。
批量大小(Batch Size):每次训练使用的样本数量。
网络深度与宽度:隐藏层数和每层的神经元数量。
正则化参数:如L1、L2正则化系数。
优化器选择:如SGD、Adam、RMSprop等。
  常用的超参数调优方法有网格搜刮(Grid Search)、随机搜刮(Random Search)和贝叶斯优化(Bayesian Optimization)。
模型评估

合理的模型评估方法确保模型在未见数据上的表现良好,包括:
   训练集与测试集划分:合理分配数据集,确保模型评估的公正性。
交叉验证(Cross-Validation):通过多次训练和验证,获得稳固的性能估计。
评价指标:根据任务范例选择符合的指标,如准确率、精确率、召回率、F1分数、AUC-ROC等。
  
8. 总结与预测

        本文深入探讨了深度学习中神经网络的根本知识,包括前馈神经网络、卷积神经网络和循环神经网络等。通过详细的布局剖析和示例代码,展示了这些网络在实际任务中的应用方法。随着计算本领的提升和算法的不停优化,神经网络将在更多领域发挥重要作用。将来,团结自监督学习、强化学习等新兴技术,神经网络有望在更复杂和多样化的任务中取得突破。
 9. 参考资料

1.深度学习(Ian Goodfellow, Yoshua Bengio, Aaron Courville 著)
2. 神经网络与深度学习(Michael Nielsen 著)
3. TensorFlow官方网站:https://www.tensorflow.org/
4. Keras官方网站:https://keras.io/
5. PyTorch官方网站:https://pytorch.org/



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

李优秀

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表