从头开始机器学习:神经网络

news2024/11/28 1:37:43

一、说明

      如果你还没有做过逻辑回归,你会在这里挣扎。我强烈建议在开始之前查看它。您在逻辑回归方面的能力将影响您学习神经网络的难易程度和速度。

二、神经网络简介

        神经网络是一个神经元网络。这些神经元是逻辑回归函数,它们被链接在一起形成一个网络,从人脑中获取松散的灵感。在监督式机器学习算法家族中,神经网络及其所有后续架构是一些更难学习、理解和构建的算法。随着这种复杂性的增加,带来了令人难以置信的性能,神经网络能够“几乎”学习任何东西。到目前为止,我们一直将所有的 ML 算法视为函数近似器。我们有数据,但我们想弄清楚定义该数据的函数。神经网络可以近似非常困难和复杂的函数。然而,有时他们是如何做到的似乎令人困惑。事实上,在机器学习中的所有模型中,神经网络可能是最神秘的,通常类似于魔法。

        我建议在阅读此博客之前,先观看3blue1brown关于神经网络的系列文章。动画和可视化将帮助您直观地了解神经网络的实际工作原理。

        我相信他使用的模型有一些警告,以简化教学。他使用均方误差作为误差函数,使用sigmoid函数作为输出层。我们将继续使用交叉熵误差和softmax激活。我也会避免观看该系列的最后一个视频,因为当您回到这里时可能会导致混乱,因为推导和变量不会相同。

三、设置模型

        简单神经网络的架构与我们的 Softmax 回归算法并没有什么不同,我们在之前的博客中已经介绍过。我们只是在神经元输出层之前添加另一层神经元,计算属于每个类的概率。这称为隐藏层,用 z 表示。

        我们现在将坚持只有 1 个隐藏层和 3 个神经元,以保持一切简单。但是,您可以根据需要在每层中拥有任意数量的隐藏层和任意数量的神经元,没有限制。

四、变量名称、符号和表示法

        在我们深入研究神经网络之前,拥有某种标准化符号非常重要,这样就不会混淆任何变量的含义。一旦我们开始进行反向传播,这是解决神经网络权重的算法,就会有一堆变量的海啸,让你不知所措。事实上,这可能是反向传播最难的部分,数学与 Softmax 回归相同,只是有更多的变量和复杂性层使其很难跟上。您将希望对符号感到非常熟悉,否则您将在反向传播过程中遇到困难。

  • N = 样本
    数 - 测量 10 个个体的重量,N = 10
  • D = 每个样本
    的特征数 - 测量身高、体重和年龄以预测血压。D=3
  • X = 大小为 NxD
    的数据矩阵 - 每行都是一个样本,而每一列都是该样本的一个特征
  • x = 大小为 Dx1 的单个样本
  • yn = 来自大小为 Kx1 的第 n 个样本的模型的单个目标标签或预测
  • Y = 模型中的所有目标标签或预测作为大小为 NxK 的向量(如果一个热编码)和大小为 Nx1 的矩阵(如果不是)
  • tn = 第 n 个样本中的单个目标标签
  • T = 所有目标标签作为大小为 NxK 的向量(如果一个热编码)和大小为 Nx1 的矩阵(如果不是)
  • P(y=k|x) = 单个值,我们的模型将类 k 预测为概率
  • P(Y|X) = 我们对所有 N 个目标的所有预测的矩阵,给定 X,大小与 Y 相同。
  • E 或 J = 误差函数 = 成本函数 = 目标函数

        现在,我们对 Y 有两种不同含义的原因有两个。使用 Y 表示目标,使用 P(Y|X)对于预测很有用,因为它代表概率,这就是我们想要解释模型的方式。将 T 用于目标,将 Y 用于预测对于推导和编码很有用,因为它使编写方程和代码变得更加简单。我们不想写 P(Y|X)一直以来,它都非常麻烦。

        通常,大写字母是指矩阵,而小写字母是指向量/标量。我们将使用小写字母来索引一系列值。例如,我们使用小写的“n”来索引所有 N 个样本。

        现在让我们看一下与隐藏层相关的变量,当我们添加更多隐藏层时,我们最终会用完字母来识别它们,因此我们将使用上标。这将使推导在短期内更加混乱,即使我们确实可以访问字母,但最好现在就习惯它们,在神经网络变大之前。否则,一旦从字母的过渡变得不可避免,你就会迷失在所有的方程式中。

        每个隐藏层都有自己的一组权重和偏差,我们将使用上标来引用每个相应的变量。

        我们还引入一些变量来计算隐藏层及其各自的神经元

        我们还希望能够为不同形状和大小的神经网络执行此操作,而不仅仅是我们上面计算的神经网络。我们将把信仰的飞跃从这个具体的例子带到一个抽象的、广义的前向传播的表示。

        让我们创建一个更通用的权重矩阵版本,可用于任何隐藏层。

        注意矩阵的大小,任何给定隐藏层的权重矩阵 W(l) 的大小取决于前一层的大小。

        有2种特殊情况,上述尺寸不适用,连接到第一个隐藏层的输入层的权重矩阵,以及连接到输出层的最后一个隐藏层的权重矩阵。让我们也来看看这些。

        我们可以想到 D=M(0)

        我们可以想到 K=M(L+1)

        现在,我们可以很容易地引用任何大小的神经网络的权重矩阵,在任何给定层上都有任意数量的神经元。

五、前向传播

5.1 一般理解

        我们可以很容易地创建一个小型神经网络,并使用随机权重进行预测。这称为前向传播。让我们继续之前的示例,其中包含 2 个输入节点、一个包含 3 个神经元的隐藏层和 2 个输出节点。所以在这种情况下,L = 1 和 m(1) = 3

        让我们首先为我们的小型神经网络分配一些随机权重,并初始化输入和输出。

        让我们一起做一个 1 个样本预测,从 X 的第一个样本开始。首先从输入层到隐藏层。

        现在从隐藏层到输出层。

        让我们回想一下softmax公式

        概率总和为 1 !

        如果您想要更多练习,我建议您手动浏览 X 中的其他 2 个样本并计算结果。

5.2 矢量化模型

        现在,手动逐个执行所有这些计算非常慢,我们还希望能够在代码中表示前向传播。我们希望能够立即计算所有 N 个样本的预测。我们已经熟悉了前面博客中的复合函数和矢量化,所以让我们在这里应用它。

        对于单个样本,我们有

        对于所有 N 个样品,我们有

        关于偏差项的大小,这里实际上存在一个数学错误。让我们快速浏览一下。

        让我们回想一下 X、W 和 b 的大小

        请记住,矩阵加法要求矩阵的大小相等,因此实际上 b 的大小必须如下所示为 NxM(1) 才能在数学上正确

        基本上,这样做是确保为所有N个输入添加偏置项。

        幸运的是,当我们编码时,NumPy已经在我们编写时自动为我们执行此操作

X.dot(W) + b 

        我们拥有构建第一个前馈神经网络所需的一切对模型进行编码

六、反向传播

        在我们深入研究深度神经网络的梯度之前。让我们继续我们的 1 个隐藏层的例子,并从那里慢慢建立起来。我想明确指出,更重要的是了解我们为什么以及如何进行反向传播,而不是担心微积分。微积分只是一个机械计算,在实践中,当我们使用TensorFlow和PyTorch等深度神经网络库时,它们会自动为我们完成所有微积分并找到梯度。因此,如果您不能立即进行推导,请不要气馁,这并不意味着您不擅长机器学习,只是意味着您需要复习微积分。您仍然可以继续并在代码中实现模型。

        我们的损失函数与 Softmax 回归相同。但是现在我们有 2 组权重需要解决,而不仅仅是 1 组。我们从网络最末端的权重开始,因此称为“反向传播”,因为将这些权重更改一些小值(导数)只会导致输出层发生变化。随着我们在网络中的进一步,权重的一些微小变化将影响网络中后续隐藏层的权重。

        让我们像往常一样快速可视化我们希望采用的导数,如果我们对 W(2) 中的单个权重进行一些小的更改,其他变量将受到影响,这就是链式规则的关键。

召回 k' 是一个虚拟变量,用于索引 K

        总的来说,我们得到了这个导数,它几乎与softmax导数相同,只是变量命名约定有点不同

        方便的是,当我们进行softmax回归时,我们已经计算了这两个方程的前两个导数,而第三个导数类似于softmax回归中的导数,其中它只是线性项的导数。

        把所有的东西放在一起,我们得到

        到目前为止还不错,现在我们需要取下一组将输入层连接到隐藏层的权重和偏差的导数。

        现在,如果我们对 W(1) 中的权重进行一些小的更改,这将对所有后续变量产生蝴蝶效应。让我们快速可视化一下。

        由于 K 不再出现在外部项中,我们必须对 K 求和以获得我们的偏导数。直觉上这是有道理的,因为现在我们对 W(1) 中的权重所做的任何小更改都会影响权重连接到的神经元,这将改变所有 k 激活,然后会影响所有 k' softmax 函数。k 和 k' 的总和都在 K 之上。

        在重用它们(传播)之前,我们已经计算了其中一些导数。

        以下衍生品也非常简单。

        我们可以使用激活本身来表示 Z(1) 层激活函数的导数。我们在进行逻辑回归时已经计算了这个导数。假设我们想使用不同的激活函数,我们可以替换

        现在把所有东西放在一起

        最后一步是对此进行矢量化,以使计算快速简便。让我们看一下这些矩阵的大小,如果我们扩展 2 个总和、所有权重和所有输入。

        我们想操纵这个术语,以便所有的乘法在维度方面都是有效的。我们先来看看 W(2) 的转置

        现在我们可以定义激活函数梯度 Z(1-Z) 与 T-Y 和 W 转置之间的乘积之间的元素乘法。

        最后取 X 的转置,我们有一个完整的方程来表示 W(1) 中所有权重的梯度。

        生成的矩阵应为 DxM(1),其大小与 W(1) 相同,后者表示 W(1) 中所有权重的梯度。

七、 添加更多图层

        现在,如果我们想添加第二个隐藏层,甚至更多,导数将变得相当长且计算繁琐。幸运的是,像PyTorch和TensorFlow这样的深度学习库中存在自动差分,我们在编程时不必担心这一点,但理解理论仍然很重要。您可能已经注意到,此导数存在一种反复出现的模式,我们可以重用我们之前计算的导数,并且随着我们添加更多层,无论大小如何,导数的整体结构都保持不变。我们可以利用这一点为任意数量的隐藏层编写更通用的解决方案。

        让我们将之前的神经网络扩展到两个隐藏层,而不仅仅是一个。

        我们已经解决了 W(3) 的导数。

        W(2) 的导数也应该类似于我们之前求解的导数。唯一改变的是变量命名和最后一个偏导数,因为 W(2) 依赖于前一个隐藏层 Z(1),而不是像以前那样依赖于 X。

        尝试像我们之前那样绘制神经网络来仔细检查这个导数。

        解决方案是

        现在终于到了 W(1) 的导数。这个导数会很长,但我希望你尝试自己找出模式并慢慢计算导数。

        你会注意到,我们已经解决了所有这些衍生物,只是上标不同,现在也许能够理解为什么我说我们从一开始就使用上标更好。

        为了推广,假设我们想使用不同的激活函数,我们可以将激活函数的导数替换为 z',而不是像我们现在这样将 sigmoid 的导数替换为 sigmoid,那么您可以简单地将 z' 替换为所选激活函数的重复导数。

        最后我们得到

八、确定模式

        您可能已经注意到,当我们添加新的隐藏层时,我们正在添加 2 个新项,因此我们的第一层梯度有 7 个导数,第二层有 5 个导数,第三层有 3 个导数。

        我们越往前走,我们遇到的术语就越常见

        每次创建新层时,我们都会添加一个线性变换和一个激活函数。

        进行中.....拉曼欣德

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1096684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vim基础命令批量替换

正常模式 v(小写)正常模式下面会出现VISUAL,可以可以选择指定连续区域可以随意选择,这个用的最多 ctrl v(小写) 这个可以类似于sublime这种按照固定前几个字符选择 最后一列哪个a其实已经选择了&#xf…

论文导读 | 八月下旬特征选择专题期刊精选

推文作者:丰于杭 编者按 在“八月下旬特征选择专题期刊精选”中,我们有主题、有针对性地选择了MSOM, Operations Research, Management Science等管理科学杂志中一些有趣的文章,不仅对文章的内容进行了概括与点评,而且也对文章的结…

c++视觉处理----图像模板匹配

模板匹配matchTemplate() matchTemplate() 是OpenCV中用于模板匹配的函数之一。它的主要作用是在一幅图像中搜索模板图像的位置,即找到模板在图像中的匹配位置。 函数原型如下: void cv::matchTemplate(InputArray image,InputArray templ,OutputArra…

生物信息学研究方向

一、生信的两个大类研究方向: 目录 一、生信的两个大类研究方向: 前者偏理论,后者偏向证明 第一类研究方向: 第二类研究方向: 二、具体的研究方向 1、序列分析 2、计算进化生物学 3、生物多样性的度量 4、蛋…

云原生与服务网格

云原生与服务网格 目录 文章来源 【优点知识】 istio课程大纲: https://youdianzhishi.com/web/course/1047 1、云原生技术范畴解读 什么是云原生 2大架构特征:不可变基础设施,声明式API CNCF 云原生整体视图 provisioning 供应 compli…

摩尔信使MThings数据配置参数详述

摩尔信使MThings支持丰富的数据配置方法,以适配一定程度的非标Modbus场景。 针对标准Modbus数据协议,用户仅需修改少量的配置,如寄存器地址、数量,其他参数默认即可。 同时为了便于用户全面了解配置参数,文中详述了每…

我献出这篇 go 精华总结,阁下该如何应对

文章目录 1.初识包管理2.输出3.注释4.初识数据类型5.变量5.1 声明变量的意义?5.2 变量名要求5.3 变量简写5.4 作用域5.5 赋值及内存相关注意事项 阶段练习题6.常量6.1 因式分解6.2 全局6.3 iota 7.输入8.条件语句8.1 最基本8.2 多条件判断8.3 嵌套 9. 荐书 《Go编程…

什么是Token?一文带你深入理解Token

Token在各种技术领域和应用场景中都扮演着重要的角色,它的含义和用途也是非常广泛的。下面我将从不同角度对Token进行深入解析,带你全面了解Token的含义、用途和重要性。 一、计算机科学和网络安全 在计算机科学和网络安全领域,Token通常指的…

400电话-申请400电话-400电话如何申请-400电话申请指南:简单步骤助您顺利获得400电话

引言: 随着企业竞争日益激烈,提供优质客户服务和建立品牌形象变得至关重要。而拥有一个易记且专业的400电话,不仅能提升企业形象,还能为客户提供便利与信任。本文将为您介绍如何申请400电话,帮助您顺利获得专属电话号码…

双因子认证是什么? 安当加密

双因素认证常见类型 知识证据: 这包括密码、问题和答案等。这种类型的证据通常容易被忘记或被猜测出来,因此,它们常常需要额外的安全措施,例如在密码丢失时重置。物理证据: 这包括指纹、面部、声音和手部特征等。这种…

【绝地求生】轻松提升战斗力,分享顶级吃鸡干货!

大家好!作为一名热爱绝地求生的玩家,您是否想要提高自己的游戏战斗力,分享顶级的吃鸡干货呢?在本文中,我将带领大家探索如何通过一些实用工具和技巧来实现这些目标。 首先,让我们来了解绝地求生作图工具推荐…

-带你看懂11种API类型及应用-

一起走进多样的API,多样的精彩 随着互联网行业的日益发展,API(Application Programming Interface)这个名词对于绝大多数来说都已不再陌生。然而,实际上,根据不同标准可以划分出不同类型的API。今天,让我们来走…

因为不写注释引发的惨案

程序员对代码注释可以说是又爱又恨又双标……你是怎么看待程序员不写注释这一事件的呢? 一、一个关于注释的故事 2022年吧,我在写代码的时候,因为太懒惰了,没有写注释。结果,过了几个月我再来看的时候,完…

从零开始学习 Java:简单易懂的入门指南之线程池(三十六)

线程池 1.1 线程状态介绍1.2 线程池-基本原理1.3 线程池-Executors默认线程池1.4 线程池-Executors创建指定上限的线程池1.5 线程池-ThreadPoolExecutor1.6 线程池-参数详解1.7 线程池-非默认任务拒绝策略 1.1 线程状态介绍 当线程被创建并启动以后,它既不是一启动…

WLAN 无线案例(华为AC控制器配置模板)

实验说明: 无线用户VLAN 30 192.168.30.0/24 AP和AC用VLAN 20 192.168.20.0/24 有线网段 VLAN 10 192.168.10.0/24 步骤一:全网互通 sw1: sysname sw1 # vlan batch 10 20 30 # dhcp enable # ip pool 20 gateway-list 192.168.20.1…

【RocketMQ 系列三】RocketMQ集群搭建(2m-2s-sync)

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。 💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精…

Python 脚本中的 FFmpeg

FFmpeg 是快进运动图像专家组的缩写。 它是一个开源项目,提供了ffmpeg、ffplay、ffprobe等工具来处理多媒体文件。 FFmpeg 是一个命令行实用程序,可帮助转换视频/音频格式、压缩视频、从视频中提取音频、创建 GIF、剪切视频等。 本篇文章将介绍在Pytho…

数据库中了mkp勒索病毒,mkp勒索病毒解密,数据恢复

最近一段时间网络上的mkp勒索病毒比较猖獗,给企业的服务器数据库带来了严重影响。通过这一波的mkp勒索病毒攻击,云天数据恢复中心的工程师发现,大部分被攻击的企业,主要是因为网络安全意识不高,服务器安全防护没有做到…

基于STM32的森林火灾监控系统设计

一、设计简述 基于STM32设计的森林火灾监控系统(OneNet) 1.1 项目背景 近年来,随着全球气候变暖和人类活动的不断增加,森林火灾成为全球性的重大灾害之一。据统计,每年全球因森林火灾造成的经济损失高达数十亿美元,严重威胁着生态环境和人民生命财产安全。如何及时预警和响…

2023 年 42 周

2023 年 42 周 说句题外话,上次写这玩意儿居然都是两年前的事情了……这次换个方式计算,直接用周数来 学习 📑 进度 本周其实进度有那么点乱,学了一些 JPA/Hibernate 的内容,LC 刷题进度也拖慢了一些,基本…