当前位置: 首页 > news >正文

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

文章目录

  • 一、神经网络简介 (Introduction to Neural Networks)
    • 1.1 什么是神经网络
    • 1.2 神经网络为何现在如此强大?
  • 二、神经网络的模型表示
    • 2.1 单个神经元:逻辑回归单元
    • 2.2 构建网络:层 (Layers)
    • 2.3 神经网络如何自动学习特征
  • 三、前向传播 (Forward Propagation)
    • 3.1 逐层计算详解
    • 3.2 更复杂的网络与数学符号
    • 3.3 完整示例:手写数字识别
    • 3.4 神经网络的应用实例
  • 四、代码实现:使用 TensorFlow
    • 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 数组,以便后续处理。

[图片]

http://www.dtcms.com/a/507445.html

相关文章:

  • 视频教做家常菜的网站wordpress招商平台
  • 三角洲行动 游戏特色 巨 椰 云手机
  • 正则表达式魔法:用Python Re模块驯服文本数据的艺术
  • 《算法每日一题(1)--- 连续因子》
  • 019数据结构之栈——算法备赛
  • 网站添加内容PHP amp MySQL网站建设宝典
  • 消防有哪些网站合适做烟台网站推广排名
  • Python跳跳棋游戏:从基础实现到高级算法详解
  • gitlab搭建教程以及操作
  • 为什么称 OC 的 UIKit
  • 广州小网站建设天河区pc端网站建设
  • SpringBoot + Vue + Redis 实现验证码登录功能
  • 程序设计基础第3周作业
  • 安卓系统中线程优先级Priority查看方式汇总
  • 北京企业建设网站制作呼叫中心系统解决方案
  • IDEA EmmyLua 配置+调试
  • Win11 微软账户登录后,设置没有同步到新电脑,怎样强制刷新?
  • 网站页面设计教程济宁定制网站建设推广
  • 轮询那些事儿
  • GitLab安装
  • Redis八股
  • 网站gif素材dw做网站背景音乐
  • 做网站编程有钱途么做玩具订制网站好处
  • CI/CD:现代软件开发的持续交付之道
  • 【理论知识】Q/K/V权重矩阵学习笔记
  • 【小增长电商软件分享】微信私域淘宝电商补单/做基础销量:如何有效控制粉丝错货、复购、订单插旗及客服转账返款等常见痛点|粉丝订单管理|电商鱼塘运营方案
  • Tomcat安装与HTML响应实战
  • 第三章深度学习---核心库TensorFlow 和 PyTorch 实操指南(四)
  • YOLO v4模型
  • uni-app 小程序开发避坑:诡异的 `module ‘...‘ is not defined` 错误与我的解决方案