【机器学习05】神经网络、模型表示、前向传播、TensorFlow实现

文章目录

  • 一、神经网络简介 (Introduction to Neural Networks)
    • [1.1 什么是神经网络](#1.1 什么是神经网络)
    • [1.2 神经网络为何现在如此强大?](#1.2 神经网络为何现在如此强大?)
  • 二、神经网络的模型表示
    • [2.1 单个神经元:逻辑回归单元](#2.1 单个神经元:逻辑回归单元)
    • [2.2 构建网络:层 (Layers)](#2.2 构建网络:层 (Layers))
    • [2.3 神经网络如何自动学习特征](#2.3 神经网络如何自动学习特征)
  • 三、前向传播 (Forward Propagation)
    • [3.1 逐层计算详解](#3.1 逐层计算详解)
    • [3.2 更复杂的网络与数学符号](#3.2 更复杂的网络与数学符号)
    • [3.3 完整示例:手写数字识别](#3.3 完整示例:手写数字识别)
    • [3.4 神经网络的应用实例](#3.4 神经网络的应用实例)
  • [四、代码实现:使用 TensorFlow](#四、代码实现:使用 TensorFlow)
    • [4.1 [附录] 关于 NumPy 数组的说明](#4.1 [附录] 关于 NumPy 数组的说明)

视频链接
吴恩达机器学习p38-46


一、神经网络简介 (Introduction to Neural Networks)

经过对线性回归和逻辑回归的学习,我们已经掌握了构建强大预测模型的基础。现在,我们将进入一个更高级、更强大的算法领域:神经网络(Neural Networks),以及决策树等。

1.1 什么是神经网络

神经网络(NN)是一类算法,其最初的灵感来源于对生物大脑工作方式的模仿。

它并非一个全新的概念,早在20世纪80年代和90年代初就已被使用。但由于当时计算能力和数据量的限制,它在90年代后期一度失宠。然而,自2005年左右以来,得益于大数据和计算能力的飞速发展,神经网络迎来了巨大的复兴,并迅速在语音、图像、自然语言处理(NLP)等众多领域取得了突破性进展。

在大脑中,神经元(Neuron)是基本的信息处理单元。它通过树突(Dendrites)接收输入信号,处理后通过轴突(Axon)产生输出信号。

人工神经网络就是对这个过程的一个简化数学建模。我们将一个生物神经元抽象成一个接收数字输入、进行计算、然后输出一个数字的数学单元。

1.2 神经网络为何现在如此强大?

神经网络的再度崛起,主要得益于两个关键因素的结合:海量的可用数据(大数据)强大的计算能力(更快的处理器,特别是GPU)

上图清晰地展示了,当数据量非常大时,大型神经网络(绿色曲线)的性能远超传统的机器学习算法(红色曲线)。数据越多,模型越大,性能就越强。

二、神经网络的模型表示

2.1 单个神经元:逻辑回归单元

我们其实已经接触过最简单的神经元了------它本质上就是一个我们前面学过的逻辑回归单元

这个"神经元"接收输入 x(例如商品价格),通过一个 激活函数(activation function) (这里是Sigmoid函数),计算并输出一个 激活值(activation) a,这个 a 值代表了某个事件发生的概率(例如,商品成为爆款的概率)。

2.2 构建网络:层 (Layers)

神经网络的强大之处在于,它将许许多多这样的单个神经元,组织成一个个"层(Layer)"。

一个典型的神经网络由三部分组成:

  • 输入层 (Input Layer) :接收原始的特征数据 x⃗(如价格、运费、营销投入等)。
  • 隐藏层 (Hidden Layer):位于输入层和输出层之间,负责进行大部分的计算。隐藏层能够学习到数据中更抽象、更深层次的特征(如"性价比"、"品牌知名度"等)。
  • 输出层 (Output Layer) :输出最终的预测结果 a

当一个网络包含多个隐藏层时,它也被称为多层感知机(Multilayer Perceptron, MLP) 。我们可以通过增加隐藏层的数量和每层神经元的数量,来构建更加复杂的神经网络架构(architecture)

2.3 神经网络如何自动学习特征

神经网络,特别是深度神经网络(有很多隐藏层的网络),最神奇的能力之一就是自动学习特征的层次化表示

以人脸识别为例,首先,我们需要将一张图像转化为神经网络可以处理的数字。我们把图像的每个像素点的灰度值"拉直",形成一个长长的输入向量 x⃗

然后,将这个向量输入神经网络:

  • 第一个隐藏层:可能会学习到如何识别一些基础的视觉元素,比如不同方向的边缘、角点。
  • 第二个隐藏层:将第一层的边缘和角点信息组合,学习识别更复杂的部件,比如眼睛、鼻子。
  • 更深的隐藏层:继续组合,学习识别人脸的轮廓。
  • 输出层:接收到人脸轮廓这一高度抽象的特征后,最终判断出这张脸属于谁。

这种从简单到复杂的特征逐层学习和抽象的能力,是神经网络在图像识别、车辆检测等复杂任务上取得巨大成功的关键。

三、前向传播 (Forward Propagation)

神经网络从输入层接收数据,逐层计算,直到输出层得到最终结果的这个过程,被称为前向传播(Forward Propagation)

3.1 逐层计算详解

我们来分解一下这个计算过程。每一层的每个神经元,都会接收来自前一层所有神经元的激活值作为输入,然后进行计算。

以上图为例,layer 1 的激活值向量 a⃗[¹] 是由输入 x⃗ 计算得出的。然后,layer 2 的输出 a[²] 是由 a⃗[¹] 作为输入计算得出的。

最终,输出层的神经元给出预测值 a[²] 后,我们可以通过一个阈值(如0.5)来做出最终的分类判断 ŷ

3.2 更复杂的网络与数学符号

当网络更深时,这个过程是完全一样的:每一层的输出,都成为下一层的输入。

我们来看一下更深网络中,layer 2layer 3 的计算过程。layer 3 的每一个神经元,都接收来自 layer 2 的完整激活向量 a⃗[²] 作为输入,并计算出自己的激活值。

为了精确描述这个过程,我们需要一套标准的符号。请注意下图中 a₂[³] 各部分的下标和上标的含义。

这里有一个小测验,可以帮助我们巩固对符号的理解。正确的写法是 a₂[³] = g(w⃗₂[³] · a⃗[²] + b₂[³]),因为输入是来自上一层(layer 2)的整个向量 a⃗[²]

现在,我们来总结一下通用的数学符号:

  • aⱼ[ˡ] : 表示第 l 层(layer l)中,第 j 个神经元(unit j)的激活值。
  • w⃗ⱼ[ˡ], bⱼ[ˡ] : 分别表示第 l 层、第 j 个神经元对应的权重向量和偏置。
  • a⃗[ˡ⁻¹] : 表示第 l-1 层的激活向量,它是第 l 层的输入。

那么,第 l 层第 j 个神经元的计算公式为:
aⱼ[ˡ] = g(w⃗ⱼ[ˡ] · a⃗[ˡ⁻¹] + bⱼ[ˡ])

3.3 完整示例:手写数字识别

我们来看一个识别手写数字"0"或"1"的端到端示例。

  • 输入 (x⃗): 8x8像素的图片,拉直成64维的向量。
  • Layer 1 : 25个神经元,计算出 a⃗[¹]
  • Layer 2 : 15个神经元,接收 a⃗[¹],计算出 a⃗[²]
  • Layer 3 (Output) : 1个神经元,接收 a⃗[²],计算出最终概率 a[³]

Layer 2 的计算过程如下:

最终,输出层的计算(前向传播的最后一步)如下:

3.4 神经网络的应用实例

神经网络可以学习非常复杂的非线性决策边界。比如在咖啡豆烘焙中,我们可以用神经网络来区分"优质咖啡"(红叉)和其他类别。

四、代码实现:使用 TensorFlow

现代深度学习框架(如 TensorFlow)极大地简化了构建和训练神经网络的过程。

我们可以用 TensorFlow 的 Dense 层来搭建上面咖啡豆分类的模型。

同样,前面手写数字识别的三层网络,也可以用几行代码清晰地构建出来。

4.1 [附录] 关于 NumPy 数组的说明

在实际编程中,输入数据的**形状(shape)**非常重要。

TensorFlow 通常期望接收 (N, D) 形式的二维数组(矩阵),其中 N 是样本数量,D 是特征维度。

  • np.array([200, 17]) 创建的是一维数组,需要注意。
  • np.array([[200, 17]]) 创建的是 1x2 的二维数组,这通常是喂给模型时的正确格式(代表1个样本,2个特征)。

框架的输出通常是 Tensor 格式,可以使用 .numpy() 方法将其转换为 NumPy 数组,以便后续处理。

相关推荐
William.csj4 小时前
服务器/Pytorch——对于只调用一次的函数初始化,放在for训练外面和里面的差异
人工智能·pytorch·python
魔术师卡颂4 小时前
不就写提示词?提示词工程为啥是工程?
前端·人工智能·后端
Ingsuifon4 小时前
pytorch踩坑记录
人工智能·pytorch·python
聚梦小课堂4 小时前
3D生成软件Rodin 2.0 简单测试案例
人工智能·图形图像·3d生成·rodin·产品体验
smj2302_796826524 小时前
解决leetcode第3721题最长平衡子数组II
python·算法·leetcode
CLubiy4 小时前
【研究生随笔】PyTorch中的概率论
人工智能·pytorch·深度学习·概率论
m0_626535204 小时前
力扣题目练习 换水问题
python·算法·leetcode
第六五5 小时前
DPC和DPC-KNN算法
人工智能·算法·机器学习
Xxtaoaooo5 小时前
OCR文字识别前沿:PaddleOCR/DBNet++的端到端文本检测与识别
人工智能·ai·ocr·文本检测·dbnet++