浅层神经网络

news2024/11/15 21:28:35

目录

1、神经网络表示

2、计算神经网络的输出

3、多个样本的向量化

4、激活函数

5、激活函数的导数

6、神经网络的梯度下降法


1、神经网络表示

  • 输入层:有输入特征𝑥1𝑥2𝑥3
  • 隐藏层:四个结点,表示你无法在训练集中看到他们,使用了sigmoid 激活函数
  • 输出层:它负责产生预测值,使用了sigmoid 激活函数
  • 符号惯例:其中,𝑥表示输入特征,𝑎表示每个神经元的输出,𝑊表示特征的权重,上标表示神经网络的层数(隐藏层为 1),下标表示该层的第几个神经元
  • ​​​​​​​注意 :计算网络的层数时,输入层是不算入总层数内,所以隐藏层是第一层,输出层是第二层。第二个惯例是我们将输入层称为第零层,所以在技术上,这仍然是一个三层的神经网络,因为这里有输入层、隐藏层,还有输出层。但是在传统的符号使用中,阅读研究论文中,人们将这个神经网络称为一个两层的神经网络,不将输入层看作一个标准的

2、计算神经网络的输出

  • 小圆圈代表了计算的两个步骤。
  • 第一步,计算𝑧1 [1] , 𝑧1 [1] = 𝑤1 [1]𝑇 𝑥 + 𝑏1 [1]。
  • 第二步,通过激活函数计算𝑎1 [1] , 𝑎1 [1] = 𝜎(𝑧1 [1] )​​​​​​​
  • 隐藏层的第二个以及后面两个神经元的计算过程一样,只是注意符号表示不同,最终分别得到𝑎2​​​​​[1]𝑎3[1]𝑎4 [1]

  •  向量化计算:如果你执行神经网络的程序,用 for 循环来做这些看起来真的很低效

  • 对于神经网络的第一层,给予一个输入 𝑥 ,得到 𝑎 [1] 𝑥 可以表示为 𝑎 [0] 。通过相似的衍生
    你会发现,后一层的表示同样可以写成类似的形式,得到 𝑎 [2],𝑦^ = 𝑎 [2](隐藏层和输出层都使用了sigmoid 激活函数)。具体过程见公式

  •  如上图左半部分所示为神经网络,把网络左边部分盖住先忽略,那么最后的输出单元就
    相当于一个逻辑回归的计算单元。当你有一个包含一层隐藏层的神经网络,你需要去实现以
    计算得到输出的是右边的四个等式,并且可以看成是一个向量化的计算过程,计算出隐藏层
    的四个逻辑回归单元和整个隐藏层的输出结果,如果编程实现需要的也只是这四行代码。

3、多个样本的向量化

  • 𝑎 [2](𝑖)(𝑖)是指第𝑖个训练样本而[2]是指第二层

  •  ​​​​​​​证明:𝑊[1] 是一个矩阵,𝑥(1) , 𝑥 (2) , 𝑥 (3)都是列向量,矩阵乘以列向量得到列向量,下面

将它们用图形直观的表示出来​​​​​​​

  •  所以从图中可以看出,当加入更多样本时,只需向矩阵𝑋中加入更多列

4、激活函数

  • 在前面的神经网路的前向传播中,𝑎 [1] = 𝜎(𝑧 [1] )𝑎 [2] = 𝜎(𝑧 [2] )这两步会使用到 sigmoid 函数。 sigmoid 函数在这里被称为激活函数,但是,有时其他的激活函数效果会更好

  • 𝑔(𝑧 [1] ) = 𝑡𝑎𝑛ℎ(𝑧 [1] ) 效果总是优于 sigmoid 函数。因为函数值域在-1 和+1 的激活函数,其均值是更接近零均值的。在训练一个算法模型时,如果使用 tanh 函数代替 sigmoid 函数中心化数据,使得数据的平均值更接近 0 而不是 0.5
  • 但有一个例外:在二分类的问题中,对于输出层,因为𝑦的值是 0 或 1,所以想让𝑦^的数值介于 0 和 1 之间,而不是在-1 和+1 之间。所以需要使用 sigmoid 激活函数
  • ​​​​​​​对隐藏层使用 tanh 激活函数,输出层使用 sigmoid 函数
  • ​​​​​​​sigmoid 函数和 tanh 函数两者共同的缺点是,在𝑧特别大或者特别小的情况下,导数的梯度或者函数的斜率会变得特别小,最后就会接近于 0,导致降低梯度下降的速度

  •  选择激活函数的经验法则:
    如果输出是 0 1 值(二分类问题),则输出层选择 sigmoid 函数,然后其它的所有单
    元都选择 Relu 函数。
    这是很多激活函数的默认选择,如果在隐藏层上不确定使用哪个激活函数,那么通常会
    使用 Relu 激活函数。有时,也会使用 tanh 激活函数,但 Relu 的一个优点是:当 𝑧 是负值的
    时候,导数等于 0
    这里也有另一个版本的 Relu 被称为 Leaky Relu
    𝑧 是负值时,这个函数的值不是等于 0 ,而是轻微的倾斜。
    尽管在实际中 Leaky ReLu 使用的并不多,但是这个函数通常比 Relu 激活函数效果要好

  • sigmoid 激活函数:除了输出层是一个二分类问题基本不会用它。
    tanh 激活函数: tanh 是非常优秀的,几乎适合所有场合。
    ReLu 激活函数:最常用的默认函数,,如果不确定用哪个激活函数,就使用 ReLu 或者
    Leaky ReLu
  • why:在神经网络中使用非线性激活函数的主要原因是,如果不使用非线性激活函数,多层神经网络就相当于单层线性模型,而无法捕捉复杂的非线性关系。因此,通过使用非线性激活函数,神经网络可以学习更加复杂和抽象的模式,从而提高其预测和分类能力。
  • 此外,非线性激活函数还可以解决梯度消失的问题。在深层神经网络中,当使用线性激活函数时,每一层的输出都是前一层输出的线性组合,这种线性组合对梯度的贡献非常小,导致梯度在反向传播时逐渐消失。而非线性激活函数可以引入非线性变换,增加梯度的大小,从而避免梯度消失问题。 因此,使用非线性激活函数是神经网络能够充分发挥其优势的重要因素之一
  • 因此,不能在隐藏层用线性激活函数,可以用 ReLU 或者 tanh 或者 leaky ReLU 者其他的非线性激活函数,唯一可以用线性激活函数的通常就是输出层

5、激活函数的导数

  • 在神经网络中使用反向传播的时候,你真的需要计算激活函数的斜率或者导数。针对以
    下四种激活,求其导数如下:
1 sigmoid activation function ​​​​​​​

 2) Tanh activation function

 3Rectified Linear Unit (ReLU)

 4Leaky linear unit (Leaky ReLU)

6、神经网络的梯度下降法

  • 单隐层神经网络会有𝑊[1], 𝑏 [1] 𝑊 [2] 𝑏 [2] 这些参数,还有个𝑛𝑥 表示输入特征的个
    数, 𝑛 [1] 表示隐藏单元个数, 𝑛 [2]表示输出单元个数。
  • 矩阵 𝑊 [1] 的维度就是 (𝑛 [1] , 𝑛 [0]),𝑏 [1]就是𝑛 [1] 维向量,可以写成(𝑛 [1] , 1) ,就是一个的列
    向量。 矩阵 𝑊 [2] 的维度就是(𝑛 [2] , 𝑛 [1] ),𝑏 [2]的维度就是(𝑛 [2] , 1) 维度​​​​​​​
  • ​​​​​​​​​​​​​​Cost function

  •  训练参数需要做梯度下降,在训练神经网络的时候,随机初始化参数很重要,而不是初
    始化成全零。当你参数初始化成某些值后,每次梯度下降都会循环计算以下预测值:

  •  正向传播方程如下:

  •  反向传播方程如下: 这些都是针对所有样本进行过向量化,𝑌是1 × 𝑚的矩阵;这里 np.sum 是 python numpy 命令,axis=1 表示水平相加求和,keepdims 是防止python 输出那些古怪的秩数(𝑛, ),加上这个确保阵矩阵𝑑𝑏 [2]这个向量输出的维度为(𝑛, 1)这样标准的形式。

  •  开始计算反向传播时,需要计算隐藏层函数的导数,输出在使用 sigmoid 函数进行二元分类。这里是进行逐个元素乘积,因为𝑊[2]𝑇𝑑𝑧 [2]和(𝑧 [1] )这两个都为(𝑛 [1] , 𝑚)矩阵

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

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

相关文章

验证性实验 - 逻辑回归

练习2:逻辑回归 介绍 在本练习中,您将实现逻辑回归并将其应用于两个不同的数据集。还将通过将正则化加入训练算法,来提高算法的鲁棒性,并用更复杂的情形来测试模型算法。 在开始练习前,需要下载如下的文件进行数据上…

前端Vue非常简单实用商品分类展示组件 侧边商品分类组件

前端vue非常简单实用商品分类展示组件 侧边商品分类组件 &#xff0c; 下载完整代码请访问uni-app插件市场址:https://ext.dcloud.net.cn/plugin?id13084 效果图如下&#xff1a; #### 使用方法 使用方法 <!-- flist:第一级数组 slist&#xff1a;第二级数组 tlist&…

JS 介绍 Babel 的使用及 presets plugins 的概念

一、Babel 是什么 Bebal 可以帮助我们将新 JS 语法编译为可执行且兼容旧浏览器版本的一款编译工具。 举个例子&#xff0c;ES6&#xff08;编译前&#xff09;&#xff1a; const fn () > {};ES5&#xff08;编译后&#xff09;&#xff1a; var fn function() {}二、B…

NLP实战:使用Word2vec实现文本分类

目录 一、数据预处理 1、加载数据 2. 构建词典 3.生成数据批次和迭代器 二、模型构建 1.搭建模型 2.初始化模型 3.定义训练与评估函数 三、训练模型 1. 拆分数据集并运行模型 2. 测试指定数据 &#x1f368; 本文为[&#x1f517;365天深度学习训练营]内部限免文章&…

设计模式篇---单例模式

文章目录 概念结构与实现优缺点 概念 单例模式是结构最简单的设计模式&#xff0c;通过单例模式可以保证在整个系统中的一个类只有一个实例&#xff0c;从而节约系统资源。举个例子&#xff0c;比如windows电脑下的任务管理器只能打开一个&#xff0c;这个就是单例模式&#x…

【C语言进阶】程序员必备技能之文件操作

目录 &#x1f945;什么是文件&#xff1a; &#x1f3d1;程序文件&#xff1a;&#x1f3d1;数据文件&#xff1a; &#x1f3d1;文件名&#xff1a; &#x1f945;文件的打开和关闭&#xff1a;&#x1f3d1;文件指针&#xff1a; &#x1f3d1;fopen和fclose&#xff1a; &a…

genlogic GLG -CE 4.3 For Java/C#/C++ Crack

GLG CE工具包是一个极其灵活和强大的图形框架&#xff0c;用于构建显示实时数据的可视化界面&#xff0c;例如过程控制和监控的操作员显示、SCADA / HMI模拟和图表、 交通、遥测和网络监控显示&#xff0c;以及其他任务关键应用程序。 航电仪表板演示 该工具包包括 用于创建动…

面向对象三大特征

面向对象三大特征 众所周知&#xff0c;面向对象有三大特征 封装继承多态 封装继承多态&#xff0c;就好像武侠小说里的“金、木、水、火、土”一样&#xff0c;相生相克 封装 封装就像是武侠里的金钟罩铁布衫&#xff0c;把对象的数据和方法封装起来&#xff0c;对外只暴露…

C语言strstr函数的使用和模拟实现

strstr 函数原型&#xff1a; char *strstr( const char *string, const char *strCharSet );const char *string 要搜索的字符串const char *strCharSet 子串char *strstr 返回第一个出现字串的起始地址&#xff0c;方便函数链式访问 函数作用&#xff1a; 在 string 字符串…

逻辑越权之验证码|token|接口(36)

token是类似于会话一串数字代表数据包的唯一性&#xff0c;数据包的编号&#xff0c;防止一些csrf&#xff0c;或者一些存放数据包的攻击&#xff1b;一般数据包里面有token&#xff0c;就会检验数据包的唯一性&#xff0c;就会造成提交数据包&#xff0c;被token拦截掉。 验证…

第八章 图像压缩

文章目录 第八章 图像压缩8.1基础知识8.1.1 编码冗余8.1.4图像信息的度量8.1.5保真准则8.1.6图像压缩模型8.17图像格式、容器和压缩标准 8.2一些基本的压缩方法8.2.1霍夫曼编码8.2.2Golomb编码8.2.3算术编码8.2.4LZW编码8.2.5行程编码8.2.6基于符号的编码8.2.7比特平面编码8.2.…

JVM调优常用的工具JPS、JMAP、JSTAT、JSTACK和JCMD的使用详解

查看PID信息 首先启动一个服务 使用jps 和 jps -l 的区别&#xff0c;使用jps -l 能够显示出服务的名称 熟悉JVM调优中常用的工具JMAP、JSTAT和JSTACK JMAP、JSTAT和JSTACK是Java开发中常用的工具&#xff0c;用于分析和调试Java应用程序。它们的使用场景如下&#xff1a; JMA…

S7 1200 CM1241组态modbus rtu

S7 1200 V4.5版本 CM1241 V2.0版本 1 一开始遇到问题 CM1241 绿色灯一直闪烁, PLC 显示LED红色错误 网上查找可能固件不匹配 我一开始选的V2.2 最后选到V2.0才行 如果CM1241 绿灯变为常亮, 这样才是正确组态 如果不是常亮,那么是没有输出的 2 程序 弄了M1.0来启动配置m…

K-means算法

文章目录 1. K-means算法简介2. K-means算法原理2.1 算法具体步骤2.2 k取值方法2.2.1 手肘法2.2.2 轮廓系数法 2.3 K-means2.4 算法终止条件 3. K-means算法特点4. K-means算法应用场景5. K-means算法的Python应用5.1 K-means算法的Python实现5.2 sklearn.cluster.Kmeans函数的…

【Linux】timerfd——定时器

文章目录 前言认识 timerfdAPI timerfdAPI clock 官方示例简单使用epoll实现 前言 在 Linux 系统编程中&#xff0c;使用 timerfd 实现定时器功能是一种更加可靠、高效、灵活的方式。本文是对 timerfd 的简单使用&#xff0c;不涉及太过深入知识&#xff0c;熟练掌握几个常用 …

该死的科斯定理和三条保命原则

* * * 原创&#xff1a;刘教链 * * * 号外&#xff1a;今天在“刘教链”公众号次条发表了《内参&#xff1a;美联储下半年加息时间表和路径》&#xff0c;一号两文无法直接链接&#xff0c;请大家点击公众号卡片进入文章列表打开阅读。星球会员可以直接打开知识星球或discord …

企业级微服务架构实战项目--xx优选3-mq+nacos+es实现上下架

一 nacosmqes实现上下架 1.1 架构图 1.2 工程结构 1.3 核心代码流程 1.3.1 请求product模块 2.修改数据库&#xff0c;推送rabbitmq中 1.3.2 rabbitmq的工具类 1.3.3 search模块中rabbit客户端订阅信息 1.监听器监听信息 2.调用相应的上下架方法 2.1 调用product模块&…

c#网编实验五--WCF和TCP消息通信实验

分别编写服务端和客户端程序&#xff0c;利用基于WCF的TCP技术&#xff0c;实现在线聊天功能&#xff0c;完成在线用户列表管理&#xff0c;消息发送、接收的功能。 在同一个解决方案中&#xff0c;分别编写服务端程序和客户端程序&#xff0c;利用TCP实现简单的群聊功能。 具…

【领域驱动设计专题】一文带领你透视DDD领域驱动模型的本质和设计原理分析指南(构建领域知识)

一文带领你透视DDD领域驱动模型的本质和设计原理分析指南 前提介绍传统的软件设计方案瀑布设计方法敏捷方法学敏捷方法学的问题和局限性 构建领域知识认识和了解领域内容实体模型介绍分析飞行计划路线(route)路线(route) 领域专家进行交流&#xff0c;相互交换知识挖掘出关键的…

一台服务器最大能支持多少条 TCP 连接

一、一台服务器最大能打开的文件数 1、限制参数 我们知道在Linux中一切皆文件&#xff0c;那么一台服务器最大能打开多少个文件呢&#xff1f;Linux上能打开的最大文件数量受三个参数影响&#xff0c;分别是&#xff1a; fs.file-max &#xff08;系统级别参数&#xff09;&a…