人工智能直通车系列32【深度学习基础】(前馈神经网络工作原理)

目录

前馈神经网络工作原理

1. 基本结构

2. 神经元的工作方式

3. 前向传播过程

4. 损失函数与训练

场景示例

1. 手写数字识别

2. 房价预测


前馈神经网络工作原理

1. 基本结构

前馈神经网络(Feed - Forward Neural Network,FFNN)是一种最基本的神经网络类型,信息从输入层单向传播到隐藏层,再到输出层,没有反馈连接。其主要由以下几个部分构成:

  • 输入层(Input Layer):接收外界输入的数据。输入层神经元的数量通常等于输入数据的特征数量。例如,在图像分类任务中,如果输入的是一张 28\times28的灰度图像,那么输入层就有 28\times28 = 784个神经元。
  • 隐藏层(Hidden Layer):可以有一个或多个隐藏层。隐藏层的神经元通过对输入数据进行非线性变换,提取数据中的特征和模式。每个隐藏层神经元接收上一层神经元的输出作为输入,经过加权求和和激活函数处理后,将结果传递给下一层。
  • 输出层(Output Layer):输出神经网络的最终结果。输出层神经元的数量取决于具体的任务。例如,在二分类问题中,输出层通常有 1 个神经元;在多分类问题中,输出层神经元的数量等于类别数量。
2. 神经元的工作方式

每个神经元是一个基本的计算单元,其工作过程如下:

  • 加权求和:假设一个神经元接收来自上一层 n 个神经元的输出x_1, x_2, \cdots, x_n,对应的权重为 w_1, w_2, \cdots, w_n​,还有一个偏置项 b。那么该神经元的加权输入z为:
    z=\sum_{i = 1}^{n}w_ix_i + b=\mathbf{w}^T\mathbf{x}+b
    其中\mathbf{w}=[w_1, w_2, \cdots, w_n]^T\mathbf{x}=[x_1, x_2, \cdots, x_n]^T
  • 激活函数处理:加权输入 z经过激活函数\sigma处理后,得到该神经元的输出 y
    y = \sigma(z)
    激活函数的作用是引入非线性因素,使得神经网络能够学习复杂的非线性关系。常见的激活函数有 Sigmoid 函数、ReLU 函数等。
3. 前向传播过程

前馈神经网络的前向传播过程就是信息从输入层依次经过隐藏层,最终到达输出层的过程。具体步骤如下:

  • 输入层:将输入数据\mathbf{X}输入到输入层,输入层神经元直接将数据传递给下一层。
  • 隐藏层:对于第l层隐藏层(l = 1,2,\cdots,L,L 为隐藏层的数量),该层每个神经元进行加权求和和激活函数处理。假设第l层有n_l 个神经元,上一层(第l - 1层)的输出为 \mathbf{A}^{l - 1},权重矩阵为\mathbf{W}^l,偏置向量为\mathbf{b}^l,则该层的加权输入\mathbf{Z}^l和输出 \mathbf{A}^l分别为:
    \mathbf{Z}^l=\mathbf{W}^l\mathbf{A}^{l - 1}+\mathbf{b}^l\\\mathbf{A}^l=\sigma(\mathbf{Z}^l)
    其中 \sigma是激活函数,通常对向量的每个元素分别应用激活函数。
  • 输出层:输出层的计算方式与隐藏层类似,最终得到输出\mathbf{A}^L,这个输出就是神经网络的预测结果。
4. 损失函数与训练

为了评估神经网络的预测结果与真实标签之间的差异,需要定义一个损失函数(Loss Function)。常见的损失函数有均方误差(MSE,用于回归问题)、交叉熵损失(Cross - Entropy Loss,用于分类问题)等。

神经网络的训练过程就是通过调整权重和偏置,使得损失函数的值最小化。常用的训练方法是反向传播算法(Backpropagation),它通过计算损失函数对每个权重和偏置的梯度,然后使用梯度下降等优化算法更新权重和偏置。

场景示例

1. 手写数字识别
  • 问题描述:给定一张手写数字的图像,识别出图像中的数字是 0 - 9 中的哪一个。
  • 网络结构
    • 输入层:由于输入的是 28\times28 的灰度图像,输入层有 784 个神经元。
    • 隐藏层:可以设置一个或多个隐藏层,例如设置一个包含 128 个神经元的隐藏层,激活函数使用 ReLU 函数。
    • 输出层:因为是 10 分类问题,输出层有 10 个神经元,使用 Softmax 函数将输出转换为概率分布。
  • 训练与预测:使用大量的手写数字图像及其对应的标签进行训练,通过反向传播算法不断调整权重和偏置。训练完成后,对于新的手写数字图像,通过前向传播得到输出层的概率分布,选择概率最大的类别作为预测结果。
2. 房价预测
  • 问题描述:根据房屋的各种特征(如面积、卧室数量、地理位置等)预测房屋的价格。
  • 网络结构
    • 输入层:输入层神经元的数量等于房屋特征的数量。
    • 隐藏层:可以设置一个或多个隐藏层,例如设置两个包含 64 个神经元的隐藏层,激活函数使用 ReLU 函数。
    • 输出层:由于是回归问题,输出层有 1 个神经元,不使用激活函数(或使用线性激活函数)。
  • 训练与预测:使用大量的房屋特征数据及其对应的房价进行训练,损失函数使用均方误差。训练完成后,对于新的房屋特征数据,通过前向传播得到输出层的预测房价。

以下是一个使用 Python 和 Keras 实现简单前馈神经网络进行手写数字识别的代码示例:

import tensorflow as tf
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten

# 加载手写数字数据集
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

# 数据预处理
train_images = train_images / 255.0
test_images = test_images / 255.0

# 构建前馈神经网络模型
model = Sequential([
    Flatten(input_shape=(28, 28)),  # 将 28x28 的图像展平为一维向量
    Dense(128, activation='relu'),  # 隐藏层,128 个神经元,使用 ReLU 激活函数
    Dense(10, activation='softmax')  # 输出层,10 个神经元,使用 Softmax 激活函数
])

# 编译模型
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# 训练模型
model.fit(train_images, train_labels, epochs=5)

# 评估模型
test_loss, test_acc = model.evaluate(test_images, test_labels)
print(f"测试集准确率: {test_acc}")

在这个代码示例中,我们构建了一个简单的前馈神经网络,包括一个输入层、一个隐藏层和一个输出层,通过前向传播进行预测,使用反向传播算法进行训练。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪九天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值