Neural Network——神经网络

news2024/11/25 4:54:39

1.feature reusing——特征复用

1.1 什么是特征复用

        回顾我们之前所学习的模型,本质上都是基于线性回归,但却都可以运用于非线性相关的数据,包括使用了如下方法

  • 增加更多的特征
  • 产生新的特征(多项式回归)
  • 核函数

        在本身的维度找不到线性决策边界,但通过非线性转换将特征映射到高维空间在某个高纬度空间可以找到一个线性决策边界,同时它对应着其本身的维度的非线性决策边界。如下图示例

        我们可以多次进行这样的转换,以实现更好(更稳健)的决策边界,这种技术称为特征复用,神经网络就是特征重用思想的一种实例化。

1.2 为什么需要特征复用

        假设我们希望训练一个模型来识别识别一张图片上是否是一辆汽车,一种方法是我们利用很多汽车的图片和很多非汽车的图片,然后利用这些图片上一个个像素的值来作为特征。

        假如我们只选用灰度图片,每个像素则只有一个值,我们可以选取图片上的两个不同位置上的两个像素,然后训练一个逻辑回归算法利用这两个像素的值来判断图片上是否是汽车

        假使我们采用的都是50x50像素的小图片,则会有2500个特征,如果我们要进一步将两两特征组合构成一个多项式模型,则会有约25002/2个(接近3百万个)特征。普通的逻辑回归模型,不能有效地处理这么多的特征,计算量非常的大

        

问题:

  • 特征很敏感,例如同一辆汽车,一张照片在不同时间、不同环境下拍摄出来的照片都不一样;这样导致模型不具有鲁棒性
  • 特征维度过高,计算量非常的大

鲁棒性(Robustness)指的是一个模型对于数据中的噪声、异常值或其他干扰因素的抵抗能力,可以理解为低方差

通过特征复用,可以让特征不会处于如此高维空间,而且具有更好鲁棒性

2.Neural Network

2.1 神经网络的结构

       特征向量X进入一个神经元后,先经过一次线性变换,然后再通过一个激活函数(activation function)进行非线性变换得到输出

        回顾逻辑回归的结构,(Sigmoid就是逻辑回归的激活函数)

        

        相当于只有一个神经元,于是我们将其拓展,使用更多的神经元,,并且输入数据X=[x_{1},x_{2},x_{3}]^{T}与每个神经元都进行连接,我们就可以得到一个简单的三层神经网络,这就是它比线性回归和逻辑回归强的原因

                

        

        这个神经网络共有三层,第一层也叫输入层第二层也叫隐藏层(除了输入层和输出层都叫隐藏层,因为在训练时我们只能看见输入和输出),最后一层为输出层

        输入的每一个x均和每个神经元进行连接,故这种结构的隐藏层也叫全连接层。[a_{1},a_{2},a_{3}]^{T}也叫原始输入数据的特征向量。像这种传输从输入到输出单方向的神经网络也叫前馈神经网络(feedforward network)

        如今的神经网络包含若干隐藏层,每个隐藏层都包含若干个神经元,输出层的大小也和想要实现的任务有关。越深层的网络能拟合越复杂的函数,学习到对象更本质的特征。

2.2 前向传播(forward propaganda)的计算过程

        以这个网络结构为例

        其中x_{0}的值恒为1,相当于偏置项,其中a_{0}^{1}的值恒为1,相当于偏置神经元,则其不参与这层的输入计算,不画出也可以,那么偏置参数b向量就和权重参数\theta在同一个神经元里。

        根据逻辑回归的模型来说,如果X=[x_{0},x_{1},x_{2},x_{3}]^{T}()连接一个神经元就会对应有四个权重(其中一个与x_{0}相乘为偏置项),这些参数存储在神经元中,如果a_{1}^{1}对应的为\theta _{1}^{1}=[\theta _{10}^{1},\theta _{11}^{1},\theta _{12}^{1},\theta _{13}^{1}],那么我们就可以得到隐藏层权重如下表示,隐藏层输入为1×3,输出为3×3,所以权重矩阵大小为3×3

                                \theta ^{1}=[\theta _{1}^{1},\theta _{2}^{1},\theta _{3}^{1}]=\begin{bmatrix}\theta_{10}^1,\theta_{20}^1,\theta_{30}^1\\\theta_{11}^1,\theta_{21}^1,\theta_{31}^1\\\theta_{12}^1,\theta_{22}^1,\theta_{32}^1\\\theta_{13}^1,\theta_{23}^1,\theta_{33}^1\end{bmatrix}

        第i列分别对应着a_{i}^{1}

        假设激活函数用\sigma()表示,我们可以得到隐藏层的输出

        

        如果写成矩阵的形式

        

  • 通常只有一行的行向量都会写成列向量
  • 通常是参数矩阵转置后与输入相乘

        接着对于输入层输入来说,也有\theta ^{2}权重矩阵,输入为4×1(这里加上了偏置神经元),输出为1×1,所以权重矩阵大小为4×1(\theta ^{2}转置后变成行向量1×4与输入相乘)

        \theta ^{2}=[\theta _{10}^{2},\theta _{11}^{2},\theta _{12}^{2},\theta _{13}^{2}]^{T}

        于是我们可以得到这个神经网络最终输出

        

…………………………………………………………………………………………………………………

来看一个更复杂的网络结构       

        这是一个实现手写体数字识别神经网络,包含二个隐藏层,都为全连接结构,神经元个数分别为1000,2000,最后输出层为大小为10,对应给出10个数字概率

        输入手写体数字图片大小为28*28(这是一个黑白图,所以只有一个颜色通道),该图片会展平成784*1作为输入。那么根据输入大小与输出大小还有矩阵乘法我们可以得到,第一个隐藏层权重矩阵a^{1}大小为784*1000

        

        同样的第二个隐藏层权重矩阵a^{2}大小为1000*2000

        输出层权重矩阵大小为1000*10,此外为了实现多分类,在最后使用了Softmax函数

        假设网络预测这个输入为数字“9”,那么最终的输出≈[0,0,0,0,0,0,0,0,1](相当于one-hot编码)

2.3 为什么神经网络可以拟合非线性数据

        假设我们有这样一个异或问题(XOR),输入数据为一对二进制编码,相异输出1,相同输出0,如下图。异或问题就是一个经典的非线性问题,我们无法使用一个直线来完全分开这两类数据

                                

        当然我们可以使用曲线将其分开

                        

        当然同或(XNOR)是类似的,同或会在输入相同才输出1,相异输出0

        接下来我们使用一个简单神经网络就可以解决这个问题,在解决异或问题先,我们先解决别的问题

1.与(and)操作

        与操作只有当输入都为1时,才会输出1,否则为0  

        我们可以构建这样一个结构就可以实现与操作,使用sigmoid作为激活函数,假设网络通过学习得到了参数组为

        

        

        输入不同的组合,可以看到是正确的

        

2.或(or)操作

        或操作只要输入有一个1,那么就会输出1

        同样的

        假设网络通过学习得到了参数组为

        

                

3.非(not)操作

        非操作会将输入置反

         假设网络通过学习得到了参数组为

        

                        

4.异或

        我们可以将这几个结构进行组合

        构建一个两层的神经网络

        假设通过学习得到了图上的参数,我们就可以解决同或问题

        

        对于异或结构是一样的,在学习时改变输入对应输出的标签就行,学习到不一样的参数组。

                ​​​​​​​        ​​​​​​​        ​​​​​​​        

2.4 反向传播(backpropagation

        神经网络中的参数并不是随机的,而是和之前学习的模型一样需要通过训练数据学习,这样这些参数才有意义。为此我们需要计算各参数梯度,神经网络通过前向传播从输入到输出,通过反向传播从后往前计算传回参数梯度\frac{\partial J(\boldsymbol{\theta})}{\partial\boldsymbol{\theta}_{ij}^l}

        假设我们有这样一个网络结构

        ​​​​​​​                ​​​​​​​

        各层输入输出如下

                ​​​​​​​

反向传播基于链式求导法则

        假设损失函数表示为\mathcal{L}=-y\log\left(h_{\theta}(x)\right),激活函数\sigma为sigmoid

(待更新)

2.5 激活函数

        引入非线性激活函数后,使网络可以逼近任意非线性函数。如果不加上激活函数,虽然有多层网络,多神经元,但所有线性变换的叠加仍然是线性函数。

常见的激活函数有:Relu函数、sigmoid函数以及tanh函数。

1. Relu函数

        

Relu(x) = max(x,0),计算非常简单

其导函数图像为:

        

不存在梯度消失现象。因此ReLU比起其他几个更常用

2. Sigmoid函数

    

Sigmoid函数可以将输入的任何值映射到(0,1)。注意,当输入接近0时,sigmoid函数接近线性变换

导函数图像如下:

               

        当输入为0时,sigmoid函数的导数达到最大值0.25; 而输入在任一方向上越远离0点时,导数越接近0(饱和区梯度消失现象),此时不利于参数更新。

3. tanh函数(双曲正切函数)

                        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

tanh函数可以将输入的任何值映射到(-1,1)

        ​​​​​​​    

        注意,当输入在0附近时,tanh函数接近线性变换。 函数的形状类似于sigmoid函数, 不同的是tanh函数关于坐标系原点中心对称

导函数图像如下图所示:

        ​​​​​​​      

        当输入接近0时,tanh函数的导数接近最大值1。同样存在饱和区梯度消失现象。              

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

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

相关文章

服务器数据恢复-raid5故障导致上层分区无法访问的数据恢复案例

服务器数据恢复环境&故障: 一台服务器上3块硬盘组建了一组raid5磁盘阵列。服务器运行过程中有一块硬盘的指示灯变为红色,raid5磁盘阵列出现故障,服务器上层操作系统的分区无法识别。 服务器数据恢复过程: 1、将故障服务器上磁…

【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现

​🌈个人主页:Sarapines Programmer🔥 系列专栏:《数据结构奇遇记》🔖墨香寄清辞:墨痕寄壮志,星辰梦未满。 通幽径心凝意,剑指苍穹势如山。 目录 🌞1. 模式匹配的基本概念…

工作:三菱PLC程序开发流程总结

工作:三菱PLC程序开发流程总结 一、程序流程图 程序流程图是逻辑思维与动作流程的检查图,是保证逻辑思维合理的前提,写代码丢失方向可从程序流程图重新整理,程序流程图非常重要。 二、组态配置 组态配置是将所用到的基板和模块…

网络编程二

前言 在上一篇关于网络协议的博客中,我们简单概括了网络套接字中的UDP协议,本篇博客我们将继续学习分享关于网络套接字中另一个协议,TCP网络协议 一、UDP和TCP协议区别是什么? 二者之间的区别如下 🔗UDP的主要特点 …

Mysql查询使用group_concat函数后,如果查询无结果,仍会返回一条空数据

1、在查询中使用了group_concat 函数,简单例子如下: select GROUP_CONCAT(recordid) from s_au_user where username 121212此sql查询一个username 为121212的数据,当然肯定是查询不到的,理论上应该返回0条结果,但是…

Python操作Word

Python操作Word 一、Word简介二、向Word写入内容2.1 导入模块2.2 创建doc文档对象2.3 添加段落2.4 添加列表2.5 添加图片2.6 保存文件 三、读取Word内容四、批量生成Word文件 一、Word简介 ​ 在日常工作中,有很多简单重复的劳动其实完全可以交给Python程序&#x…

Camtasia2024下载安装使用教程汇总

Camtasia Studio2024提供了强大的屏幕录像(Camtasia Recorder)、视频剪辑和编辑(Camtasi Studio)、视频菜单制作(Camtasia MenuMaker)等功能,界面简洁明晰、操作方便快捷。使用Camtasia Studio官方用户可以方便地进行屏幕操作的录制和配音、视频的剪辑和过场动画、添…

晚期食管癌肿瘤治疗线程分类

文章目录 1、肿瘤治疗的线数1.1 基础概念1.2 线程定义1.3 如何计算治疗线数 2 食管癌治疗指南2.1 食管癌诊疗指南2.1 CSCO 本文前半部分主要来源于参考文件1,其余部分来源于官方指南。无原创内容,全部为摘要。 1、肿瘤治疗的线数 1.1 基础概念 抗肿瘤药…

【Hive】——DML

1 Load(加载数据) 1.1 概述 1.2 语法 LOAD DATA [LOCAL] INPATH filepath [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1val1, partcol2val2 ...)]LOAD DATA [LOCAL] INPATH filepath [OVERWRITE] INTO TABLE tablename [PARTITION (partcol…

ABAP与HANA集成 2:ABAP调用HANA存储过程或SQL语句

作者 idan lian 如需转载备注出处 需求 虽然是做BW模块,但是最近项目上种种,都需要给ABAP人员或者前台用户提供能供他们使用的表,就稍微研究了下ABAP和HANA的集成问题,因为我们BW更擅长的还是HANA,而且HANA的运行效…

什么是 DDoS ?如何识别DDoS?怎么应对DDOS攻击

什么是DDOS攻击 DDoS攻击(Distributed Denial of Service Attack)即分布式拒绝服务攻击,是一种利用分布式网络来发起大量的请求,占用目标服务器或网络资源的攻击行为。这种攻击方式可以瘫痪目标系统,导致其无法正常提供…

TensorFlow 2 和 Keras 之间的区别总结

1、什么是TensorFlow 2 TensorFlow 2是谷歌开源的一款深度学习框架,于2019年发布,并且在同年10月1日发布了TensorFlow 2.0.0正式稳定版。这款框架被很多企业与创业公司广泛用于自动化工作任务和开发新系统。 TensorFlow 2在分布式训练支持、可扩展的生…

MATLAB - 使用 MPC Designer 线性化 Simulink 模型

系列文章目录 前言 本主题介绍如何使用 MPC Designer 对 Simulink 模型进行线性化。为此,请从包含 MPC 控制器块的 Simulink 模型打开该应用程序。本例中使用 CSTR_ClosedLoop 模型。 open_system(CSTR_ClosedLoop) 在模型窗口中,双击 MPC 控制器模块。…

了解 SBOM (软件物料清单)

近年来,开源软件在开发中的采用激增,目前已占已构建软件的高达 90%。它在全球公司中的受欢迎程度源于成本节约和产品上市时间的加快。然而,在集成开源软件组件时,有一个关键的方面需要考虑。 Synopsys 报告84% 的商业和专有代码库…

未来十年,人工智能就业方向及前景如何?

人工智能(AI)是一个快速发展的领域,对于未来的就业方向和前景有着巨大的影响。以下是一些可能的发展趋势和就业前景: 1、增长趋势:人工智能正在全球范围内经历巨大的增长,预计在未来十年内将继续保持这一趋…

rn报错 run react-native-start,rn真机报错bug解决

错误信息 这个问题是因为手机和电脑没有链接起来需要实行通讯 ADB ADB (Android Debug Bridge) ,译作 安卓调试桥 ,一个能让你 与Android设备进行通信 的 命令行工具 。 你可以通过它,在命令行输入命令控制Android设备,或者查看…

【map】【单调栈 】LeetCode768: 最多能完成排序的块 II

作者推荐 【贪心算法】【中位贪心】.执行操作使频率分数最大 涉及知识点 单调栈 排序 map 区间合并 题目 给你一个整数数组 arr 。 将 arr 分割成若干 块 ,并将这些块分别进行排序。之后再连接起来,使得连接的结果和按升序排序后的原数组相同。 返回…

【Spring】11 EnvironmentAware 接口

文章目录 1. 简介2. 作用3. 使用3.1 创建并实现接口3.2 配置 Bean 信息3.3 创建启动类3.4 启动 4. 应用场景总结 Spring 框架为开发者提供了丰富的扩展点,其中之一就是 Bean 生命周期中的回调接口。本文将着重介绍一个与环境(Environment)相关…

uniapp 预览图片

preImg(index){let urls []this.images.map((item,i) > {if(indexi){urls.unshift(item.file_path)}else{urls.push(item.file_path)}})uni.previewImage({urls})}

探索关系:Python中的Statsmodels库进阶

目录 写在开头1. 多元线性回归场景介绍 2. Logistic回归2.1 Logistic回归的概念2.2 应用案例2.2.1 建立模型和预测2.2.2 模型结论2.2.3 模型优化 3. 时间序列分析3.1 时间序列分析中的应用3.2 利用Statsmodels进行简单的时间序列分析 写在最后 写在开头 在数据分析的旅程中&am…