Neural Network——神经网络

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.mzph.cn/news/230871.shtml

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

相关文章

Spring IOC 原理(二)

Spring IOC 原理 概念 Spring 通过一个配置文件描述 Bean 及 Bean 之间的依赖关系,利用 Java 语言的反射功能实例化Bean 并建立 Bean 之间的依赖关系。 Spring 的 IoC 容器在完成这些底层工作的基础上,还提供了 Bean 实例缓存、生命周期管理、 Bean 实…

JS中浅拷贝和深拷贝

本篇文章咱们一起来学习下JS中的浅拷贝和深拷贝,了解它们在内存上的区别,并掌握浅拷贝和深拷贝的常用实现方法。 引用赋值 在学习拷贝之前,咱们先来看一个常见的情景,如下图: 大家觉得这是深拷贝还是浅拷贝&#xff0…

2023 亚马逊云科技 re:lnvent 大会探秘: Amazon Connect 全渠道云联络中心

2023 亚马逊云科技 re:lnvent 大会探秘: Amazon Connect 全渠道云联络中心 前言一. Amazon Connect 介绍 🗺️二. Amazon Connect 使用教程 🗺️1.我们打开URl链接找到对应服务2.输入Amazon Connect选中第一个点击进入即可;3.在进入之后我们就…

【C++初阶】八、初识模板(泛型编程、函数模板、类模板)

相关代码gitee自取: C语言学习日记: 加油努力 (gitee.com) 接上期: 【C初阶】七、内存管理 (C/C内存分布、C内存管理方式、operator new / delete 函数、定位new表达式) -CSDN博客 目录 一 . 泛型编程 二 . 函数模板 函数模板…

使用ffmpeg将图片合成为mp4

首先在在图片文件夹输入cmd 这里确保已经安装ffmpeg并配置好环境变量。 然后这是我的文件夹目录: 将21张图片合成为mp4视频 这里使用如下命令: ffmpeg -framerate 1 -start_number 0 -i %d.png -c:v libx264 -pix_fmt yuv420p output.mp4 -framerat…

设计模式——中介者模式

引言 中介者模式是一种行为设计模式, 能让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互, 迫使它们通过一个中介者对象进行合作。 问题 假如你有一个创建和修改客户资料的对话框, 它由各种控件组成, 例如…

[渗透测试学习] Analytics - HackTheBox

文章目录 信息搜集漏洞利用内核提权 信息搜集 nmap扫描一下端口 nmap -sV -sC -p- -v --min-rate 1000 10.10.11.233发现两个端口,22端口为ssh服务,80端口有http服务 尝试访问80端口,发现重定向到http://analytical.htb/并且无法访问 编辑/…

Java+Swing: 数据回显和修改功能的实现 整理14

1. 数据回显 其实数据回显就是为修改功能的实现做准备的 1.1 在MainView类中,创建一个方法获取选中行的id // 获取选中的行的idpublic int[] getSelectedRowIds() {int[] selectedRows mainViewTable.getSelectedRows();int[] ids new int[selectedRows.length];…

第六届江苏人工智能大会成功举办,赛氪网荣获“优秀合作伙伴”奖项

2023年12月15日,第六届江苏人工智能大会在南京成功举办。本次大会汇集了众多人工智能领域的专家、学者和企业代表,共同探讨人工智能技术的最新发展和应用。江苏人工智能大会由江苏省人工智能学会(简称:JSAI)创办于2018…

【每日一题】反转二叉树的奇数层

文章目录 Tag题目来源题目解读解题思路方法一:广度优先搜索方法二:深度优先搜索 写在最后 Tag 【深度优先搜索】【广度优先搜索】【二叉树】【2023-12-15】 题目来源 2415. 反转二叉树的奇数层 题目解读 反转二叉树奇数层的节点。 解题思路 对于二叉…

【LeetCode刷题笔记(8-1)】【Python】【接雨水】【动态规划】【困难】

文章目录 引言接雨水题目描述提示 解决方案1:【动态规划】结束语 接雨水 引言 编写通过所有测试案例的代码并不简单,通常需要深思熟虑和理性分析。虽然这些代码能够通过所有的测试案例,但如果不了解代码背后的思考过程,那么这些代…

C++指针

本文章对C指针的使用做一个全面的阐述与解释 1.1指针的定义使用 指针&#xff1a; 通过指针间接访问内存 指针就是地址 看下面代码&#xff1a; #include<iostream> using namespace std; int main(){//1、定义指针int * p;int a 10;//2、使用指针p &a;cout<…

STM32-02-STM32基础知识

文章目录 STM32基础知识1. STM32F103系统架构2. STM32寻址范围3. 存储器映射4. 寄存器映射 STM32基础知识 1. STM32F103系统架构 STM32F103 STM32F103是ST公司基于ARM授权Cortex M3内核而设计的一款芯片&#xff0c;而Cortex M内核使用的是ARM v7-M架构&#xff0c;是为了替代…

根据星历文件实现卫星的动态运行模拟matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 .................................................................................... % …

测试用例的修改更新

测试用例的修改更新是指测试过程中由于用户需求的改变&#xff0c;或者测试过程中发现有新的需求产生&#xff0c;使得测试用例需要进行修改。修改更新测试用例不仅是一种测试技术&#xff0c;更是一种质量保证的方法。但修改和更新测试用例的技术要点在于&#xff1a; 1、执行…

Note3---初阶二叉树~~

目录​​​​​​​ 前言&#x1f344; 1.树概念及结构☎️ 1.1 树的概念&#x1f384; 1.2 树的相关概念&#x1f99c; 1.2.1 部分概念的加深理解&#x1f43e; 1.2.2 树与非树&#x1fab4; 1.3 树的表示&#x1f38b; 1.4 树在实际中的运用&#xff08;表示文件系统…

RT-Smart elf 动态加载技术 : 开启 ldso 动态加载

前言 RT-Smart,类似于Linux,可以动态的加载运行 应用程序 elf 文件 应用程序 elf 文件,有的是静态链接编译的,有的是动态链接编译的,动态链接编译的,还需要加载 动态共享库 (.so) 本篇讲解一下 RT-Smart 上 elf 动态加载功能的实现,顺便讲一下动态加载的原理 环境搭建 R…

RTrPPG

研究背景 心率 (HR) 和脉搏率变异性 (PRV) 是允许分析心脏行为的两个生理参数。心率监测可以通过接触式和非接触式的两种方法进行。通常用于测量 HR 和 PRV 的两种接触式技术是心电图 (ECG) 和光电容积脉搏波 (PPG)。 ECG 测量由心脏活动引起的电场。另一方面&#xff0c;PPG …

02什么是CPU上下文切换

上⼀节&#xff0c; 讲了要怎么理解平均负载&#xff08; Load Average&#xff09; &#xff0c; 并⽤三个案例展示了不同场景下平均负载升⾼的分析⽅法。 这其中&#xff0c; 多个进程竞争 CPU 就是⼀个经常被我们忽视的问题。 1、CPU上下文切换的概念 我想你⼀定很好奇&am…

2023/12/18 work

1. 机械臂 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <myhead.h>#define CLI_PORT 6667 //本机的端口号 #define CLI_IP "192.168.125.79" //本机的IP#define SER_PORT 8888 //服务器的端口号 #define…