深度学习——神经网络(neural network)详解(一). 带手算步骤,步骤清晰0基础可看

深度学习------神经网络(neural network)详解(一). 带手算步骤,步骤清晰0基础可看

我将以最简单,基础的形式说明神经网络的训练过程。

搭配以下文章进行学习:
深度学习------卷积神经网络(convolutional neural network)CNN详解(一)------概述. 步骤清晰0基础可看

深度学习------卷积神经网络(convolutional neural network)CNN详解(二)------前向传播与反向传播过程(特征提取+预测+反向传播更新参数). 步骤清晰0基础可看

深度学习------神经网络(neural network)详解(一). 带手算步骤,步骤清晰0基础可看

深度学习------神经网络(neural network)详解(二). 带手算步骤,步骤清晰0基础可看

机器学习/深度学习------梯度下降法(Gradient descent)详解. 步骤清晰 0基础可看

一、训练神经网络概述

训练神经网络是利用大量已知数据(训练数据)来调整网络参数(权重和偏置),使网络能够学习输入数据到输出数据的映射关系的过程。

基础的神经网络可以分为,输入层(Input Layer),隐藏层 (Hidden Layers),输出层(Output Layer),如下图所示。

在这之前,我们先来了解几个概念。

1.输入层 (Input Layer): 输入层是神经网络的第一层,负责接收网络的输入数据。每个神经元对应一个输入特征。

2.输出层 (Output Layer): 输出层是神经网络的最后一层,负责产生最终的预测结果。在分类问题中,输出层的神经元数量通常等于类别数。

3.隐藏层 (Hidden Layers): 隐藏层位于输入层和输出层之间,可以有多个。隐藏层的目的是提取输入数据的特征并进行组合,以便于网络学习复杂的模式。

4.神经元 (Neurons): 神经元是网络的基本单元,每个神经元接收来自前一层神经元的输出,对它们进行加权求和,然后可能通过一个激活函数来生成自己的输出。

5.权重 (Weights): 权重是神经元之间连接的强度,它们决定了信号在网络中的传递程度。权重是网络在训练过程中学习得到的参数。

6.偏置 (Biases): 偏置是加在神经元输入上的一个常数项,它为模型提供了平移的自由度,使得模型可以更好地拟合数据。

7.激活函数 (Activation Function): 激活函数是一个数学函数,用于在神经元的输出上引入非线性。这使得神经网络能够学习和模拟复杂的函数映射。常见的激活函数包括Sigmoid、Tanh、ReLU等。

激活函数其实就是把上一层的输出转变到你想要的范围内,是一个映射函数,方便进行下一层的操作。比如归一化就是一个映射操作。

8.损失函数 (Loss Function):损失函数用于衡量模型的预测输出与实际标签之间的差异。它是评估模型性能的指标,常见的损失函数包括均方误差交叉熵损失等。

神经网络图示详解

1. 输入层

输入层有两个神经元,分别表示输入特征, x 1 x_{1} x1 , x 2 x_{2} x2。
x = [ x 1 x 2 ] x = \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} x=[x1x2]

2. 隐藏层

隐藏层有三个神经元,分别表示 h 1 h_{1} h1 , h 2 h_{2} h2 , h 3 h_{3} h3 。输入层和隐藏层之间的连接具有权重 w 1 w_{1} w1 到 w 6 w_{6} w6,并且每个隐藏层神经元都有一个偏置 b b b。这就是网络的参数,我们需要更新的就是权重 w w w和偏置 b b b这些网络参数,使这个神经网络能够越来越适应我们的任务,最后能够对新输入做出较为准确的预测判断。

对于隐藏层的每个神经元,计算如下:

  • 对于第一个隐藏层神经元 h 1 h_{1} h1:
    h 1 = σ ( w 1 x 1 + b 1 + w 4 x 2 + b 4 ) h_1 = \sigma(w_{1}x_1 + b_1+ w_{4}x_2 + b_4) h1=σ(w1x1+b1+w4x2+b4)

  • 对于第二个隐藏层神经元 h 2 h_{2} h2:
    h 2 = σ ( w 2 x 1 + b 2 + w 5 x 2 + b 5 ) h_2 = \sigma(w_{2}x_1 + b_2+ w_{5}x_2 + b_5) h2=σ(w2x1+b2+w5x2+b5)

  • 对于第三个隐藏层神经元 h 3 h_{3} h3:
    h 3 = σ ( w 3 x 1 + b 3 + w 6 x 2 + b 6 ) h_3 = \sigma(w_{3}x_1 + b_3+ w_{6}x_2 + b_6) h3=σ(w3x1+b3+w6x2+b6)

    这里, σ \sigma σ表示激活函数,如ReLU或Sigmoid。

3. 输出层

输出层有一个神经元 y ^ \hat{y} y^,表示最终的输出。隐藏层和输出层之间的连接具有权重 w 7 w_{7} w7 到 w 9 w_{9} w9。

输出层神经元的计算

输出神经元 y ^ \hat{y} y^ 的计算如下, σ \sigma σ表示激活函数:
y ^ = σ ( w 7 h 1 + w 8 h 2 + w 9 h 3 ) \hat{y} = \sigma(w_7 h_1 + w_8 h_2 + w_9 h_3) y^=σ(w7h1+w8h2+w9h3)

到此为止,输入 x 1 x_{1} x1 , x 2 x_{2} x2经过这个神经网络特征呗提取到了,因为我们利用这个神经网络获取到了 x 1 x_{1} x1 , x 2 x_{2} x2的具体输出。

接下来我们以房价预测为例来说明神经网络参数的更新过程,也就是神经网络的训练过程。

损失函数

L = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 L = \frac{1}{n} \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 L=n1i=1∑n(yi−y^i)2

二、房价预测情景

何为训练神经网络? 假设我们要预测明年的房价,可以将神经网络视为一个预测函数 f(x),其中 x 代表影响房价的各种因素:

  • 房屋面积(平方米)
  • 房屋位置(市中心或郊区)
  • 房屋年龄(年)
  • 周边设施(学校、医院、交通等)
  • 市场趋势和经济指标(GDP增长率、通货膨胀率等)

我们的目标是使用神经网络学习这些因素与房价之间的关系,并预测未来的房价。

三、运算过程概述

1. 数据收集

收集历史房价数据及相关影响因素。

2. 数据预处理

对数据进行归一化处理,使输入特征 x 在相同尺度上,预处理的操作有很多种,在实际模型训练的过程中我们需要用到较为复杂的预处理过程。

3. 构建神经网络

设计一个神经网络结构,例如包含输入层、隐藏层和输出层的简单网络。

4. 初始化参数

随机初始化网络中的权重和偏置。

5. 前向传播

使用训练数据集,计算每个输入 x 通过神经网络的预测输出 ŷ = f(x)

6. 计算损失

使用均方误差(MSE)作为损失函数,计算预测值与实际房价之间的差异:
L = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 L = \frac{1}{n} \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 L=n1i=1∑n(yi−y^i)2

在这个公式中:

  • L L L 表示损失函数的输出,即所有样本损失的均值。
  • n n n 是训练集中的样本数量。
  • y i y_{i} yi是第 i i i 个样本的实际值。
  • y ^ i \hat{y}_{i} y^i 是第 i i i个样本的预测值。

**样本:**样本指的是一组包含房屋特征和对应房价的数据点。每个样本都代表了市场上的一个具体的房产实例,它通常包含多个特征以及该房产的销售价格。即一个样本代表一个数据对,包含实际的输入 x x x和对应的输出 y y y。输出 y y y即为真实值,Ground Truth 。我们的目标是通过调整模型的参数来最小化损失函数 L L L,从而提高预测的准确性。

例如,在房价预测模型中,如果我们使用两个特征:房屋面积 x 1 x_{1} x1和房屋位置 x 2 x_{2} x2,则模型的预测输出可以表示为 y ^ \hat{y} y^,而实际的房价为 y y y。

7. 反向传播

计算损失函数关于每个参数的梯度,使用链式法则反向传播。

(1)链式法则的基本原理:

设有一个由多个函数复合而成的复合函数 ( F = f(g(x)) ),链式法则允许我们通过计算以下形式来求得 ( F ) 的导数:

d F d x = d f d g ⋅ d g d x \frac{dF}{dx} = \frac{df}{dg} \cdot \frac{dg}{dx} dxdF=dgdf⋅dxdg

这里:

  • d f d g \frac{df}{dg} dgdf是外函数 f f f对中间变量 g g g 的导数。

  • d g d x \frac{dg}{dx} dxdg 是内函数 g g g对原始变量 x x x 的导数。

(2)链式法则在神经网络中的应用:

在神经网络中,前向传播可以看作是多个层级和激活函数的复合。损失函数 L L L 是关于输出 y ^ \hat{y} y^的函数,而输出 y ^ \hat{y} y^本身是关于网络参数(如权重 w w w 和偏置 b b b的复合函数。

反向传播中的链式法则:

  • 从输出层开始:计算损失函数 L L L对输出 y ^ \hat{y} y^的梯度,这通常很简单,因为大多数损失函数(如均方误差)对输出的导数有明确的解析解。

  • 逐层反向传播:从输出层开始,逆向通过网络的每一层,使用链式法则计算损失函数对每一层参数的梯度。对于每一层:
    ∂ L ∂ a \frac{\partial L}{\partial a} ∂a∂L是当前层的激活函数 a a a的导数(即激活函数的导数)。

  • 参数更新:使用计算得到的梯度和选择的优化算法(如梯度下降)更新网络的参数。

具体到这个例子,梯度具体计算过程如下:

L = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 L = \frac{1}{n} \sum_{i=1}^{n}(y_i - \hat{y}i)^2 L=n1∑i=1n(yi−y^i)2
y ^ = σ ( w 7 h 1 + w 8 h 2 + w 9 h 3 ) \hat{y} = \sigma(w_7 h_1 + w_8 h_2 + w_9 h_3) y^=σ(w7h1+w8h2+w9h3)
h 1 = σ ( w 1 x 1 + b 1 + w 4 x 2 + b 4 ) h_1 = \sigma(w
{1}x_1 + b_1+ w_{4}x_2 + b_4) h1=σ(w1x1+b1+w4x2+b4)
h 2 = σ ( w 2 x 1 + b 2 + w 5 x 2 + b 5 ) h_2 = \sigma(w_{2}x_1 + b_2+ w_{5}x_2 + b_5) h2=σ(w2x1+b2+w5x2+b5)
h 3 = σ ( w 3 x 1 + b 3 + w 6 x 2 + b 6 ) h_3 = \sigma(w_{3}x_1 + b_3+ w_{6}x_2 + b_6) h3=σ(w3x1+b3+w6x2+b6)

由损失函数求 w w w和 b b b两个参数的梯度的公式如下。当然, w 1 w_{1} w1到 w 9 w_{9} w9对应不同的公式。
d L d w = d L d y ^ ⋅ d y ^ d w + d L d y ^ ⋅ d y ^ d h ⋅ d h d w \frac{dL}{dw} = \frac{dL}{d\hat{y}} \cdot \frac{d\hat{y}}{dw} +\frac{dL}{d\hat{y}} \cdot \frac{d\hat{y}}{dh} \cdot \frac{dh}{dw} dwdL=dy^dL⋅dwdy^+dy^dL⋅dhdy^⋅dwdh

d L d b = d L d y ^ ⋅ d y ^ d w + d L d y ^ ⋅ d y ^ d h ⋅ d h d w \frac{dL}{db} = \frac{dL}{d\hat{y}} \cdot \frac{d\hat{y}}{dw} +\frac{dL}{d\hat{y}} \cdot \frac{d\hat{y}}{dh} \cdot \frac{dh}{dw} dbdL=dy^dL⋅dwdy^+dy^dL⋅dhdy^⋅dwdh

比如对于 w 1 w_{1} w1,其求导公式为:
d L d w 1 = d L d y ^ ⋅ d y ^ d h 1 ⋅ d h 1 d w 1 \frac{dL}{dw_{1}} = \frac{dL}{d\hat{y}} \cdot \frac{d\hat{y}}{dh_{1}} \cdot \frac{dh_{1}}{dw_{1}} dw1dL=dy^dL⋅dh1dy^⋅dw1dh1

8. 参数更新,即更新权重和偏置

(1)梯度下降法

使用梯度下降法 (Gradient descent)更新网络参数:

梯度下降法是一种优化方法,用于最小化一个函数,通常在机器学习和人工智能中用于最小化损失函数,从而找到模型参数的最佳值。具体的思想可以自己去查资料了解,这里只需要知道相关参数是怎么进行更新的就行了。这里的 α \alpha α叫做学习率,控制着梯度下降的大小。

w n e w = α ⋅ ∂ L ∂ w o l d w ^{new}= \alpha \cdot \frac{\partial L}{\partial w^{old}} wnew=α⋅∂wold∂L

让我们来分析一下这个公式,减号代表着在每次迭代中,参数按照损失函数梯度的相反方向更新,因为向梯度的相反方向移动可以减少损失函数的值。

梯度(Gradient):梯度是一个向量,指向损失函数增长最快的方向。数学上,梯度是损失函数对每个参数偏导数的集合。

损失函数减少:在优化问题中,我们的目标是最小化损失函数。损失函数衡量了模型预测值与实际值之间的差异。

参数更新:在梯度下降法中,我们通过调整模型的参数来减少损失函数的值。

相反方向:梯度指向损失增加的方向,因此,为了减少损失,我们需要向梯度的相反方向更新参数。

举个例子,如果损失函数是一个山谷地形,那么梯度就是指向山谷坡度最陡峭的方向。梯度下降法就像是沿着最陡的下坡路往下走,直到找到山谷的最低点,这个最低点就是损失函数的最小值。

9. 迭代优化

重复步骤5到8,直到满足停止条件。

在梯度下降法中,停止条件用于确定何时停止迭代过程。以下是一些常用的停止条件:

最大迭代次数:设置一个最大迭代次数,例如1000次迭代。这是一个简单的停止条件,可以防止无限循环。

损失函数的阈值:如果损失函数的值低于某个预设的阈值(例如0.001),则认为模型已经足够好,可以停止迭代。

10. 模型评估

使用验证集或测试集评估模型的预测性能。

有多种评估方式来对机器学习/深度学习模型进行评估,在这个房价预测的背景下,我们可以采取如下指标:

均方误差和均方根误差

准确性是衡量模型预测结果与实际值接近程度的指标。在房价预测中,通常使用均方误差(Mean Squared Error, MSE)或者均方根误差(Root Mean Squared Error, RMSE)来衡量误差的大小。MSE和RMSE越小,表示模型的预测结果与实际值越接近。

  • 均方误差 (MSE) :
    M S E = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 {MSE} = \frac{1}{n} \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 MSE=n1i=1∑n(yi−y^i)2

  • 均方根误差 (RMSE) :
    R M S E = M S E {RMSE} = \sqrt{MSE} RMSE=MSE

相关推荐
Sxiaocai4 分钟前
使用 PyTorch 实现并训练 VGGNet 用于 MNIST 分类
pytorch·深度学习·分类
GL_Rain5 分钟前
【OpenCV】Could NOT find TIFF (missing: TIFF_LIBRARY TIFF_INCLUDE_DIR)
人工智能·opencv·计算机视觉
shansjqun10 分钟前
教学内容全覆盖:航拍杂草检测与分类
人工智能·分类·数据挖掘
狸克先生12 分钟前
如何用AI写小说(二):Gradio 超简单的网页前端交互
前端·人工智能·chatgpt·交互
baiduopenmap27 分钟前
百度世界2024精选公开课:基于地图智能体的导航出行AI应用创新实践
前端·人工智能·百度地图
小任同学Alex30 分钟前
浦语提示词工程实践(LangGPT版,服务器上部署internlm2-chat-1_8b,踩坑很多才完成的详细教程,)
人工智能·自然语言处理·大模型
新加坡内哥谈技术36 分钟前
微软 Ignite 2024 大会
人工智能
江瀚视野1 小时前
Q3净利增长超预期,文心大模型调用量大增,百度未来如何分析?
人工智能
陪学1 小时前
百度遭初创企业指控抄袭,维权还是碰瓷?
人工智能·百度·面试·职场和发展·产品运营
QCN_1 小时前
湘潭大学人工智能考试复习1(软件工程)
人工智能