AI大模型教程
一起来学习

【学习笔记】机器学习(Machine Learning) | 第七章|神经网络(3)

机器学习(Machine Learning)

简要声明

基于吴恩达教授(Andrew Ng)课程视频
BiliBili课程资源



神经网络中 TensorFlow 初步代码实现

一、引言

在机器学习蓬勃发展的今天,深度学习凭借强大的特征提取与模式识别能力,成为计算机视觉、自然语言处理等前沿领域的核心技术。而 TensorFlow 作为业界广泛应用的开源深度学习框架,以其灵活的架构和丰富的 API,为开发者构建神经网络模型提供了高效工具。
本篇博客初步掌握了 TensorFlow 在深度学习神经网络中的基础代码实现,对简单模型的搭建和核心概念有了基础认知。深入探索如何构建更复杂、更具实际应用价值的神经网络架构,并结合具体案例,逐步掌握其在不同场景下的实践技巧。

二、实例分析

(一)咖啡烘焙程度预测模型

模型原理:该模型聚焦咖啡烘焙场景,以温度(Temperature)和烘焙时长(Duration)为核心特征,通过神经网络构建二维平面上的决策边界,将烘焙结果划分为烘焙不足(undercooked)、烘焙过度(overcooked)和优质咖啡(good coffee)三类。

数学表达:设输入特征向量

x

=

[

x

1

,

x

2

]

vec{x} = [x_1, x_2]

x
=
[x1,x2]
,其中

x

1

x_1

x1 代表温度,

x

2

x_2

x2 代表时长。经神经网络计算得到输出

a

1

[

2

]

a^{[2]}_1

a1[2] ,以阈值

0.5

0.5

0.5 为判断标准:当

a

1

[

2

]

0.5

a^{[2]}_1 geq 0.5

a1[2]0.5 时,预测结果

y

^

=

1

hat{y} = 1

y^=1(优质咖啡);反之,

y

^

=

0

hat{y} = 0

y^=0

代码实现

import numpy as np
import tensorflow as tf

# 输入特征,形状为(1, 2),表示1个样本,2个特征
x = np.array([[200.0, 17.0]]) 
# 第一层全连接层,配置3个神经元,采用sigmoid激活函数,将输入映射到非线性空间
layer_1 = tf.keras.layers.Dense(units=3, activation='sigmoid') 
a1 = layer_1(x)
# 第二层全连接层,单神经元输出,sigmoid激活后得到最终预测概率
layer_2 = tf.keras.layers.Dense(units=1, activation='sigmoid') 
a2 = layer_2(a1)

# 根据预测概率进行类别判定
if a2 >= 0.5:
    yhat = 1
else:
    yhat = 0


左图是蓝色阴影表示的最后一个图层的原始输出。这覆盖在 X 和 O 表示的训练数据上。
右图是决策阈值后网络的输出。这里的 X 和 O 对应于网络做出的决策。

(二)数字分类模型

模型结构:构建一个包含三层的全连接神经网络,输入层接收特征向量

x

vec{x}

x
,依次经过 25 个神经元的第一层、15 个神经元的第二层,最终由单神经元的第三层输出分类结果。每层均采用 sigmoid 激活函数引入非线性。

数学公式:设输入向量为

x

vec{x}

x
,各层输出分别为

a

[

1

]

a^{[1]}

a[1]

a

[

2

]

a^{[2]}

a[2]

a

[

3

]

a^{[3]}

a[3] 。通过矩阵乘法与激活函数运算生成最终输出

a

1

[

3

]

a^{[3]}_1

a1[3] ,同样以

0.5

0.5

0.5 为阈值判断预测类别

y

^

hat{y}

y^

代码实现

import numpy as np
import tensorflow as tf

# 输入特征,实际应用中需填充完整样本数据
x = np.array([[0.0,...,245,...,240,...0]]) 
# 第一层全连接层,25个神经元扩展特征维度
layer_1 = tf.keras.layers.Dense(units=25, activation='sigmoid') 
a1 = layer_1(x)
# 第二层全连接层,进一步提炼特征
layer_2 = tf.keras.layers.Dense(units=15, activation='sigmoid') 
a2 = layer_2(a1)
# 第三层全连接层,输出最终预测概率
layer_3 = tf.keras.layers.Dense(units=1, activation='sigmoid') 
a3 = layer_3(a2)

# 预测结果判定
if a3 >= 0.5:
    yhat = 1
else:
    yhat = 0

(三)numpy 数组相关要点

在 TensorFlow 开发中,numpy 数组是处理数据的重要载体,其创建方式与形状特性对模型输入输出影响显著:

创建方式 示例代码 数组形状 说明
标准二维数组 x = np.array([[1, 2, 3], [4, 5, 6]])

2

×

3

2 times 3

2×3
构建 2 行 3 列的矩阵,常用于批量样本特征存储
多样本特征数组 x = np.array([[0.1, 0.2], [-3.0, -4.0], [-0.5, -0.6], [7.0, 8.0]])

4

×

2

4 times 2

4×2
表示 4 个样本,每个样本含 2 个特征
单行样本数组 x = np.array([[200, 17]])

1

×

2

1 times 2

1×2
单样本双特征,需保持二维结构适配模型输入
单列特征数组 x = np.array([[200], [17]])

2

×

1

2 times 1

2×1
常用于表示含 2 个样本的单特征数据
一维向量 x = np.array([200,17]) 一维 本质为向量,在特定场景下需转换为二维结构

(四)激活向量相关

以咖啡烘焙模型第二层计算为例,深入理解激活向量机制:

  1. 层定义layer_2 = Dense(units=1, activation='sigmoid') 构建单神经元输出层,sigmoid 函数将输出值域压缩至 (0, 1) 区间,便于概率解释。

  2. 激活计算a2 = layer_2(a1) 基于上一层输出

    a

    [

    1

    ]

    a^{[1]}

    a[1] 计算当前层激活向量

    a

    [

    2

    ]

    a^{[2]}

    a[2] 。假设输出为

    a

    [

    2

    ]

    =

    [

    [

    0.8

    ]

    ]

    a^{[2]} = [[0.8]]

    a[2]=[[0.8]] ,其形状为

    (

    1

    ,

    1

    )

    (1, 1)

    (1,1) ,在 TensorFlow 中以 tf.Tensor 类型存储。如需与 numpy 协同处理,可调用 a2.numpy() 转换为 numpy 数组。


三、构建神经网络架构

(一)简单神经网络架构示例

我们从一个直观的案例入手,解读 “Building a neural network architecture” 图中的网络结构:

  • 网络结构解析:这是一个两层神经网络,输入层接收特征向量

    x

    vec{x}

    x
    ,第一层包含 3 个神经元,采用 sigmoid 激活函数,能将线性输入转换为非线性输出;第二层仅有 1 个神经元,同样使用 sigmoid 函数,用于输出最终预测概率。使用 TensorFlow 的 Sequential 模型可轻松实现该结构:
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

model = Sequential([
    Dense(units=3, activation="sigmoid"),
    Dense(units=1, activation="sigmoid")
])
  • 数据准备要点:输入数据 x 是形状为 4 x 2 的 numpy 数组,意味着包含 4 个样本,每个样本具有 2 个特征;目标数据 y 则是对应的标签数据,同样以 numpy 数组形式呈现。例如:
x = np.array([[200.0, 17.0],
              [120.0, 5.0],
              [425.0, 20.0],
              [212.0, 18.0]])
y = np.array([1, 0, 0, 1])
  • 模型训练与预测流程:尽管图中 model.compile(...) 部分未详细展开,但我们知道这一步至关重要,需配置优化器、损失函数等关键参数。通过 model.fit(x, y) 进行模型训练,使其学习输入特征与目标标签的映射关系。训练完成后,使用 model.predict(x_new) 即可对新数据进行预测。

(二)数字分类模型架构

接下来分析 “Digit classification model” 图中的复杂神经网络架构:

  • 网络深度与设计:该网络包含三层,第一层 25 个神经元用于初步特征提取,第二层 15 个神经元进一步提炼特征,第三层单神经元输出最终预测结果,每层均采用 sigmoid 激活函数。我们可以分步定义各层,再组合成 Sequential 模型:
layer_1 = Dense(units=25, activation="sigmoid")
layer_2 = Dense(units=15, activation="sigmoid")
layer_3 = Dense(units=1, activation="sigmoid")

model = Sequential([layer_1, layer_2, layer_3])
  • 数据特征与标签:输入数据 x 是代表数字图像特征的 numpy 数组(如像素值等),由于图像数据维度较高,这里仅展示部分数据结构;目标数据 y 则是对应数字标签,例如:
x = np.array([[0..., 245,..., 17],
              [0..., 200,..., 184]])
y = np.array([1, 0])
  • 完整训练预测链路:与简单模型类似,先通过 model.compile(...) 配置训练参数,再使用 model.fit(x, y) 完成训练,最终利用训练好的模型对新图像数据进行预测。

四、构建神经网络的关键要点

(一)层的选择与设计策略

在神经网络构建中,层的选择直接决定模型性能:

  • 全连接层(Dense):适用于多种数据类型,其神经元全连接特性使其能捕捉全局特征关系,但计算复杂度较高。

  • 卷积层(Conv):专为图像数据设计,通过卷积核自动提取局部特征,大幅减少参数数量,有效避免过拟合,是计算机视觉领域的核心层。

  • 循环层(RNN 及变体 LSTM、GRU):擅长处理序列数据,如时间序列、文本等,能记忆历史信息,捕捉长距离依赖关系。

(二)激活函数的应用场景

激活函数是赋予神经网络非线性能力的关键:

  • sigmoid 函数:将输出压缩至 (0, 1) 区间,常用于二分类问题的输出层,但存在梯度消失问题,不适用于深层网络。

  • ReLU 函数:以

    f

    (

    x

    )

    =

    m

    a

    x

    (

    0

    ,

    x

    )

    f(x) = max(0, x)

    f(x)=max(0,x) 为核心逻辑,有效缓解梯度消失,加速训练,是隐藏层的常用选择。

  • tanh 函数:输出值域为 (-1, 1),相比 sigmoid 有更好的中心化效果,在某些特定场景表现优异。

(三)数据预处理的核心操作

高质量的数据是模型训练的基础:

  • 归一化处理:将图像像素值从 [0, 255] 归一化到 [0, 1],或使用标准化方法将数据转换为均值为 0、方差为 1 的分布,可提升模型稳定性与收敛速度。

  • 维度校验:确保输入数据维度与模型要求一致,如图像数据需注意通道数、尺寸等维度信息,避免因维度错误导致训练失败。

五、总结

通过咖啡烘焙预测与数字分类两个典型案例,我们系统学习了 TensorFlow 构建神经网络的基础流程,涵盖数据输入处理、网络层搭建、激活函数应用及结果判定,掌握了 numpy 数组在数据组织中的关键作用,以及激活向量的计算与数据类型转换。同时,我们构建了更复杂、更具实际应用价值的神经网络架构。


continue…

文章来源于互联网:【学习笔记】机器学习(Machine Learning) | 第七章|神经网络(3)

赞(0)
未经允许不得转载:5bei.cn大模型教程网 » 【学习笔记】机器学习(Machine Learning) | 第七章|神经网络(3)

【学习笔记】机器学习(Machine Learning) | 第七章|神经网络(1)

机器学习(Machine Learning)

简要声明

基于吴恩达教授(Andrew Ng)课程视频
BiliBili课程资源



机器学习之深度学习神经网络入门

在人工智能技术浪潮席卷全球的今天,深度学习神经网络作为其核心驱动力,正以前所未有的速度重塑各行业格局。本文将以学习笔记的视角,系统梳理神经网络的基础概念与核心架构,为深入探索深度学习打下坚实基础。

一、神经网络的起源与发展

神经网络的理论雏形可追溯至 1943 年 McCulloch 和 Pitts 提出的MP 神经元模型,该模型首次将生物神经元的工作机制抽象为数学计算单元。在 20 世纪 80 年代,反向传播算法(Backpropagation)的提出推动神经网络进入第一次发展高峰,在光学字符识别(OCR)等领域取得显著成果。但受制于当时有限的计算资源和梯度消失问题,90 年代后期神经网络逐渐陷入发展瓶颈。

转折点出现在 2006 年,Hinton 等人提出深度信念网络(DBN)和预训练 – 微调策略,结合 GPU 算力的爆发式增长,神经网络迎来复兴。如今,基于 Transformer 架构的大语言模型(如 GPT 系列)、计算机视觉领域的卷积神经网络(CNN),以及自动驾驶中的端到端神经网络系统,都印证了其强大的泛化能力与应用潜力。

二、神经元模型

(一)生物神经元与数学模型对比

对比维度 生物神经元 数学神经元模型
结构特征 由树突(接收信号)、细胞体(整合信号)、轴突(输出信号)构成 由权重矩阵、偏置向量和激活函数组成计算单元
信号传输 通过电信号与化学递质传递脉冲信号 通过矩阵乘法和非线性变换传递数值信号
信息处理 非线性加权求和并阈值化输出 通过

z

=

i

=

1

n

w

i

x

i

+

b

z = sum_{i=1}^{n}w_ix_i + b

z=i=1nwixi+b 计算加权和,再经激活函数处理

(二)数学模型示例

以电商平台商品需求预测为例,构建单神经元模型:

输入层:接收商品价格

x

x

x(如

x

=

99

x = 99

x=99 元)

计算过程

加权求和:

z

=

w

x

+

b

z = wx + b

z=wx+b,假设

w

=

0.3

w = 0.3

w=0.3

b

=

5

b = -5

b=5,则

z

=

0.3

×

99

5

=

24.7

z = 0.3 times 99 – 5 = 24.7

z=0.3×995=24.7

激活函数:采用 sigmoid 函数

a

=

1

1

+

e

z

=

1

1

+

e

24.7

1

a = frac{1}{1 + e^{-z}} = frac{1}{1 + e^{-24.7}} approx 1

a=1+ez1=1+e24.711

输出层:输出值

a

a

a 代表商品成为爆款的概率(接近 1 表明高可能性)

该过程通过调整权重

w

w

w 和偏置

b

b

b(训练过程),使模型预测与实际销售数据匹配,从而实现需求预测。

三、神经网络性能与数据量、硬件的关系

模型类型 数据需求特征 性能曲线特点 典型应用场景
传统 AI 算法 依赖人工特征工程,数据规模 线性增长后趋于饱和 规则明确的结构化数据处理
小型神经网络 数据规模 1 万 – 10 万条 初期提升快,后期出现过拟合 简单图像分类(MNIST 数据集)
中型神经网络 数据规模 10 万 – 100 万条 保持稳定性能提升 医疗影像辅助诊断
大型神经网络 数据规模 > 100 万条 呈指数级性能提升 自然语言处理(BERT 模型)

硬件层面,GPU 的并行计算能力使神经网络训练效率提升数百倍。以 ResNet – 50 模型为例,在 CPU 上训练 ImageNet 数据集需耗时数周,而使用 NVIDIA A100 GPU 仅需 1 – 2 天。

四、神经网络架构

(一)基本架构

#mermaid-svg-0c7FnFXp3Kn3silx {font-family:”trebuchet ms”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-0c7FnFXp3Kn3silx .error-icon{fill:#552222;}#mermaid-svg-0c7FnFXp3Kn3silx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-0c7FnFXp3Kn3silx .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-0c7FnFXp3Kn3silx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-0c7FnFXp3Kn3silx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-0c7FnFXp3Kn3silx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-0c7FnFXp3Kn3silx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-0c7FnFXp3Kn3silx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-0c7FnFXp3Kn3silx .marker.cross{stroke:#333333;}#mermaid-svg-0c7FnFXp3Kn3silx svg{font-family:”trebuchet ms”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-0c7FnFXp3Kn3silx .label{font-family:”trebuchet ms”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-0c7FnFXp3Kn3silx .cluster-label text{fill:#333;}#mermaid-svg-0c7FnFXp3Kn3silx .cluster-label span{color:#333;}#mermaid-svg-0c7FnFXp3Kn3silx .label text,#mermaid-svg-0c7FnFXp3Kn3silx span{fill:#333;color:#333;}#mermaid-svg-0c7FnFXp3Kn3silx .node rect,#mermaid-svg-0c7FnFXp3Kn3silx .node circle,#mermaid-svg-0c7FnFXp3Kn3silx .node ellipse,#mermaid-svg-0c7FnFXp3Kn3silx .node polygon,#mermaid-svg-0c7FnFXp3Kn3silx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-0c7FnFXp3Kn3silx .node .label{text-align:center;}#mermaid-svg-0c7FnFXp3Kn3silx .node.clickable{cursor:pointer;}#mermaid-svg-0c7FnFXp3Kn3silx .arrowheadPath{fill:#333333;}#mermaid-svg-0c7FnFXp3Kn3silx .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-0c7FnFXp3Kn3silx .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-0c7FnFXp3Kn3silx .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-0c7FnFXp3Kn3silx .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-0c7FnFXp3Kn3silx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-0c7FnFXp3Kn3silx .cluster text{fill:#333;}#mermaid-svg-0c7FnFXp3Kn3silx .cluster span{color:#333;}#mermaid-svg-0c7FnFXp3Kn3silx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:”trebuchet ms”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-0c7FnFXp3Kn3silx :root{–mermaid-font-family:”trebuchet ms”,verdana,arial,sans-serif;}

输入层: 商品特征

价格/销量/评价
隐藏层1: 特征提取

性价比/竞争力
隐藏层2: 语义理解

市场潜力
输出层: 预测结果

未来销量

每个神经元通过连接权重与下一层交互,如输入层到隐藏层的连接可表示为:

[

a

1

(

1

)

a

2

(

1

)

]

=

[

σ

(

w

11

(

0

)

x

1

+

w

12

(

0

)

x

2

+

b

1

(

0

)

)

σ

(

w

21

(

0

)

x

1

+

w

22

(

0

)

x

2

+

b

2

(

0

)

)

]

begin{bmatrix} a_1^{(1)} \ a_2^{(1)} \ end{bmatrix} = begin{bmatrix} sigma(w_{11}^{(0)}x_1 + w_{12}^{(0)}x_2 + b_1^{(0)}) \ sigma(w_{21}^{(0)}x_1 + w_{22}^{(0)}x_2 + b_2^{(0)}) \ end{bmatrix}

[a1(1)a2(1)]=[σ(w11(0)x1+w12(0)x2+b1(0))σ(w21(0)x1+w22(0)x2+b2(0))]

其中,

σ

sigma

σ 为激活函数,

w

(

l

)

w^{(l)}

w(l) 为第

l

l

l 层权重,

b

(

l

)

b^{(l)}

b(l) 为偏置。

(二)多层隐藏层

随着隐藏层增加,网络表达能力呈指数级增长:

2 层隐藏层:可拟合复杂非线性边界,如手写数字识别

3 – 5 层隐藏层:适用于图像语义分析(识别图片中的多物体)

10 层以上:在 Transformer 架构中实现长距离依赖建模(如机器翻译)

但层数增加会引入梯度消失 / 爆炸问题,需通过残差连接(Residual Connection)、批量归一化(Batch Normalization)等技术优化。

深度学习神经网络通过模拟人类大脑的信息处理机制,在理论与实践的双重驱动下不断进化。后续学习将聚焦于网络训练的优化算法(如 Adam、Adagrad)、正则化技术(Dropout、L1/L2 范数)以及经典网络架构(CNN、RNN、Transformer)的具体实现,进一步解锁其在复杂任务中的应用潜力。


continue…

文章来源于互联网:【学习笔记】机器学习(Machine Learning) | 第七章|神经网络(1)

赞(0)
未经允许不得转载:5bei.cn大模型教程网 » 【学习笔记】机器学习(Machine Learning) | 第七章|神经网络(1)
分享到: 更多 (0)

AI大模型,我们的未来

小欢软考联系我们