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

神经网络(第二周)

一、简介

1.1 需求预测示例

1.1.1 逻辑回归算法

根据价格预测商品是否畅销。特征:T恤的价格;分类:销售量高1/销售量低0;使用逻辑回归算法进行分类,拟合效果如下图所示:

 1.1.2 神经元和神经网络

将逻辑回归的输出记为a(activation),整个逻辑回归算法都视作一个神经元,神经网络如下图所示:

以上是对单个神经元的描述,现在构建神经网络只需要将这些神经元串在一起并将它们连接在一起即可。现在根据多个特征:T恤的价格、运费、营销量,以及材料质量(优质厚棉还是劣质材料)这四个特征来预测商品是否畅销。我们知道,一件T恤是否畅销,可能取决于实惠性、潜在买家的认知度、感知质量这三个因素。我们利用逻辑回归算法构建第一个神经元,将价格、运费这两个特征作为输入,实惠性与否的概率作为输出。再将营销量特征作为输入,潜在买家的认知度高低的概率作为输出,使用逻辑回归算法构建第二个神经元。将价格、材料质量两个特征作为输入,感知质量好坏的概率作为输出,使用逻辑回归算法构建第三个神经元。最后将前面三个神经元的输出作为新的输入,畅销高低的概率作为新的输出,使用逻辑回归算法构建第四个神经元。神经网络如下图所示:

层是一组神经元,它们将相同或相似的特征作为输入, 然后一起输出一些数字。前面三个神经元构成一个“层”,四个输入特征作为“输入层”,前三个神经元的输出作为“激活值”,右侧神经元构成一个“输出层”。 

但是在实际中,设计神经网络的时候,不需要指定哪些特征作为某个神经元的输入,可以将所有的特征都作为任何一个神经元的输入。也不需要指定神经元的输出是何含义。除了“输入层”、“输出层”,中间的所有层都称为“隐藏层”,我们是不需要知道隐藏层中的实现细节。这就是神经网络的强大之处,他会自动计算在某个隐藏层中需要用到的特征。

如上图所示,隐藏层可以有很多个。第一个隐藏层 ,x向量作为输入,由于有三个神经元,因此他的输出是个三维向量的激活向量。第二个隐藏层,以第一个隐藏的输出作为输入,由于有两个神经元,因此它的输出是二维的激活向量。第二个隐藏层的输出作为输出层的输入,最后输出结果。

综上所述,我们构建自己的神经网络时 ,只需考虑的问题是:1、构建几个隐藏层?2、每个隐藏层设计多少个神经元?。

1.2 图像感知示例

做图像识别时,将一张照片的像素点以向量的形式作为输入。神经网络中,隐藏层的功能我们是不知道的,但是将每个隐藏的神经元的输出可视化出来,可能会大致了解神经元做了什么。例如将第一个隐藏层可视化,我们会发现,他的每个神经元试图寻找图片中不同方向的横竖线。第二个隐藏层,每个神经元在寻找脸部特征,例如第一个神经元在寻找左眼睛。第三个隐藏层,每个神经元将面部不同的部分聚合,尝试检测是否存在更大、更粗糙的面部形状。最后,检测面部与不同面部形状的对应程度可以创建一组丰富的特征,然后帮助输出层尝试确定人物图片的身份。

不同隐藏层,他关注的像素矩阵大小不同,越往后越大。上述隐藏层的功能,全是由神经网络自行实现的,不是我们规定第一个隐藏层检测横竖线,第二个检测鼻子眼睛,第三个聚合成更大的面部轮廓。所以神经网络是强大的。

1.3 更复杂的神经网络

按照惯例,当我们说这个神经网络有四层时,它包括输出层和所有的隐藏层,但一般不包括输入层。

上图中,将第三个隐藏层放大,他的输入是第二个隐藏层的输出\overrightarrow{a}^{[2]}。隐藏层中,每个神经元都有属于他自己的模型参数。a向量称为激活值,g()函数称为激活函数(输入前一层的激活值,生成新的激活值),目前我们使用的激活函数是sigmoid函数,实际上激活函数还可以是其他的函数,后面会做相应的介绍。

二、神经网络前向传播

2.1 手写数字识别示例

功能,输入8*8像素矩阵的图片,模块自动预测手写数字是0/1(手写数字有10种,为了简化成二分类问题,我们只预测数字0或者1)。

如上图所示,我们设计的三层神经网络,第一隐藏层25个神经元,第二隐藏层15个神经元,输出层一个神经元。这里的\overrightarrow{x}是输入向量,也可以称之为\overrightarrow{a}^{[0]}。 \overrightarrow{a}^{[1]}是25维向量,第一隐藏层展开的效果图如上图所示。

接下来是计算第二隐藏层:

最后计算预测结果:

先根据\overrightarrow{x}计算\overrightarrow{a}^{[1]},再计算\overrightarrow{a}^{[2]},最后计算\overrightarrow{a}^{[3]}(f(x)),根据f(x)的大小做出二分类的判断,概率大于等于0.5预测1,否侧预测0,整体是从左向右计算的。这也被称为“前向传播”。

2.2 如何用代码实现

Tensorflow和pytorch是机器学习相关的有效工具库。接下来使用Tensorflow进行代码的编写演示:

第一隐藏层,首先定义输入特征向量x,再定义第一隐藏层(形参1:神经元数量   形参2:激活函数),最后计算激活值a1。

第二隐藏层,首先定义layer_2(形参1:神经元数量   形参2:激活函数),最后计算激活值a2。

a2是分类的概率,设定阀值为0.5,如果概率大于等于0.5,预测值为1,否为为0。

2.2.1 单个网络层上的前向传播

首先计算\overrightarrow{a}^{[1]},他是由a_{1}^{[1]}a_{2}^{[1]}a_{3}^{[1]}三个激活值组成的向量,激活值的计算方法如下图所示。

最后计算\overrightarrow{a}^{[2]}

2.2.2 前向传播的一般实现

在上一节中,每一个神经元激活值的计算都是相同的操作,我们可以对此进行简化,封装在dense函数中。输入:上一层的激活值、这一层的w矩阵、b矩阵、激活函数。返回值:激活向量。

2.2.3 前向传播的矢量化实现

在上一节中,dense函数中使用for循环来实现,这会降低计算效率。矢量化的实现方式,会大幅度提高计算速度,下面是矢量化的实现步骤(左边代码是上一节版本,右边代码是对应地矢量化实现代码):

2.2.4 Tensorflow实现

第一步指定模型,告诉TensorFlow如何计算推理。在第二步,需要使用TensorFlow进行编译,关键步骤是要指定使用的损失函数。第三步使用fit函数,它告诉TensorFlow使用在步骤2中指定的成本函数的损失来拟合你在步骤 1中指定的模型和数据集 X,Y。

2.3 Sigmoid激活函数的替代方案

在上图中,第一个隐藏层中的第二个神经元,通过价格、购物成本、市场、材料来预测消费者的认识程度。最初我们使用Sigmoid激活函数,将消费者的认识程度分为两类:认可1、不认可0。但是实际情况,消费者的认识程度可以更加细分为:不认可、稍微认可、认可、非常认可等类别,相对应的可以将激活值设计成从0到正无穷的正数。

上图中,是三种常见的激活函数,左边是线性激活函数(由于g(z)=z,有些时候会被认为没有使用激活函数)、中间是Sigmoid激活函数、右边是ReLU激活函数。

2.3.1 如何选择激活函数

如何为神经网络中的每一个神经元选择合适的激活函数?

  • 二分类问题,选择Sigmoid激活函数
  • 如果标签值y可正可负,选择线性激活函数
  • 如果标签值y取0到正无穷,选择ReLU激活函数

2.3.2 激活函数的意义

如上图所示,我们设计一个具有一个隐藏层、一个输出层的神经网络。假设每一个神经元都使用线性激活函数(等价于不使用激活函数),前向传播过程如右边所示。最终计算结果\vec{a}^{[2]}=wx+b,完全等同于直接使用线性回归,所以说设计的两层神经网络基本没有意义。

对上图的神经网络中,三个隐藏层 使用线性激活函数,输出层使用逻辑回归,最终结果等价于直接使用逻辑回归。输出结果如下图所示:

综上所述:尽量不要在隐藏层使用线性激活函数。 

三、多分类问题

3.1 softmax回归模型 

假设n分类,也就是说y的取值有1,2,3,...,n,激活值如下图所示:

注意,当n=2时,此时又变成了逻辑回归。也就是说softmax回归模型就是逻辑回归模型的推广。

逻辑回归的损失函数如下,其中当y=1时,loss=-loga_{1};当y=0时,loss=-loga_{2}

相对应的softmax回归的损失函数如下:

3.1.1 softmax输出

前面课程中,我们对手写数字只预测0/1,是二分类问题。现在我们预测所有可能的数字0-9,设计的神经网络输出层原本只有一个神经元,现在要变成10个神经元,如下图所示。这样的输出层也被称为softmax输出。

输入还是和原来的一样,是个手写数字图片\vec{x},经过第一个隐藏层得到激活向量\vec{a}^{[1]}。将\vec{a}^{[1]}当作输入,经过第二个隐藏层得到激活向量\vec{a}^{[2]}。将\vec{a}^{[2]}当作输入,经过softmax层,得到每个数字的概率\vec{a}^{[3]}。计算过程如下图所示。

softmax层也被称为softmax激活函数。代码实现如下。注意,以下代码不是最优的,后面的课程中会给出更好的解决方案。

3.1.2 改进实现

x1=2/10000,x2=(1+1/10000)-(1-1/10000),理论上x1=x2,但是计算机计算的时候,他的存储空间是有限的,实际输出如下图所示:

x2更加精确。上一节的代码中softmax代价函数是正确的,但是有一种方式可以减少这些数值舍入误差,从而在TensorFlow中实现更准确的计算。

首先以逻辑回归为示例,我们首先计算激活值a,再计算损失函数loss,代码如下图所示。注意,逻辑回归中数值舍入的误差较小,可以忽略不计,但是softmax回归中,这类误差较大。

我们还可以换一种实现方式,不计算中间值a,直接使用拟合值z计算loss,实现方式如下图所示(输出层使用线性激活函数,这样的话就相当于没有计算中间值a,而是直接使用拟合值z;损失函数增加一个参数)。相比较上一个实现方法,TensorFlow可以重新排列这个表达式中的项,并提出一种在数值上更准确的实现方法来计算这个损失函数。

同理softmax回归也可以进行改进:

3.2 多标签分类

注意区分多类分类、多标签分类:

多标签分类:给一张图片,输出图片中是否有人、是否有车两个二分类的多标签分类。

多类分类:

四、高级优化算法

4.1 Adam算法

我们使用梯度下降算法的时候,学习率\alpha是个定值,他可能会出现两种极端情况。下图左,\alpha偏小,从起始点start开始,逐渐迭代,迭代次数多才能到达最小点。下图右,\alpha偏大,导致每次迭代的震荡大。

而Adam算法可以解决这个问题,他可以根据运算情况,适度调节\alpha的大小。如上图左,若每次迭代的方向大致相同,就应该增大\alpha;如上图右,若每次迭代,参数来回震荡,就应该减小\alpha

模型与之前相同,编译模型的方式与之前一样,不同的是向编译函数添加一个额外的参数,即指定要使用的优化器tf.keras.optimizers.Adam。Adam优化算法需要一些默认的初始学习率 Alpha,上图例子中,将初始学习率设置为0.003。

4.2 卷积层

到目前为止,我们使用的所有神经网络层都是密集层类型,其中该层中的每个神经元都从前一层获得所有激活的输入。

上图中,每个神经元的输入不是前一层的所有激活值,而是专属于他的部分激活值。这样的网络层称之为卷积层。卷积层的优点:1、更快的计算速度。2、需要更少的数据,过度拟合的概率减少。
如果神经网络中有多个卷积层,会被称为卷积神经网络。

相关文章:

神经网络(第二周)

一、简介 1.1 需求预测示例 1.1.1 逻辑回归算法 根据价格预测商品是否畅销。特征:T恤的价格;分类:销售量高1/销售量低0;使用逻辑回归算法进行分类,拟合效果如下图所示: 1.1.2 神经元和神经网络 将逻辑回…...

《网络协议》04. 应用层(DNS DHCP HTTP)

title: 《网络协议》04. 应用层(DNS & DHCP & HTTP) date: 2022-09-05 14:28:22 updated: 2023-11-12 06:55:52 categories: 学习记录:网络协议 excerpt: 应用层、DNS、DHCP、HTTP(URI & URL,ABNF&#xf…...

springboot自己添加的配置文件没有绿色叶子问题

在IntelliJ IDEA中,不同文件类型通常会有不同的图标,以便更容易识别它们。如果您的自己添加的 .properties 文件和项目中自动生成的 .properties 文件显示不同的图标,这可能是因为它们被识别为不同的文件类型。 通常情况下,Intel…...

【Java】定时任务 - Timer/TimerTask 源码原理解析

一、背景及使用 日常实现各种服务端系统时,我们一定会有一些定时任务的需求。比如会议提前半小时自动提醒,异步任务定时/周期执行等。那么如何去实现这样的一个定时任务系统呢? Java JDK提供的Timer类就是一个很好的工具,通过简单…...

SAP ABAP基础语法-Excel上传(十)

EXCEL BDS模板上传及赋值 上传模板事务代码:OAER l 功能代码:向EXCEL模板中写入数据示例代码如下 REPORT ZEXCEL_DOI. “doi type pools TYPE-POOLS: soi. *SAP Desktop Office Integration Interfaces DATA: container TYPE REF TO cl_gui_custom_c…...

记录一次某某虚拟机的逆向

导语 学了一段时间的XPosed,发现XPosed真的好强,只要技术强,什么操作都能实现... 这次主要记录一下我对这款应用的逆向思路 apk检查 使用MT管理器检查apk的加壳情况 发现是某数字的免费版本 直接使用frida-dexdump 脱下来后备用 应用分…...

upload-labs关卡7(基于黑名单的空格绕过)通关思路

文章目录 前言一、回顾上一关知识点二、靶场第七关通关思路1、看源代码2、空格绕过3、检查文件是否成功上传 总结 前言 此文章只用于学习和反思巩固文件上传漏洞知识,禁止用于做非法攻击。注意靶场是可以练习的平台,不能随意去尚未授权的网站做渗透测试…...

CnosDB 在最近新发布的 2.4.0 版本中增加对时空函数的支持。

CnosDB 在最近新发布的 2.4.0 版本中增加对时空函数的支持。 概述 时空函数是一种用于描述时空结构和演化的函数。它在物理学、数学和计算机科学等领域中都有广泛的应用。时空函数可以描述物体在时空中的位置、速度、加速度以及其他相关属性。 用法 CnosDB 将使用一种全新的…...

python实现炒股自动化,个人账户无门槛量化交易的开始

本篇作为系列教程的引子,对股票量化程序化自动交易感兴趣的朋友可以关注我,现在只是个粗略计划,后续会根据需要重新调整,并陆续添加内容。 股票量化程序化自动交易接口 很多人在找股票个人账户实现程序化自动交易的接口&#xff0…...

推荐系统笔记--Swing模型的原理

1--Swing模型的引入 在 Item CF 召回中,物品的相似度是基于其受众的交集来衡量的,但当受众的交集局限在一个小圈子时,就会误将两个不相似的物品定义为相似; Swing 模型引入用户的重合度来判断两个用户是否属于一个小圈子&#xff…...

联想小新Pro14默认设置的问题

联想小新Pro14 锐龙版,Win11真的挺多不习惯的,默认配置都不符合一般使用习惯。 1、默认人走过自动开机。人机互动太强了; 2、默认短超时息屏但不锁屏,这体验很容易觉得卡机然后唤起,却又不用密码打开; 3…...

【洛谷 P5019】[NOIP2018 提高组] 铺设道路 题解(分治算法+双指针)

[NOIP2018 提高组] 铺设道路 题目背景 NOIP2018 提高组 D1T1 题目描述 春春是一名道路工程师,负责铺设一条长度为 n n n 的道路。 铺设道路的主要工作是填平下陷的地表。整段道路可以看作是 n n n 块首尾相连的区域,一开始,第 i i i …...

牛客刷题记录11.12

继承和组合 二进制数统计 1的个数 和 0 的个数...

NextJS开发:使用IconPark、Lucide图标库

IconPark、Lucide两个很不错的图标库&#xff0c;如果需要用到微信、阿里等国内logo可以使用IconPark&#xff0c;Lucide中没有包含这些内容。 安装IconPark npm install icon-park/react --save简单使用 import {Home} from icon-park/react;<Home/> <Home theme&…...

11.12总结

这一周主要写了个人中心的几个功能&#xff0c;资料修改&#xff0c;收货地址的创建和修改删除&#xff0c;还有主页界面和商品界面...

Gogs安装和部署教程-centos上

0、什么是 Gogs? Gogs 是一款极易搭建的自助 Git 服务。 Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发&#xff0c;并且支持 Go 语言支持的 所有平台&#xff0c;包括 Linux、Mac OS X、Windo…...

Unity中Shader雾效的实现方法一

文章目录 前言一、在片元着色器中使用如下公式计算最终的颜色 lerp(雾效颜色&#xff0c;物体颜色&#xff0c;雾效混合因子)1、获取雾效颜色2、物体的颜色一般通过纹理采样得到&#xff0c;此处用 1 代替测试3、获取 雾效混合因子&#xff08;由 雾的距离 和 雾的浓度决定&am…...

Mac安装配置Tomcat,以及使用(详解)

目录 一、Tomcat下载&#xff1a; 1、左栏选择Tomcat版本 2、点击下载即可&#xff0c;任选其一 ​编辑3、下载好的文件夹放到用户名下即可&#xff08;之前已经下载过&#xff0c;这里以Tomcat 8.5.88为演示&#xff09;&#xff0c;这里提供8.5.88的安装包&#xff1a; 二…...

Smart Link 和 Monitor Link应用

定义 Smart Link常用于双上行链路组网&#xff0c;提高接入的可靠性。 Monitor Link通过监视上行接口&#xff0c;使下行接口同步上行接口状态&#xff0c;起到传递故障信息的作用。 Smart Link&#xff0c;又叫做备份链路。一个Smart Link由两个接口组成&#xff0c;其中一个…...

【debug】解决Kali虚拟机开机黑屏,左上角光标一直闪动无法开机问题

做网络攻防实验时&#xff0c;突然Kali无法打开&#xff0c;遇到这个问题。。。。。。 遇到的问题 突然kali虚拟机变成如下黑屏&#xff0c;无法开机&#xff0c;左上角光标闪动&#xff0c;重启无效。 解决办法 在上图界面&#xff0c;按Ctrl F3&#xff08;不同电脑快捷键…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...